From 7650606ac4f20d7788c6f7803ba96932042360dc Mon Sep 17 00:00:00 2001 From: Darkiros Date: Tue, 22 Oct 2024 15:39:03 +0200 Subject: [PATCH] Add static site and MITRE ATT&CK Navigator --- site/index.html | 485 + site/mitre/CHANGELOG.md | 731 + site/mitre/CONTRIBUTING.md | 37 + site/mitre/MaterialIcons-Regular.ttf | Bin 0 -> 228896 bytes site/mitre/README.md | 331 + site/mitre/USAGE.md | 654 + site/mitre/assets/config.json | 80 + site/mitre/assets/export.json | 1 + .../assets/icons/MaterialIcons-Regular.ttf | Bin 0 -> 228896 bytes .../assets/icons/baseline-grid_on-24px.svg | 4 + .../assets/icons/ic_camera_alt_black_24px.svg | 5 + .../assets/icons/ic_check_box_black_24px.svg | 4 + .../ic_check_box_outline_blank_black_24px.svg | 4 + .../assets/icons/ic_clear_black_24px.svg | 4 + .../mitre/assets/icons/ic_clear_gray_24px.svg | 4 + .../assets/icons/ic_close_black_24px.svg | 4 + .../assets/icons/ic_color_lens_black_24px.svg | 4 + .../icons/ic_content_copy_black_24px.svg | 4 + .../icons/ic_description_black_24px.svg | 4 + .../mitre/assets/icons/ic_done_black_24px.svg | 4 + site/mitre/assets/icons/ic_done_gray_24px.svg | 4 + .../icons/ic_exportAllExcel_black_24px.svg | 1 + .../icons/ic_exportAllJson_black_24px.svg | 1 + .../assets/icons/ic_exportJson_black_24px.svg | 1 + .../icons/ic_file_download_black_24px.svg | 4 + .../icons/ic_file_upload_black_24px.svg | 4 + .../assets/icons/ic_file_upload_gray_24px.svg | 4 + .../icons/ic_filter_list_black_24px.svg | 4 + .../icons/ic_format_color_fill_black_24px.svg | 5 + ..._format_color_fill_black_nobottom_24px.svg | 5 + ...c_format_color_fill_gray_nobottom_24px.svg | 5 + .../icons/ic_format_size_black_24px.svg | 4 + .../icons/ic_insert_chart_black_24px.svg | 4 + .../icons/ic_insert_chart_gray_24px.svg | 4 + .../icons/ic_insert_comment_black_24px.svg | 4 + .../icons/ic_insert_comment_gray_24px.svg | 4 + .../ic_keyboard_arrow_down_black_24px.svg | 4 + .../ic_keyboard_arrow_right_black_24px.svg | 4 + .../icons/ic_keyboard_arrow_up_black_24px.svg | 4 + .../icons/ic_layers_clear_black_24px.svg | 4 + .../icons/ic_layers_clear_gray_24px.svg | 4 + .../mitre/assets/icons/ic_link_black_24px.svg | 4 + site/mitre/assets/icons/ic_link_gray_24px.svg | 4 + .../mitre/assets/icons/ic_lock_black_24px.svg | 4 + .../assets/icons/ic_lock_open_black_24px.svg | 4 + .../assets/icons/ic_metadata_black_24px.svg | 4 + .../assets/icons/ic_metadata_gray_24px.svg | 4 + .../assets/icons/ic_palette_black_24px.svg | 4 + .../ic_photo_size_select_large_black_24px.svg | 4 + .../icons/ic_playlist_add_black_24px.svg | 4 + .../assets/icons/ic_push_pin_black_24px.svg | 1 + site/mitre/assets/icons/ic_push_pin_gray.svg | 1 + .../icons/ic_remove_circle_black_24px.svg | 4 + .../mitre/assets/icons/ic_save_black_24px.svg | 4 + site/mitre/assets/icons/ic_save_gray_24px.svg | 4 + .../assets/icons/ic_search_black_24px.svg | 4 + .../assets/icons/ic_search_gray_24px.svg | 4 + .../ic_sort_alphabetically_ascending.svg | 10 + ...rt_alphabetically_ascending_black_24px.svg | 10 + .../ic_sort_alphabetically_black_24px.svg | 8 + .../ic_sort_alphabetically_descending.svg | 9 + ...t_alphabetically_descending_black_24px.svg | 9 + .../icons/ic_sort_numerically_ascending.svg | 9 + ..._sort_numerically_ascending_black_24px.svg | 9 + .../icons/ic_sort_numerically_black_24px.svg | 8 + .../icons/ic_sort_numerically_descending.svg | 10 + ...sort_numerically_descending_black_24px.svg | 10 + .../assets/icons/ic_texture_black_24px.svg | 4 + .../assets/icons/ic_texture_gray_24px.svg | 4 + .../mitre/assets/icons/ic_unfold_more_alt.svg | 2 + .../assets/icons/ic_view_large_black_24px.svg | 4 + .../assets/icons/ic_view_list_black_24px.svg | 4 + .../assets/icons/ic_view_list_grey_24px.svg | 4 + .../icons/ic_view_medium_black_24px.svg | 5 + .../assets/icons/ic_view_small_black_24px.svg | 4 + .../assets/icons/ic_visibility_black_24px.svg | 4 + .../assets/icons/ic_visibility_gray_24px.svg | 4 + .../icons/ic_visibility_off_black_24px.svg | 4 + .../table_view_FILL0_wght400_GRAD0_opsz24.svg | 1 + .../assets/icons/unfold_less_black_24px.svg | 4 + .../assets/icons/unfold_less_gray_24px.svg | 4 + .../icons/unfold_more_alt_black_24px.svg | 2 + .../icons/unfold_more_alt_gray_24px.svg | 10 + .../assets/icons/unfold_more_black_24px.svg | 4 + .../assets/icons/unfold_more_gray_24px.svg | 4 + .../assets/image_scoreVariableExample.png | Bin 0 -> 17885 bytes site/mitre/favicon.ico | Bin 0 -> 4286 bytes site/mitre/index.html | 13 + site/mitre/layers/README.md | 9 + .../samples/ATTACKcon 2018/Black_Pins.json | 208 + .../samples/ATTACKcon 2018/Blue_Pins.json | 288 + .../samples/ATTACKcon 2018/Gold_Pins.json | 248 + .../samples/ATTACKcon 2018/Red_Pins.json | 224 + .../ATTACKcon 2018/Submitter_Responses.json | 417 + site/mitre/layers/samples/Bear_APT.json | 644 + site/mitre/layers/samples/heatmap_layer.json | 1721 + site/mitre/layers/spec/v1.0/layerformat.md | 72 + site/mitre/layers/spec/v1.1/layerformat.md | 72 + site/mitre/layers/spec/v1.2/layerformat.md | 86 + site/mitre/layers/spec/v1.3/layerformat.md | 91 + site/mitre/layers/spec/v2.0/layerformat.md | 113 + site/mitre/layers/spec/v2.1/layerformat.md | 145 + site/mitre/layers/spec/v2.2/layerformat.md | 145 + site/mitre/layers/spec/v3.0/layerformat.md | 165 + site/mitre/layers/spec/v4.0/layerformat.md | 173 + site/mitre/layers/spec/v4.1/layerformat.md | 181 + site/mitre/layers/spec/v4.2/layerformat.md | 189 + site/mitre/layers/spec/v4.3/layerformat.md | 222 + site/mitre/layers/spec/v4.4/layerformat.md | 223 + site/mitre/layers/spec/v4.5/layerformat.md | 487 + site/mitre/main.js | 16232 + site/mitre/main.js.map | 1 + site/mitre/polyfills.js | 17407 ++ site/mitre/polyfills.js.map | 1 + site/mitre/roboto-cyrillic-400-normal.woff | Bin 0 -> 8572 bytes site/mitre/roboto-cyrillic-400-normal.woff2 | Bin 0 -> 9852 bytes .../mitre/roboto-cyrillic-ext-400-normal.woff | Bin 0 -> 13488 bytes .../roboto-cyrillic-ext-400-normal.woff2 | Bin 0 -> 15336 bytes site/mitre/roboto-greek-400-normal.woff | Bin 0 -> 6344 bytes site/mitre/roboto-greek-400-normal.woff2 | Bin 0 -> 7096 bytes site/mitre/roboto-greek-ext-400-normal.woff | Bin 0 -> 1252 bytes site/mitre/roboto-greek-ext-400-normal.woff2 | Bin 0 -> 1496 bytes site/mitre/roboto-latin-400-normal.woff | Bin 0 -> 17304 bytes site/mitre/roboto-latin-400-normal.woff2 | Bin 0 -> 18536 bytes site/mitre/roboto-latin-ext-400-normal.woff | Bin 0 -> 10724 bytes site/mitre/roboto-latin-ext-400-normal.woff2 | Bin 0 -> 12456 bytes .../roboto-mono-cyrillic-400-normal.woff | Bin 0 -> 9120 bytes .../roboto-mono-cyrillic-400-normal.woff2 | Bin 0 -> 7392 bytes .../roboto-mono-cyrillic-ext-400-normal.woff | Bin 0 -> 17688 bytes .../roboto-mono-cyrillic-ext-400-normal.woff2 | Bin 0 -> 13696 bytes site/mitre/roboto-mono-greek-400-normal.woff | Bin 0 -> 7196 bytes site/mitre/roboto-mono-greek-400-normal.woff2 | Bin 0 -> 6020 bytes site/mitre/roboto-mono-latin-400-normal.woff | Bin 0 -> 15832 bytes site/mitre/roboto-mono-latin-400-normal.woff2 | Bin 0 -> 12764 bytes .../roboto-mono-latin-ext-400-normal.woff | Bin 0 -> 12228 bytes .../roboto-mono-latin-ext-400-normal.woff2 | Bin 0 -> 9556 bytes .../roboto-mono-vietnamese-400-normal.woff | Bin 0 -> 5916 bytes .../roboto-mono-vietnamese-400-normal.woff2 | Bin 0 -> 4688 bytes site/mitre/roboto-vietnamese-400-normal.woff | Bin 0 -> 5000 bytes site/mitre/roboto-vietnamese-400-normal.woff2 | Bin 0 -> 5796 bytes site/mitre/runtime.js | 187 + site/mitre/runtime.js.map | 1 + site/mitre/scripts.js | 28635 ++ site/mitre/scripts.js.map | 1 + site/mitre/styles.css | 896 + site/mitre/styles.css.map | 1 + site/mitre/vendor.js | 229863 +++++++++++++++ site/mitre/vendor.js.map | 1 + 148 files changed, 302026 insertions(+) create mode 100644 site/index.html create mode 100644 site/mitre/CHANGELOG.md create mode 100644 site/mitre/CONTRIBUTING.md create mode 100644 site/mitre/MaterialIcons-Regular.ttf create mode 100644 site/mitre/README.md create mode 100644 site/mitre/USAGE.md create mode 100644 site/mitre/assets/config.json create mode 100644 site/mitre/assets/export.json create mode 100644 site/mitre/assets/icons/MaterialIcons-Regular.ttf create mode 100644 site/mitre/assets/icons/baseline-grid_on-24px.svg create mode 100644 site/mitre/assets/icons/ic_camera_alt_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_check_box_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_check_box_outline_blank_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_clear_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_clear_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_close_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_color_lens_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_content_copy_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_description_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_done_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_done_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_exportAllExcel_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_exportAllJson_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_exportJson_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_file_download_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_file_upload_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_file_upload_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_filter_list_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_format_color_fill_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_format_color_fill_black_nobottom_24px.svg create mode 100644 site/mitre/assets/icons/ic_format_color_fill_gray_nobottom_24px.svg create mode 100644 site/mitre/assets/icons/ic_format_size_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_insert_chart_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_insert_chart_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_insert_comment_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_insert_comment_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_keyboard_arrow_down_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_keyboard_arrow_right_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_keyboard_arrow_up_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_layers_clear_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_layers_clear_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_link_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_link_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_lock_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_lock_open_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_metadata_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_metadata_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_palette_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_photo_size_select_large_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_playlist_add_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_push_pin_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_push_pin_gray.svg create mode 100644 site/mitre/assets/icons/ic_remove_circle_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_save_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_save_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_search_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_search_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_sort_alphabetically_ascending.svg create mode 100644 site/mitre/assets/icons/ic_sort_alphabetically_ascending_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_sort_alphabetically_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_sort_alphabetically_descending.svg create mode 100644 site/mitre/assets/icons/ic_sort_alphabetically_descending_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_sort_numerically_ascending.svg create mode 100644 site/mitre/assets/icons/ic_sort_numerically_ascending_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_sort_numerically_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_sort_numerically_descending.svg create mode 100644 site/mitre/assets/icons/ic_sort_numerically_descending_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_texture_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_texture_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_unfold_more_alt.svg create mode 100644 site/mitre/assets/icons/ic_view_large_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_view_list_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_view_list_grey_24px.svg create mode 100644 site/mitre/assets/icons/ic_view_medium_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_view_small_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_visibility_black_24px.svg create mode 100644 site/mitre/assets/icons/ic_visibility_gray_24px.svg create mode 100644 site/mitre/assets/icons/ic_visibility_off_black_24px.svg create mode 100644 site/mitre/assets/icons/table_view_FILL0_wght400_GRAD0_opsz24.svg create mode 100644 site/mitre/assets/icons/unfold_less_black_24px.svg create mode 100644 site/mitre/assets/icons/unfold_less_gray_24px.svg create mode 100644 site/mitre/assets/icons/unfold_more_alt_black_24px.svg create mode 100644 site/mitre/assets/icons/unfold_more_alt_gray_24px.svg create mode 100644 site/mitre/assets/icons/unfold_more_black_24px.svg create mode 100644 site/mitre/assets/icons/unfold_more_gray_24px.svg create mode 100644 site/mitre/assets/image_scoreVariableExample.png create mode 100644 site/mitre/favicon.ico create mode 100644 site/mitre/index.html create mode 100644 site/mitre/layers/README.md create mode 100644 site/mitre/layers/samples/ATTACKcon 2018/Black_Pins.json create mode 100644 site/mitre/layers/samples/ATTACKcon 2018/Blue_Pins.json create mode 100644 site/mitre/layers/samples/ATTACKcon 2018/Gold_Pins.json create mode 100644 site/mitre/layers/samples/ATTACKcon 2018/Red_Pins.json create mode 100644 site/mitre/layers/samples/ATTACKcon 2018/Submitter_Responses.json create mode 100644 site/mitre/layers/samples/Bear_APT.json create mode 100644 site/mitre/layers/samples/heatmap_layer.json create mode 100644 site/mitre/layers/spec/v1.0/layerformat.md create mode 100644 site/mitre/layers/spec/v1.1/layerformat.md create mode 100644 site/mitre/layers/spec/v1.2/layerformat.md create mode 100644 site/mitre/layers/spec/v1.3/layerformat.md create mode 100644 site/mitre/layers/spec/v2.0/layerformat.md create mode 100644 site/mitre/layers/spec/v2.1/layerformat.md create mode 100644 site/mitre/layers/spec/v2.2/layerformat.md create mode 100644 site/mitre/layers/spec/v3.0/layerformat.md create mode 100644 site/mitre/layers/spec/v4.0/layerformat.md create mode 100644 site/mitre/layers/spec/v4.1/layerformat.md create mode 100644 site/mitre/layers/spec/v4.2/layerformat.md create mode 100644 site/mitre/layers/spec/v4.3/layerformat.md create mode 100644 site/mitre/layers/spec/v4.4/layerformat.md create mode 100644 site/mitre/layers/spec/v4.5/layerformat.md create mode 100644 site/mitre/main.js create mode 100644 site/mitre/main.js.map create mode 100644 site/mitre/polyfills.js create mode 100644 site/mitre/polyfills.js.map create mode 100644 site/mitre/roboto-cyrillic-400-normal.woff create mode 100644 site/mitre/roboto-cyrillic-400-normal.woff2 create mode 100644 site/mitre/roboto-cyrillic-ext-400-normal.woff create mode 100644 site/mitre/roboto-cyrillic-ext-400-normal.woff2 create mode 100644 site/mitre/roboto-greek-400-normal.woff create mode 100644 site/mitre/roboto-greek-400-normal.woff2 create mode 100644 site/mitre/roboto-greek-ext-400-normal.woff create mode 100644 site/mitre/roboto-greek-ext-400-normal.woff2 create mode 100644 site/mitre/roboto-latin-400-normal.woff create mode 100644 site/mitre/roboto-latin-400-normal.woff2 create mode 100644 site/mitre/roboto-latin-ext-400-normal.woff create mode 100644 site/mitre/roboto-latin-ext-400-normal.woff2 create mode 100644 site/mitre/roboto-mono-cyrillic-400-normal.woff create mode 100644 site/mitre/roboto-mono-cyrillic-400-normal.woff2 create mode 100644 site/mitre/roboto-mono-cyrillic-ext-400-normal.woff create mode 100644 site/mitre/roboto-mono-cyrillic-ext-400-normal.woff2 create mode 100644 site/mitre/roboto-mono-greek-400-normal.woff create mode 100644 site/mitre/roboto-mono-greek-400-normal.woff2 create mode 100644 site/mitre/roboto-mono-latin-400-normal.woff create mode 100644 site/mitre/roboto-mono-latin-400-normal.woff2 create mode 100644 site/mitre/roboto-mono-latin-ext-400-normal.woff create mode 100644 site/mitre/roboto-mono-latin-ext-400-normal.woff2 create mode 100644 site/mitre/roboto-mono-vietnamese-400-normal.woff create mode 100644 site/mitre/roboto-mono-vietnamese-400-normal.woff2 create mode 100644 site/mitre/roboto-vietnamese-400-normal.woff create mode 100644 site/mitre/roboto-vietnamese-400-normal.woff2 create mode 100644 site/mitre/runtime.js create mode 100644 site/mitre/runtime.js.map create mode 100644 site/mitre/scripts.js create mode 100644 site/mitre/scripts.js.map create mode 100644 site/mitre/styles.css create mode 100644 site/mitre/styles.css.map create mode 100644 site/mitre/vendor.js create mode 100644 site/mitre/vendor.js.map diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..4e940a7 --- /dev/null +++ b/site/index.html @@ -0,0 +1,485 @@ + + + + + + + + + + + + CVE2CAPEC + + + + +
+ CVE2CAPEC +
+ +
+
+
+
+

list of CVEs

+
+
+
+
+
+
+
+
+ +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/site/mitre/CHANGELOG.md b/site/mitre/CHANGELOG.md new file mode 100644 index 0000000..afe884e --- /dev/null +++ b/site/mitre/CHANGELOG.md @@ -0,0 +1,731 @@ + + +# 5.1.0 - 14 August 2024 + +## Improvements +- Refactored the `layers/` directory structure to organize Layer File Formats into versioned subdirectories and removed outdated layer samples. See pull request [#649](https://github.com/mitre-attack/attack-navigator/pull/649). +- Improved toolbar for better usability. See issue [#534](https://github.com/mitre-attack/attack-navigator/issues/534). +- Updated Angular from v14 to v17. + + +# 5.0.1 - 9 May 2024 + +## Fixes +- Fixed an issue with parsing technique platforms. + +# 5.0.0 - 2 May 2024 + +## New Features +- Navigator now loads data via the STIX 2.1 Collection Index. See issue [#607](https://github.com/mitre-attack/attack-navigator/issues/607). + - Added the `collection_index_url` property to `config.json` which specifies the URL to the collection index. By default, it is set to [ATT&CK's STIX 2.1 Collection Index](https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/index.json). More information about Collection Indexes can be found [here](https://github.com/mitre-attack/attack-stix-data?tab=readme-ov-file#collection-indexes). + - Removed the hardcoded list of ATT&CK versions from the `versions` property in `config.json`. Support for this property is continued for loading custom versions of the dataset, integration with the ATT&CK Workbench, loading content from a TAXII server, and for offline hosting. For any issues encountered, please ensure the versions `enabled` property is set to `true` and the data is properly defined in the versions `entries` array. + - The `collection_index_url` property and/or the `versions` property must be defined for Navigator to load properly. When both properties are defined, the Navigator will display the union of the versions that are specified under the "More Options" dropdown in the "Create New Layer" interface. If neither are defined, the user will be alerted that the Navigator failed to load. +- Added support for loading content from a TAXII 2.1 server. See issue [#277](https://github.com/mitre-attack/attack-navigator/issues/277). For more information on how to load content from TAXII 2.1 see _Loading content from a TAXII server_ in the [README](README.md). + +## Improvements +- Improved error handling when there is an issue loading the configuration file. See issue [#398](https://github.com/mitre-attack/attack-navigator/issues/398). + +## Fixes +- Fixed an issue where loading a multi-layer JSON file through embedded links would throw an error and prevent the layers from loading. See issue [#624](https://github.com/mitre-attack/attack-navigator/issues/624). + +# 4.9.5 - 23 April 2024 + +Adds support for ATT&CK v15.0. + +## Improvements +- Added "mark all as reviewed" and "expand visible techniques" options to the Layer Upgrade UI to improve the overall technique review workflow. See issue [#595](https://github.com/mitre-attack/attack-navigator/issues/595). + +# 4.9.4 - 29 February 2024 + +## Fixes +- Fixed a bug with selecting techniques by data sources in the search & multi-select interface. See issue [#622](https://github.com/mitre-attack/attack-navigator/issues/622). + +# 4.9.3 - 27 February 2024 + +## Fixes +- Fixed a bug with loading Navigator layers on ATT&CK v10 or earlier. See issue [#620](https://github.com/mitre-attack/attack-navigator/issues/620). + +# 4.9.2 - 26 February 2024 + +## Fixes +- Fixed an issue with loading multiple bundles into a single matrix. See issue [#505](https://github.com/mitre-attack/attack-navigator/issues/505). +- Fixed an issue where the outdated layer dialog box would not load the latest layer file format specification. See issue [#617](https://github.com/mitre-attack/attack-navigator/issues/617). +- Fixed an issue in the ATT&CK version comparison which caused deprecated techniques to appear in the "review additions" section of the Layer Upgrade UI. See issue [#618](https://github.com/mitre-attack/attack-navigator/issues/618). + +# 4.9.1 - 14 November 2023 + +Adds support for ATT&CK v14.1. + +## Fixes +- Fixed an issue with the Dockerfile which was preventing the docker image from building. See issue [#598](https://github.com/mitre-attack/attack-navigator/pull/598). + +# 4.9.0 - 31 October 2023 + +Adds support for ATT&CK v14.0. + +## New Features +- Consolidated the JSON, Excel, and SVG export options into a single dropdown. Added an option to the export interface to only download annotations on visible techniques. See issue [#215](https://github.com/mitre-attack/attack-navigator/issues/215). +- Extended search interface to support searching for techniques by asset. +- Added the ability to configure how sub-techniques are displayed in the layer file through the `expandedSubtechniques` property - annotated, all, or none. See issue [#560](https://github.com/mitre-attack/attack-navigator/issues/560) and the `Layer File Format Changes` section. +- Added functionality to download all open layers in JSON or MS Excel format. Also added the ability to upload a file with multiple layers. See issue [#128](https://github.com/mitre-attack/attack-navigator/issues/128). +- Added a new toolbar option to enable or disable the sticky toolbar. + +## Improvements +- Added ability to render SVG export in dark mode. See issue [#556](https://github.com/mitre-attack/attack-navigator/issues/556). +- Added the ability to configure whether or not to display the metadata underline either by editing `src/assets/config.json` or through the "Create Customized Navigator" interface. See issue [#400](https://github.com/mitre-attack/attack-navigator/issues/400). +- Added functionality to scroll across the open tabs in the navigator. See issue [#581](https://github.com/mitre-attack/attack-navigator/issues/580). +- Improved the matrix print view. See issue [#508](https://github.com/mitre-attack/attack-navigator/issues/508). +- Added preventative measures for reverse tabnabbing. See issue [#527](https://github.com/mitre-attack/attack-navigator/issues/527). +- Improved the layer version mismatch warning. For a major version change, the latest layer format and the changelog are linked. For a minor version change, warning message disappears in 6 seconds and links to the changlog. See issue [#260](https://github.com/mitre-attack/attack-navigator/issues/260). +- Added functionality to scroll down with the Tactics header frozen to the top. See issue [#404](https://github.com/mitre-attack/attack-navigator/issues/404). +- Improved the Dockerfile for faster builds. See issue [#411](https://github.com/mitre-attack/attack-navigator/pull/411). + +## Fixes +- Fixed an issue where certain layer settings were not restored when upgrading the layer ATT&CK version. See issue [#597](https://github.com/mitre-attack/attack-navigator/issues/597). + +## Miscellaneous +- Refactored the codebase to improve maintainability of the application. + +## Layer File Format Changes + +Layer file format updated to version 4.5. See [layer format v4.5](layers/spec/v4.5/layerformat.md) for the full specification. + +- Added support for selecting only visible techniques. The `selectVisibleTechniques` field specifies whether or not hidden techniques will be included in the different select behaviors. +- Added support for configuring how sub-techniques are displayed in the layer with the `expandedSubtechniques` field. This property can be set to `all`, `annotated`, or `none` to expand all sub-techniques, expand only annotated sub-techniques, or collapse all sub-techniques, respectively. +- Added support for a list of layers. Users can now upload a layer file that contains multiple layers. + +# 4.8.2 - 9 May 2023 + +Adds support for ATT&CK v13.1. + +## Miscellaneous + +- Refactored the codebase to improve maintainability of the application. + +# 4.8.1 - 25 April 2023 + +Adds support for ATT&CK v13. + +## Improvements +- Users can disable the background color effect on manually assigned colors, aggregate scores, or non-aggregate scores by editing `src/assets/config.json` or through the "Create Customized Navigator" interface. See issue [#371](https://github.com/mitre-attack/attack-navigator/issues/371). +- Added image orientation options and new preset image size options to the SVG exporter. See issue [#547](https://github.com/mitre-attack/attack-navigator/pull/547). + +## Fixes +- Fixed an issue where aggregate scores were calculated on techniques with no sub-techniques. See issue [#539](https://github.com/mitre-attack/attack-navigator/issues/539). +- Fixed an issue where pinned tooltips would cover the "pin/unpin tooltip" option in the context menu. See issue [#542](https://github.com/mitre-attack/attack-navigator/issues/542). +- Fixed inconsistencies with dark theme in the SVG exporter. See issue [#546](https://github.com/mitre-attack/attack-navigator/pull/546). + +# 4.8.0 - 20 December 2022 + +## New Features +- Added the ability to create a layer from a custom [Collection](https://github.com/center-for-threat-informed-defense/attack-workbench-frontend/blob/develop/docs/collections.md#collections) or Stix Bundle. Users can specify the URL, version, and domain of a custom bundle in the Create New Layer interface. This will load the base data from the file at the given URL into the Navigator. Layers created from a custom collection/STIX bundle support all of the standard layer features (annotations, filter/sort, download/upload, layer-layer operations, etc.), apart from upgrading the layer to a newer ATT&CK version. See issue [#499](https://github.com/mitre-attack/attack-navigator/issues/499). + +## Layer File Format Changes + +Layer file format updated to version 4.4. This update adds support for layers created with a custom collection or STIX bundle; the optional `customDataURL` field contains the URL from which custom data was loaded. This update is fully backwards compatible with layer format v4.3 since the added field is optional. See [layer format v4.4](layers/spec/v4.4/layerformat.md) for the full specification. + +# 4.7.1 - 8 November 2022 + +Adds support for ATT&CK v12.1. + +# 4.7.0 - 25 October 2022 + +Adds support for ATT&CK v12. + +## New Features +- Integration compatibility with the [ATT&CK Workbench](https://github.com/center-for-threat-informed-defense/attack-workbench-frontend). See issue [#474](https://github.com/mitre-attack/attack-navigator/pull/474). +- Extended search interface to support searching for techniques based on campaign. See [#501](https://github.com/mitre-attack/attack-navigator/issues/501). + +## Fixes +- Fixed an issue with the Docker build caused by conflicting peer dependencies. See issue [#497](https://github.com/mitre-attack/attack-navigator/issues/497). +- Fixed an issue with loading STIX bundles that do not contain all of the tactics referenced by the included matrix. See issue [#489](https://github.com/mitre-attack/attack-navigator/issues/489). + +# v4.6.6 - 26 August 2022 + +## Fixes +- Fixed an issue where the sorting selection was not honored for sub-techniques when rendered as an SVG. See issue [#494](https://github.com/mitre-attack/attack-navigator/issues/494). + +# v4.6.5 - 7 July 2022 + +Adds support for ATT&CK v11.3 and Mobile ATT&CK sub-techniques. + +## Fixes +- Fixed an issue where matrices that have been deprecated would load into the Navigator. See issue [#473](https://github.com/mitre-attack/attack-navigator/issues/473). + +# v4.6.4 - 25 May 2022 + +Adds support for ATT&CK v11.2. + +## Fixes +- Fixed an issue causing disabled techniques with no enabled sub-techniques to appear in the matrix when the hide-disabled control is active. See issue [#466](https://github.com/mitre-attack/attack-navigator/issues/466). + +# v4.6.3 - 13 May 2022 + +## Fixes + +- Fixed package import issues causing failure to load techniques with scores or colors, and impacting the ability to render a layer as SVG. See issues [#451](https://github.com/mitre-attack/attack-navigator/issues/451) and [#452](https://github.com/mitre-attack/attack-navigator/issues/452). + +# v4.6.2 - 12 May 2022 + +Adds support for ATT&CK v11.1. + +## Improvements +- Added a feature to pin a technique cell when viewed in the matrix, enabling the user to scroll through the details of the technique in the tooltip. See issue [#320](https://github.com/mitre-attack/attack-navigator/issues/320). +- Added a popup alert to notify users if a layer with an empty tactic field is uploaded, and therefore will not be displayed. See issue [#326](https://github.com/mitre-attack/attack-navigator/issues/326). + +# v4.6.1 - 26 April 2022 + +## Fixes + +- Fixed a versioning error that occurred when loading a local layer with a previous version of ATT&CK. + +# v4.6.0 - 25 April 2022 + +Adds support for ATT&CK v11. + +## Improvements + +- Revised the rigid versioning structure in the configuration file which enforced too many constraints on importing custom data. Added new fields `version.version` and `domain.identifier` to improve how Navigator derives domain information. More details are provided in the [integration documentation](https://github.com/center-for-threat-informed-defense/attack-workbench-frontend/blob/develop/docs/integrations.md#attck-navigator-integration) on how to integrate the ATT&CK Navigator with the ATT&CK Workbench. See issue [#370](https://github.com/mitre-attack/attack-navigator/issues/370). +- Fixed an issue where a long technique name or metadata value would overflow outside the technique tooltip. See issue [#359](https://github.com/mitre-attack/attack-navigator/issues/359). + +# v4.5.5 - 7 January 2022 + +## Fixes + +- Fixed an issue with the Dockerfile which was preventing the docker image from building. See issue [#395](https://github.com/mitre-attack/attack-navigator/pull/395). + +## Improvements + +- Font sizing in the SVG exports are optimally sized to improve readability and consistency. See issue [#221](https://github.com/mitre-attack/attack-navigator/issues/221). + +## New Features + +- Added the ability to assign hyperlinks and metadata to selected techniques in the technique controls toolbar. See issue [#321](https://github.com/mitre-attack/attack-navigator/issues/321). + - Hyperlinks can be accessed via the context menu and metadata can be viewed in the technique tooltip. Both hyperlinks and metadata can also be added directly to Layer Files (see _Layer File Format Changes_ below for more details). + - Users can disable the link underline effect on techniques by editing `src/assets/config.json` or through the "Create Customized Navigator" interface. +- Added the ability to assign hyperlinks layers. Hyperlinks can be viewed and edited in the layer information panel alongside layer metadata. + +## Layer File Format Changes + +Updated the Layer File Format to v4.3 which adds a `links` array field to technique objects and to layers. This supports the assignment of hyperlinks to techniques which are accessed in the context menu and to layers which are accessed in the layer information dropdown menu. Link objects must conform to the schema `{"label": string, "url": string}` or `{"divider": boolean}`. A separator is displayed in the technique context menu where the `divider` property occurs in the list of hyperlinks. See [layer format v4.3](layers/spec/v4.3/layerformat.md) for the full specification. + +# v4.5.4 - 15 November 2021 + +## Fixes + +- Fixed a bug where layers with aggregate scores enabled would be render a black background on techniques which have no aggregate score. See issue [#388](https://github.com/mitre-attack/attack-navigator/issues/388). + +# v4.5.3 - 12 November 2021 + +## Fixes + +- Fixed an issue where the user could not manually assign colors or upload layers with manually assigned colors. See issue [#386](https://github.com/mitre-attack/attack-navigator/issues/386). +- Fixed an issue where fields with a value of `false` in the layout configuration of a layer would be ignored. See issue [#381](https://github.com/mitre-attack/attack-navigator/issues/381). + +# v4.5.2 - 10 November 2021 + +## Improvements + +- Users will no longer be prompted to upgrade default layers (set in the config file or the "create a customized Navigator" feature) to the current ATT&CK version. This should improve the UX of Navigator instances embedded in iframes or linked to from webpages with a default set of layers loaded. +- Add support for ATT&CK v10.1 + +## Fixes + +- Fixed an issue when loading multiple default layers (specified in the config or a layerURL) which led to only the first layer being loaded. See issue [#361](https://github.com/mitre-attack/attack-navigator/issues/361). +- Fixed inconsistencies within the ATT&CK Navigator dark theme. + - If the user switches from the dark/light theme to use the system's theme, the browser will remember to continue using the system theme until changed again. + - The layer upgrade feature now supports dark theme. + - Fixed scoring gradient preset colors that should make technique cells appear to fade into the background color (if they have a lower score) + +# v4.5.1 - 21 October 2021 + +## Fixes + +- Fixes support for ATT&CK versions with more than 1 digit (ex. ATT&CK v10). + - Uploaded layers without a specified ATT&CK version will no longer try and fail to load ATT&CK v1 + - Uploaded layers uring ATT&CK v10 will no longer try and fail to load ATT&CK v1 + - Downloaded layers using ATT&CK v10 will no longer claim they use ATT&CK v1 + +# v4.5.0 - 21 October 2021 + +## New Features + +- The ATT&CK Navigator now has a dark theme. See issue [#71](https://github.com/mitre-attack/attack-navigator/issues/71). +- Added support for ATT&CK version 10 + - Added data sources panel to the search and multiselect interface. See issue [#341](https://github.com/mitre-attack/attack-navigator/issues/341). + +# v4.4.1 - 16 September 2021 + +## Fixes + +- Fixed a crash that would occur when loading a layer with annotations on a revoked/deprecated technique without explicitly defined tactics. See issue [#354](https://github.com/mitre-attack/attack-navigator/issues/354). + +# v4.4 - 15 September 2021 + +Version 4.4 of the Navigator restores Safari support provided you are using Safari version 14 or above. + +## New Features + +- Combined the search and multiselect tools into a single UI. This allows groups, software, and mitigations to be filtered alongside techniques and improves usability by moving the interface to a sidebar. See issue [#204](https://github.com/mitre-attack/attack-navigator/issues/204). +- Added a workflow for upgrading layers created in older versions of ATT&CK to the current version. When upgrading a layer, users can view techniques have changed between the two versions and copy annotations to their new layer. See issue [#181](https://github.com/mitre-attack/attack-navigator/issues/181). + +## Improvements + +- Various improvement to UI aesthetics and usability. See issue [#340](https://github.com/mitre-attack/attack-navigator/issues/340). + - Reduced unnecessary whitespace to maximize screen real-estate for viewing the matrix. + - Layer tabs now hide themselves when the user scrolls to maximize screen real-estate for viewing the matrix. + - Improved favicon for standardization with other ATT&CK tools. +- Techniques are now shown when disabled (and hide-disabled is enabled) as long as any of any of their sub-techniques are enabled. See issue [#298](https://github.com/mitre-attack/attack-navigator/issues/298) +- Users can disable the comment underline effect on techniques by editing `src/assets/config.json` or through the "Create Customized Navigator" interface. See issue [#268](https://github.com/mitre-attack/attack-navigator/issues/268). +- Application now alerts the user when input STIX data contains an object missing an ATT&CK ID instead of failing silently. See issue [#339](https://github.com/mitre-attack/attack-navigator/pull/339). +- The application usage/help page can now be viewed [directly on GitHub](https://github.com/mitre-attack/attack-navigator/blob/master/USAGE.md). See issue [#179](https://github.com/mitre-attack/attack-navigator/issues/179). +- The application changelog can now be viewed within the application. See issue [#178](https://github.com/mitre-attack/attack-navigator/issues/178). + +## Fixes + +- Fixed some issues where objects could appear in the wrong domain under specific circumstances. See issue [#308](https://github.com/mitre-attack/attack-navigator/issues/308), [attack-website#310](https://github.com/mitre-attack/attack-website/issues/310). +- Fixed issue with sorting when show aggregate score is enabled, where each technique's aggregate score was not correctly calculated into the sorting. See issue [#295](https://github.com/mitre-attack/attack-navigator/issues/295). +- The Navigator should now use the proper fonts when operating without an internet connection. See issue [#278](https://github.com/mitre-attack/attack-navigator/issues/278) +- Fixed an issue when loading multiple default layers where subsequent layers would only appear after the user interacted with the first one. See issue [#288](https://github.com/mitre-attack/attack-navigator/issues/288). +- Updated Safari browser warning to show only for versions 13 and below. See issue [#306](https://github.com/mitre-attack/attack-navigator/issues/306). + +# v4.3 - 29 April 2021 + +## New Features + +- Added aggregate scores. Aggregate scores are computed using the score of the technique and all sub-techniques using an "aggregate function" -- min, max, average, or sum. The aggregate score is used to determine the color of the technique in place of the technique's score. Aggregate scores are an optional feature and can be enabled in the "matrix configuration" dropdown. See issue [#269](https://github.com/mitre-attack/attack-navigator/issues/269). +- The user can now suppress the "leave site?" warning dialog in the config file or via the "create a customized navigator" interface. See issue [#267](https://github.com/mitre-attack/attack-navigator/issues/267). +- Added an (optional) configurable banner. The new "banner" field of the config file can be used to customize the banner content with full HTML support. See issue [#205](https://github.com/mitre-attack/attack-navigator/issues/205). +- Added button to toolbar to only expand all sub-techniques that are annotated. See issue [#256](https://github.com/mitre-attack/attack-navigator/issues/256). +- Added support for displaying STIX 2.1 notes in tooltips. Notes attached to techniques in the STIX data are indicated in the same style as a comment. As of version 4.3 the ATT&CK Navigator supports STIX 2.1, but cannot load data from a TAXII 2.1 server. + +## Improvements + +- Consolidated AWS, GCP, and Azure platforms into IaaS platform to integrate upcoming release of ATT&CK. See issue [#252](https://github.com/mitre-attack/attack-navigator/issues/252). + +## Fixes + +- Fixed a bug in exporting matrix to Excel sheet, where the style of all sub-techniques with the same name in a column were incorrectly over-ridden by the style of the first sub-technique in its name. See issue [#270](https://github.com/mitre-attack/attack-navigator/issues/270). + +## Layer File Format Changes + +Layer file format updated to version 4.2. This update is fully backwards compatible with the layer format v4.1 since the added fields are optional. See [layer format v4.2](layers/spec/v4.2/layerformat.md) for the full specification. + +This update adds settings for aggregate scores to the layout object of the layer: + +- `showAggregateScores`, which turns on the feature +- `countUnscored` which counts unscored techniques as if their score was `0` when the aggregate function is "average". +- `aggregateFunction`: the desired aggregation function: "average", "min", "max" or "sum". + +# v4.2 - 3 February 2021 + +With version 4.2 of the Navigator we are retiring support for the Safari browser. A bug introduced in the sub-techniques release (version 3.0) causes safari to freeze when changing between layer tabs (see issue [#251](https://github.com/mitre-attack/attack-navigator/issues/251)). We have been unable to determine the cause of the freeze and thus are retiring official support for that browser. Safari users can continue to use the application, but will be warned of possible freezes via a dialog window when they first load the app. + +## Improvements + +Refactored the implementation of tabs to reduce performance issues when opening multiple layers. See issue [#254](https://github.com/mitre-attack/attack-navigator/issues/254). + +- The help page and SVG exporter have been moved to a pop-up window and are no longer displayed in a separate tab. +- The process for displaying layer information and switching between tabs has been refactored. The creation and deletion of new DOM elements for each tab has been removed. Previously, the contents of each tab were contained in their own DOM element causing poor performance. + +## Fixes + +- Fixed a bug preventing required packages to install when building the Navigator through Docker. See issue [#258](https://github.com/mitre-attack/attack-navigator/issues/258). + +# v4.1 - 15 December 2020 + +## New Features + +- Added support for section breaks in the technique metadata format (see _Layer File Format Changes_ below for more details). See issue [#189](https://github.com/mitre-attack/attack-navigator/issues/189). + +## Improvements + +- Layer domain and version is displayed under "layer information" in layer controls and in a new "domain" section of the SVG exporter. See issue [#239](https://github.com/mitre-attack/attack-navigator/issues/239). +- Layer loading is indicated in the UI when uploading a layer from the _Open Existing Layer_ interface. See issue [#240](https://github.com/mitre-attack/attack-navigator/issues/240). + +## Fixes + +- Fixed a bug causing platform selection to be overwritten when uploading a layer. See issue [#245](https://github.com/mitre-attack/attack-navigator/issues/245). +- Updated packages to fix vulnerabilities. You may need to `npm install` on your local instance due to new package versions. + +## Layer File Format Changes + +Layer file format updated to version 4.1. This update is fully backwards compatible with layer format v4.0 since the added field is optional. See [layer format v4.1](layers/spec/v4.1/layerformat.md) for the full specification. + +This update adds an optional `divider` object to the `metadata` format on technique objects. Each object in the metadata array must either be of the schema `{"name": string, "value": string}` or `{"divider": boolean}`. A separator will be displayed in the metadata tooltip where the `divider` property occurs in the list of metadata. + +# v4.0 - 27 October 2020 + +## New Features + +### Major + +- Added support for mixed domains and versions. Layers can be opened with different ATT&CK versions and now support custom domains. See issues [#180](https://github.com/mitre-attack/attack-navigator/issues/180) and [#182](https://github.com/mitre-attack/attack-navigator/issues/182). + - Users can specify the ATT&CK version and domain for each layer. A layer with no specified ATT&CK version will default to the current version. + - Updated "create new layer" interface to provide access to previous versions of ATT&CK. + - Added ability to upgrade an uploaded layer to the current version of ATT&CK. + - Updated "create layer from other layers" interface to restrict layer operations to layers of the same domain and version. + - Updated config file to support dynamic domains and versions. See _Config File Format Changes_ below for more details. +- Removed the pre-ATT&CK domain from the Navigator in support of the next ATT&CK release. See issue [#207](https://github.com/mitre-attack/attack-navigator/issues/207). + - Removed the "stages" section of the filters and layer format. + +### Minor + +- Allow legend and gradient to be hidden separately within the legend block in the SVG exporter. See pull request [#223](https://github.com/mitre-attack/attack-navigator/pull/223). +- Added functionality to select or deselect techniques in a tactic. This can be done within the context menu or by clicking on the name of the tactic and follows the user's behavior preference under "selection behavior" in the selection controls. + +## Fixes + +- Fixed a bug preventing layer downloads with an empty metadata field. See issue [#214](https://github.com/mitre-attack/attack-navigator/issues/214). +- Fixed a bug in "selection controls" where searching for techniques would return results only from the first enabled search property. See issue [#200](https://github.com/mitre-attack/attack-navigator/issues/200). +- Fixed a bug in the "default layers" interface where specifying multiple default layers would open the last specified URL multiple times. See issue [#199](https://github.com/mitre-attack/attack-navigator/issues/199). +- SVG exporter now honors layer sorting configuration. See pull request [#223](https://github.com/mitre-attack/attack-navigator/pull/223). +- Removed text selection in tactic headers. See issue [#222](https://github.com/mitre-attack/attack-navigator/issues/222). +- Long descriptions or names of layers will no longer cause the text exporter to hang. See issue [#224](https://github.com/mitre-attack/attack-navigator/issues/224). + +## Layer File Format Changes + +Layer file format updated to version 4.0. Older versions can still be loaded in the Navigator, but will no longer display the Pre-ATT&CK domain. See [layer format v4.0](layers/spec/v4.0/layerformat.md) for the full specification. + +- ATT&CK version 8.0 removed the pre-ATT&CK domain, which became two tactics tagged with the `PRE` platform in the Enterprise domain. The `stages` section of filters have been removed to reflect this migration. +- Replaced `version` field with `versions` object which specifies the layer format, Navigator, and ATT&CK content versions in support of the mixed domains and versions update. + +## Config File Format Changes + +### Replaced `enterprise_attack_url` and `mobile_data_url` with `versions` + +To support the addition of dynamic versions and domains, paths to ATT&CK STIX bundles have been migrated to `versions`. See issue [#183](https://github.com/mitre-attack/attack-navigator/issues/183). + +- The `versions` object defines a list of ATT&CK content versions. Each version must conform the schema `{"name": string, "domains": []}`, where the `domains` property is a list of domain objects. +- Each domain specifies a `name` and a `data` string array, where the `data` array is a list of paths to one or more STIX bundles. Multiple paths can be added to the `data` property to view multiple STIX bundles in a single layer instance. + +For example, the paths to the current version of the Enterprise and Mobile domains are now formatted as follows: + +```json +"versions": [ + { + "name": "ATT&CK v8", + "domains": [ + { + "name": "Enterprise", + "data": ["https://raw.githubusercontent.com/mitre/cti/ATT%26CK-v8.0/enterprise-attack/enterprise-attack.json"] + }, + { + "name": "Mobile", + "data": ["https://raw.githubusercontent.com/mitre/cti/ATT%26CK-v8.0/mobile-attack/mobile-attack.json"] + } + ] + } +] +``` + +### Removal of `taxii_server` + +The `taxii_server` property has been removed. It was previously used to specify the TAXII server URL and data collections for loading content into the Navigator. This is now done by defining a `taxii_url` and `taxii_collection` property in place of the `data` property for a given domain. For more information on TAXII support see _Loading content from a TAXII server_ in [the readme](README.md). + +# v3.1 - 8 July 2020 + +ATT&CK Navigator v3.0 and v3.1 includes support for sub-techniques as well as improvements to several of the interfaces and a major refactor of the codebase. The format for the config file and layer file have both changed: please see _Layer File Format Changes_ and _Config File Format Changes_ below for more details. + +If you want to continue using the non-sub-techniques Navigator, please use the [v2.3.2 release](https://github.com/mitre-attack/attack-navigator/releases/tag/v2.3.2) for local instances or the following live instances of Navigator v2.3.2: + +- [Enterprise ATT&CK](https://mitre-attack.github.io/attack-navigator/v2/enterprise/) +- [Mobile ATT&CK](https://mitre-attack.github.io/attack-navigator/v2/mobile/) + +## Improvements + +### Minor + +- Added options to the SVG Export feature for the visibility of sub-techniques. See issue [#142](https://github.com/mitre-attack/attack-navigator/issues/142). +- Added update layers for March 2020 sub-techniques release. See issue [#138](https://github.com/mitre-attack/attack-navigator/issues/138). +- Updated the [sample layers](layers/data/samples/) with sub-techniques support. See issue [#138](https://github.com/mitre-attack/attack-navigator/issues/138). We've also released [some scripts on our attack-scripts repository](https://github.com/mitre-attack/attack-scripts/tree/develop/scripts/layers/samples) corresponding to the sample layers. +- Extended search interface to support searching for techniques based on data sources. See pull request [#158](https://github.com/mitre-attack/attack-navigator/pull/158). +- Added show/hide all sub-techniques controls under "layer controls". See issue [#141](https://github.com/mitre-attack/attack-navigator/issues/141). +- Updated the "select sub-techniques with parent" control under the "selection controls" dropdown. Sub-techniques will be selected independently by default. See issue [#140](https://github.com/mitre-attack/attack-navigator/issues/140). +- Added sub-techniques as a configurable Navigator feature. Sub-technique features can be disabled by editing the `src/assets/config.json` file or using the "create customized Navigator" interface. See issue [#112](https://github.com/mitre-attack/attack-navigator/issues/112). +- Added option to select scoring gradient from an existing layer in the _create layers from other layers_ interface. See issue [#121](https://github.com/mitre-attack/attack-navigator/issues/121). +- Added options to select all techniques and sub-techniques with or without annotations in the context menu. See issue [#163](https://github.com/mitre-attack/attack-navigator/issues/163). +- Added a subscript to the techniques which have sub-techniques. The subscript shows the number of sub-techniques under a given technique and how many of those sub-techniques have annotations while the parent is collapsed. See issue [#162](https://github.com/mitre-attack/attack-navigator/issues/162). +- Updated the layout of the metadata value key. See issue [#189](https://github.com/mitre-attack/attack-navigator/issues/189). + +## Fixes + +- Added internet explorer support for the sub-techniques features, and improved Edge compatibility. See issue [#135](https://github.com/mitre-attack/attack-navigator/issues/135). +- Fixes a bug causing metadata values to be displayed improperly in tooltips. See issue [#153](https://github.com/mitre-attack/attack-navigator/issues/153). +- Fixes a bug in which the default layer link input field in the "create customized Navigator" interface loses focus between characters. See issue [#136](https://github.com/mitre-attack/attack-navigator/issues/136). +- Fixed a bug in "create layer from other layers" interface where inheriting filters would cause the application to crash. See issue [#168](https://github.com/mitre-attack/attack-navigator/issues/168). +- Fixed a bug where editing the gradient would also change the most recently selected gradient preset. See issue [#167](https://github.com/mitre-attack/attack-navigator/issues/167). +- Removed duplicate threat group entries from the multiselect interface and included sub-techniques in the selection of techniques related to threat groups, software, or mitigations. See issue [#164](https://github.com/mitre-attack/attack-navigator/issues/164). +- Fixed a bug in the sub-technique sidebar that occurs when all sub-techniques of a given technique are disabled and hidden. See issue [#177](https://github.com/mitre-attack/attack-navigator/issues/177). +- Removed the comment underscore from the sub-technique count subscript. See issue [#184](https://github.com/mitre-attack/attack-navigator/issues/184). + +# v3.0 - sub-techniques beta + +## New Features + +### Major + +- Added support for sub-techniques. Techniques with sub-techniques will be denoted by a sidebar which can be clicked to show and hide the sub-techniques. Techniques without sub-techniques will not have a sidebar. +- Added "select techniques with subtechniques" control under "selection controls" dropdown, augmenting the existing "select techniques across tactics" control. By default sub-techniques will be selected along with their parents. See issue [#114](https://github.com/mitre-attack/attack-navigator/issues/114). +- Added "matrix layout" controls (replacing "view mode"). See issues [#117](https://github.com/mitre-attack/attack-navigator/issues/117) and [#110](https://github.com/mitre-attack/attack-navigator/issues/110). + - Supports multiple layouts, and the codebase is designed to allow the addition of new layouts easily. Added the following layouts: + - the "side" layout (default), where sub-techniques appear in an adjacent sub-column of the tactic. + - the "flat" layout, where sub-techniques appear nested beneath their parent similar to an indented list. + - the "mini" layout, where sub-techniques are grouped into boxes with their parent. The "mini" layout is designed to give an overview of the layer without the comparatively complex structure of the "flat" or "side" views. + - Added the ability to show technique ATT&CK IDs and names simultaneously, individually or not at all. The "mini" layout overrides this selection. See issue [#124](https://github.com/mitre-attack/attack-navigator/issues/124). + +### Minor + +- Added mitigations to multi-select interface. Improved the extensibility of the multi-select interface to make future additions easier. See issue [#119](https://github.com/mitre-attack/attack-navigator/issues/119). + +## Improvements + +### Major + +- Major redesign of the "render layer to SVG" feature. + - Added support for sub-techniques. See issue [#116](https://github.com/mitre-attack/attack-navigator/issues/116). + - Users will no longer need to specify text size manually. Algorithms have been implemented to automatically maximize text size without overflowing the text container. The overall layer rendering process will take slightly longer than previously due to these computations. + - Header and legend (docked and undocked) should be much more aesthetic. + - Score gradient legend should now show which scores map to which colors more clearly. +- Context menu and tooltip improvements: + - Visual style has been improved for both context menu and tooltip. + - Tooltip is now statically placed instead of following the cursor, which increases the performance of the UI. + - Context menu should now orient itself better to avoid falling off the edge of the screen. + - Added "view tactic" button to context menu. + - Major improvements to the flexibility of the custom context menu items feature. See _Config File Format Changes_ below for more details. +- Major refactor to many components should reduce lag and improve extensibility and maintainability of the application. + +### Minor + +- Export to excel: added sub-techniques support. See issue [#115](https://github.com/mitre-attack/attack-navigator/issues/115). +- Minor UI improvements to the search feature. Disabled regex in search because it was very buggy. See issue [#113](https://github.com/mitre-attack/attack-navigator/issues/113). + +## Layer File Format Changes + +Layer file format updated to version 3.0. Older versions can still be loaded in the Navigator, but may have degraded functionality. See [layer format v3.0](layers/spec/v3.0/layerformat.md) for the full specification. + +- Removed "viewMode" enumeration in favor of "layout" object. viewMode will get parsed into a layout configuration automatically, but the conversion is not perfect since the layouts have changed. +- Added "showSubtechniques" field to technique objects. +- Added "selectSubtechniquesWithParent" field setting the default value of the "select techniques with subtechniques" control. + +The sub-techniques update of ATT&CK caused many techniques to be replaced by sub-techniques. Since the replacing sub-techniques have different IDs, many layers created before the sub-technques release will still be using IDs for the replaced techniques and therefore won't work properly in the new version even if the annotation format is correct. A [conversion script](layers/update-layers.py) is provided in the layers folder which both updates layers to the most recent format and also updates technique IDs to their replacers where possible. There are however a few cases which won't be caught: + +1. Cases where techniques which have been replaced by multiple sub-techniques are ignored entirely due to limitations in the remapping data. +2. Cases where the `tactic` field was present but the replacing technique is not in that tactic. +Run `python3 update-layers.py -h` for usage instructions. + +## Config File Format Changes + +### Changes to `custom_context_menu_items` + +Custom context menu feature has been significantly improved for flexibility. See _Adding Custom Context Menu Options_ in [the readme](README.md) for more details on the format. + +- Updated substitution string to use double curly braces (e.g `{{technique_name}}`) instead of tildes. +- Added ability to specify STIX IDs in addition to ATT&CK IDs. +- Added the option to add a sub-technique specific URL (`subtechnique_url`) which will apply only to sub-techniques. When using the sub-technique URL, extra sub-technique related substitutions are available. + +### Changes to `features` + +The "features" structure is used to enable/disable specific Navigator features. It also propagates to the "create customized Navigator" interface. + +- "toggle_view_mode" has been renamed to "layout_controls" and the description updated accordingly. + +# v2.3.2 - 17 January 2020 + +## Improvements + +- Updated trademark to registered trademark and updated copyright date to 2020. See issue [#125](https://github.com/mitre-attack/attack-navigator/pull/125). +- Updated help page to be more legible by increasing page margins. + +# v2.3.1 - 29 October 2019 + +## Fixes + +- Fixes a bug where default_layers specified in `config.json` would not load. See pull request [#109](https://github.com/mitre-attack/attack-navigator/pull/109). + +# v2.3 - 24 October 2019 + +## New Features + +### Minor + +- Technique comments will now be included with excel exports as cell notes. Note: you may have to re-install your node modules for this functionality to be present. See issue [#55](https://github.com/mitre-attack/attack-navigator/issues/55). +- Minor matrix layout improvements. See issue [#106](https://github.com/mitre-attack/attack-navigator/issues/106). +- Added support for cloud platforms. See issue [#101](https://github.com/mitre-attack/attack-navigator/issues/101). Also see *Layer File Format Changes*, below. +- In layer-layer operations, score expressions are now calculated on an element-by-element basis. This allows the use of normal math operators (e.g `a * b`) instead of the elementwise operators (e.g `a .* b`) as were previously required. It also enables the use of ternary operations such as `a > b ? a : 0`. See issue [#81](https://github.com/mitre-attack/attack-navigator/issues/81). +- Added the ability to specify multiple default layers in the layerURL query param. See issue [#75](https://github.com/mitre-attack/attack-navigator/issues/75). + +## Fixes + +- Multiselect interface should now correctly sort software and groups which start with lowercase letters. See issue [#99](https://github.com/mitre-attack/attack-navigator/issues/99). +- Layer loading should now provide more accurate descriptions when errors are encountered. See issue [#103](https://github.com/mitre-attack/attack-navigator/issues/103). +- Updated packages to fix vulnerabilities. + +## Layer File Format Changes + +Layer file format updated to version 2.2. Older versions can still be loaded in the Navigator, and this update is fully backwards compatible with Version 2.1. See [layer format v2.2](layers/spec/v2.2/layerformat.md) for the full specification. + +- Added the following cloud platforms to the set of acceptable enterprise platforms: "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS". +- Updated Enterprise and Mobile platforms to match their format as seen elsewhere in ATT&CK. This change is fully backwards compatible, and if the old format is detected it will automatically be updated to the new format. + - "android" becomes "Android" + - "ios" becomes "iOS" + - "windows" becomes "Windows" + - "linux" becomes "Linux" + - "mac" becomes "macOS" + +# v2.2.1 - 5 June 2019 + +## Fixes + +- Updated Angular from 7.0.4 to 8.0.0. +- Updated other packages to fix vulnerabilities. +- Removed node-sass rebuild in dockerfile. +- Fixed improperly formatted domains in the April 2019 update layers which were causing issues when exporting those layers to excel. +- Updated readme to better highlight documentation for using the Navigator offline. See issue [#82](https://github.com/mitre-attack/attack-navigator/issues/82). + +# v2.2 - 11 December 2018 + +## New Features + +### Major + +- Added the ability to associate user defined metadata to layers and techniques inside of a layer. Metadata can be useful for supporting other applications that use the layer format, or for attaching additional descriptive fields to the layer. The UI supports editing metadata on the layer itself, but not on techniques. Metadata on techniques is shown in tooltips. See *Layer File Format Changes*, below, for more detail on the metadata format. Also see issue [#52](https://github.com/mitre-attack/attack-navigator/issues/22). +- Removed `assets/tacticsData.json`. The Navigator now populates its tactics data from `x-mitre-matrix` and `x-mitre-tactic` objects in the bundled data. The field `tactics_url` was removed from `assets/config.json` -- see *Changes to config.json Format*, below. See issue [#63](https://github.com/mitre-attack/attack-navigator/issues/63). + +### Minor + +- Multiple layers can now be loaded on initialization. A change to the `config.json` file format allows the user to specify a list of default layers. Default layers can be loaded from the assets directory or from the web. see *Changes to config.json Format*, below. Also see issue [#67](https://github.com/mitre-attack/attack-navigator/issues/67). +- The color of the underline denoting comments can now be configured in the `config.json` file. Setting the color to `"transparent"` will remove comment underlines altogether. See *Changes to config.json Format`, below. Also see issue [#53](https://github.com/mitre-attack/attack-navigator/issues/53). + +## Fixes + +- Updated links in the documentation to match the new ATT&CK website. See issue [#62](https://github.com/mitre-attack/attack-navigator/issues/62). +- Updated Angular to version 7.0.6. This fixes some installation issues with OSX. We also updated several other packages. Please note that our new version of Angular requires a newer nodejs version, so try updating your node installation if errors occur after updating the Navigator. See issues [#61](https://github.com/mitre-attack/attack-navigator/issues/61), [#70](https://github.com/mitre-attack/attack-navigator/issues/70). +- Merged a [pull request](https://github.com/mitre-attack/attack-navigator/pull/58) which fixed a bug where default layers would have placeholder layer titles. See [#54](https://github.com/mitre-attack/attack-navigator/issues/64). +- Negative scores can now be entered in the UI. See [#72](https://github.com/mitre-attack/attack-navigator/issues/72). + +## Changes to `config.json` Format + +### Default Layer + +`default_layer` has been renamed to `default_layers`. The string property `location` has been replaced with the string[] property `urls`. The strings in `urls` should be the paths to the default layers you wish to load -- now multiple default layers can be loaded. You can also now load default layers from the assets folder and from the web simultaneously, although the order of the tabs is not guaranteed (since layer loading over HTTP is asynchronous). + +To update previous default layers configuration to the new format, see the following example: + +```json +"default_layer": { + "enabled": true, + "location": "assets/example.json" +} +``` + +Becomes: + +```json +"default_layers": { + "enabled": true, + "urls": [ + "assets/example.json" + ] +} +``` + +### Comment Color + +The `comment_color` field has been added, which specifies the color for comment underlines. + +### Removal of `assets/tacticsData.json` and `tactics_url` + +`assets/tacticsData.json` was removed, and the `config.json` field `tactics_url` along with it. `tacticsData.json` was previously used to specify the _pre-attack_, _mitre-enterprise_ and _mitre-mobile_ tactics. + +This is now done using the `x-mitre-matrix` and `x-mitre-tactic` objects in the bundled data retrieved from the taxii server or from our static cti github. `x-mitre-matrix` specifies the order of tactics and `x-mitre-tactic` specifies the actual tactic data. + +If you are using your own dataset with the Navigator an update to your source data will be required. The ATT&CK Navigator uses bundled data, where objects with types `attack-pattern`, `intrusion-set`, `malware`, `tool`, `relationship`, `x-mitre-tactic`, and `x-mitre-matrix` are all stored in a single array. This array is now required to contain `x-mitre-tactic` and `x-mitre-matrix` objects, which were not previously used. + +The data retrieved from `enterprise_attack_url`, `pre_attack_url`, and `mobile_data_url` follow the proper bundle format. Please use them as a guide for how to format your own datasets. + +Also, please note that multiple matrices are only supported for `mitre-mobile`, which expects matrices with the names `Device Access` and `Network-Based Effects` so that we can order the tactics in the UI properly. + +## Layer File Format Changes + +Layer file format updated to version 2.1. This update is fully backwards compatible with layer format v2.0 since all the added fields are optional. See [layer format v2.1](layers/spec/v2.1/layerformat.md) for the full specification. + +This update constitutes the addition of `metadata` fields to the layer and technique objects. Metadata can be used to support other applications using the layer format, or to add additional descriptive fields to layers or techniques. Metadata is formatted as an array, and each piece of metadata in the array must conform to the schema `{"name": string, "value": string}`. + +# v2.1 - 31 July 2018 + +## New Features + +### Major + +- Added export to MS Excel feature. Saves the current layer to MS excel (_xlsx_) format. See issue [#52](https://github.com/mitre-attack/attack-navigator/issues/52). + +### Minor + +- In the export to SVG interface you can now hide the technique count in the tactic column headers. See issue [#47](https://github.com/mitre-attack/attack-navigator/issues/47). +- Updated the README to explain how to use local files to populate the Navigator. See issue [#51](https://github.com/mitre-attack/attack-navigator/issues/51). + +## Fixes + +- Fixed constant score expressions (e.g `10`, `5+5`) featuring no variables being ignored in the _create layers from other layers_ interface. Now if a constant score expression is present it assigns uniformly to all techniques. See issue [#49](https://github.com/mitre-attack/attack-navigator/issues/49). +- Fixed a bug when uploading layers with no tactic field on techniques. When said field was absent, techniques with `enabled=false` were not initially hidden when `hideDisabled=true`. See issue [#50](https://github.com/mitre-attack/attack-navigator/issues/50). + +# v2.0 - 14 May 2018 + +## New Features + +### Major + +- Added TAXII client to pull ATT&CK content from a TAXII server. By default, the Navigator now loads content from the MITRE CTI TAXII server hosted at [https://cti-taxii.mitre.org](https://cti-taxii.mitre.org). See issue [#4](https://github.com/mitre-attack/attack-navigator/issues/4). +- Added a new interface to render layers to a downloadable SVG image. See issue [#2](https://github.com/mitre-attack/attack-navigator/issues/2). +- Added the ability to load a default layer when the Navigator initializes. See issues [#14](https://github.com/mitre-attack/attack-navigator/issues/14), [#26](https://github.com/mitre-attack/attack-navigator/issues/26). + - A local default layer can be specified in `src/assets/config.json`. + - The URL to a default layer hosted on the web can be specified in the new _create customized Navigator_ interface, and when the navigator loads it will fetch that layer. See issues [#7](https://github.com/mitre-attack/attack-navigator/issues/7), [#20](https://github.com/mitre-attack/attack-navigator/issues/20). + +### Minor + +- Added configurable background color to tactics row. See issue [#32](https://github.com/mitre-attack/attack-navigator/issues/32). +- Added customizable legend to describe the meanings of the colors of annotated techniques. See issues [#24](https://github.com/mitre-attack/attack-navigator/issues/24), [#28](https://github.com/mitre-attack/attack-navigator/issues/28), [#31](https://github.com/mitre-attack/attack-navigator/issues/31), [#33](https://github.com/mitre-attack/attack-navigator/issues/33). +- Added the ability to disable navigator features, either by editing the `src/assets/config.json` or using the new _create customized Navigator_ interface. See issues [#21](https://github.com/mitre-attack/attack-navigator/issues/21), [#41](https://github.com/mitre-attack/attack-navigator/issues/41). +- Added the ability to specify new items in the technique context menu by editing `src/assets/config.json`. These new items can be used to hyperlink to a specified URL, with parameters for the technique ID or tactic. See issue [#9](https://github.com/mitre-attack/attack-navigator/issues/9). +- Added a button to remove all annotations on the currently selected techniques. See issue [#12](https://github.com/mitre-attack/attack-navigator/issues/12). +- Added a new "super compact" view option, which removes all technique text in order to fit as much content on the screen as possible. See issue [#11](https://github.com/mitre-attack/attack-navigator/issues/11). + +## Improvements + +- Depreciated and revoked objects in the STIX content are no longer displayed in the Navigator. See issue [#30](https://github.com/mitre-attack/attack-navigator/issues/30). +- Uploading a layer with of a different version number than expected warns the user that some annotations or configurations may not be restored. See issue [#27](https://github.com/mitre-attack/attack-navigator/issues/27). +- A dockerfile was added to the repo, and documentation on using the Navigator with Docker was added to the readme. See issue [#15](https://github.com/mitre-attack/attack-navigator/issues/15). +- CTRL (windows) and CMD (mac) can now be used to select multiple techniques in addition to shift (both platforms). See issue [#18](https://github.com/mitre-attack/attack-navigator/issues/18). +- Gradient colors are now fully customizable, using a color picker instead of a dropdown menu. + +## Fixes + +- Tooltips resize to fit long comments. If the comment exceeds a certain length the overflow is cut and denoted by ellipses (...). See issue [#23](https://github.com/mitre-attack/attack-navigator/issues/23). +- Tooltips, dropdown menus and context menus now align themselves automatically to avoid going off the edge of the page. +- Tab performance is now more independent of the number and content of other tabs. +- Uploaded layer files now typecheck their fields to make sure everything is formatted properly. Fields which do not meet the layer format specification are set to their default value. + +## Layer File Format Changes + +Layer file format updated to version 2.0. Older layer versions can still be loaded by the Navigator, however some fields may no longer be supported. See [layer format v2.0](layers/spec/v2.0/layerformat.md) for the full specification. + +- Replaced the `viewFullTable` field (boolean) with the `viewMode` field (number) in order to support the "super compact" view option. See issue [#11](https://github.com/mitre-attack/attack-navigator/issues/11). + - If `viewFullTable` is present in a layer file uploaded to the v2.0 Navigator it will be ignored. + - To upgrade a layer without losing the view mode, see the following mappings: + - `viewFullTable: true` becomes `viewMode: 0`. + - `viewFullTable: false` becomes `viewMode: 1`. +- Added `legendItems` field, an array of legendItem objects (also specified in document). This field can be used to specify the contents of the legend. See issue [#24](https://github.com/mitre-attack/attack-navigator/issues/24). +- Added `showTacticRowBackground` field (boolean), which if true sets the layer to display a background color for the tactic row. See issue [#32](https://github.com/mitre-attack/attack-navigator/issues/32). +- Added `tacticRowBackground` field (string), which holds the hex color value to show as the background to the tactic row if `showTacticRowBackground` is true. See issue [#32](https://github.com/mitre-attack/attack-navigator/issues/32). +- Added `selectTechniquesAcrossTactics` field (boolean), which if false allows the user to select instances of techniques which are found in multiple tactics individually. See issue [#8](https://github.com/mitre-attack/attack-navigator/issues/8). +- Added `tactic` field (string) to the Technique object. If this field is present, the annotations will only be applied to the instance of the technique in the specified tactic. If this field is not present, the annotations will be applied to all instances of the technique. See issue [#8](https://github.com/mitre-attack/attack-navigator/issues/8). diff --git a/site/mitre/CONTRIBUTING.md b/site/mitre/CONTRIBUTING.md new file mode 100644 index 0000000..b9d95a3 --- /dev/null +++ b/site/mitre/CONTRIBUTING.md @@ -0,0 +1,37 @@ +# How to contribute + +Thanks for contributing to `attack-navigator`! + +You are welcome to comment on issues, open new issues, and open pull requests. + +Pull requests should target the **develop** branch of the repository. + +Also, if you contribute any source code, we need you to agree to the following Developer's Certificate of Origin below. + +## Developer's Certificate of Origin v1.1 + +```text +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. +``` diff --git a/site/mitre/MaterialIcons-Regular.ttf b/site/mitre/MaterialIcons-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..48c69b5be09c2f5d98cc3099b1bbd795bfddb7eb GIT binary patch literal 228896 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 Kr+vezPUrt*c&HZu literal 0 HcmV?d00001 diff --git a/site/mitre/README.md b/site/mitre/README.md new file mode 100644 index 0000000..3677869 --- /dev/null +++ b/site/mitre/README.md @@ -0,0 +1,331 @@ +# ATT&CK® Navigator + +The ATT&CK Navigator is designed to provide basic navigation and annotation of [ATT&CK](https://attack.mitre.org) matrices, something that people are already doing today in tools like Excel. We've designed it to be simple and generic - you can use the Navigator to visualize your defensive coverage, your red/blue team planning, the frequency of detected techniques or anything else you want to do. The Navigator doesn't care - it just allows you to manipulate the cells in the matrix (color coding, adding a comment, assigning a numerical value, etc.). We thought having a simple tool that everyone could use to visualize the matrix would help make it easy to use ATT&CK. + +The principal feature of the Navigator is the ability for users to define layers - custom views of the ATT&CK knowledge base - e.g. showing just those techniques for a particular platform or highlighting techniques a specific adversary has been known to use. Layers can be created interactively within the Navigator or generated programmatically and then visualized via the Navigator. + +## Usage + +The ATT&CK Navigator is hosted live via GitHub Pages. [You can find a live instance of the current version of the Navigator here](https://mitre-attack.github.io/attack-navigator). You can read more about how to use the application itself in the [USAGE](/USAGE.md) document (which is mirrored in the in-app help page). + +Version 4.0+ of the ATT&CK Navigator supports all ATT&CK domains in a single instance of the application instead of requiring a different instance for each domain. Additionally, older versions of ATT&CK can be loaded in the application. The ATT&CK Navigator supports ATT&CK versions 4+. Older versions do not work in the application since their data model is too outdated. + +Previous versions of the Navigator application are also hosted via GitHub Pages for users who want a more classic experience: +| ATT&CK Version | Navigator Version | Domains | | +|:---------------|:------------------|:--------|-| +| [ATT&CK v7.2](https://attack.mitre.org/resources/versions/) | [Navigator v3.1](https://github.com/mitre-attack/attack-navigator/releases/tag/v3.1) | [Enterprise](https://mitre-attack.github.io/attack-navigator/v3/enterprise/) | [Mobile](https://mitre-attack.github.io/attack-navigator/v3/mobile/) | +| [ATT&CK v6.3](https://attack.mitre.org/resources/versions/) | [Navigator v2.3.2](https://github.com/mitre-attack/attack-navigator/releases/tag/v2.3.2) | [Enterprise](https://mitre-attack.github.io/attack-navigator/v2/enterprise/) | [Mobile](https://mitre-attack.github.io/attack-navigator/v2/mobile/) | + +Please see [Install and Run](#Install-and-Run) for information on how to get the ATT&CK Navigator set up locally. + +**Important Note:** Layer files uploaded when visiting our Navigator instance hosted on GitHub Pages are **NOT** being stored on the server side, as the Navigator is a client-side only application. However, we still recommend installing and running your own instance of the ATT&CK Navigator if your layer files contain any sensitive content. + +Use our [GitHub Issue Tracker](https://github.com/mitre-attack/attack-navigator/issues) to let us know of any bugs or others issues that you encounter. We also encourage pull requests if you've extended the Navigator in a cool way and want to share back to the community! + +*See [CONTRIBUTING.md](https://github.com/mitre-attack/attack-navigator/blob/master/CONTRIBUTING.md) for more information on making contributions to the ATT&CK Navigator.* + +## Requirements + +* [Node.js v18](https://nodejs.org) +* [AngularCLI v17](https://cli.angular.io) + +## Supported Browsers + +* Chrome +* Firefox +* Internet Explorer 11[1] +* Edge +* Opera +* Safari[2] + +**[1]** There is a recorded issue with the SVG export feature on Internet Explorer. Because of a [missing functionality on SVGElements](https://developer.mozilla.org/en-US/docs/Web/API/ParentNode/children) in that browser, text will not be properly vertically centered in SVGs exported in that browser. We recommend switching to a more modern browser for optimal results. + +**[2]** ATT&CK Navigator only supports Safari versions 14 and above because older versions of the browser can exhibit an unfixable freeze when selecting a layer tab. Users on unsupported versions of the browser will be warned of this possibility when opening the application. + +## Install and Run + +### First time + +1. Navigate to the **nav-app** directory +2. Run `npm install` + +### Serve application on local machine + +1. Run `ng serve` within the **nav-app** directory +2. Navigate to `localhost:4200` in browser + +### Compile for use elsewhere + +1. Run `ng build` within the **nav-app** directory +2. Copy files from `nav-app/dist/` directory + +_Note: `ng build --configuration production` does not currently work for ATT&CK Navigator without additional flags. To build the production environment instead use `ng build --configuration production --aot=false --build-optimizer=false`._ + +### Running the Navigator offline + +1. Install the Navigator as per instructions above. +2. Follow instructions under [loading content from local files](#Loading-content-from-local-files) to configure the Navigator to populate the matrix without an internet connection. The latest MITRE ATT&CK data files can be found here: + - [Enterprise ATT&CK](https://github.com/mitre-attack/attack-stix-data/raw/master/enterprise-attack/enterprise-attack.json). + - [Mobile ATT&CK](https://github.com/mitre-attack/attack-stix-data/raw/master/mobile-attack/mobile-attack.json). + - [ICS ATT&CK](https://github.com/mitre-attack/attack-stix-data/raw/master/ics-attack/ics-attack.json). + +## Documentation + +When viewing the Navigator in a browser, click on the **?** icon in the upper right corner to view the in-app documentation. + +## Layers Folder + +The **layers** folder contains specifications for the layer format as well as example layers and a script demonstrating programatic layer generation. We will continue to add content to this repository as new scripts are implemented. Also, feel free to create pull requests if you want to add new capabilities here! + +More information on how layers are used and developed can be found in the ATT&CK Navigator documentation that can be viewed by clicking **?** when running the app in a browser, and in the README in the **layers** folder. + +## Adding Custom Context Menu Options + +To create custom options to the **ATT&CK® Navigator** context menu using data in the Navigator, objects must be added to the array labeled `custom_context_menu_options` in `nav-app/src/assets/config.json`. Each object must have a property **label**, which is the text displayed in the context menu, and a property **url**, which is where the user is navigated. + +To utilize data on right-clicked technique in the url, parameters surrounded by double curly brackets can be added to the string. For example: using `http://www.someurl.com/{{technique_attackID}}}` as the url in the custom option would lead to `http://www.someurl.com/T1098`, if the right-clicked technique's attackID was T1098. + +The following data substitutions will be parsed: + +* `{{technique_attackID}}` will be substituted with the ATT&CK ID of the technique, e.g `T1234` +* `{{technique_stixID}}` will be substituted with the STIX ID of the technique, e.g `attack-pattern--12345678-1234-1234-1234-123456789123` +* `{{technique_name}}` will be substituted with the technique name in lower case and with spaces replaced with hyphens, e.g `example-technique-name` +* `{{tactic_attackID}}` will be substituted with the ATT&CK ID of the tactic, e.g `TA1234` +* `{{tactic_stixID}}` will be substituted with the STIX ID of the tactic, e.g `x-mitre-tactic--12345678-1234-1234-1234-123456789123` +* `{{tactic_name}}` will be substituted with the tactic name in lower case and with spaces replaced with hyphens, e.g `example-tactic`. This is also equivalent to the x_mitre_shortname property of the tactic. + +Optionally, a `subtechnique_url` field may be added to a custom option. This field will be parsed when the option is used on a sub-technique instead of the normal URL, which will be used for techniques. If `subtechnique_url` is not used, the `technique_` substitutions defined above will refer to the sub-technique object itself. + +The following substitutions will be parsed for sub-techniques: + +* `{{parent_technique_attackID}}` will be substituted with the ATT&CK ID of the sub-technique's parent, e.g `T1234` +* `{{parent_technique_stixID}}` will be substituted with the STIX ID of the sub-technique's parent, e.g `attack-pattern--12345678-1234-1234-1234-123456789123` +* `{{parent_technique_name}}` will be substituted with the name of the sub-technique's parent in lower case and with spaces replaced with hyphens, e.g `example-technique-name` +* `{{subtechnique_attackID}}` will be substituted with the ATT&CK ID of the sub-technique, e.g `T1234.001` +* `{{subtechnique_attackID_suffix}}` will be substituted with the portion of the ATT&CK ID of the sub-technique after the delimiting period, e.g `001` +* `{{subtechnique_stixID}}` will be substituted with the STIX ID of the sub-technique, e.g `attack-pattern--98765432-9876-9876-9876-987654321987` +* `{{subtechnique_name}}` will be substituted with the sub-technique name in lower case and with spaces replaced with hyphens, e.g `example-subtechnique-name` +* `{{tactic_attackID}}` will be substituted with the ATT&CK ID of the tactic, e.g `TA1234` +* `{{tactic_stixID}}` will be substituted with the STIX ID of the tactic, e.g `x-mitre-tactic--12345678-1234-1234-1234-123456789123` +* `{{tactic_name}}` will be substituted with the tactic name in lower case and with spaces replaced with hyphens, e.g `example-tactic`. This is also equivalent to the x_mitre_shortname property of the tactic. + +Example custom context menu objects: + +```json +{ + "label": "view technique on ATT&CK website", + "url": "https://attack.mitre.org/techniques/{{technique_attackID}}", + "subtechnique_url": "https://attack.mitre.org/techniques/{{parent_technique_attackID}}/{{subtechnique_attackID_suffix}}" +} +``` + +```json +{ + "label": "view tactic on ATT&CK website", + "url": "https://attack.mitre.org/tactics/{{tactic_attackID}}" +} +``` + +## Methods for loading content + +### Loading content from a Collection Index + +By default, the Navigator loads content from the ATT&CK Collection Index hosted on the [ATT&CK STIX Data repository](#related-mitre-work). More information about Collection Indexes can be found [here](https://github.com/mitre-attack/attack-stix-data?tab=readme-ov-file#collection-indexes). + +1. Modify the `config.json` file located in the `src/assets` directory. +2. Set the `collection_index_url` property to the URL of your Collection Index (for example, `"collection_index_url": "https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/index.json"`) + +*Note: For the Navigator to load successfully, either the `collection_index_url` property, the `versions` property, or both must be defined. If both the `collection_index_url` and `versions` properties are defined, the Navigator will display the union of the versions under the "More Options" dropdown in the "Create New Layer" interface. If neither are defined, an alert will be triggered indicating that the Navigator failed to load.* + +### Loading content from a TAXII server + +Both TAXII 2.0 and TAXII 2.1 are currently supported. Support for TAXII 2.0 will be deprecated in December 2024. More information about the TAXII 2.1 Server can be found [here](https://github.com/mitre-attack/attack-workbench-taxii-server/tree/main). + +1. Modify the `config.json` file located in the `src/assets` directory. +2. In the `versions` section, set the `enabled` property to `true`. +3. Define the `taxii_url` property in the list of domains, in place of the domain `data` property, and set its value to the TAXII server URL. +4. Define the `taxii_collection` property and set its value to the collection UUID as determined by the TAXII server. + +#### Example loading content from a TAXII 2.0 server: + +```json +"versions": { + "enabled": true, + "entries": [ + { + "name": "Enterprise TAXII 2.0 Data", + "version": "14", + "domains": [ + { + "name": "Enterprise", + "taxii_url": "https://cti-taxii.mitre.org/", + "taxii_collection": "95ecc380-afe9-11e4-9b6c-751b66dd541e" + } + ] + } + ] +}, +``` + +#### Example loading content from a TAXII 2.1 server: + +```json +"versions": { + "enabled": true, + "entries": [ + { + "name": "Enterprise TAXII 2.1 Data", + "version": "14", + "domains": [ + { + "name": "Enterprise", + "taxii_url": "https://attack-taxii.mitre.org/", + "taxii_collection": "x-mitre-collection--1f5f1533-f617-4ca8-9ab4-6a02367fa019" + } + ] + } + ] +}, +``` + +### Loading content from local files + +Navigator can be populated using files that consist of bundles of STIX objects, similar to the format found in [this example](https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json). Both STIX 2.0 and STIX 2.1 bundles are supported. + +1. Place the STIX bundle(s) in the `src/assets` directory. This allows the server hosting the Navigator to also host the data. +2. Modify the `config.json` file located in the `src/assets` directory. +3. In the `versions` section, set the `enabled` property to `true`. +4. Update the URL specified in the `data` array to the path to the STIX bundle (for example, `assets/enterprise-attack.json`). Multiple paths may be added to the `data` array to display multiple STIX bundles in a single instance. + +#### Example loading content from local files: + +```json +"versions": { + "enabled": true, + "entries": [ + { + "name": "Local Enterprise STIX Data", + "version": "14", + "domains": [ + { + "name": "Enterprise", + "identifier": "enterprise-attack", + "data": ["assets/enterprise-attack.json"] + } + ] + } + ] +}, +``` + +## Running the Docker File + +1. Navigate to the directory where you checked out the git repository +2. Run `docker build -t yourcustomname .` +3. Run `docker run -p 4200:4200 yourcustomname` +4. Navigate to `localhost:4200` in browser + +## Loading Default Layers Upon Initialization + +The Navigator can be configured so as to load a set of layers upon initialization. These layers can be from the web and/or from local files. +Local files to load should be placed in the `nav-app/src/assets/` directory. + +1. Set the `enabled` property in `default_layers` in `src/assets/config.json` to `true` +2. Add the paths to your desired default layers to the `urls` array in `default_layers`. For example, + + ```JSON + "default_layers": { + "enabled": true, + "urls": [ + "assets/example.json", + "https://raw.githubusercontent.com/mitre-attack/attack-navigator/master/layers/samples/Bear_APT.json" + ] + } + ``` + + would load `example.json` from the local assets directory, and `Bear_APT.json` from this repo's sample layer folder on Github. +3. Load/reload the Navigator + +Default layers from the web can also be set using a query string in the Navigator URL. Refer to the in-application help page section "Customizing the Navigator" for more details. + +Users will not be prompted to upgrade default layers to the current version of ATT&CK if they are outdated. + +## Enabling Banner in Navigator + +The `banner` setting in `nav-app/src/assets/config.json` by default is an empty string `"""` (and not visible), and can be set to whatever content you wish to display inside a banner at the top of the Navigator webpage. The banner supports HTML and hyperlinks in the content. + +## Disabling Navigator Features + +The `features` array in `nav-app/src/assets/config.json` lists Navigator features you may want to disable. Setting the `enabled` field on a feature in the configuration file will hide all control +elements related to that feature. + +However, if a layer is uploaded with an annotation or configuration +relating to that feature it will not be hidden. For example, if `comments` are disabled the +ability to add a new comment annotation will be removed, however if a layer is uploaded with +comments present they will still be displayed in tooltips and and marked with an underline. + +Features can also be disabled using the _create customized Navigator_ feature. Refer to the in-application help page section "Customizing the Navigator" for more details. + +## Embedding the Navigator in a Webpage + +If you want to embed the Navigator in a webpage, use an iframe: + +```HTML + +``` + +If you want to embed a version of the Navigator with specific features removed (e.g tabs, adding annotations), or with a default layer, we recommend using the _create customized Navigator_ feature. We highly recommend disabling the "leave site dialog" via this means when embedding the Navigator since otherwise you will be warned whenever you try to leave the embedding page. Refer to the in-application help page section "Customizing the Navigator" for more details. + +The following is an example iframe which embeds our [*Bear APTs](layers/samples/Bear_APT.json) layer with tabs and the ability to add annotations removed: + +```HTML + +``` + +## Related MITRE Work + +### CTI + +[Cyber Threat Intelligence repository](https://github.com/mitre/cti) of the ATT&CK catalog expressed in STIX 2.0 JSON. + +### ATT&CK STIX Data + +[ATT&CK STIX Data repository](https://github.com/mitre-attack/attack-stix-data) of the ATT&CK catalog expressed in STIX 2.1 JSON. + +### ATT&CK + +ATT&CK® is a curated knowledge base and model for cyber adversary behavior, reflecting the various phases of an adversary’s lifecycle and the platforms they are known to target. ATT&CK is useful for understanding security risk against known adversary behavior, for planning security improvements, and verifying defenses work as expected. + + + +### STIX + +Structured Threat Information Expression (STIX™) is a language and serialization format used to exchange cyber threat intelligence (CTI). + +STIX enables organizations to share CTI with one another in a consistent and machine readable manner, allowing security communities to better understand what computer-based attacks they are most likely to see and to anticipate and/or respond to those attacks faster and more effectively. + +STIX is designed to improve many different capabilities, such as collaborative threat analysis, automated threat exchange, automated detection and response, and more. + + + +## Notice + +Copyright 2024 The MITRE Corporation + +Approved for Public Release; Distribution Unlimited. Case Number 18-0128. + +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 + + + +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. + +This project makes use of ATT&CK® + +[ATT&CK® Terms of Use](https://attack.mitre.org/resources/terms-of-use/) diff --git a/site/mitre/USAGE.md b/site/mitre/USAGE.md new file mode 100644 index 0000000..de26c58 --- /dev/null +++ b/site/mitre/USAGE.md @@ -0,0 +1,654 @@ +# MITRE ATT&CK® Navigator + +The ATT&CK Navigator is designed to provide basic navigation and annotation of ATT&CK matrices, something that people +are already doing today in tools like Excel. We've designed it to be simple and generic - you can use the Navigator to +visualize your defensive coverage, your red/blue team planning, the frequency of detected techniques or anything else +you want to do. The Navigator doesn't care - it just allows you to manipulate the cells in the matrix (color coding, +adding a comment, assigning a numerical value, etc.). We thought having a simple tool that everyone could use to +visualize the matrix would help make it easy to use ATT&CK. + +The principal feature of the Navigator is the ability for users to define layers - custom views of the ATT&CK knowledge +base - e.g. showing just those techniques for a particular platform or highlighting techniques a specific adversary has +been known to use. Layers can be created interactively within the Navigator or generated programmatically and then +visualized via the Navigator. + +Bug reports and feature requests can be submitted to +our GitHub Issue Tracker. The source code for the +ATT&CK Navigator can be retrieved from our GitHub +repository. + + + +# Layers + +A layer constitutes a view of the tactics and techniques matrix for a specific technology domain. In more recent +versions, the Navigator can manipulate the Enterprise, Mobile, or ICS ATT&CK technology domain knowledge bases, as +well as custom ATT&CK collections or STIX bundles. Within a technology domain, the Navigator allows you to filter +your view of the matrix in a variety of ways, displaying the tactics and techniques that are important to you. + +You can view the definition of any technique in the visible matrix by right-clicking on the technique and selecting +"view technique" in the pop-up menu. A new browser tab will be opened displaying the definition of the technique. In this +way the Navigator allows you to explore a given ATT&CK matrix and access the definitions of the techniques. + +Beyond the filters, layers also provide a means to customize your view of the matrix. To that end, you can +color, +hide, +comment, and assign +numeric scores, +links, and +metadata +to techniques to aid in analysis of threats and your defenses against those threats. As stated earlier, the Navigator is +designed to be simple, allowing you to assign whatever meaning you want to the color-codings, scores, and comments. This +way the Navigator can support whatever you want to do without requiring changes to the Navigator code itself. + +Each layer created is independent of other layers. However, layers can be +combined in ways to support analysis, or +saved locally. Layer files are saved in easy to parse and easy to generate JSON +file so that ATT&CK data can be used in other applications, analyzed beyond the capability of the ATT&CK Navigator, and +generated by tools for import into the Navigator. + +*See the latest Layer File Format Definition for the full specification.* + +## Creating New Layers + +To create a new layer, open a new tab and click the "Create New Layer" dropdown. The quick access buttons will create a +layer with the current version of ATT&CK. Past versions of ATT&CK that are compatible with the Navigator are accessible in the +"More Options" dropdown. This interface allows you to create a new layer from one of the following options: +- Specifying the desired ATT&CK version and domain for the new layer; or +- Specifying the URL of a custom collection or STIX bundle for the new layer. For example, the URL of a bundle hosted on GitHub: +https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json. Note: the collection or +STIX bundle must have a Matrix object in order to display techniques in the Navigator. + +For performance reasons, the Navigator currently imposes a limit of ten (10) active layers at any given point in +time. + +## Saving and Loading Layers + +Layers can be saved by clicking the "save layer" +button (). +This will open a dropdown menu where you can choose how to save the layer. +Layers can be exported as json. You can either export a single layer or all open layers. + +To export a single layer click on the "download single layer as json" button (). + +To export all open layers click on the "download all layers as json" button (). + +Once the save option is selected, a dialog to save a layer configuration file to your local computer will open. This contains the configuration for the techniques that have been customized +(commented, colored, disabled, or assigned a score, links, or metadata) as well as the scoring gradient setup, filter selection, +layer name, layer description, view configuration. + +Saved layer configuration files can be opened in the ATT&CK Navigator to restore a layer or layers you've worked on previously. To +do so, open a new tab and open the "Open Existing Layer" panel. Then click "Upload from local", and select your saved +configuration file. Doing so will restore your saved layer or layers to the ATT&CK Navigator. Layers generated from a custom collection +or STIX bundle will be restored from the URL the layer was created with. This interface also has a "load from +URL" input allowing you to open a layer json from a remote source. + +## Upgrading a Layer to the Current Version + +The layer upgrade interface allows users to upgrade an ATT&CK Navigator layer created on a previous version of ATT&CK to the +current version of the dataset. With this interface, users can step through each change in the dataset of techniques: + +- The user can view techniques which have been added to the dataset since the layer was created and annotate them as necessary. +- The user can see whether the techniques they had previously annotated have changed and adjust the annotations accordingly. +- The user can determine if any annotated techniques have been removed or replaced by new techniques and in the latter case copy +annotations to the replacing technique(s). +- The user can also verify what techniques haven't changed since the layer was created. + +### Mapping Annotations + +For annotated techniques which have changed since the layer was created, you may want to update the set of annotations to account +for changes to scope or content. Each technique in the interface lists its previous and current state, with links to +the ATT&CK Website for both versions of the technique to enable easy review. In steps with techniques you +have previously annotated, you can enable the "show annotated techniques only" filter to view only those techniques which have annotations. + +You can copy annotations from the previous version of the technique to the current one, making adjustments if necessary. There are +two approaches to copying annotations from the previous version: + +- For techniques with tactics that map one-to-one between the two versions, annotations can be copied by clicking the ">" +button next to the tactic. This will copy any existing annotations on the tactic to the technique under the same tactic in +the current version. +- For techniques with tactics that have changed between the two versions, annotations can be copied by dragging & dropping the +annotated tactic from the previous version to the tactic(s) in the current version. + +Techniques can be marked as reviewed under their respective panels to visually indicate that they have been reviewed. The "reviewed +X/Y techniques" displayed underneath the techniques list can be used to determine if you missed any techniques. The numerator reflects +the number of techniques you have marked as "reviewed" and the denominator denotes the total number of techniques shown according +to your configuration (for example, if you have enabled the "show annotated techniques only" filter, only the number of techniques +which are annotated are counted in this total). + +You can view and verify the status of the layer upgrade at the end of the workflow to ensure you have created or adjusted all annotations +as desired. A status is displayed next to each section name to indicate either the number of techniques you have reviewed in the section, +if you have skipped the section, or if there are no techniques to review in the section. Once you have finished upgrading the layer, you +can click the "done" button to close the sidebar. + +Note: You will not be able to return to the layer upgrade interface after the sidebar is closed. + +## Creating Layers from Other Layers + +Layers can be created which inherit properties from other layers. Several fields exist which can be used to choose which +layers to inherit properties from: + +- Domain: choose the domain and version for the new layer. Layers can only inherit properties from other layers + of the same domain and version. + +- Score Expression: Technique scores in the created layer are initialized to + the result of this expression. This field should take the form of an equation or constant, using variables for + layers.Layer variables are shown in yellow on tabs when the "create layer from other layers" panel is opened: + + + Each technique's score is created independently using the score expression. For example, with a score expression + of a+b, some technique t in the output layer would be the sum of ta and + t b. + + Expressions can also be comparative, for example a>b will create a layer with a score of 1 + whereever b and 0 whereever a<=b. Such boolean expressions can be extended using + and, or, xor and not. You can also use ternary expressions such + as a > b ? 25 : 10. See this page + for a full list of operators. + + Some example score expressions: + - (a+b)/2 (average two layers) + - a+b+c + - a*(b+c) + - 100-a (reverse the scoring of a, assuming a is on a 0-100 scale) + - (a>b) and (a>=75) + +- Gradient: choose which layer to inherit scoring gradient from. +- Coloring: choose which layer to inherit manually assigned technique + colors. +- Comments: choose which layer to inherit + technique comments from. +- Links: choose which layer to inherit assigned links from. +- Metadata: choose which layer to inherit technique metadata from. +- States: choose which layer to inherit technique + enabled/disabled states from. +- Filters: choose which layer to inherit layer filter configuration from. +- Legend: choose which layer to inherit legend items from. + +Tactic-spanning Techniques are evaluated individually: if a technique is annotated differently in two tactics, the +output layers' techniques will honor this difference. + +Tip: Score expressions don't need to use variables! You can use this to create a new layer with a constant score +for each technique. For example, if you wanted a new layer where all techniques are scored 50, you could simply type 50 +into the score expression input. + +# Layer Controls + +## ![Layer Information](nav-app/src/assets/icons/ic_description_black_24px.svg)Layer Information + +The layer name and description can be edited in the layer information dropdown. The layer name can also be edited where +it appears in the tab title. Additionally, the layer information panel allows the user to add metadata and assign links +to the layer. Metadata can be useful for supporting other applications that use the layer format, or for attaching additional +descriptive fields to the layer. Links can be useful for providing additional context from other websites that are relevant +to the layer. + +## Sorting + +There are four modes of sorting. Clicking the sorting button will toggle between the modes. + +- The table will sort techniques + alphabetically by name in ascending order. +- The table will sort techniques + alphabetically by name in descending order. +- The table will sort techniques by + their score in ascending order. Techniques with no score are treated as if their score is 0. +- The table will sort techniques by + their score in descending order. Techniques with no score are treated as if their score is 0. + +## ![Filtering](nav-app/src/assets/icons/ic_filter_list_black_24px.svg)Filtering + +The list of techniques and tactics can be filtered in the filtering menu. Filters are additive - the displayed set of +techniques is the logical or of the techniques of the filters selected. + +### Platform Filter + +The platform filter allows the user to control which techniques are included in a layer based on whether a particular +technique applies to a particular technology platform. Technology platforms are tied to the specific technology domain +you are visualizing. For the Enterprise technology domain, the defined platforms are:PRE, Windows, Linux, macOS, +Network, AWS, GCP, Azure, Azure AD, Office 365, and SaaS. For the Mobile technology domain, the defined platforms are: +Android and iOS. For the ICS technology domain, the defined platforms are Windows, Control Server, Data Historian, " +Engineering Workstation", Field Controller/RTU/PLC/IED, Human-Machine Interface, Input/Output Server, Safety +Instrumented System/Protection Relay. + +Each technique in an ATT&CK matrix is tied to one or more platforms. In the Navigator, if you wanted to see only those +techniques in Enterprise ATT&CK which applied to the Linux platform, you would deselect "Windows" and "macOS" under the +platform filter. If later you decided to also include techniques known to apply to macOS platforms, you could select " +macOS" as well and those techniques would be added to the visible layer. + +Tip: Techniques can also be hidden from your view by using the hide +disabled techniques button. Couple this with the multiselect +interface to hide techniques which are contained in specific threat or software groupings. + +## ![Color Setup](nav-app/src/assets/icons/ic_palette_black_24px.svg)Color Setup + +### Tactic Row Background + +The background color of the tactic row can be set in the tactic row background section of the color setup menu. The +color will only be displayed if the "show" checkbox is selected. The tactic row background will not be shown when in the +mini view. + +### Scoring Gradient + +Techniques which are assigned a score will be colored according to a gradient defined in the scoring gradient section in +the color setup menu. Technique scores are mapped to a color scaled linearly between the "low value" and "high value" +inputs. For example, on a red-green scale, if "low value" were set to 0 and +"high value" were set to 50, a score of 25 would fall on yellow -- exactly halfway between red and green. Scores below +the low value are colored as if they have the low value, and scores above the high value are colored as if they have the +high value. + +Several preset gradients are present within the preset dropdown. If no preset matches your desired gradient, you can +create your own by adding and removing colors using the interface. + +Tip: If your scores are binary (0 or 1), consider setting the low value of 0 to transparent and the high of 1 to some +other color to only color the techniques which have the value of 1. + +## ![Hiding Disabled Techniques](nav-app/src/assets/icons/ic_visibility_off_black_24px.svg)Hiding Disabled Techniques + +Techniques that are disabled can be hidden by toggling the "hide disabled +techniques" button. Hidden techniques are still present in the data when saved and can still be annotated, but won't be +visible in the view. + +Tip: This button has powerful synergy with the +multiselect interface. Use the multiselect interface to select +techniques which match your criteria,disable them, and then turn on hiding disabled techniques to remove entire groups +of techniques from your view. + +## Showing or Hiding Sub-techniques + +Sub-techniques in the view are nested under their parent technique and are hidden by default. + +- expand iconAll sub-techniques can be shown by + clicking the " + expand sub-techniques" button. +- expand annotated iconAll annotated + sub-techniques can be shown by clicking the "expand annotated sub-techniques" button. +- collapse iconAll sub-techniques can be hidden by + clicking the "collapse sub-techniques" button. + + Tip: Sub-techniques can also be shown or hidden on each individual technique when in + the side layout or + flat layout by clicking the gray sidebar on the technique cell. + +## ![Configuring the Layout](nav-app/src/assets/icons/ic_view_large_black_24px.svg)Configuring the Layout + +The ATT&CK Navigator has controls for how the ATT&CK Matrices are displayed. Access controls to change layout via the " +Matrix Configuration" dropdown menu. + +### Side Layout + +The side layout displays sub-techniques adjacent to their parent techniques. Techniques with sub-techniques are denoted +by the presence of a right-positioned sidebar which can be clicked to show sub-techniques. Sub-techniques are +differentiated from techniques by position in the tactic column. + +### Flat Layout + +The flat layout displays subtechniques in-line with the techniques. Techniques with subtechniques are denoted by the +presence of a left-positioned sidebar which can be clicked to show subtechniques. Subtechniques are differentiated from +techniques by indentation. + +### Mini Layout + +The mini layout is designed to fit more techniques on the screen simultaneously by reducing their size. To do so all +text is removed and techniques are visualized as squares under the tactic. Selecting this layout disables +the "show IDs" and "show Names" controls. Tactic headers are visualized as black +cells above the columns. Technique and tactic names are displayed as tooltips when you hover over a technique or +tactic-header cell. Techniques and their sub-techniques are grouped inside of an outlined box. The technique is the +dark-outlined first cell of the group, and the rest of the cells of the group are the sub-techniques. Techniques without +sub-techniques are displayed without a grouping box, and may appear inline with other sub-techniques-less +techniques. Disabled techniques are denoted with an "x" symbol. Techniques with comments are denoted with an "i" symbol. + +### Showing IDs and Names + +In the side and flat layouts, you can change what is shown inside of the technique cells. Enabling "show names" (enabled +by default) will show technique and tactic names on each cell of the matrix. Enabling "show IDs" (disabled by default) +will show ATT&CK IDs (e.g "T1000" for techniques, or "TA1000" for tactics) on each cell of the matrix. These controls can +be toggled independently and turned off entirely to remove cell labels entirely. The mini layout forces both of these +controls to be disabled. + +## Aggregate Scores + +Aggregate scores will combine the scores of a technique and all of its sub-techniques, and can be calculated using +either the average, max, min or sum function. They are only calculated on techniques with sub-techniques. The display of +aggregate scores in the matrix view and the score calculations can be customized via the "Matrix Configuration" dropdown +menu. + +### Showing or Hiding Aggregate Scores + +Aggregate scores in the view are displayed in the tooltip when hovering over a technique, and are hidden by default. +When this is enabled, the technique's background color will be calculated using the aggregate score by default. + +### Counting Unscored Techniques + +By default, techniques which are unscored are not included in aggregate score computations. Enabling +"count unscored techniques as 0" will make unscored techniques count as if their scores were 0 when computing an +aggregate score. + +### Choosing an Aggregate Function + +There are 4 available functions to calculate the aggregate score: average, min, max, and sum. + +- Average: + - if including unscored techniques, will add up the scores of a technique and all of its sub-techniques, and divide + by all; if not including unscored techniques, will add up the onlythe nonzero scores of a technique and its + sub-techniques, and divide by the count of non-zeroscores. + +- Min: + - will take the minimum of the scores of a technique and all of its sub-techniques. + +- Max: + - will take the maximum of the scores of a technique and all of its sub-techniques. + +- Sum: + - will add the scores of a technique and all of its sub-techniques. + +## Legend Bar + +The legend helps associate meanings with colors displayed by customized techniques in the ATT&CK Navigator. To open the +legend, click on the bar labeled "legend" in the bottom-right corner of the screen. Click on the same bar to close the +legend. To add an item to the legend, click the "Add Item"button. To clear all items in the legend, click "Clear". + +An item's color can be changed by either clicking in the color field and typing a hex color value, or by +clicking in the field and choosing a color from the color picker. Click and type in the text field to change the item's +label. To remove an item, click on the () button on the +right side. Legend items are saved to the layer file and will be loaded when a layer with saved legend items is loaded. + +# Technique Controls + +Techniques in the layer can be annotated. The technique controls on the menubar are only enabled when one or more +techniques are selected. If multiple techniques are selected, they will all be +annotated simultaneously. + +## ![Disabling Techniques](nav-app/src/assets/icons/ic_texture_black_24px.svg)Disabling Techniques + +Clicking the "toggle state" button toggles selected techniques between an enabled and disabled state. In the disabled +state, the technique text is greyed out and no colors (assigned manually or via +score) will be displayed. + +The hide disabled techniques button can be used to hide disabled techniques +from the view. + +## ![Assigning Manual Colors](nav-app/src/assets/icons/ic_format_color_fill_black_24px.svg)Assigning Manual Colors + +Techniques can be assigned colors manually. Manually assigned colors supersede colors created by score. To remove a +manually assigned color, select the "no color"box at the top of the interface. + +## ![Scoring Techniques](nav-app/src/assets/icons/ic_insert_chart_black_24px.svg)Scoring Techniques + +A score is a numeric value assigned to a technique. The meaning or interpretation of scores is completely up to the user +user - the Navigator simply visualizes the matrix based on any scores you have assigned. Some possible uses of scores +include: + +- Assigning a score to techniques based on whether a given adversary group has been observed to use that technique. +- Assigning a score to techniques based on your organization's ability to detect, prevent and/or mitigate the use of a + particular technique. +- Assigning a score to those techniques that a red-team has successfully employed during an exercise. + +By default, techniques are "unscored" meaning that no score has been assigned to the technique. Note that "unscored" and +a score of zero are not the same, specifically with respect to automatically assigned colors. Scores show up in +technique tooltips if a score has been assigned. To change a technique with a numeric score to unscored, select the +technique and delete the score value in the score control. The technique will revert to unscored. + +Techniques are automatically assigned a color according to its score. This color is determined according to +the scoring gradient setup interface. Colors +assigned manually supersede the score-generated color. It is a good idea to +assign techniques scores inside of a predetermined range, such as 0-1 or 0-100. Set the "high value" and "low value" +inputs in the scoring gradient setup interface to this range to make sure that the color +for the score is properly mapped to the gradient. Techniques that are unscored are not assigned a color based on the +gradient - they are displayed with an uncolored background in the matrix. + +## ![Adding Comments to Techniques](nav-app/src/assets/icons/ic_insert_comment_black_24px.svg)Adding Comments to Techniques + +A text comment can be added to techniques. This comment will show up in the technique tooltip if a comment has been +added. Techniques with a comment will be given a yellow underline. + +Note: A yellow underline is also shown if metadata has been added to the +technique or if the technique has attached Notes +in the source data. Notes cannot be edited in the Navigator and are displayed in the tooltip. + +## ![Assigning Links to Techniques](nav-app/src/assets/icons/ic_link_black_24px.svg)Assigning Links to Techniques + +Links can be assigned to techniques by specifying a label and a URL for each link. URLs must be prefixed with a protocol identifier +(e.g. 'https://'). Multiple links can be added by clicking "add links" +in the interface. These are displayed in the context menu (accessed by right clicking on a technique) and will open a new +browser tab when clicked. To visually separate the links in the context menu, a divider can be added in the interface which will display a +horizontal line in the context menu where the divider occurs in the list of assigned links. +Techniques with assigned links will be given a blue underline. + +Note: Links can only be added, updated, or removed if the list of links of all the currently selected techniques +are identical, including dividers. + +## ![Adding Metadata to Techniques](nav-app/src/assets/icons/ic_metadata_black_24px.svg)Adding Metadata to Techniques + +Technique metadata can be added by specifying metadata names and values and are displayed in the technique tooltip. Metadata is useful +for adding supplemental descriptive fields and information to techniques. To visually separate metadata fields, a divider can be added +in the interface, which will display a horizontal line in the tooltip where the divider occurs in the list of metadata. +Techniques with metadata will be given a yellow underline. + +Note: Metadata can only be added, updated, or removed if the list of metadata of all the currently selected techniques +are identical, including dividers. + +## ![Clearing Annotations on Techniques](nav-app/src/assets/icons/ic_clear_black_24px.svg)Clearing Annotations on Techniques + +Clicking the "clear annotations on selected" button removes comments, links, metadata, colors, scores, and enabled/disabled state from +all selected techniques. + +# Selecting Techniques + +In order to be annotated, techniques must first be selected. There are multiple ways to select techniques. + +## Selecting with the Mouse + +Techniques can be selected using the mouse. Left click a technique to select it. Pressing control (windows) command ( +mac) or shift (both) while left-clicking a technique will add it to or remove it from the selection. Right clicking a +technique will bring up a context menu with more options: + +- select: Select only this technique. +- add to selection: Add this technique to the selection. +- remove from selection: Remove this technique from the selection. +- invert selection: Select all techniques that are not currently selected and unselect all techniques that are + currently selected. +- select all: Select all techniques. +- deselect all: Deselect all techniques. This action can also be completed by the " + deselect" () button. +- select annotated: Select all techniques and sub-techniques which have annotations or remove unnanotated + techniques from an existing selection. +- select unannotated: Select all techniques and sub-techniques which do not have annotations or remove annotated + techniques from an existing selection. +- select all techniques in tactic: Select all techniques in this tactic. This action can also be completed by + clicking on the tactic header and follows the behavior preference under selection + behavior in the selection controls.If the “select techniques across tactics” control is enabled, the selection + will include instances of techniques that are in other tactics. Disable this control to select only the instances of + techniques that are within this tactic. Sub-techniques within the tactic can be selected along with their parent + technique by enabling the “select sub-techniques with parent” control. +- deselect all techniques in tactic: Deselect all techniques in this tactic. This action follows the behavior + preference under selection behavior in the selection controls.If the “select + techniques across tactics” control is enabled, instances of techniques across all tactics will be deselected. Disable + this control to remove only the instances of techniques within this tactic from the selection. Sub-techniques in this + tactic will be deselected with their parent technique if the “select sub-techniques with parent” control is enabled. + Note that currently selected sub-techniques will remain selected if the control is disabled when using this option. +- view technique: For more information / details on the technique. +- view tactic: For more information / details on the tactic. +- user assigned links: List of links assigned to the technique by the user. These links will open a new browser tab directed to the +specified URL. See Assigning Links to Techniques for more details. + +Tip: You can use "select unannotated" followed by disabling those techniques, and then hiding disabled +techniques,to create a layer where only annotated techniques are visible. + +## ![Selection Behavior](nav-app/src/assets/icons/ic_lock_black_24px.svg)Selection Behavior + +The selection behavior controls affect how sub-techniques are selected with regards to tactics and sub-techniques. + +- Select techniques across tactics toggles whether selecting a technique that is found in multiple tactics + selects it in all tactics, or just the one wherein it was clicked. +- Select sub-techniques with parent toggles whether sub-techniques are selected alongside their parents, and vice + versa. When enabled, clicking on a technique will also select all of the sub-techniques of that technique. In + addition,clicking a sub-technique will also select the parent as well as all sibling sub-techniques. When disabled, + sub-techniques are selected independently of parents and siblings. + +## ![Search & Multiselect Interface](nav-app/src/assets/icons/ic_search_black_24px.svg)Search & Multiselect Interface + +The search & multiselect interface provides the means to select or deselect techniques in the matrix that match a text +query or that are mapped to groups, software, or mitigations. The text input can be used to filter the lists of +techniques, groups, software, and mitigations according to their data. You can select what fields of the objects are +searched under "search settings:" name, ATT&CK ID, description, and (for techniques) data +sources can all be searched. + +The lists of objects below the search can be used to select data in the matrix. + +- Techniques: this list can be used to find a technique alphabetically or one that matches the search query. +- Threat Groups: threat groups constitute related intrusion activity tracked under a common name. Selecting a + group under this section will select all techniques that are mapped to (used by) that group. +- Software: software constitutes malware (custom closed source or open source software intended for malicious + purposes)or tools (open-source, built-in, or publicly available software that could be used by a defender or an + adversary). Selecting a software under this section will select all techniques that are mapped to (used by) that + software. +- Mitigations: Mitigations represent security concepts and classes of technologies that can be used to prevent a + technique or sub-technique from being successfully executed. Selecting a mitigation under this section will select all + techniques that are mapped to (mitigated by) that mitigation. + +The interface provides buttons to select and deselect each object. These buttons modify the currently selected +techniques rather than replacing then, allowing for the selection of the multiple techniques or the techniques of +multiple threat groups, software, or mitigations by selecting them in sequence. The 'view' links for each entry link to +additional information about the object in question. + +Buttons labelled 'select all' and 'deselect all' are provided to quickly select/deselect all techniques in the results +area. You can use this in conjunction with the search input to select all results which match the given query. + +# Toolbar Controls + +The stickiness of the toolbar can be changed by clicking on the enable/disable sticky toolbar button () + +# Customizing the Navigator + +The ATT&CK Navigator can be customized by modifying the fragment (e.g example.com#fragment) of the +URL. A panel on the new tab page exists to build a properly formatted ATT&CK Navigator URL such that, when opened, it +will create an ATT&CK Navigator instance with the desired customizations. This feature may be useful for sharing or +embedding the ATT&CK Navigator. + +## Default Layers + +Click the "add a layer link" button, then enter a default layer URL pointing to a layer hosted on the web. This will +cause the customized ATT&CK Navigator to initialize with this layer open by default. This is especially useful for +embedding or sharing specific layers. + +You can click the "add another layer link" button to specify additional default layers, or click the "x" button next to +a layer link you've already added to remove it. + +The following is an example ATT&CK Navigator URL with the default layer specified to be the *Bear APTs layer +from our github +repo: +#layerURL=https%3A%2F%2Fraw.githubusercontent.com%2Fmitre%2Fattack-navigator%2Fmaster%2Flayers%2Fdata%2Fsamples%2FBear_APT.json + +Users will not be prompted to upgrade default layers to the current version of ATT&CK if they are outdated. + +## Disabling Features + +Individual ATT&CK Navigator features can be disabled with the checkboxes. Removing a feature only removes the interface +elements of the feature -- opened layers utilizing those features will still have them present. For example, even if +comments are disabled layers with comments present will still display them visually and in tooltips. + +If you are hosting your own navigator instance, you can also disable features by editing the configuration file +assets/config.json. + +The following is an example ATT&CK Navigator URL with the ability to download the layer and add comments +disabled: +#download_layer=false&comments=false + +# ![Rendering Layers as SVG](nav-app/src/assets/icons/ic_camera_alt_black_24px.svg)Rendering Layers as SVG + +Clicking the "render layer to SVG" button will open a pop-up window allowing the current layer to be rendered to an SVG +image. Clicking the download svg button () +will download the image, as displayed, in SVG format. + +Note: this feature has minor compatibility warnings with the Internet Explorer browser. For best results, please +use Firefox, Chrome or Edge. + +The Microsoft Edge browser has a bug where the downloaded SVG will have the .txt extension. Renaming the +extension to .svg will restore it as a valid svg file. + +## Measurement Units + +Clicking the "toggle measurement unit" button will toggle between measuring in inches (in), centimeters (cm), and +pixels (px). This unit applies to controls for image size and legend position. + +## ![Configuring Image Size](nav-app/src/assets/icons/ic_photo_size_select_large_black_24px.svg)Configuring Image Size + +The image size controls allow you to specify the width and height of the image, as well as the height of the header if +one is present. The measurements are in units specified by the +measurement units control. + +The header height contributes to the total image height: if you have specified the image height to be 8.5 inches and the +header height to be 1 inch, the technique table will be 7.5 inches and the header 1 inch for a total height of 8.5 +inches. If the header is disabled this control will not be editable. + +## ![Configuring Text](nav-app/src/assets/icons/ic_format_size_black_24px.svg)Configuring Text + +The text configuration dropdown allows for the configuration of the font +(serif, sans-serif, and monospace) of the exported render. + +Unlike in previous versions of the Navigator, in more recent versions of the ATT&CK Navigator text size is automatically +calculated to optimize readability. + +## ![Customizing the Legend](nav-app/src/assets/icons/ic_view_list_black_24px.svg)Customizing the Legend + +This menu can only be opened if a legend is present on the layer or if techniques have been +assigned scores. The checkbox allows you to undock the legend from the SVG header. Once undocked, the X and Y position +controls can be used to position the legend in the image. The width and height inputs control the size of the legend +when it is undocked. The measurements are in units specified by the measurement units +control. + +## ![Display Settings](nav-app/src/assets/icons/ic_visibility_black_24px.svg)Display Settings + +The header itself, or specific parts of the header, can be hidden using the controls in this dropdown. The color of +table cell borders can also be edited. + +- Show header controls whether the header is shown at all. If the legend is undocked from the header it will + still be shown. +- Show about controls whether the about (layer name and description) section of the header is visible. If the + layer has no name nor description, the control will be disabled and the section automatically hidden. +- Show domain controls whether the domain (layer domain and version) section is visible in the header. This + control will be disabled if the header is hidden in entirety. +- Show filters controls whether the current filters (selected platforms) are visible in the header. This control + will be disabled if the header is hidden in entirety. +- Show legend controls whether the layer legend is visible. If the layer has no defined legend items or no + scores, the control will be disabled and the legend will be automatically hidden. +- The sub-techniques dropdown controls the visibility of sub-techniques in the rendered layer. Selecting "show + all" will show all sub-techniques, "show expanded" will show sub-techniques whose parent techniques were expanded when + the render button was clicked, and "show none" will show no sub-techniques. +- Cell border controls the border of cells in the body of the table. The borders in the header are not modified + by this control. Note that you must click "apply" in the color picker for your change to take effect. + +# Exporting Layers to MS Excel + +Layers can be exported to MS excel (.xlsx) format. Clicking on the "export single layer to excel" button in the toolbar will download +an .xlsx file which contains the current layer. + +Clicking on the "export all layers to excel" button in the toolbar will download +an .xlsx file which contains all the open layers in different sheets. + +These layers contains the annotations from the view -- color (via score or +manually assigned) and disabled states. The exporter also honors tactic header background, sorting, filtering and hidden +techniques. + +# Printing the matrix + +To get the full view of the matrix on a single page, be sure to disable the sticky toolbar before printing or saving to pdf. See the Toolbar Controls section for instructions on how to enable or disable the sticky toolbar. + +# Notice + +Copyright 2024 The MITRE Corporation + +Approved for Public Release; Distribution Unlimited. Case Number 18-0128. + +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 + + + +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. + +This project makes use of ATT&CK® + +ATT&CK® Terms of Use diff --git a/site/mitre/assets/config.json b/site/mitre/assets/config.json new file mode 100644 index 0000000..89e55d6 --- /dev/null +++ b/site/mitre/assets/config.json @@ -0,0 +1,80 @@ +{ + "collection_index_url": "https://raw.githubusercontent.com/mitre-attack/attack-stix-data/master/index.json", + + "versions": { + "enabled": false, + "entries": [ + { + "name": "Custom Data v14", + "version": "14", + "domains": [ + { + "name": "Enterprise", + "identifier": "enterprise-attack", + "data": ["assets/custom-enterprise-attack.json"] + } + ] + } + ] + }, + + "custom_context_menu_items": [ + + ], + + "default_layers": { + "enabled": true, + "urls": ["mitre/assets/export.json"] + }, + + "comment_color": "yellow", + "link_color": "blue", + "metadata_color": "purple", + + "banner": "", + + "customize_features": [ + {"name": "multiselect", "enabled": true, "description": "Disable to remove the multiselect panel from interface."}, + {"name": "export_render", "enabled": true, "description": "Disable to remove the button to render the current layer."}, + {"name": "export_excel", "enabled": true, "description": "Disable to remove the button to export the current layer to MS Excel (.xlsx) format."}, + {"name": "legend", "enabled": true, "description": "Disable to remove the legend panel from the interface."}, + {"name": "background_color", "enabled": true, "description": "Disable to remove the background color effect on manually assigned colors."}, + {"name": "non_aggregate_score_color", "enabled": true, "description": "Disable to remove the color effect on non-aggregate scores."}, + {"name": "aggregate_score_color", "enabled": true, "description": "Disable to remove the color effect on aggregate scores."}, + {"name": "comment_underline", "enabled": true, "description": "Disable to remove the comment underline effect on techniques."}, + {"name": "metadata_underline", "enabled": true, "description": "Disable to remove the metadata underline effect on techniques."}, + {"name": "link_underline", "enabled": true, "description": "Disable to remove the hyperlink underline effect on techniques."} + ], + + "features": [ + {"name": "leave_site_dialog", "enabled": true, "description": "Disable to remove the dialog prompt when leaving site."}, + {"name": "tabs", "enabled": true, "description": "Disable to remove the ability to open new tabs."}, + {"name": "header", "enabled": true, "description": "Disable to remove the header containing banner."}, + {"name": "selection_controls", "enabled": true, "description": "Disable to to disable all subfeatures", "subfeatures": [ + {"name": "search", "enabled": true, "display_name": "search & multiselect", "description": "Disable to remove the technique search panel from the interface."}, + {"name": "deselect_all", "enabled": true, "display_name": "deselect techniques", "description": "Disable to remove the deselect all button from the interface."}, + {"name": "selecting_techniques", "enabled": true, "display_name": "selection behavior", "description": "Disable to remove the ability to select techniques."} + ]}, + {"name": "layer_controls", "enabled": true, "description": "Disable to disable all subfeatures", "subfeatures": [ + {"name": "layer_settings", "enabled": true, "display_name": "layer settings", "description": "Disable to remove the layer info (name, description and layer metadata) panel from the interface. Note that the layer can still be renamed in the tab."}, + {"name": "download_layer", "enabled": true, "display_name": "export", "description": "Disable to remove the button to download the layer."}, + {"name": "filters", "enabled": true, "display_name": "filters", "description": "Disable to remove the filters panel from interface."}, + {"name": "sorting", "enabled": true, "display_name": "sorting", "description": "Disable to remove the sorting button from the interface."}, + {"name": "color_setup", "enabled": true, "display_name": "color setup", "description": "Disable to remove the color setup panel from interface, containing customization controls for scoring gradient and tactic row color."}, + {"name": "toggle_hide_disabled", "enabled": true, "display_name": "show/hide disabled", "description": "Disable to remove the hide disabled techniques button from the interface."}, + {"name": "subtechniques", "enabled": true, "display_name": "sub-techniques", "description": "Disable to remove all sub-technique features from the interface."} + ]}, + {"name": "technique_controls", "enabled": true, "description": "Disable to disable all subfeatures", "subfeatures": [ + {"name": "disable_techniques", "enabled": true, "display_name": "toggle state", "description": "Disable to remove the ability to disable techniques."}, + {"name": "manual_color", "enabled": true, "display_name": "background color", "description": "Disable to remove the ability to assign manual colors to techniques."}, + {"name": "scoring", "enabled": true, "display_name": "scoring", "description": "Disable to remove the ability to score techniques."}, + {"name": "comments", "enabled": true, "display_name": "comment", "description": "Disable to remove the ability to add comments to techniques."}, + {"name": "links", "enabled": true, "display_name": "link", "description": "Disable to remove the ability to assign hyperlinks to techniques."}, + {"name": "metadata", "enabled": true, "display_name": "metadata", "description": "Disable to remove the ability to add metadata to techniques."}, + {"name": "clear_annotations", "enabled": true, "display_name": "clear annotations on selected", "description": "Disable to remove the button to clear all annotations on the selected techniques."} + ]}, + {"name": "toolbar_controls", "enabled": true, "description": "Disable to disable all subfeatures", "subfeatures": [ + {"name": "sticky_toolbar", "enabled": true, "description": "Disable to remove the ability to enable/disable the sticky toolbar."} + ]} + ] +} diff --git a/site/mitre/assets/export.json b/site/mitre/assets/export.json new file mode 100644 index 0000000..bfa1d49 --- /dev/null +++ b/site/mitre/assets/export.json @@ -0,0 +1 @@ +{"name":"CVE2CAPEC - New CVEs layer","versions":{"attack":"15","navigator":"5.1.0","layer":"4.5"},"domain":"enterprise-attack","description":"","filters":{"platforms":["Windows","Linux","macOS","Network","PRE","Containers","Office 365","SaaS","Google Workspace","IaaS","Azure AD"]},"sorting":0,"layout":{"layout":"side","aggregateFunction":"average","showID":false,"showName":true,"showAggregateScores":false,"countUnscored":false,"expandedSubtechniques":"none"},"hideDisabled":false,"techniques":[{"techniqueID":"T1134.001","tactic":"defense-evasion","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134.001","tactic":"privilege-escalation","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1550.004","tactic":"defense-evasion","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1550.004","tactic":"lateral-movement","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134.002","tactic":"defense-evasion","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134.002","tactic":"privilege-escalation","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134.003","tactic":"defense-evasion","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134.003","tactic":"privilege-escalation","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1606","tactic":"credential-access","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134","tactic":"defense-evasion","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1134","tactic":"privilege-escalation","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1528","tactic":"credential-access","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1539","tactic":"credential-access","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1499.004","tactic":"impact","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true,"score":2},{"techniqueID":"T1550","tactic":"defense-evasion","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true},{"techniqueID":"T1550","tactic":"lateral-movement","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true},{"techniqueID":"T1499","tactic":"impact","color":"","comment":"","enabled":true,"metadata":[],"links":[],"showSubtechniques":true}],"gradient":{"colors":["#ffe766ff","#ffaf66ff","#ff6666ff"],"minValue":0,"maxValue":18},"legendItems":[],"metadata":[],"links":[],"showTacticRowBackground":false,"tacticRowBackground":"#dddddd","selectTechniquesAcrossTactics":true,"selectSubtechniquesWithParent":false,"selectVisibleTechniques":false} \ No newline at end of file diff --git a/site/mitre/assets/icons/MaterialIcons-Regular.ttf b/site/mitre/assets/icons/MaterialIcons-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..48c69b5be09c2f5d98cc3099b1bbd795bfddb7eb GIT binary patch literal 228896 zcmeEvdwgS8edj&09)8FVJ+5R)9$B_*$=0>UW6QGU70;b_GM<^tWFpPvK|4ui0OFFg3_*Iav(Hi!Ok zy_V1%nh)PUB?=gmN89>Iq0Q|6l*g(4{oE(ruCMO?REGnb+9x}B*u}%2^0>u6?f#VD z@vJZFOJ{va-&2p=d#@-osy>m`2+ii-?El|w!a~#jKQ!8a0cdn+hGvMms7vJQ*R=6m zQV-+pmEVZ?TCVzG0n{D zrW@tyeKWzK;H>!@w?;-IR}Is|>*RDeJpIJBTYLKZg2BH2o|DVm6Wh0+*xo7ODs&w1`tQSm?I-?^ zJw+yfS`#(!m3}P)o}(=gAZTJiHnT97&Z-u3^Z8uZlXmOD(A+|9K9$y!LF>}8*WcUg z|CaoGT0e2&!sQFc-Wh+*$mu6eA6dxAUe$2oa!^&Azi{I04)MSxgif>@AoiyzQ(FQ67dT?)aCVd75NeBF?-hUU5fgyX}%~f!<=D|1+9ST zu42mr{L%!*GlD^p*@{B3cugy2io#s0Rzds6fH0HzM~kQ_~?)W4#90J42RVJw-Zyt!&9%? zzCC{M;MaT+V=fsOnDl$LOa{ZJUsp74xP8&rH#X7J8}1YtUOD_5+b`qV-#XZMFzQRr zdGvfJ6d#|=>?s!aOfN1@Cx&CO_-M-O#J!rBGa^<8P%Eir$q}-k&35#{v;f6C62&-2 zS^c{C$r%X?p#~BIUEWH_v=mpd4kw}D(M8fMW=W<|QYwPfblc!^5)&TP@97oub z1G>)V!z8Z&FgWN*lgN^KIxnZqO5N=P5Q(f=Q*LF7wO}f{+{lBF%TS>zrM3izM;FnujdUt z{r#VB@79zIstyHjL`!R0K!69eZYMjJPXniLM`>4D-Bnn^?hbK2c3Wsf-rLs5V6xL4 zO_3^ai-kb6OVk?gi`~}evhK7e=}1Kf%I|u;Q{L|QNGuqJR%8HU>cAMNks{m9RI=f0 z+Iov}A>wPS_#zQsC}VAJLyMq(TOMu1GLLUWmkdl) z3Pzz|l-N8OP}Elx2AYltoyQA>ntdESMGB32CgKwYID*}oVo-L6QWQ}ny+nuga=Bh# zyS~FxCQ~&G$k)xgY~5d{7Sd9fDf=E==r08hE(OPR46k6_PodD~4<$hUZTBk5)(z>I zi#_BFp@)~-?-xMTwGk)86Qe zp84jM(pyTqZuT7*9^UW2dDrga+&bX9xoz4yp@m1#gQUw*w+9RjxCg9nDnf4_JAY_! zF>oK=-xxdZms0mV)4LCy*ZUj)P4E8(H$_=VUI!R-Nt8uJj-2R~Oj3AYN~;AZFsmZd zSZ(W__h%_zM4M)xCM3h4?5VnfKasHodkX=2lx&bQMiWTU(>48 zD~piJKw-SvVEg}oAeHptxO;&{IuVIFgRYdU>|EHzyTGW&@fM|J6MQNa?d)sRtJd&E z*{Fdz&8M8HOa>CA{T9|Fa*U9tfN!8Br=<;cjE6nY-`W%+Fs2nSw#NUK40u5F^?l-d z{=q?iW5qv6Nn;pQc0Df~4~!j-_^)X^DYQ6PiVh4|0|s#Nh9N=0jmIIQsG2P(>Ym@o zRs>Kw0Mr&e`*!bpb!y9&)Rq%eu&!y;$b^{zudED&qS4U6f5EvesnhZtt`J(6R}q0E z1P7!y)r-1DGL({g1hP@jVb(_|K1C^W4a3jy9x6r1$AY=4zA(}DZ`~Lvf=gu9@ zE#W}1M8m{Z9^DcdwDE9WPl8Kj^|VL}u&unEKP#Z%DIL(h#=&c#1M;#f&tB7Dr%?+eWi-Xbm!Soc z$!&qG)dB#IhkAD2<{Gwb0i`g{Vb;pWj+KusJ#iX}{z2&UmoJD)?C#i=yJL5QsibZ< z(zn&l@NDCu_doQ|`;U&CN+fPc+#&~N4_ph3_(sYc1&1t0qGYZTT*R~{QzzrgK`R?y zhtW{+tE;QU%xaM$(3Zt@Ng;*-N~tQ{O9|t)9z2-A7_d0svZBH;FJRhusDPy`8uCyv z1EUA04|BfT^?=~IYmG%1xF|aMmbt@X%i-W~ zYJOqdjVtF4<+&MGhsD^sVYYas1DukQ4H&Ya_m-9bWxjfy#J+O&?2&e9+0+gM2%-#P zDoYg3>rma4y#xg+JAzI`sZi)8kt#y$6^X*t!V>pZ`60Q!DXCG~pi(E31{WL1rd>LX zMqNK79*-SxyHz^_J4NN|Z|Le3^~RfG2b{90od^H&>)x&COh>|ZlnUq1i^8s%y|;!E zJvlKS8Wz>tr}sf~oEqwx^7!v~N2z@NL)qhfQ+@Xxn8}R9wsbk?XL@L*o7zFZ=htyJ zK3eG_1d|#)!~2njeu|F9MDEf*yvAxGAbdeQj+`6kCW`uGKKJcmX3Vb&?8d8@M{ak|Nrq z;;?C*3O&t`c8iGSNjnXQoUtSgp7JK9&{D zZo&Q*H3^*vgvm9H3N>KVC`o&{#rx;AUE0kUZV)C&9#DeROpbay;1i*I5Z_REY3st+ z1q5*gKnXD)cZA_-O6EL}KOPJ~T7F71hCK!MQ?%RVa5@}aj*bpzN5_Q2?QvqK%jt0A z%j33oJWi+MwxFKsc=x%(rPBP-qpvt>K<0ef<8V10hSTZlzy*dg(Ch4VI~>9(T#LRy6^#rI6VMpr$gXczr4ud>|I+Ak-<&DiH5p5`+M99vV>-@6HPju zo&65Cvmf0%U9OH!^dsB?Qz;z6H6X9RNcw@9Hk9YILx8Xw=s@+=GY96GgNG{|Y6pnI zpsWq^bUKwxZ!#(0^Ei54*>Q&h6W`f^j?p{d(2pci!o1PX@S*Nt0p^g3OR-t|yfhbKQg6;P;Mr$Vi#0(*itqk=m~1!1LefeMb! zmr6ev6})|ede))>9saXNv}f9Ad>*R6rd0lKg7cd~Cf-9-!W=m}@MZIdA0G9yn}HBG z;aJB?emLBJb_1weq%f}`^7Z1R(APoUun8&THbI_$@;LghBL$~RIC?e`!@67Elop&F zLJ@F_8lK;96Lwsp23g+^s|bol(-hUikT#S(9Z<03QA_SvQHE-xEXw|fi1xf~7OHv^=Xn(;8iim)8JG&v&7y_w5NC%$dY6`Z5l!Jx8W1V1qL{QnadDc3oK`DN48!5M4~#RnTgYSwhfP;cj3Iq<2k*xqmI6>08o{(h^>4(r%?s zpU!#`G(0NMc4-1JIs=Q#lLiE6Ec0I&%gd{9)zb*UyAB6;rVhUf6cj_Nz}rBDG6>6Y z2*Fq_pN3;8PnB8v9l?yD?9!H`EgFV~@xr$8*!Z(iUzv(m*%vkFm|3Zr+Y;N#*yV|6 z^wS2t`sECIw9P?JEBK=P9?BOYb(sRDy$TGY&Do|)IxQ!=C~d#-#_h?uxnyHSxo$qx zcjv=*_D%I3K61GCGt#{St+a(cK3aGP^+4QUQ;6!7#*zz{$1l<`jJ z@LJR6$b~xcp|B2ZG=yMGI`8%*7Z&pPN-w}O>h_5G11A|WIr%^1W7}f;7hGH7lkQ_f zZlhyp;2qn>;@LgMo;`cTEkE~or_p&=`7V4m-X53dFVBn(XZO5rd?vO(IO-n4?>;m$ zGYh0`gtDPfS?8GZh>7XJWqt0|6AE-y(27x;KP>v%?&w5M2Z2WgLeUuXZ+ zYPA++z)aXc4m3s9HL(dKYU|0XWSScqS&u!mC@~UReb@0#4Z~?CRXD~n2+G3=vMzeK zZcJ=!lZMtcqg5&}i`KPaPmV(yz<~6uWQs0J#El5^Vxmdcnt0~n5Qte=UKpZ>azQXU zPq<>h^jy^!bEF#ORSLwO*6OAIkE2EHpRRR@TNCgUw3n~;OXJ0L0}9@ z4v~gj#TX%~Aiy|S?r^wZ6zwcil(%ggPbCtmJK#)An2EMXZp}2eZNq6CHqEn%#0%@X zY=NX3vYoDU2r1d)W)P{De7Emg_>u76t_Ml2-J80P6rC*&UNV zV(61jV*_#hthNJ_4j97onUm=eI-!}=J8;9?x8EE0;Y^184qv!o6cLTWAHDkcliT>H z)*Hoo4QxJ>S)mL!V8lxTfLj#DHtaO$kr&Om9>So=_hFSn)2Cc#WZDA@mG*l$B&uCr zy|NlP0+qwrHM#Zth`Y<>82c4(*OAC-MfY~4$9lWQ&dz4s!i#1#?H3#xln2bF81>M` z^|(i2!OiCv65$Y?1Tq*7+Za))t=>e$?RV$g?)${(eQs>{-Jzs+PMH1s`d$5l>d3is z>Kfhe>f1MfK9p`#fmzfyJv6 z+3K?oWzNs8mS-2^i=sOF&@X@R{A^k7Nul4$KI=ytq6pOfT=5&FUm+*aM8fm;6A;T0cx z^-<#~-E`ol*G~)$O$@!ZRXm8g{>Qr#X?N7_k#%J43 zv|lRLIF=K-qj0htFYGP6*}W@NHyT(nBJ~N z4d)Gd(^VEo4VF|dup~g;hoA~#Dj|gCnZvQw0aSzZ0XvzE-~3q0A9~-thzq9v-V@t7vwO?o%$Cr=u9z^y zySDLkY39BE{pI(L8lm}tRID?$GqojiXiLNl?20v*s%QdZ7%pU}6AoSv;thLa#{N1=Q}s;KY-M)$q@55#U9 z80+qK2j|lX=YiO#I>Q48{bqFW^w=@qu;_W^f!N`}tvx-S@WH*e4EKa^#moH%0R9vWAsrE|%fji4iqWo&z9kuqk8Dlrvpc4y>c;r++zn@*98T!x zXOm(s+2u@zqR1$_5<-;gXP~V+NBzOs$hdD;GBrHBbz$qx;qjq+b{^R=?FtSLKY3<% zb~rtG==@ib&MpLAl3hzVMw2wngyK`PnDq>%3OY|VpYC%6Lx2^ezDgVLzgXJ9lbxN( zM8===dXxT4;^LVTXWlE-&8yPTD)O_gPw5$>Z!R;Hnd>t$1%1o-IKr-)R9f#{r&+t2 z1L}}2lq8K~+C2LA8HWoo!Ej#GS2i1fs6dN15kxPSU%YP^Um?g?f@D8HQpXmRFmR** z%shaj~gb=Zi#PyKe8`-rd|jBarss*Ky?HRJto_-8^Qq$KYN~@s5h);e<2B(9;sgZ*NBz*xiK;F@0-t9jqN%z$2 z!J1`*Z1&&JK*$11p!F(!aRM?_hCwWpl#-Rg3eaJ~HNU?rQu4wSsAW0UYiELV!F_eVJ(S}R4XL!)nQKI&r0{RwPsDL0FlcY zRWW$G$1E9R=ZK6^xneGW9DC4{1-lZjTr`ZusjG`qQ;UX}x%>r%VgT`Uxma|m%VB&>9THE57@)3@Ob%oSwCpiQ(UjbV@^sZ&TuLaH0}IwIzU zLP0MSb$k}#j|Gd7NM#zLXqdj}d+k%W0E9)AwFX4>fWVLr9kA!s!gr!8yTcntYz+^w7WN=@q zG#(nhc?b~5SV}t;_Lsdlz#SF_K`Vq_mQF)Q3WAz*Y2@KxH?@#QN-;vC=@g>q;V^e$ znd@N)66}U}IZ#eop@&C{4v*u4@c9P^cKK=(-qGQ|Y}^ssiRj#F zz&p~o8u31yxOrNL2L}$t3aHKE;n68nZ5kG^Q z?(XlB3>MBjal>tkPyhDr4?Gl`h{giJn3#Ox%;Ig&{`S)kec;an zvFJoB24LEZ-$RGF%{OTVNc}X8M3Z*WLS>AxIi|(Te@!Y{NGUdk(}RgKd-j~!117|v z(xFo6%#+F~`1L2x3@4@%37p(BHQXBv_6{Fn1sAf9aW^FpK4mmZV>p?ko(0wpg*TJd zzWvGIEe8(V-o|OZHgkK=n7OC8sq8j2Q>xuPbjq#^wc2;r^jI`qcW~U*r2kl&vu&P< znIDK%hO(d6kX8xJ7;IQoGeMQ$(OeS$0@vFFy<^7fo|8ie;Luq$MelsO{%O? zQXrij!GX4OA8c1s8y_Ws15@qZD7EP})tD(vU(0nA#=an>;mM)N-{QvX1|i4wKJ8}v z49w6m>jEo^lWmB+bTdfdW2qCx&9a$e?fXJ&T`O9Ll~kEADMnk@L4S5Dw$)mYB~sd1-Mmmd!SP2eq*+AGbLR~YF80<1^#}^ zldw zP9kz4J?r*2U8o)8g}$^4gF;#)bq}6}TL(gi?sMCY%8fUR;`)rTIKNb$qe$Te^;Ia98@AD@aF2!sxiv2Xk;m=~+<$ zXz)T!2fop@JtvA6<*53;NaUu3;(%gClB$YGuE~0VVqKA`m9^O7t}-0o9=ftUjY73_ zzpQ_-8o9bz4FrH;b7vbb^Eze%hyql}wHHHNW$8k3T|q=Zj+doH_C0n$zd*DhFp?e# zK;EF8@pkqE1qudN_)wLGEUmv=R6>mxE*i!=y#0;uNK)_a z_l^PJKrPFv?;-h)Lu7&nf)nP$wh18!8*}&wHiP&lQIr3yiEiS}*nr}=$Xcg3`qTzz9y!pmhRn^|S zT>*O?l882@Eh>*Z61QLC5qk@VECMhVn&CS@+Vl-FRAP+cgZX)y%h zeyA9UQ0Pr;0 zBtyBD#d6dN1A~JBAeL##be5n>|1d-W;$tqvBa`CS(kIgJWz4x7<-a@ecPGR$_p$4L z0lWCI(ne|6&?N|@bdi&gpEB(hqF?*OCq5zGsJadQ=l>jBd*J0ScSF9b7v5gb8q3Nox%trl4pe1mo8o!UVR9vKX73f**if$>H%Nw>!xLV~f{ zhc>K?UKow}txjn5aO%3jJ{LRk3+a@YfE5!@bl1kaJ7dFvZTLx`%f8dIx)wb3Oine&Or!ykSq_tH@dcG_4gXHP z2>%@1=%D>Nb@y7m&WcO;hLKAq>#LaA-;#it zf}jCzowNY|pk#i~j(`y2>7%vd+ZMAwIxrWycvC^dkJXM%9GD$AP?RXS263nZcG@`8 zs$_D_8fCA|TIu{`rbSDkE3F1B5tZ3gJR#%7=0&!6A`Z5TrRCMtbuwu`Gul+@j|xhM zLSb3PTz|zw{$ua2R1nYpu{-WREo%pr&ByC_v-Xu9goaTArCUEh(ns5`==;KN+eMx& zhV_u;NeG0IQ=QJCiA;CM=L`8>$=aj~&H?l5hIpWso`zP+79(?q{mOJD1 zQ&Sg3sBzU4tyCw-wQoQCa2sy9A?OppZy76v{{5ot5l)^=aoOULQg4zxQW!-@(2~t5 z*D0gzbkJ1&Q1c0#%I05M_1h~oKYyf6^LrSI-xs|DRQ#aqb`N+FfN8>r6Wv8-%*>>) z$A>QHpFoXJ%Y#pkCS97@wL&3engB(c@242?T`U$5{}WeH#eI<5SB5Y05ha0keSsqv>3>9NF20@n-u#V)WY!X?LM6Dce=7gAfAyh?V z5mb!s)9gIsIgY3V)0ICox$i;tyiF#FbfunIWul4tE9U{Y6PS0mZ5QS$I{Zo z_U#irSVUsSFEVX-W#tcFbuxoBTaf4mBD`!|R_2t_KR9f%bmmaYL|$xA6DgPUQaMz< zq?eEdMRT#LR1)I5%F5z!;2R3$8D7lEayY4bC@&Den-7D>&^)C}Sk}BJb4Co2#Nzn2 zo&8ghQ6*keLx1DU9GF_%Ijj%i2wY|e92UlBGgBSokr)K+RD5U8ab#fanc5p4c8!H` z3@D|;Mf4T;<#+>aMiAX9~f+vvzTz z-@SxG55yGepPV2YIK&lo9@!3r+o3vQhByWfn2IDGXVU0!mS^z{0QBm|WU zejK;+DG=>0?KUL2Y1$m3@Vat(Gq(;RzzrvA9`*!$K>3$Aw=m~^$=`-v@~k+%b96AU zWi;yZM@M&#M*Y6%=$61BHU}pLUl;XlID@meXbhh_U*dOT3uBwK$)gj4;*`&u@%8rl z_|ABJKCkyjdnfG!lj`_yUU$tgfBUceu*X0ywrj>kl;E7D5$*-q+X*9o_SX0VQ}OBc zgpvB&;tx*8pWQ59gj#S(`h8^zI5 z%+#a{*Nj=(`##BB^h{Ge)v?838%(Vc>E)sfxBN`f98>`}E`YFBUK@z&L;a1_{vka& zAWEpXp$|3U+dJs}2a1S)@DA=plAvv`e;FPBj~(TB3p z#q!-J6DLn5ZdIWh1M^cyhrPHPh&qnk4#3$ezUVnSaACI12P#SzcEk>p8&}&spUpvk z8MDnodh$lJ*qZN_I|K1KFd2K<0Inc~nVxI|RBPP;NIAaN+JMzuH^3paHFBJO=|QIK z(jh2NObZPf#=f4WqJU{PW8y^YwFqTpR$gDK9{720hVMh;B-`7R@~*-2cRnWU-Dicc7r*^EQ5!FqE+^quHp7VjvHvo=4WE z&^BpraE*F?dxM3`4_|&^Lu;bh8Z0|In$X^gINmlSQT^Bbc?&?Sr9ujfTuKLFhE`JE z#+uE|M=)b+5WfnkWpF+p51 zjny1!WY3}wn+u(Ra;2IeZkU+3;m$iB*YBo(@NWI*CQpjalaqJe`Pc{5kq_dx_Ie^* zccaUS(NJ~Sq&*KB7BGl1Ti3Ts*SVk^yYspZ>XdGb399r#2WV9)GIIR_Yp6hVs5ER_ zpP2Zd*dCv~lOujxEu%laH$M8r#N?kgem6dQ2M7JOu7gJDvAywR+sG9JhGZhZCZi53 zwQnAUZrl=qiHY59K>7XQk%+DrXS=(v2hX{=8+PX+nKPNTEH4S8y$4aC%k6PO6K(wfQ`$%0^oF?B zHLQoPSdF#@eW)xO^IP}8-r5?I{wDbQAOWFfw*f&93yt|J)eS9uZhbq-YW)%n3m6sj z8;0o^rq)iADHsY^t6I=>655snf$ioi&pi3y$%P}QPn~?wzrFj<MyCa{9?LrylDx zJ8#{-cv{@o`Piv#>5-u*R%3+iVy9fIauFD0EU~kg4z}{ZJvjd*)v%BQd@W3Q3m0bz zPViMPJEx?8UliyRR-pOyIF7&Ni@uz` zc-k)}Xl_o8yA?dbyZq-e=`D#^eDQQoV!*|t|Go$JZ$35c!pe>b!c=lOw;IYPINV$691#zp)jI&*CtfyvbK1dDYfjcRwL)bu5MBs*`jRgcH z4X$&;mNBTziWx$7Unt_c#0;aBJ5JTypx$~L!c5>Y5$`r+Z`Eb8TDd*&1U6ugf&oV+ z#HAS|m%&#IAjjp{$n0bc17w-ZDIIoUjsee+4jjS=vpPx~kR4tIbK^$lQc)%Y`~);u z_)2+n?UFnv&kBs;(xuFkGG(BA^9~dk$>RX037^GR#aAKfRY@}d!jlvXz_*mXE>Mxj*FI zF%D+4@M##6{o(^$m-2gZFB~4N)Wh25gOi}q#rJ@$1Wg)1rhW1fJu~7c6GlSg zR(YNvGSYuQ^$zjZytwx!Jsy&v!h)0pRpZ-3C;QI5t25zR5~c3$r@Eru*R<~LH+Kzn z&Bv!7`{tuFadD-mr(f6KE7wBm31J<}9=VBMil^?$Ex)}h*8S%0ZlQJedeH!WH}&W@ zADfBe4g|)04R^o-=wS^REiiMeF(NhczATt|NYscYI(?-xRi zu5qoa>#453-nU!l-3Jz|aSS{qw5L9R^U?07FdWg<+lMQo^6YLdzG&;D${%J0Ok|#c zC8cdzg~Tf&gAt*^-*IrGIq0dqa`L zSbBQvbb2fi3H7?&Q|^K38{PtLSnTZW?JV&lzIFJ@_8$=oE@xMt7YhNqT-`nW-o7rU zYrEryV+oqkiN4MPFD-QTCBpIH5bjn9mOn>G2u0?BkVZo6KoTc>EkK7uUJ<)7cKFnH zN2U$&`Pcl(^wjIcpL-i$I}$tma*>M#r|x*?SGy&*F92p$Os*{ik-4fOZ>;!4!V}~D zU=FMRg((e8K&XuPkl_x^b+cH!#Lt@C1XSmz`m<2t8x~|wnENUVYK9m}YD6fak#36rVZ{JX02(P}q5&u+QEEtOghkB=0Ad8iL z%;~C2o(6tkFTn}2Sf?Yaj?xu)7Q6IWnx;ij$d06MZul3enj!Wu6At$^UR z$}T_hi6?i=hSD?V{=+$0g(M2eEqVr;Doc}KG`&+Mw20ahx9z-VXgqxL)yB=_ExF4#9+_pygQ`k`vD6dcFMuk{@8`mtowOU6(+F=#cAfhLyUj%ZIx>KcR-nSm zoJE!4Upw|_{81!tKxSLX{ZT2+E8>vCoaoR#FDh&cRB=4%3{D7OpEw9LfxIuN#YELCcNar2A7!Ldc z5qg=IhUpmrxk*Km3LBgZ4y~byU(1}x$mF(zt0z_wMPA`PliRregP{SZp6re=AzDi` zK)-|m_i3_l+KDbi2fhQm4sWhp<-<4bTV)pGo{?&eJT^p*B~&=u1*U*-=>j#)#03Q; zz=*C)d`W2Gx400Szz(L600iwgaQ#{!L}lq-;#fO$%2JFE+?C@Ca2MZ1TOQ|K5(hYD zp63zHmjTl#Q>{WdlS6?Ws|Hjya1w(NWuDGp$u(~C2=4}e9HKQ+jP(a1JsVHM7z5!* zm=lh?4~~t?U(30`Hpgsl^IGonI*FGYGye!?4A9yIfj4}s2%opPB@|y0YHxUz#=5_B(e{}m-tZwnXHfvkUL>m7zH&Twyf6s zY5+Cx2ju_30A?c`Z(JfJzPUa)0m5VL-vlZr*9IE5`TI2q6G97M0!~^Ktd?w3AS6sN z*p((&EFfXLgps6Rd`fTua0+x#8(N@Ji;Jm@kP*d@m=WqrlFT?#zB!_-^^GZ_L1Hse zQVvm&BPnBMFfZsFV^V)V7}VG&p+S@(1PBp<(bycm9dhBhW!*AJ=)ry*%GFswzY^-_lQE>?vX589O zJ!oqSt}^L`uGyRcP^rG;9d0(RG7_LMD7MA#jRRv)uPj~*J&+M{Mm<%EF8H%b)|IL; zpKSs4UnKhcScc7{skeRW^yquuG&cJzj1seE;`0uDeso3{b2mb8GEJ$9;tsjmKcJ5o zNj{lQhap6f5|{>8dSZ0CKf8OUTg=BE8!_kKjePhMQ)9cGuEv$vW5-|nZg?wNLbwko zI%L8LIlvu7{!S;yW-T14|zx=J;-52SVdAO_Vf$T6ubkEEX zwQq0AJALno?r7IVTmWYZ&T>Wmf_8)Wi1@S&iCarc(02iIHHbTiJ1&Uru^rMZ7(r^K6ST{1+x^S5HBmOJ zSmOt)k?76mb6^c1QLWZ!TdfsnyK*&Fx&D6%`S}$j`lw}qq@4}Almiz=#w=&n3=^6c zirC=qEAyFDrnS}q*@S$ygj6;_*(jt*f&rMO(3i~;jmAo)3ir97_RL=?xKVYHGYTgCGbKru@?)TrE>^xE-zQEY0o?Z zGAWfzqYQb|dgy^NKdlrLrPgiod;riP25eQ1%G|_CvADW=>5^TVrQD`y*LH}icBR|5 zCBbAKNpt11b<3Wi^vPcM3=F`OFUAX+>z=g%SuG+dm;7%!k>?kL{_w+=EW)x=eUQb9pg77gt{OTehbk@9jg?TTggCOD zfXeDZ1gMRgd_>Iuqxu)qvdy`?v6e@6rYGDsda{LQkBH3KBUS~ZLWmd6me1yRCn{+b zbNDY?U(m)XEF>n@FP&Gnv8IUN8Z0&zA#l>sl|ABrQLPwVRxB{!G7R*zkrB}GTS5wV zS(-NWOP9*!Rm!J=2EHRqs5NAr$Toll52=VCfyUa2f*cFfA<*`)wjIp{vsl4D1s;<^ z*bqDl-cUMzk(iNALA%J$GaFSt=@2FTIVuIrmksH^yExnH6Ih%7^P+qT)wuih$Uy&C zF#QYJv7U~Bfxf$)or&T3TzvR%7RCnpIvozstP86U+z@bgc>1@@Jvtq7<9P(#E-c^B z8y?59*+VRCDo72At|;CsZW8HtRHN0>9U50^D;d>dvCe$8g5^2o#Rx!B99oxmC@8i4 zYMDQUIk*BoS8Tv*frr~|=uWE3Z9go^pTMeYc4q=`c3wO)(I}X}T`iqaJqAm9BueD0 zNC`wB7o_u7bS0LB4jzqTe5?*dF5@s5!fD*`M=>2is(NkD36vf`JeVw(mMdjZ5kjd^ zGW9BvkIe)|%#kU$`*x4_EuFgQmjivneSR}RpP%?B^s;R}k8<|~k3@FeG~yoixRk$7 z-m=0Faz!bbxEiGdR83kSP+sl43#G&{TW1t8uAR7?i{`1~mOO-U0P-j;r9Dtmr}R%E zH7%QSamVs|i@~-9S_;lm90xAtL;5T)gI)~n3St8}ngD7(N7H!T2j1{uL+Z|j@h}g(#bx?y$9flgZ^V17 zeMjUFmrLN!`nnFp1O+g&07DCCum&X+m*k)!Tmel>y#g|l;382=y+T}pMzAVEB`6lu zE6kEoELy>~QC8~y6Fd4d8FwqO@}FIl%psG~KSU2SJ^e(mWW2R9QECr3WhNaj_ zbs96pCqU9k@nVXtA-zdlL7wk|nMzT!g_>X@-vBJ8NX>l{#g+`~Ch1PU0vCd2Mw+drs5)?1I(RN?abcmjkV_b223{AHxaa3u4(D@)!uL)j2JqTe243RN zDn3!76xvJxCW;xs2IO~bgZG6iVOdSF;?EjYKtQq2WsD`n_1wPez3W4{`y8y$xt*) z8}A#%c%_x~Ez-ZhFfy4?07Q%>snkTsd_9I80Yz6Uixeu2m8}QBerTNY^aqV^Fj3F= zUT*2etQei#IXyg*iY5-s4n-5`89>`$sBVA>dYPr%{1JzNA>Ej0nbaj0&}20wIddHo%nTc_v-L?|(l`mT7N$La z4#A%~+$e4B82Gu}5P2nfkesB4y- z2-4>gKx=YIt@dw9RdRE%R6g&6;#I%vEyhDPFP<^>Ohr>BN+H0DDix?x;IhVB?mBV7 zIK4Q9$bM8X6%E!iWEn**n7G|1nF<#nf;8Er1CKQT#9a`S&e^-n(t~HBtvf@GM3f&5 z{^*`!b3hhvw|cE`M5Wa|XM@R0*0|beiw`_Uyk{hbJWCidbU@$^N6-`I4GJq4QnO8J zBs13QbkteX1B^mTI`qUfsV9>CShyr1M&mY5ej%k`je#tVV_;%!Q&i@m5X^k2>iTctK)$^;c9)hI==_$)nNlxwP56TxvQ zL4jMct9I0tAj!h^E0jwm2yA@9>s?2FC;u?dY7ut>1xdenjJNuw*!xDwatl~uRb)WZVDw6 zda{G%E3nqEF2LD~7tOQCy-1kQC3S4TQsn`)!=qp+rqtNhC`g#V!~3U#W94{J$pm_Q z;_`(Q))_@!dBKdP#M(nQUy7!x#^UMIi+DhA^wQ0;Ass5g8tJvYp%-baTq(3Sw;D|u z`nm@B#0XSR!7OaeUVGBRF5EO=$cidz==^TqrgBDQ4Z6DgriNzEt<;w*n8Fa}afP3z zwRfq-py0UVVf8|^?vlF7KEmT|sjl>3SK*tx2^0_B%(R{NqoSdVBk~IXszL?22|5!l z!2I9}aTCtR?|#4h#0Age0{HiM0b>tg&-3!9svVp!YtN$xE^UUVPRSnRFQ2!6Z!2Y; z01X0Es*hUZ50CPKqfnraapM@st&E<^;%R^uIfL|{vs^LkDWeaLIS#|{^Kt{hdP8On zG4en^Nnf*iou+FB+-woIlg{Qh!2buD3$3tXPr!>#hhDsD`wUH(t#GZ%U6`@hwO(yZ ziWaC+QQ_~P$3}qzxi&`Q(+UpAqAZo0AmQ4wAZ>ue%O61ZC4}=_JEfY*{IY~xi;KQg6e+9x0Gw?l=!a$0)anY*>ZpiFdzh@66Eh+iKN621@cEo%qXCA#0%ilA z3`4=h_4Y4m#wA;oDIHR5fJZP^ut9YEqg>GG5(EfXV-YL6H-$(^uJt71SFbkK$lRj7 ztNg-8^KLmtu%MP$$|>O4aw)k{Frh*Lp{g~*(A#Fc-RGUvtV9y5ZQNw-(jR~+l5CBv zNwOzZgh_Xp)Ty%cw=nSmspqmNFM?<;vb zLMxG8uCmHBdd}oV5h5VH!PEe#mAEDzf!)%Oh$T+gK*~ZQlfcsyNeId;uN$*?dP_q0#V00bCug@!`lfGKoCYiAUkOEWyc8dW z!kc_LuIe2d^G#0!I{p#V|M=no8{=Z)6;$r%+AAuAY9oPvLERsUMuwFy7n| z?!9RBaQ}pCRmpQ|7__Ll-UO3(AyQF~h7ws_Xtf7!x#fY{u3I{>B-2{4eA~N%!FSzO zu6!nN-~LbUdmK#1j+wQ~@NqRnTWZ_i9I^;lti{I%FW^x-kinp?RrvOVj>ivBZ{(xR zYj8awyjqZdxFiEthgwEXD^s0pQ44gV%}P$z6_qHnZ2hwEEL|aMXJR!M;YDh-9V%)P ziZqdFquTBtTS@(zWbi?`TCRMMC*XQJxgk<$S^FnFPjBRExo1QeB{pIN^!gI)|g}YU*=Y7lZn2`a)+zuP%kv$gj%e(%2&s}zdYG=7$l z3tJ^GtAm$G76)64ybSINt3ivGjausYIxJ6EGyHZ_wD3g%zSux~Ac^ybSa! z)yRDqApzF6<5&zdmshO9R^F8{vXHfdw|Si*H4K#DvmDA6rMW^}gnOe_SnllW>nyW? z1YI@cbczU!aL}OGO>tMZbo0CJ z%PgLe6m38kuS?wo{lU&_0@h}6Hbr|FR3HNq71ZhA$yemCir?UQRWzKjB(@Ax)a>JQ z4j_;Ljw_TuOLfM11wX=5Qc2uc07x-co9hcxa_zHiNdY1%`TW|tTmT11iGq`YgTgqU zPGbeba8s*7b-&FoC(fLi;JZS6ESRRm%fFY0Ce8?0ml!^tAO+3|{Sq`<0*$i70ydj; zVgT7TTV}M3%PJscB*^eGmXf1O5Cto}Dh1(O80Vs5eST3h*T!bCn3x+P-gYS{Fsy&3 z+G*`awU=uT^6?%j`6)cdhazGL(G5UyS;y`3XhA8jw;k{%4)oxi!)HKV!Xr!AJA(HD-h2JMC=kJK@wq0q7Wspv_PI*3kpd5w z`H_%UPc`>VZdG{A5!t}q@;pFg^GXFOCYem4v~`EJSG!3&2B!Qn?YvxST#D(G#HLWt z{tk}bCd7%&IjxFUlv1~xy&i@YzB z%tx}hz>+8{b4^-i)~SlT&70&Qd;)Z*v1B{jx@de`HmU$Axs+P!yzyPwi<-RlF8RAx z%J!i!<}^HcSzG~AS4&2Wz}-57b>DB-?$(yIS80!HW$jJcTebhFU8Z@d2S;=E?1$%o zT=S`Q$HwHIjYl0^Mu5DJ-~e8;atTz0AVuqFST*C{05KbaHgrRP{+yncvyzpcP;%9} zLC{5!o+aU(3x)PcAT9$Mm+Tz@iSoA+#h!_YJBCgO0;0?5*zNFpdjkVKyKw+Uhx+O~H%j`@B69YNk5cP$VyB&7M~^pEjd%OSG}u+Ss;;w~@pi z3G_~RZYgq9Q>P{~EH8apo&|ou1`kzmInb%~+huw7Rtycr zhd_z;-$S0XSbp>2zlK~X9W|NwmJ-K+#HoXX87TohjAHReWHl|+Z+r5|+jef7-LYeK zo2cXBp`m+TbI;Haep9yWrt5xFJM-j|XGY`uPMz8pm%r%>KJ*_R3i2@p_NqF)GTK9- z0y{Z`4m}}w;h63XZ38(ESQkhwh!c&COiqr(ey4re9;&+D{yj(c^m{+|?|#vq_H~f{ z4VNpjMOCj%#F0xzQd`QwL7k`57jXh=%doY}&@`}M)V z=&egwmhsl;Cwg=ox!HkJE~$PNr25Ha+uD4e0W2Ddn`_VW$l9j(m!z$4l+y>Oe=1+Z zf#k&YiHYqMW#h+qaNE41K7bEXF1&%Hk(^Vlg57ggQ0L)HcrLj}N zbAH+1B@;^Dc1U5Dk7qlL-Nb&qZC*a8L71ZeKi+l_+tL^y2! zv|5Bo9_C`%us&dc;F@}YS69?3Osy&kirGORe1_0iu;#$-fkheLZ#3!&#htR-tD6i+ zJ^Sun+3&Bs*s$8nF47>Pczn3Jw5>MH1co0`npZVbXvICBX*aH*chb757M5?0NmCmJ zSA@$e+t9WZi}{ujowDxRwkYgxqN2nCt|!1PDrDjnQuI#C&(m$&m75>hGd14lAMp2` zxNyO;s@osR^9rfE{=&J#Q;UJ#o}jnS&xPM0 z-5;C$n7FyWfB$4W{+aW?8IMoy2O}%t=(p6t-#q^rdC(0|DjRSOfE?iZ0Ih&O?DJel z&J#dt0Z_}f1Sd_SYZc*7 zT7E#@fA(WzoR|#Lp#cbNbBKlV_R}0~WW=NO!a5S@7V^l5DhY~uSt1!z)@avgH{AqQcih1x$KD#{fOrlr8l^aThh(-QSImz4M{u?u)C$&)d5 zdV+31$|V>jz{ZDV((wY0S0~Sre2_VaIM%32E@YkMb^jUwBh{(fvtMO>mrzMnx%+@y@BnpOu2aEVVQ26T*c;0X$p z<8_35AAL0QsPs2G{^*bXNKS%+;J=`rqJ<_sGGa7}36NBy_(a$z0&tAlszsA5a~Xue zjKtZ-s$N=Y%|Q0Up#L7W5qZTdi}55=I`}5x`(!I9gG-` zT|t-A`z!Eu1dY37bKN@lzCFh>cHYVuYV8n=zsLoY7}-#%i{6KHK!j=8g^JE-^d zY#r?D_lLx;pnJgU>g%$eL00^n9DHy8K!0yv&*0c#pUXYf>mQ5;T>~`4K7t##4WrN* z@Dj*^PveQtfC)HPIK(Fp<#HbQuK+4kwD5$gW)Vh@v)dE$bUS+@o*uo&`-U@neI7B` z*EcXR(API8CMJAtx6|o%`zCg5?|1tA6FWSwS&R-%?HV3%x!taT*dFj1JK91bi6FYW zE)&eg7|Dcn1Wzo#Z%sW+3p6XUq%IkS#u`IKzNjjcEZS%I$Sv|`qzy1R5{Wde9=QbZ zgj}Bvz$OdJS)87_2Np%Vo?csy=Tdpl59sq5Fh+I#UR%WTaafVfePJ zuHy9rqCz+hCz>|S5m5hEZ%c^as|A5gMkh)UKX5`0E702;z_27pknvF`9PHlLI4)?? zgMPW*(_5^8Fl>hl*A21_TAUx6Xq(PY6EH5aUoe+-9a<0(dycN{!pch5^udf zb8CLs;}#?wZQ7&42u9jlFxk*;l@Bkpfv`!pjXEm63Y%dDmxEL#0Ii7tZBh+r_4cAO zfD!=Ax!v)m&`0`6#Ltx?h?1KEo^df9u_u~ND*6M(nM)UXsF_#-SL!7g;!ESIZWv6H zEpk-sb)F>wJW{e$wcEWnT#pQg4cVs==REOuN~{(hf<;K9aaL}A*I(ZY=y@~x0} zgLCWf&&CWe*A_TD()qqa+ou2mEu;w)8#XP9p{DYEMn!wlKS+v^#LA7A0uxsdi73)Z z5Uy&`w3mk1=Che=Th^GAZjFAkMNgXq29rQeBM6O@6+ zSX>)Ps*QSCn)Xm;6;mgcRCO{@ER`p(H*J>L()#`{b#DUR)_I^)=hJ#QIa+bIcYNObvx5eAMrNn?Y(ZNnHIk9`~5foL`g~JX_DS65eEkc2j@TM zU%uu2Hqr=YMn{Rl%kIz(4Pr^OEG^jL14La)%MC$yW%&{nl`23#0Rc;=`e9UY?fIdx z0LrxuRG?-*{I#p<-*)I<^wwL!8fOq16=HO04GIO*r>jR~;`;?a>=@WmFsSBV5&{uC zJ~VY(Ed*k$eeW<5qFoXOF)(pR)sCm$YUXdG7GP~QL{@nXs(z{rN+$68?8sbWzyT*y~Zmm6CY3U+5}7GXE* z6X%MEL;)=6#9kzt!vUCvAPD8Aif>L1Y)xGE^w>aZV)jkFPQ%gDby{r3f8gv*ZgJhv zq0MxWw|8RdMnQiy-7~}K=Y}P*S6XG z>W|fTp$)(d*8%|~k{B2%O14CzZ~`NMDxfKyIg0#5Lm560ITfoJBYSi{{O2;G{mE?H z?shpmo_IFdKbo;;dV8_K@vZ%Vcs89L8IVIO0x11#k3VJlR11p5JAG!#-_z+rQbzxD z#?{&5AKc&W!NEXp{UG4t#`sc)Y0m!zS7dmI0P!#4Wf^`b{}$ni3!SCl#yiotjr=c+ zCPzP>98JDUI%=g->BWIkK8Hi9f(&|Z$4C4n|C5Y>GygVxxVuvMAPymH6|;;8&9`9M zU@R`eX{4f(IMH$>nuiy|>oWKisTd42wm)#1d+8_Y#zT=Vki@)9bJ-2Bef!(}XmCH%IG-(o2Q zb$d%t3(i4TL(wLJ>K1~ev(B=nQcM71Xa_(jLoT$&7-7i(#pK;YD>Hps7^peI5Xp4l zB`75vY?$#0-~iNbYT+bA$Z}MHq9|4VmUWh}idwJc70%#^>js=_^>K8QSyQjAa6|*D z%7kPc+>hr6Y6H&~FkpEh2ca+wG7ZTueJR7x;TH(QpmM_#C+Mip^ex0`D3OvAW204K zO{DR019p+Y^rcn#8fWlNzD6Pg`Lt8AmF^Ved|Hlt zzIog9E!{rQ&3~o-3RBMw($yvWj>!Ek%n1app>7+d1U7`v5igD|m2%!-$*AZp{hMP< z3rl*}oMmh8s+3CQy$A6(KcBiY^{48K38VUHI5i_l^Xs;hp$;MyXv#P^uQxdRpm)B) z*ZjOn;TNi_I+dVf+Cd`)g%&1|PaCQHJU(%QxntQHo56owB&f**!28C^ll$MiZ$YS* z8mN%00RNyq*SF2Ah}orabG$#>74|BYk%qs45Sz3m)tBL|5CZS(W9s){1S=Wq*qWZ4 z*ND;2iI~mI1O-;6(?T~&rQy`O)KvG22hwQ+f30W#u{Ax^5lk-_Mr-#R%`FBC8{&n~5d9b3|#aCjklf3O3^mqv7!uvK7oCP-8VmV7TI5PI}dq|s2D z8!N1~Xpr{^OC}^Yz(s^}08r$aQ0t&6w*v8RP8v_+E?zawgJw+eW(&h@Qt9OK%WVdeE&8qwh-<38&@alq z<}AAY3S3g*xrzy&x8>D3C?;Ljb%CiI(t}EkXDjy5G8$OM1QsQaP-=oK6>a49B5I)v z(vcrZ7EWQA0syJIZ@lq_q}cDT7u$VG_6Kgb;l|&Q&!1Q>H2cqT&V24&i~jz0a*IsI$Al2(=H0_-Q=(>rL~KI2o8dbrUjg{X(bl2=1Ef1>IJs z(x!k7C|Mim4s><~Ky9^KBfySy8u}c0JTzz|0{qoWMwkBPh$(1**6#lw5yC6M`2W9QwFXsUM`ZrJ>KV z)Ok*tz(j@hlPMCUn=fyKW*Fp=msU16RY7nBS^@xYh2|LA+tfu=|D}tr&^^Yy(X2qP z8!K1snvi%C)aM9qUjWQ2%@5*~NOE7{1`=t#FT#K}3YNR$6Vo@(p4$IuhCohW7P_I&c66U)ne?8cQ!)tp}1o3-9G#ZJ7=;Q^_ z!!MgZs9}Z(`jwHHnUS8Mp&q`tFOCV?A!Kj1l0^h@WY?*g?9h(fd+^F)A4ZO5>$#+| zu)^PA#X>A%(}IEzO0M=&m69dJL>Q*ZC`bby!t@%}22GKTu)He}+$*pFF|`)ErS3P0 zuSx&|#!;w1t(Ml2JYnAi=|LIV$$SHmd|{!*Zte8kc-zV2 z$8J7(T&;9gztCyVWbB=4hrAcNyZ@%U8?9IYV!BAf1Qu=vSOk5%@T`!|reK4D4|yN_ zINh$$d-0>c=~hnrrPnJR|8=%gZZuuHho;96N)Z@O*&`vJ-PJ#4&rZ(TBX}Gbw(ua6 zx&Qe5Z9!Kc;0oSm?fl()=Y76;Zq!PbBe?r#b_bDxt+tcs+;L_{CpT!stZBxL!6F`N zF~P=Q!Dpd?H@;dQD^Rt#AC%wf42JcCR~3nhprHU^wbF4$J@!B;yf&-0o~_tKr7?V{jp|oXDsJPyvpE(QHNUgAW4@vEXI` zwM8=K0=bU6#)rnI;Oi(-3-qMR1r;N_L0lZZ9N|}?I;9JN&O)IxP!4t!(&3IEl;Jv& zZa2-dwfK>_NFckkSNh>WG@3SJu3zv@CQj=0&I?d@eyTo`$6H`I9yI-?hx;0>V43>ie_Bo|z! zb5k0z*0G8`AFcHCRJf_3)jCG;OD7K;IEfc78<6q+J3NKd_qBu1 z@9*tS4vyXtPmE;IW(jS65^ZY99c>O03U<3SESw?s3%JDv&9deXRZwr>ReIi(jHU** ze%NsOQ@tnel91S2ek zSZFG;2({^QkCig8c8bqhnWq$4mwL5|r-8Z4oQasNT>t5$Et;#WAhDzVcZtVU3k>F4 z!Rh}HebfP750s)lmS)pZVE`!BfK zyiw;O_CD%qZI3vsU+n61Pu}v>r{e!pLKi-c@4H*B#rMjF-H4OB)la$8T~BHxR+Bgn zO&18c!cuaB3T&3eMMN{_<|_CrizXsL!+Ua-+{<%wQ&V`YTK+c#9wm>Ym4;;VwUHr@ z!e%p(S7BWE;K2$;0EOUCXVmLaNTF<9``~=_;{2Q(MJi<^PIlJmrLMsJlgd}y@Wf;S z5W>0SHpQ^JhzH6P6%rso+QoK|v!DI>Wl6urnAKcNPVv0oj9P$2B=11yjcWMsdOaVHMp2P6}dzj38W{7 zC%dxQQx&XDo9(TzlDz|@C}}%tJITon89}nC(n*EPd@5J-QDKnUV83Kpg(ZaltrV=x z&@q7wt)q?{Xch$x@oLH7QiDbMW}?b*n>*Up8nvsg;Z|466UVm%Bgc-bo@CI~;R&{O zwmO}|-oQ0}=axuUpUc&makYAbc`uxnL-~NWdi`maVgB{hfZylnoGf&EoaruaVE+T% zJ=bjcsh=uDJ6(2%9X1wcdt3XUuO;Vg>+FiUJPwz~?r80ZW;t?q z^R_Fm+tG5#<8}D?cn*7utHax^A1~x|Bs+%(1Bi_awYDAWi#pq3Yx9f*odXAiYa(YM zh_D-^riX;zA}!hkDjFFG3dlbZQL@iksanGyqqFIe#QsRKtMiYT$y@5jzZ}`y190G@ z55@hd4*#!IDvIgsouFRfT0?XL>Y*F<;5gBkP=xq7Nf_1xB3vm~pcznNQ8WqPK%&qY z9k5btxq&Z*PP{`sk(e6ae&kHBWBLnddp()V2Rl-s6Ej2o>4{>`J_I3usejANNn|a3 zcVa62(Bbac;PlPO>;DhKIFw8kcB}50UC(uNLC6D2)%K@;VKlVXDs|ByZyswypFe}lQSQ-+duF&hxg1(@*tQ~i^Te@xw;~z z-x--{=~|6+xlAytnNU~tQ|cI5lzK$Mf-nnpG9cDegWe6)ff_eD1hST--KX&%(@GN9 z`TN#rY(jkvcmXdnZ3TB!9yTYqr&c6G8(esyvYM~kfE8LSP#Xnn0tV$eYOGOQRpQd| z&V3$q@C&>EZ-7C;cL$a#IF+CV$;#Rq6g@Z+5YfR982L54kUVrf53y0Fo~J(`o3e~q zlxG-#0j*zjWVFF{te03O@sXc753J*`0feE5mrASitEJV_2HxivOJVr{Yxq)WO*79@ zX>lG05k4|ruv+OL4tH6Z*3HC1XB0@m!Unz9vCrIYi@WjozB|B$F}Xi=brt? zCc5J3{&aOc*3D|_=T_hG4v#U3=vecqr=IFWJ$1#lKxkJm;V5!hybcS25jUIDY3?|A zX*$j8F`{7`vaYCC<>~6RbF6g2Ik}`>SumWUL)on~{;D&{Y!d0p%2NL?(_7gv*Ykgr zO=h3$%_hHSyvx5MgED`G%ntv3tFTSZ&K}Ptb66U>x&KF+yL42++fbYwm$#M!JwV+! z7PRcjXr4CaLulpg`Gd9c?WQ@6JHa20oim@n&ckS_FgvRj#m12~9>X1}Ih=rl-!P0f z;}kS+aX)H$j5~`go={(E41CXx}gn=Czn%S3ZU)CZlx*6thVNC-$V6N>cG1?fLg5}$4jD%#@g~Ndq?kunyhQj8ORs9Vjxd77IC7BE13^~3PhmW zzWV*^)k71xeu5l4Jhs{<5s|$MG1+jY)r*yL4CI?t1Q6VVm!tM#Jz3l@0pSeI9~2+u zA%xiD1B!VNuEmX?7E3Y+jX%D=CbwR(?p$Fq;z?KnN$wi9Q(Z|4@H!MrnA|H$9)iis zs(kKc=?{_B^?*u3lscE&G^U?<|2?RYiM-ClNHL}$qB09#YsM5n7!G08{if2(ph4aw zV;r)#yTQ&pP4WmWO+dX)x-PpW2pMN{v-c3_aem;ex1Nd0|r(`bq_^i4E z`?t(qtY}FL_indIu*4u{4D-s1Zeg*3iD&^W;W@$%FzO7%5_fKV3U|>jYQaP#vck?; zCemx5=3yZAHdan{?J4vgb+q2WjYA(;!3nVdCJfS*1It#%(|7M&h@ld3RTnGXxzHp` zGiS~K<^a7U(f9;-G*-S=d@+5Sgmx$dz;|;6j{IcSN*ApFr1#`|-!3tI>x&kg0yQBJ zi=bA|^eYnBhx*-t-h5AWV}>VwWP^*CT7zN6?(3N=Y?-dUzGDa&ugI)Sn7IKWMMVap(9u9@@Iz2s|h)++)SFVUU zD>)}L9FHgDJi$_MkL(bW|8NUt4JG3(^y3zyZcIUtX4!y1Uph3PE`2JoV@HCoGVcJd zD8Vhkw^vt{p%U_CVn<%zVrY1k{X!KPgaZ9;)j}twByG^tY%?v+K;CDz>y5QNQ`whU z*XDK6&lbg`xpZpJ=^?!ohD0hP)dv5Az-I-xmOW#q!BH9(6590w>t zM&VSJ>957DVlhN&bMi8ImIO%k?ASJ7v>o4hn>}=4-)VdB@UD?Q!}s)08xiBpMr2Ft zw1iy2GqPFOeYm3TyXR2PHy`M9!$J6?<<8d7_#fPVJhptuGg6-O3`fdWkc1aOP4(yy zCS;#Ev|5lDS*9aqDyAk(8S{|rkf%fgkjoP7l{d?aC9?#9PX<3`0vcl+7_Ljc z_~!ydhS6KdgKK5biGmi9B8X`(ggOXO%!*6aDV**w8w$*1m40e>^14`jsEEWRb8sTx z@kUH{?I!w28+@wZ0>tvL!@awcyL~uk`%wJbbK`Svof?Loq+uj}0^PEvqZqxEI8zN` z+_)%d>=}>3iwo?k`fV6nAFo+S5RSDc|6r*Ei|XS{dku4mivWaKQz4v~2#_|=b#Bd* zF~xOuthLqTi-(e&n!%S|3L;=tKCk1}|Icve!w+|cRY)SxEa5@tvLckB&1c9-9dg$_ z7g)91IC!w^@#g3MgUhuF_k&gab^(>HP?*W|H4fn$`k6_F?^nSge9(AUu^Dbdo1HRp z!vClb*E}L%r_SXp;#v0u(L)7gab_5~*LzRR%$(Y_cPzix>)qKJ3Hr9Ahi6CpUqM#( znc?KAU9fSfTg5+W4hM#3p269>PTjukU5hw7;N9ue&iBqeEUb@`GiSR0?}Bh zyM2Jk(9z6VISt||Q-{f*h+qi+sqba!TlzIIGX1J-jgucgiBMrg0WWu8>y4-|^81RZ zNmuuAtWEUyPplyk6k(c3gxhQgH>0Nv1#$YIj6k;NLp_MvGPZ7JP^PZj1T#G9+d+3u zj6*C-U;HzPSN+ejRa=H}eUJBbo4gIXVi%FGXhG+q()aR8WuQ zHaNI2IJiwgSR2_gbZThJNIpM0l)E)I1T_Z&OLgP@c4w!{bGJ@SbhpPHdOw6BNMzwq zC~Wj35jp+XeiFIq zUbmqXNMooTu*OV{^iNz!8R_=+w2`_nfezBGGh9N_hd0j{<~v~DU|ebqa&~Bsy$a?< zy&Yq5@tk<#xn7;fWF}s%HSllzY)st?e@-Y>F%s#Z1J2m6a}a(n(5VT;A_G$^;>Bu9 z^s75Za>K?*$LRi<-iR;kXm>nlWEaE_QSGjNeZ{DpH_SqQvOjDeyXS!KdcEwlM+lQx zft(HI!cpXkD4>KoUb_1b*Rx{G9n3E;W7(iK+1YeD98Rat7V_n@^gcUV22s=|%q3_V z%n-p|mr6)b8YT)>x)!yRnUJzHD?7!LSCuC+tEQ>U)pK-N&rS+)odrHa0~QR}gJ7IY z3PJS^7GIm^gW1*9><8L@A+x%gS#dwqyR_7MX7-81(o#Z}$}AM@4Ujwv0Ft>3zk+GP z&CBGRE_@2&z&`b}i6e`vnO~Soj^K)WPpPHE^e1M1ITcH(jp~`i(PK-AC#IAAxc=0s z4}?cQv9-F93MQc?lV1PpI*JOTmd$7%BKUMA>ky1(onFHP2qlcyc`4c;wH{ImiabnxP{ft|aW2nlfpWrlM!QX)oon4Xidybqz28knQ)U%R4bzh&)*B42*wJ_6hOItc3pHrR|<_c}`r2gAO zhaWnOzlUm5@?}g(qKgRNw1iwYI(SfKC2oY>F4ZwOPxUHhN6C#s_yS>jRE%Q)|FXQl zGz7&8Bv*eNzNA>Lss0fNfZ|u`U0j^@MK4Gu)AP)~ihQAQ{{k2P^DU^Y)j1NuO@(V@ z$_$9S{y2%A5qTK@&X z40SfX2@YMy5~-}FwR;|mjqfW7TBF*8DhU-@*UN zR%7IDxS#dAL2}1yX(!DiXC6Fy^uaT#Bz*Frxr>JmUBpORS}7CO=HxjFaAd`t%P>(e z(2ytwycsNn4=j!#gOPy?8K{9(kx8UGo?ew3GbnnJjSqh$8^=Ftdo`qk9+sHqTHMk! z*g~8z$4FZM0LhEg#oA|beSDOc$O4!GAOZXbfCvAG3F%#wR|J`X*vUXkYX{JRoGrf* zcBOqzgaHIUkb^ zi_i(4MkEeI6^b#Qi_fEcsqt&8*^PfL{b*@0wyHzGiP2 zRnRkjf=$o;zOA>7wRs1Ixb)Ahc|9~Ww|G?iwyk4rP8`GMwR8M(XrRMWpDAQ|6p!jN zK3hv9oE?uk9N!gD(G*Fz|F3UYU0s#c{GzCHCQQNzqyION7%WDnwRetY1^Fp}tPiG375ey_27F`h-t zb_sQVVB5j;!Mc87aS<#GCLw00wgW`pfv|<&$6|yVv$!cjStT+ zTSkUeyV@-~a)q!!&u+kznjMG(7>%izeW1cngrHg=q!nEiiC9rNHBE`%Ke^J1c|f zE(x;J0XUGxgT5e155&cO7yKvP?om7D&^Qvb18-f_dGc4xbh^{n4_aG-L6`atg#_d5 z;Gl2vEe7Z@y3e{W9S7j~rh$JM7evImM_US$7e)N@yyZk{*zk3^LX)|)YKNGW8eTau zlRC0*SHSO%?!ER{Y6kadA#!v%)a4c2nTg^Qv~70{w4TExuX)a&BHmr*>Ulcq-6juct zVh9)H++oUd5}oeq@YmT6}jn@m=kk)Y|5D8X^$Mi6fIk$@|q8 z!rMQ@)KwqaPE53MBYt)yvL_TtM#2$GZol*?ZIST~R3%JaFGGHR^S!Jkg27lUIJ%Cp zj1643`Cb}p%Oz$XxVNEZpVZ@m3j;wZcry^1f-?iQYPGU$CbjF2E8BLZW)3&)F`d4eR$5sqpPv)ObnFLf zr6%r+c2P#=rNPq^bud&At@NV^q4Y z!53oqOWr7E+x@xrxB25|eRyPxen&7dvQX_1hR33nVpjpA1p)zA830YNOv5Jy*c)A3 z#@%3$)-AwVD`DTNvU_HFZ(p=~AiXo4?vD1g7^BtsQNwugch=V0MEZM=D0VMBM-k?^ zXkT}0I^Ejcr$)Q>j8y+db&u@n@-LOOf~XZi+@RKWKEl|*@qc}SXCr+er`y=jnAuxHLCbQQ8Sqdv&`ZE_ng_r~qI>HcVX&$R#E z^?hBl*RGYz3(~N!C!21|=iB<71JU2ylCr1q&z{s4!Z6T04Q>z773)%fJ6oeJgbXZt z7=)8Kh#8g}9nYVb9vK`phC4>~_ipor+G8H~nSAz6A&x7B!r8*vvxPzp_kLm6EarQ= z`$LY=d-iu};Jf-;gN3PV`cxWkq8R|$MJP5|TL$yU0b2ub{6L57GS-DG{aBnH1^XA3+R3>ewty~{YWdp=dz|B z68D+#ZKF-|$PH&NzPd8Xz3oWj*EDPl^M!pM0j?rPF~U_-VbQl%6H{toSJw?uaeK(g)LMOMq@wXp6`nbHaOx5}-pS)F zftC@qa?3z`w7e?b5TBJ9_kb~bQP24YPR?vU-nu&h(_S4nMa`GBiHy2d(0n5CWwJ=x zrErIcGeAdzmCzkD%E?B-9?`M;ugQ%K9lPt;(9W?^Y4>qeo*nKhc!%3k9p2t(wAbs) zwC*U)?`ONkOI}5hu*1 zXb#}Llm621{lQfx2*^gHPPke9-0s`&*j@dcx)$}(Has2bjgzUJuEl(Lz#i;a%9pn7 z?&{k81t85{uXkm3JmnuhaiaP{M?fCVLSUL=%v?31c|nk|l6a76kEM)GFV9ZV;C-9; z7($B@rwMn~`YB@DW&?{izvYQji^Crl%|dO7>)l1dG^UucyM3u(|Zp zGJHcykc(GDF4k1NIr<(QPj1c^m$w`598$h>P#ky>2%lePP-+Elj96WtuV=K7d=|A0 zvs++#Sj}O2D67^bOhW(sXmVvG`6zNiJjR{JaOM)KGr>s$qsGKDOY7LDtgGUy_%0bO*dTn1_1bQ6?-`U-te`*;J@e^xDz5{^kC z-)K{7)aYSf6n_ag02QN_gQhCqa6{7i`z4t#|Izx0{*@W04a2;_4z2!KW^be<}MRPg7xClq>{37)3ym=7^al{nvR6%!F zu*Yew^Us2?khqvqZl=PL&p>8znX&*TCCrr-%r_0K*8|bCKn3ulHqSK9_`INve=S=? zm&<$87R|0-1NE@xe){$4}N_2u+WcgkgSx}E3c&>q=h2`U&~$ALsJ-!)t_doi&;iVNO_+vA8a zB@|`}oi1~3iAmnG=i`_Gd-kaJ$y@b5$(#Jl#Lp<7<7f1chFcte>{hltoHTo6`xe=L zUbeXTrZperPmq|{U0PX5J&KgRja7#enZKB{2rC<2pCB=QB=*m3Byae<@m#|p&|;QQH~728=Wj@^Vn^B5Z=mVB=?3Ick%g+rMc%jr)dCWP z=Og!ek4zg6$&Npx3m_Br_OO;NBC=n%C1nq1KU(8;Qk}R_ikJShe_lUZYVh8LyI2Kh zMJ_G;4x}#!Y6dZs)MyRIO?@1ZX=`PWIvlmZYv-TT*U{6qpr~p8^wLY&uYX;=ByTw3 zNyuLn4O~gD7M~nlTO0kP`ozfE+Q=tlG0_3zFJuM^q-GiTEO`e8Az&Uf;zi-6g=HhE5>XMESrLM(qWKff*39b^2e#bezf31hL; zRY$RiaGlT#oHRt|!OAnl0INjxz%xiE2l`#a7GRN>Wmt2tjxByuBMZ>iA(glzxlmLV zp|zfsZQtp^?{0k)Uf1k9eOwqp>GZy9wtjbTg`3kqs~JJ#g3M7)vkRp*tY&u*i&;W> z>a69dfz$gCVsk%Ue>ZSCAlLlJ$j*JI!@lZQ!oI)buBzzkQrouxt{;!f7Y+T&_`XJc zbeD-GOp}sBLVuu?0a%B8dWjhiy-)GMO~Qc{+XxjUf)$2AE%mlN(UCWlFJ5F-3Zi)M z0)ZXXz`tLSuQoLVxcK`u|(kzMIgm%x^qEmj0@@Fd#DMNBusn*UA+Zbo`cxRyZ50p76|QV zQCmEPssU<%5fq?M1i2CLS0{Nw0M!cHu*{!!_gLt7cFf)CXc=&XLZMT>>1p4#wq2v6 zyV_oEvWTiJ{Vk3*=UDc5Xv}T*{>D(~%uwjfzMVUL+m7<&qZn5cYmj}@Pj5zc{13Xj z0;Ku^a>88oh7b+*eQsg_;#;}CB=uw%2a^L`qazE$8u;%1!FPga{`l~0{>03YGgRNM z*gMd*vIY_+oj@w9xvTd~{eJWuF>yZ{XSm87@&6Ea_k1K7KE?Y22;#-eNniCISK5e2 zv^6GD8~t(UJv(RFwl|F=#?5BCP8L&2W^~OjAe*BxpdaXi8)jIY501hfNe);U*tT1J z&*dt>i@K-RJNkxEZ#ss3#Qfj?!JQwf{$9E=w@?W${d;{Z-s$Yz?ep#SIep#wNB2yB zVXl(KDd*}vMwBMYdtl^L^auBggVYVwO3VdUn$X=aMJ_#Z^=DV@h#92SL_4==nVq7p zKvf#VYPJFeixAwy_>Z^}Z6jB26GapXXd_`Fgt!kjYdyEu-1+-2J(qIoB5vv4O@gi&i(gvYI0a>D_F(h^Km zR1~&eBvb-fdm@~Sr+tyGvF{|1X?DE3yVdh6{8-@^_qy6rF_g-h2<`73Gg8Uk$Rxf= zCXj`8ywf%8aQ;f|Q0)Y}EA4X%CAK6Uf))@0Xc;bwM_mmK!>v(wWE$bH#>M2$Hu5Xu z;|I29#=~7(OZm0hUS)iIqf%L&7~eO2Yv*vs{z18o>P5u*H6NH5M|W6t+jTB^8?*#U zG*_x=tN>%1Kt;O!zp)*uUPF6GXsD624oTQ>5QJ$qL6{!a7a zBcQ3B7uo>o6>0D-a`hENo-ZP{sxBVXEJQqjmN0hMM6oX6uTCrARhSd9{oL0wUp3T| zCt1%j)dx=kug9pMhFq#`cr2U@-`p(FT#Mkd$h}>WYw!FmcPD>v^2xR-WC`(f!0FNK z9oy6SsVnj)Ol;PmA^c184%|j02{#wAh%s34wZO?iD2}-MpY!)50zpV`v0$j8mMhEH zR5w;Lv(w+db?8Gw{rw9q zLwCG+ck37u6Idx4%K#P_BhFrDceofstnKMKj4kK29~n%l}cyZ zQoFPDw8%0#FiS(slKu&h?T?%Qo}uYl#UaibBoQEWU)*p25YXORJ6c-By}j-YQLjO(zCe9{}NNnWefkNct~ zT*+3D5ORqQG8!KLCI&S}o8TbyEDmgLQic{NmAD9i1m~hK%JCbh{gDZKHaj(i9hW-w zMEdB5B7-fxs=G@mr}B4XwoY!HiQIiIJL3ZLYZ>UC?Qw-Not^H`>O$H~M&7Di%HQKq zZHd9Q(boPGC1W!C)h|X?l7Q|@*2_c%g zWC{oY`(CZ2=H3|3_6Ak3E9t)`KC}Jc=W3liCfTuXO3h{CPXv3r`hwkKV~4}Kx9MMr zKM@vapP{=6g$3BTEY?oxqbT4VX}}di6hs)w=P#1rXaU3uPY86YxqN;>{?4Nr@qX3e z3DhRhmez_GGw7le01(Z2g%AzkWE2}$mzcGoq7W<$)e27AvA~P_e5I0apEBl4kT0w# z4BiQ&F!Yzw3>6H{Ef*b)l)GRx;}E*0C$2aemFjJ%n7_PS=8dXwX$8fy8kcAKOg11Z zRbQF~Wa{xHmt7U!6uj-mCDF46UE`(ZyW#*w<6Vd#&#Q8x z>+GCq&YkT_fNNtEDUq%MW21U239cF%(1bhk{I)z{L9Wb?<`@FE|wgnpTxTrOIV2AidOP5#8Ya#OiiEO|NZ z55xMm!Y@p74ao;`xqUTJ2l9?V-)knX2?L+nP|KJyx|jv@3wQ|AvlNM7iqMp~jYRuE z5@1+^!&=w@nT^B=V&qiWytOAh?pts7dDGoSZd-frzHl`^{qGLPc0D?xg6)%zZeJkg ze9*CBI(9i?zV^16uI_v;w6lFUJU!NVP3xACN?Y}BRc9y`Xm9%;t(a;ics8Lbn#>WK zn8Pq?evHwBILCefT3lPBL`grJb53s=o(=osfA%msK-uHntuBTXM~CC6DVrOb!js1Q zpZYKCg6fCk-F9?C%xjPyu+!HtlPEAEHyx&{xC8kHKo*#c zh4mk5kOiX4GPGw3_svZ#As7B>b-rhM>bjFpM!I&Y`Ge2v-Mdp8`QNE7Bz9(>JlV4^ zI{mTd_0B!$OiPZUHvp#;U8=NQuDl);P~dkI)+FI{U-V~iGcfRu7LFUnnpVMR0jHzJI9qk ze;c4jvDVCM#%@gv|6HY5b|9fXmdK+HK|I*0mbwv4(b1lHEx+G4KkwTQG2eE554w#` z#5P~lf!V;da8Z2=dl3*&uw_}-4mL#NvglD%oFEECita3SkxCm2do7_B6Ca7q1oFA! z)@?&ZZmZf7I&{rj@;5zRIQp?Ata5x`J(u`MJdjs8-&iPTD8>^uY%&Vn;3Gz~`#-t&e~Far98*_iZAT0x?Gp zsVsaP{4V5g9IeCU;i(hu53kOfv-f}4ef*bY&Yf_dn3_itMP!F+{qT$&)@XAN9 z#+Jyopd2HQLJrfElPFuuy9KCw?b<=N;fl?dD(Um3UDKuOr;`Ux-MfF6dgJxe2PQ`E zoX7F`eS0U9=HWf{OFo0U)c%&3>T~$vN0Kj>9>Iyr$uChe7ds2UqXfJOX7wC~WC5T^ z&?0Qa`$-}(Il#rb*uf7Fv9ZZ%A}jJY2w67P?;RcWX1pV#-u_rNUe4bD*P9SB1ulEM z!Dtd9Z+Ipgo%6@t0|V|DLAyRgqu?ie#r%B`hK!|1$6bWS?&{#_;pk`M{`U6S+4gp@ zc`tfPOS=@08mgX7Yc+v5YEZpVFsG&mtEMyZJ%6w9)1X20d-y z3*VJ2D;t?!!{|-9Qc=U`KcL%oB=#g6*o`m^i)n&QnHVDqKU#!sPE<9lNj%44^B913 z*2f3@4C7INVQ~qAfH-~mr{C9Lf3F~b=<<$V#-Z8}Df;uGODq!blTJQ)g?2F%(adF| zZEcmL5*ByV0@?*E z40`cPAQn~Rnhb_Hz;cQV4n>x!Wn*FlTHnY7#Nqk)iV+SQi{l5|ebf(q?FYv%BJO~> zm91+s2nYOzex-yPidVQgDaJ%dl}2wIU2AFp(UbE_l`X~MmP+LEW@3ITFZ3#^(=bnG z4y{0@Dk8b5Wrso7Mp$1R4y>SN$fE$^4*a$9IY*lv8lB57&+=0PvH5p(UqGRr>bDL5 z&cy%zN6-l!_U4BQs2#CCxh4Umr@SRS-Bafi7cgC7z!}i`fILSLIRT`drVflElmrsz zAUIJ5EIlv~1EAXI%DjEJH+kGy{c`V!-Eba+yDU#PQbC7GKDvcI-$YQy~PrX4$6BIV|?{#W$XhX<09@)9#`L8j((Y{ajd81M9 zUqDcaF>B`&L~h@f3JR$l$SRbe4NwIIbb)LWy~jlXQSvj{b6xi=P)=5e&J zW8H#{%F6=ZYqI}@Dr>6_G(K&M2K)u*$MtjPHWe6Y*ma^cFg-gyTLHx6u`SxXT6t+mHUA6TL^e63r0&i<#;)}w--znSk?OxR$463lbeXg08 zZxzwMU?bp|=EkkWGoX z-Jn}Wewc?3I(jqxy?)7G(jIXH0$rZ=`5)rJEkXdd1d*eFTxF&#NBgUF0cEL7 z?59(@hA{b3X?G8%lp*C=rtYPFNJ$M-s3@1Y886KA5+V)*&t6v@SWk_@Gl2C zo^Au1bl)BKN83KO;q|O~I=b)9}x#jjMusp zRSJ<@EK58u;)E|eMHP#}iUluE8Kn`<$()H+?`m+i?&xRDqUJ?&$tn?vrV#}Ib$#<1 zw0KkVB|a&!T9;fXC?OA`rc;+)1H1t{Fr-;xQc-1lSLWfL-?{VWAI^N>$hp%U?|Waz z>2q?^`edhIAyN8s;cN(N{GGBL3GcssVC~_|yY#PrYwImDt@GENK6gZ4qv--3cHW>| zfKiNtn=dkO`~I*R+;pY+)|p#=vvD;i?%t+ex7%>Z(7x^lt>!F~-1Is@JF>IGC@pq8d=K*i%sj}Os%*@Q>fDP&sSl2Yf&*># zu|m)pj%2oN>v6iAzF2oM;q&&Sy1IJfu^wMnq`UV(@6k^A(LuZIsk^6{J@tQH^F+Vf zfAg3((wYrNmXEjhw6%F#yxr0EPSB62-`CL{js0h2S$+EM!Xi4!@;xQxv#E?urjJDqj@|41pyu{liCNQKuEtDks6=Mpau_Q=mxDeUzSl%;`dD=gwJPHEUqWv;+ZkvqI(=Mj=5(mVD926>3HMsRP113Tt7` zd@-BA1rq3EETDbk_Af6RfTHOdNdpe*jUzoRX17^esN^z;bS>hhsq5*myvR6wAtV!) zwdN|ycJj!{RWk3%Z)rbE-QZF<+&ehOkVIgwFF{MT-B2KAJc)9^YBH`&jzevA*N!I^X^#W()bY$O*`iT9;=nzHK!L z=aV8>3cQ%)dA3NpRoy0%!`+p*z(ygd^KV14s_J$Rp|vzxMT?LPK*GL>+0zb5sow_g zJ!TvaivPmIxFcf2Q^|@44#9`Z@#)dy$2)yP%79v zikmy>NrxUfJUo={?wL8!)GwNgv*av8X>cPJ7q@z(h-19LzqmhI*%R?Kb;uj60r=t~ zzk0E$JKkyy0Be!jP-4CX-9fk{2Vj+Sv8ELiBVh!pp)C1SG)g%V)_=}L@>b!yqB+&} znIpd@^z%Di&<^kLLN&wl;b#j7CW!R3cDd8>R6LnREsJYq)mJ|$ZzTnX!3gBXJYMjw zQ%e#2+m*dGv9qfOC#O3*)9%jJpGVjm{a%&``qcJbSzGgX=Xi8ZZ@o>7kIz+ehQq3n zv@t>suH+1;)QO7wbX94q|{7)o}G2YQCAZ zSIn}(zaN`!#=ry<$_`!BNsxm!NTbchc`HB4Wnc!C)+k~&sPO672!T+vSaP#Folm1tUnjsQt4zfg3c2H9S&P9TgvcN?w|sC{k)K69j9^GU6hj` z+`UO<6Z-nZ4{;+5=LTo8Qjk~xdl1vw;uC`BNEiI0#Dx&c1x92&U+wvq#02?eXeRWZ zw7!&N!hCp(J8eKc?G!8>MB5!LSWkYHCx-iR*(0r9_N=Q21S^BnUgaS#ZxB)7(C)2d z3s-5-1{BP^${4d~(%KJfjx-9moEDV7e`{+i$@dkL@452xEv+QqTTEW9Jz^hW=+QN= zPes*Ptj3~H)9pP3V>*#1_=BnsBu?)ul?rpdhww_t2X)Jq@qMSw`I0$TNGA8p71BK@ z&nrhDMp=b5Tv+5%xE($Mu+g&-$}FIQVl!7*vFNZjZP_t9T-_+lT{jj!G%|G?y=a#l zyYj=cbA_=vXKw2uTvFrEYgh(w$p`{}zAU{IB z^C#0Mv$vYJ20GKpqXQTo3k4J>Vuao1Sa+H(ClE^qqwr1ubWn^CmB~~tbr=rUyoY-?6SrL{AzAZz{9L_Muw?h+|d ztCnk8c%)KFjzoVe%bduXxc2;!_(&h-9^b4YZ}#ZLCy; zdPV35Ye6x}j#1pGUpEnT!1hW}2ciukx(-GbBNtfl6)ZxnAmw(rx=I%<^eLLQhyeY^ z+9dz#M6S+rq87&qV(O{zBafKN%P6@~^Yh2*HqX9_RRaD}!d;1P+WaNOE7?N~uCKE* z!QX2%i?q;UbDNL9OSA%I(risrx7Rav*%3?)>IC;PnjXjuAlmAR=#2Nt2RV$jd6j7I z-jDxR3Hru}dSG4nC&YtuPbNADG{eH96ka{aN0aIlTuUBH-Tc&3$*2C3pOf;_n?L__ z@@f3a#Dv#U3{?ck5Pe}(y_wj|u`!kt6u~$s7pX6jCsT<;oL!{MXtxUdQkrAzRuLlK zz-XexXPbd=P7u^D6-T!q=^Q7p1=yfI3h^3DwKo>O@|9u|RUb)5khZM zA*CA+#vHfGStwF>O{@|)3?vI?8SS2jIY4=xeHB(OM-Z5kj`@%FZ|y(okEOf&`nvIP z9&urqRw}IDt;5z?wI4Cw!47(E^DJFK)} zShYpEx*}a?WLrADFA{ea29IQ1-hDOW@NvXUbRiKixANTAfRu=L<6v&o!MP0!6Q3&t zbX(a{g{{+(>&ACvvpdGGo7}bcnx3trdy2i=_Kb||*_OL$hDGNMo4!W3NTM^i2x+|= z2oRBoP|_Za26;hd$I3~bJGPf-D+PLzb-PpwUA2f-8CuA zK5Pu{9F3&&J&{NcYR``D95(Fg#y#75i+e`5_9SLzZp!gyE}06Vnpk|6O}O z2g1;_KwPj7;9kw8Cn~`&I%pm-F(SW^z)VCn^znzs0>tx%Q$4r0cal!Qw{)fQRS~mq zIM$OIol@GovnuR{R1;@qxGikwS&L+hSYsd%%O-@2~L2^KJYlcpA4wjiBeSkny zp!S0LSESSMt!4E)`HV$fqNs0F;4u>m;MfwQk6;UX-G? zLzO9nDuKi`-#gPP6V(`!@>deIL$4L8q8x8oyHuAkJV6{+c=>tfd@_Mq0K; zQU*7OHA6}>NwRMwq+MGh@4*?d0M3xCwYaUrNkl(YL;bSQYDa@)NqNL^n_5n zXXVK6%MrL4@?9BP;-N^Oi6`d)Cc2`b3@cXBD8aQk`#TbezV^Pv2lIKgxVarZ4h*E5(Q>DRRfA`N4>Tj@%9|_} zt-nivbBA>lUt=IBxsixD8E*m^1S?4(J`S_5{b0iG4zBVsF4OSpG)-u>M=C$V5kV3gQ zEilrW%S`#Qk-w$MV78hkUD;?hll=h}l^%F)sb-*20aOWT2`zfh_1`3EY^<-B;2Hy2 z0>V1F7fTwIi2&c0Xk0>g6gc+08lEqS##gdUf&=^sq)UYR4Eo80BdAIwEE!phi^_H? zd+4R{d-nJ4508((`F2$}1#R}wKaIcdp5E~I`^MjlQM4*vBDEP@wS~3|MVc5_kKJ}# zN8}=V{$fPE^PTSuNI&C=tlzX~X(ophqnmzOLh5tX(e!)dBwGJY{Ss~URm~D2EIySM zyER=Ruf?NGz}+tc`#U{gUG)9SxI)n=K16a;MX-E0SVgl~D0oPGQ*^<#p1w{vXwiV% z4!B$g99v>jowIE*hvOcHW4x#1SjRQqK&;r&QH+J!jvR0}4!Bl$^s&yVSit*|kcqXP zWKVeb+18Qh(6R7v7=LfuGCaI)^x?>Ibfk4)D34=3$!LXsENDj8IS$xge++xJ($zS0Q-0LQAt#K5~glTm1(fGf}go zS*hjPDPfkcV7`+(YSv{DNm9%{v_S=jHw_kpOI#$GMB%q}DqE1pjQL7sodq61IM>!h zV7tT$|D#-$jX>C@oU=rc5Y8zC9x^9`T0rf|hLr$^DpH0cFd)PdVMOkjCh=Ehl_;BG zZZJtL1f)akg9J{rz(XIQ%Zk?4wa0stGquusv3E8`@)?o0-jbX_bv`Dh^!;DfB4TQk zvQ*`3YVt=0x=`EF!cM!mQr7rA#lpszP61mJ^HByN4)w7WSISzVF^NS!H!@>DoHJ%d z&hf!e^E0;r?uVhrrWTz%(z<_)<$}icw~pu{hmz^ctU(8q03dd3Ha}RmVwt5W74xMU zh6ib=jw2WqT8ewaHG{*wmc~!RG{}H~uEam}FIZ}B+dx>PTHE4Idsx|{N<|&^u-zH=y5x(N&iWUJci(RRM@S5vb3!QWe!D}dL8ral;qGl| z>1}bf+ns|79>{)stG!hP94&(__V!jsPfJUW-P3Mw!I#Qz4>;WR*5%uGw|1(Pf3$e<-w5wX)7i<(le3}J*-fa z5Zo360%@b<|Cg=tI|N< zg7nh{#SWrcrJ6#dT0S3s`mxuc2tNXm8o;Lt-%|a8nm&b}YNVMzCDMFF%cm0}&Sr}z zG8A0F+zFilvSvF*^ED88+zDh&qZUCcPE2;dS{?6 z_3jDW0DPB%z9v$X41UygMjDJ?Tk(M(L*Xk}+}=_nRQp2LnQcv4gesr8Cb6edz1XZr zpa(21SSm9pLVsck>cfQL6!Pmp{l0=KcX-xHsEdmNWJvB*+JH431k2+^9djbRNN!wR z#rFm$q2)eAfTfR9vgnTjn6>`iiBoTzOa^0c*Y69px5L38o^4sH?2MggZ$A;+Sy==yVCr<>vQ5SU5I1B) z_x&E9&)b!ayF2U4L`M%n^QK=lSD2e_vRGd08ykrAgzOF5T$ODCwffLT-74#Q8Er!!QqSV#DdKs|}!!vCer{|y>)gWBkJ)Z5Y9bt$2 zpvReU_qeb21?G_{!pf>`+BRo94#{B>>Em$EZmb083RD@eAn;L?257^2CsHg%aQAoy zNDp{oY;(EIf=yjYJfqUimZZZq*x_~AojVbS)a4n(5oJ#+mA0!ZeAVJiXF2n=5G0nP z_&>UQEQ<#edcU%Fbl|Jb?+#ib{MX@Nb|kSUlFV)cAtxYKGB@N(Y87-p>Q5#F5G$3A%!+mhb)pQ0 z@i^Mi={a?>ohv5jq@E5*L7G`53ZxzE}m? zDw3ZQXc+iE+OcFH+Nzoivz8QOwZfLbD#f!zHcNn=E5-_Gr(}Z^#EX{wdK*+av^x^b zz%lXXLEV_ith0$v&7)7p%WmFLhKx`677HEY-ip&b60& zErDSBZD-YY)w9^6Jx>?W!ul=d2tg2C7bt=$D2wWehac{{?Y0L2jjtH-+ivT7_+j8f1m4jOp)3hP3mux}o` zq*{V?A=tfwukyj}5{4WuHn1Lq)9zEJeCh35!7p%bR&XQ-9tin zB{xGjs^-Eu8sMM>ZgMl+fJ9YLg+ifX%wIwJu5L_CQK2%7PqT`KS);iQc&5=dC7OsO zR9#gO$zeQbQMfDvVzWNd4KfKBeBo*;$+Nr((2f!srR~xo#yyce>5k!`rfZ4zmq_+> z*btg&8f^y=8-?_FyO7XkAdYJ21Ul6VlP4J%HFzwX%pPEB@TBQGzP46ngVZEXK}Y>K z=yNNu^0*{@q`MD2d)@V1GtCBxnv+KjaJu`tKP< zgx6!Y?M-gS8E+rP34uVz3zq-H>oy5(fe4Q0CO2Aw1z*Fs8Nw0}<~8kLlmS#3N9{=w z%1G%JQ$HNyF|{;T$QR}YuDkWRZJ;GiG1;yd%9uLVx^G|Wv8l0{nK2j$@oxhuoIvie zseV^r2}{bZB{G7y9x_T`ky$P%h+eO0pR4E3hv)MZT?Z9!ke1;HSjI)G8v?V14Z7T* zL&Ffd=!~GR3FQG$RY9(5Db0oYRh{9!8U$WYwzFqZ_L0_%K=)!SKu?KPRYHTXV8Y9h zO=(#hrcT&AH`pA}Th07v?rx*Up(Q*bgGrP^zY9JHuy#XOl1CBcStp$jSIh_R^>nli zIX&s>#k6Nib$IT*&E@TIYANJ{x8IHmoF5FPQeUvQc)aiRuoNesZdF9e40IHRi3&0J z36|$&B@N4MgbuuV$`CiGsTfoZAoCU5-6$>CD$vF?!vh8{rD_zMpt z4}a#7S51?SWtbG!%``C3bXG8 zybkJ7p$1#P^mrMd5TSZ>LY<0`hQPelhX^ExI2lZ+Rl&#riy`*D0_(9nf_j-bCV7k# zGf#_EzPeFbUBzQH%ed603ow^$YD2BAz_GA#;qn@+09FchTr&^jsIPt@J?dTXU+D&O zWyXYIB=4Jqq_<0KjWu#hDGs75vQ1!z^p=u3Uk*LY4v=H<%%J7hfhVoo+*BDH2s6fr zSD%MK0xv`Zjw0)LJ{&^^PH`{cQj^=oJjKHGK)kfh1j(3?R*vFlsRCA4N51El{y}VsE&(bO=ysP}*8j#s8PPH;;4V ztnY;N=%~_tSCy{T*)4Ue)R(#?^<3RGGwr#0#vYF?&3Fcn+s4Lr%NKThfWe3W2HTJq z1Kk8jhy#JJBS^AI?1Yd6apcW{fe$3~Y%->{i?L!Fq=iQ;vqy{Ys_y(UPNir9%9;tON@!g%|57S(Y%lW{@yf zZ%BeE9GMcdMqO4=Qusr>oz!k_!(=1Jcte&)sIc&Vg?zTO@?CDo1Q?jq2i^V*3oa)Y zro`7kC2vFGLpaQ)7`Sz`SYjWXCmM7{lA-grUn8%BfOVi1ds#H zN9mmkzy|~wl#*iLMUmZbO+j8(V|T>V@pY4X;QkzX z%q)Tb-I)c%*(7kb4M-D+!_o6ZBGf)oEP{UMIU$|ieWy;{r>B6R2T%Qx%QzyD0BqY(@-&kAH$}< zp;3m}%L+hb(I*PDDFBhNoV6eXL0dE!kidUVvdJI=+LWPm0=C5sd)$IWRxC>&90C8> zYID8WTxqo^p@{DQjJMB<5!FH-G2j^t=-4q{6xBlW)WI}u;6F&(DjF5jOMm0fH@J)d zGa`(15kAp)U*Fj1wEL@krs=1&o;)^da2T79)MWTB`l+qbSB)j7=O-YXH1I_?6X-2T z4Do~*4235Yc6=sR49ZaxR9>WwMjzpqF}m5YRj&&=BEc-*UU?tGkSxm}RL=qK^kRO7 zN-{u~;SNJEVg2v8)EVWe{Hc$2QmGDYP`-|izk{dqf9=eXBWLh3^tel0+LsW61?n6j zbxJA`HHKN4+vWA@Rlr#OsRV9XEGkA;tRg^%h7|nownXulybBd2mU9Y;qV=nqWW zN~+PIfrsPk46*bBICS4>jB66>7H5Mc%!ZvO}GOF(4BM}mH zmKcvh)`cf?rmo=d!(vNFpHgqWlH(5oKb>v!M!T2!|F&*Pj(q5(ME%Waxx%d=75lGv z7o@6R`3~f7fe6Di0D+$VV(4GwX(Ne*o{{_>#@W*=V8X4mj) zX0vKG%RG`)i})m8MD1j==r>F+kJ=$a?j}Rxohh%J8GHYOzW!r$MYfQT?KwH^_TK2srat6(DsBHB zU9tle1TclAL{M`>w~0b6&lejIzY${B;o)GA`rGBD<>jSylI~&eed*EVWh_q{3xzg= zm@>Vd1jQ!uH6X5xJrd##-VKUGy`kAERP*dI$_N~zj?kP>Ka8b8E~MJ=x;$Ez2Trum zR2HMt41ttHGfrbExo*$^f`y>qIz2Wl5rPu8Ztio##FiO`JZPJ}hsl^{qVQk+AL-YR zr7s%wq}TbUUm$CNZh;YC%Ra?^o&7481j1Oz7zG>;>v5!VShrNx0e@5ph8qD`ZE^9| z#l`!OMbK*9(`-_+mUq#STNjy|j=kxOMxra7;Dk=6J4EOp@YIbERdakw9zajIu`^L< z?YdgcW0gRdO2txfFg@Z=Mn?nDqAaCHL6C~Mh*Y#WtnO`j63N}d?vO7Y2~U-UF(nz1 zQlj9ty20_y_>?)zam$?mjQ0};;0C565J(O(NNHT;6_*9F{hBc#+>JmEM4Uh*fKcK^ z){vrveJ~MxbEYcdo!g7ChS9uEQH`(L@DUz$xCZbGKn#7cDB?yV_zk@A0>2dnXo&)w zw@u_C$zr{PBEsjiiQ^Hk-xjq61Jdc)qj#3-MHKKGO_g0%>%PXA)$ejKtH}PP&s`2VR`qd-4S2X>9jrVv1X^Lk5#8L)}TFIp15aX9Q_|EcD85l{<_2M*nN1v z=5p9oZ!WSwNyXQ zW3@&KyFDMbCDWs`lZ%U!Za0`%X)3P_p(Pu$x~=w!SRxS{w_EYBW0JyR%BcMTwS` zud{pmf3i2Ba%6=H17hTdS&qj>8%rQ73J{gtyl}Ca*op~{Y$7j%%711d840)UMi>BB zc(f+46)zJdHaUn?j`V5IdmNqz<51TQd1>Z1CzZ$nQae5EzI_++L#%oDf?KgUB%mJ=KM$ z;_?lsV>QHymIM@LHOzEOnmQ_K&bv-_#G_Lu?{Z$MUVCj7_2#d?M?5lh@^10c)Ddw% zPQS(3x~JvbPo?Lb19zZ_ATh(d!4c^?(0Uqsq5}`UZRJgtAELvJ#mkCDeL@s z@tzZ-VtzC){=9x|4~TdZHWt%hqHFr*+(C>Y;|5pNFaNOMIg6BHr>R*7i zLh&*k^-}w#m6zb(p%^?>C~-rx ztQkb78R9*huK z=h)QfAUOT(+2X%ctJ2}!$od+R-mu;%p1-+xq_RMwUoJbrSb@g zgNQq`jHE>Y3=P~3#6cjQ2Uw#&kO|`OoEyq!uCea!!o3ar6ihsQ(CV}MY+mNFIc%Pi zctgsbx?Y|)VH&bh-8yG`(T9X5L;?8@7Cy60Q?_Lm0szl3X`iK7q{L-w+hx!ufJ zj+Vo+XVfDLR)nDo*u9=7I6TZJm``A~&W~WSx^SL0Id7r5A&~rlh&q*%Wplu2^P-hu z6@k%{cRtua!@4zcoQuVe=rlr)xw?ew5c2ULHHN%2-pAQ^7r-mvN1Qchg?)N{zEG(Y zve{w3|97c^a0`a&>LGMR=+5V7-ZnK-IFlWYj7Ki;!o=_9C4eFAnv$jI>D|JSNh}b2 zB;;x&^B5czzzLJW*bMw2b%S1jO6dF82imZnT1>30R2Gm%2r^^1sR%!QzozFcp0~5j{Q~@;%AgJfg4v zuk~YD7!f6yXg7d;vtY4Y6e#g@2x1G3652l)pU4b=9u)ctQ{i6o6Wf4CP_!Ml;;Pn$ z;1+JBy+p`qyOp7!1*_YF{3Lr_KF*E{4icFhLc?mk75h{ekKJl>5}k9}>WnSXK|q(e zSPmY@&qKQvbgPGiD4>)8(p+@m7_uS>q>wrr%yTSoZvELkmB%aSR5UzaMGqr&4nZYz zbINrGu2XjFiM=c1dy)Gb-dEi>O#O`ZUDueKYy9GzlFKQ3abMGf#EZsIz(qmYOnE#T zTF&Yzt)EQozQ1EMp`jVHunnt)2m0tyEhUt*qxsro`}(v2rVKHFzq5^*!bgVVpGq>( zEefvz+m{f)B;lP(wXtXVUoBMQ-GpG9?UQc1_9F5A7hjZli8Z-}HrAcJ*NBH?hv>AK0(;SB<~@pL(bz36j&A(ctqIu;l{6g?o9pLY3vGZfDF z{&ZrO?e+z0b|_UUrII0(mqIB8cA6lkCw1vM-EfT(39IDL6w&TT z6r(5zNb^kSp}(Q@YC|vi^0z&fad~aWy?=a^f4i8#- zM-QcVT~EuZTCh1jk=%#8U)eX52)W(0*Pc%T3Y(y^CEJZSv3d*>Tcx%VEvI9GK^66AFAB?Hji4gH0XA5o&L##m_e?hi=+q5H%b(Y8C-?Z zL({i)Zfc9e?JB8bPxR13Q)NQ`Q1XpUwxX*h8jr4^wk>4Ra`%p*H%5(egoN=yu2qWX6f}@Q9+AbnI?50UInb*skc+?;Ev)2jdXV< zeSDibE~LBd^l@CR4O7P|bO!Qs5e+e?0A%9wM}L}%1#CTVXMG)?&F9pWqi;dx@ZdUT z^&ePl*(cBTfBU!3p8dfO&ZZwjajb9YA7A*vO+)xd1cXL_G1zoLkqdy}YBl2n9DK2i?W6Wsa817t0#=bOI+Stqs%%0Ud-kcskuG+`%6A zdy?30{?}Ip@hiGrSS`0d~UY72>^ODR91GHCH!zc)V3z~o? z@Ejns0AI<(t{Q`QrRRmBuu{2&7_Tn_ zouVF9h~AQsbji66lqWN{2n`x2`f|3U(=SMf%u+iYNzV@L7e+_pf#hPqzq=@v)9Lci zE%{h1AA1CW2Gpgtxo;{KkDg{{3bG>-D$aRX1m77d+wq-P{+Bq6y_rwoIe_vfAiZ<5 zA99?L9sqR{paC^eL7Z1d1A-%DZ)0+DgMC8l|A@JN@#JXmj!JYTTDilx#PeI1z@(BJ z8Ex*6WK6Mn4St0)TfaG{F?at*ceKlwCMPf90u3O|N7=8LV;DgS9#J!;(ZDD`(i&{) zZ2Au}zn?D5O_p!TM3yEq|DdJ+0RKNXcUSlyGLy%n+4H#0QC#PD*eA{FFp4+8?|G5$ z67g5|JNV7-r+;tjS8NxqjQ_)PQ)B0|(c=@@f4qEB%qK#6zqSImr+I7 zuG$0o$TF!RUE~dze?OyX;+cm9w?{}M1dm&I_>8~J&wa0$kk!>TtH=_5kthQ5nur$Z z8qp$T&Oo#XJc#`tGf6jN*nl4rr0R=UfiUN!7_&n{T^5*N>L6R#Al!V@O$fNCoQ6OD z&$zP=o=7QK>Hj7<@%+1!tW&9!|B9(1+P1P-xWeN7|CFq7AK~sKZlGd?)*&qDNrs$h z(>!iooMwnC5eO2-io=!B-RT}gFhQ%+LKD%=EIi%us9w56#7VHMLc@m*0Hn#RPR12= zu9F)|DKOelR84Lm>pJ^pb`j%M@F4Qj-(J4u^|Os5EqvjvCNl%!4PH7D?ucwY^Ze4%^T%N1TV7@sPCntp z0s+-2C>hEJZ%1$pc8y3q2-Fhkf_RZ$$WZBU9bv)rPq#)5#CdF2byYM0LY&riRhOD+ znw@QCs%aZcPllw4C{nPyZL06zvpbRtR$KqV!*x$GGnDeYMv4`xzPa_A?1k!O%5bay zk>mob+i2A@X%n1Y@io3`Atue;eN(l-=d%OixygMRm`5@*Q{Cwv0F!f`4jR9d%c~TA z$$z2Cs1z+(0QEF7I0w3Ri8=DIYzfqROuWJ6LS-iU$aj7nQJDgjZbZN=DF z$dI6Vh9VF`8NpuYcWGEbD{Owl6tE(?e!@u|X^(uw zOWCaCb=7Gk*gT_UvybqmB*zf8we0d`<*fAl*65$lX4kWA$_R5Io7?*{+2yq?f69*T z2w2v%Wwtc>&nt10GzVY(yM$5 z2{T_6JFg0tID^r+r_i&pTMDK~qQ%CGd~RKh5l$6 zB1xa6W})L~D{L+Sge4N1U=aOZruu}yY8L-~a;m?ceU7JTzZ$x~jeQ01I3-Bln-9dB zHDdmWUy);%+&e^8bw7d)1PXkY9-7FMjyF2sA)$w~nr#s-cp%N^I+g_&0KGJr77oIq z&+$cvH<%7gzO@*vyD99iLaK|DOCFBkQ8yzBuAS33CW zpGwjn2@iwXQUh!E+$%obw$=KnA5(&0R<|6noG~7A^BD;&iCVl2oW9zXE0c_abbe5f z=YHZxB*|Epb;f?`2MobnTeU1wxi&5#>*x;>Kw$a5>ESex0SG}q`Gc9l5G23sraXF8 z@H7*|NU`Fn3Ihc5icfMGX@{1?^{FQZmVifj=*pByNNYY4b+Qsvk*xIMHln?qqN-GT zfoE}EPEmC=Z;-kHW-c31mq@65ZbT>S#CLSM1s;3P;q+vkz zA${4eI6bc(Q`G@X)tgOTS+CncOJCK>>Rf7*F&XNzj*dD?UN(v5vOd74Pt}gOd~i*f zGh?nQ>Bm_~h9LVx^AzX9+n00{71*~g>8l!wzMgf1Pv5aMpqE`uuD4%lT!V`#S#pSy zIA|>9Wkl-LuOw7JlOD;hNM^Ta(AD_h4rybUVj8yL#^6K_>Ry+v=k`fFsjFBoKY=8e zkZJ|@k&efFSqG<&%HK^wT;wDWCc{m>)!0T3FBcsz6Ntcs_345JN;FU1ln@8Z8tXWr zn=xK6hW5gMWVp?q!A*IlwdiutCo;|1kfH2dHdULTzpN41quunS%OQW+RNs8kbKB(x_wn&%nq0!N$xLO zc2mdum&e5|f!i3{&b8%Z+p)d_BOF{|V8vyN{0bu-H0Dv-5t(NU1JfX$Udd>%r7W0= z-cD>aO$0i|YEaU!<{VAZS3=vTNeM79ca3Hi<_>NpSbI72g>7I^Dv96;2G_k{8V7cc zjF}7l-i*!XIX0L6r!5@m84A_y?(kIel9KuOa~pj+X0QdWW; zBEFj|1>u4N5Rmf1)>Hu_w{UXH0>4edScQx?pj#12QYPvvBjryxy6uYzdBYsz0K23i z?nKI08tS0lPW_~(E&I2ya;Nv=)h+Yptb&h{6`BYfM*K=52(WUym*8r0$P#Q81G31K z>G9z7URkQ-#KS~WbMbe|mfFt6hdQ%Uz+8Q`^!O(n+m)A|k8u0q??7jL>90J{L2_(b z%MEh8ec|;vd-aP?Rt$6Dxi);2r8nI}pv9Qit1mrVjJij@$Ah}K9jyj5Hsm~R5M=AC zXnwTX#H+IkKj8(ftF7aufp5}}H{iM>8!t6wqP!ja-tg%2 zO>4@43-dl^R5W5V&C9dn&KqxZ9>0~>Yg~1H;~UOAo8{FQIXp>lLvO%Z62p^|ncFCX z!UKj4Na7*5Yp_f+RB=a=?K)yQ(M7d?LDLvI=TYGfv{EHyn&MArD3^HjogRylf{_7U zO~MDlGBcitLd`JGQM9nBZRRR7-f|Y6{w-&}-r$eoi1bh*I>3T2efm#Efc zxc8ay4lgblX43rWV>J*E30&BRtyeyCgFS4I97Ym#x7|c{w}mr*i1_VD;$C&(65nC> zvNQW?E$4w`v`G90Npjd0qsjG|0!tPFBxYc#8w)v%K!B}se$-S!cP1b%Un~;fk z2ffH2EBld>&h2~+=Aw?1krCNivPo7Mge<*+YzyrTwe!^i!^?LC) zAc2@EFUZpYj?jQXRdd*-On#kha6ZuA;PFccVcOutTr;idj0)r zpFk6sEu~`p#oJSeiB*{eWPrnI6Jc###Kw5R2@%zdco^Ic@#k9=J(q=2>wuA2Bt!6r}=08RO(_3vLcz&!2q&D0oN>Q{k5*3S*C@u?di7b<J zU;b?3cUju!`|quPvib79W~-%sHu2d6v*W{mKmFfqKHud7ZXj@{gb5O_JYeL4r}O3f z_jV5VQmd8D-*i*{_+`VjZlW&lY&n902!uE$x6)ZNYinz3U=f{jH$MKRn|d88kar0k zD9=9rrW?*tco)&nbwmp`ApJjpX(d`H;%NoSaue~N|CJg@!Gf*0QLW88KoJ+LRUThW z=?4x(p(0KRU(AbnNx)C3c6tE|Zv?ARVs{OxOZ5iQPw5Th1ltnsYo&%L%+9P1=CCpc zyI*_ye&(c}Csw=7VHd1cw@vig>`sSh^V-k6x!-;I*n8P?sXh9a+`#~TIa&&Mt(h6_+bA-)Pj#Mjqv zE6;tD>Y3p6d$)}?KB^*X*bwQ~A<~%zKftOR2qvZu9rVs$IqV>w5ZjpuB8@*UcEksT zj&QHo6kdzhJuIs13N*@9*GF7cwGo)xFeN&4%TzzO-2X>(qYEzsjx{6n%e)yymQku3 zSzmZ%yom8m;6u1?enuH7wcG8`rn$M-M!Z^=kP9iHTf2A?Js5u-d%RaI$)5}$VU$J$ z5b@HT02%;Jtu|vOF*d=}HEX4WKx`M1@5jgYj1T3?dfEGKhkb1F8gKuvJDtAG9xHo1 z3#Ab`Iq7clYz!W|r&nrp5N6A$eZer0CI@K}-y%>VAR%6{ z^#O+iBrKHjV!Z*epO`n@ii1K2a<#git|t8Rv$H^H=oQ+gs;ENUD3g5B?|#2v zx4z>Q#)d`TlDR1G5hxSkC87=S4LJjd_=0}wC{WD!un~sei9{Z%%|i!nCRi`k{C1sX zqn+91A6xVsX%%N7>diM({R63{8ZWhR!=&;v4nU4HRn!PJMn~C@)U3MIWCE(|>6S_sf z;hqcz{x#iyEdA+pJU;324Uf_fp8(l5!HtyUZP({w1>H>_1bb-nvbq(4-}Ppe*u0u) ze!$J9I2KdFS`S1Z24+PWl@u_}MRzJmLC8!Et%1ch{!E0>koF~N3$8Uv`DQaOWrzZ| z+tBmNAUGR1RBC8AotE=mkRRx%nsFY8Lkstp5SEE-L;>8ajG zvIFC;siPC$A3^BMtmPzz0h*2HDu}Xz=xCr9>3aEqRT9wD4q=a|=`)}xBWu`!V11ez z1&q^7uK_3Id8b75RaLY*1e;_p*5)gz1atc!Bw1~Onr2V(+>GW&lGdMP-KAP3ll`#; z-9n%p4|&4#@qIUO1^IdiU`&`FQ5RT%3Ct~eoi=AUoZaJQZ%1Z8BLAl1q}wakPKyl` zYVdeab>O=*s7#W$iE}RFY`>gKbK}J>AQD5n!YLd509oFWo?}J51FUad(!>2^j-Y;JdR`Jv^w8`*@D&y zIvp;Bx=9eC#UcQ&)JUVP;IDjk`QctNd35&Rsr%IA>?1!n`q9rW&$c@IK9xMWD@fKX zI{Kbb49{F^Cx%Hnysl-`h+Q{IU~n@#-DfD8h1ye=GP)ll9idDmP(b@Tv|S}I?sWJT z)|ahHJir|DJ^}!l;^#<)LXZUq-Gy^*_-w{lH62Z_Rd?X4poImucjiup-}?_ z{Vc1S#)-~St=UA0G9;EPt-OaX@rx@IRiMO|Oc2ETk$+2`(PHr@wdtn0_>Mno6K(cb^ejdZa zNiqWgFi8+}!k|P~5+Q16XABtu77q9-HVq#2W8A0#OD`DOw65Ddu(t$6 zz&8z%0_G01hvMWG4+w~a2E#VX1v3k;6wEfZY6K5L0SQtBZ^%GIM4?SVs<8qw4(32i z-L??cz3GFMM=HlE{U4^8xAK+y)A#?|7RY^%pTu$f>?8N%G-S5{&?5jK_5T8dR02Cv zZlNck8Vebnc^?XHi8kvS0GV=BW`HaxzUSZI{bheN<%{+IJmyQi`KH7{d31R6&>adJ zRl?nPDC~RedGAN%#l)UTS)SZ;=FL%mB7FPdiBf4|Y#12Y!L3&>E60m91mtsRnBIBn z7v48C{9B>TI&GMyNo#AW)M6Uy6l3(JMnI`cREwROGfyL~(GoTob_65<GPSia5^pae}%ps`x4J_=D*h!4YCz%V9{X+V@TIV z0S?rX0QQ3+ROQHEk*mQHR}kDkGrCdfYZHLe^+g{xa5 z{A+SLE#q6Me7^rz_6NK{H)_8JzfV;zI@T!?<+rAg3Iua1q+2V^+~S?khwOQYn}%5T z%*it!M)o%HyGei0)hN`rC$+1aO$`sHvZ&`nUpQ%=rP83yt&XBi00WXeL39ljnrHZM z8yaW@w|~_(6#(=|zKDX%W&AhZkULGEjZb*Ph4km?0`n*)o&&cocQ{B8Ml!ph|Co*z zQ3R7K5aF%L=)6c&02-(ZmI)SpBow#p^2I(Q4f!59BYvjwNF?d#QBgAA#;V)v7sb~m zLW)~_n=~Z-YS_2y^ryrpluVQlg7Ay#sqsNXi1v|4R2xws6^J62NXRZ^h=9O8)Fhli zxDxX1n|usZPWk1=z_gu%a5;Alf{=U_gJ^@@!qQncBoXi~8VE1(^f+HTCL<5Oa*;MY zzF2yVlvy>WOBr9Y3-^QQnuBA5S@4E}7(< z_)A>e*@bUcU|RRw7EKOUGF~O@w}-;1R94Q##z$bK%JQ#a#mt05vMoSHhJFkMn)5}# zVQ70X5b!9nF8)q?wF|mWU=Jg7&oGgm*l5G**y-RfaDuF*19XZ+iUcH9%5Ipn93Yl& z80T{wF2S}U95!%M+#UmfU><3J3&6wyTPF;`q#%g`Tv1$$hY1x%$#TTk|L!qgq^w=k zw{+yIt(MemHsx09pMt@M^*?9Osg^Z-C*nJ%u?}q!w2aUF&rRPpJu+Rbz7y|z+~IeI z-HUGg@g2LJ>#I%fa@ewb@k+I%tI|uvi;{L%iB6*@xCYVPa^rp)8pv}%jF)s&~LFD{>^##{9!Muo3PV3{#LEm>P+n0w}=B=e$-_b zS{&rR!uAEjJAajGsMskgSO^;7I+J-VX*HRjD7_DjrKrLp3Qmd%X>QBoSI#;*NHH>8;w*NVPTlO__3}pv#uC>}Fmr?An3t22^8I7jsrgN&Yzh zfa{sqNQq6zg-3@Km^cCOAlj6{4YZ&luH;FpiL_iW_ihuAnh;MjvLGeO)NF%HtleIF zvwOVSrmDNo$Qf%+de<{<_cQd2RQR@4ULgmcfwoj!VeqlY6g!xhZEfFrcpP~bqL<1gpw(XHvA)2!>ox-l|LZf zH&EvS5)=xAn(D0rVp-$a^dwDTu|(w;!V`1h@Z3arqI9Kd)i2eu^?J6J+fStePhM6O zTYz-0L8a>L`9~Pbr4OF ztKHn%OfmozZm1(lo2ia;IGRez(PTOr9&$)Fm*|u1zVgw4#~UnrmxFF!$m+du%*Xt0 zuhV54b4mi~1EGW^7|T!EBtMDfRPbAq!4kmTrD4z!v~pR+8m~&NR+q|e<6H-J7Jdvw zhM>QPB_NrwYL-81@bYJk?d8uzUj9tnR{m^RLjALrw56EFCD7nUFd zxbn1__zxQpRB61pwhi4EberN?NXsIdjK!=)1OR}nUz?q<=KWTbvjYeyMs$lV-~8p+ zd^nsKAFfasK_#3`9+*9f5SPE>qRe{d_<{LkHawm%zY{*VFU+G|xIm3enda3U4W?;S1{%XNKkdGGM(Tp|@4&z1Mj&h9Uj zj+aHd%{sPk|EzkfJ_UitE~-n%RP`H{z+}W41ESv3r#V#`B zttd>evt8M27Ej*9nsg!2iZGUvp@Pz35grC71{h7mC=R- zZqn|0xycTpuMvPO?xo5qbj5Y7GBI+p17j|?6%^(Ivrg5x1q!j%-~gpk%_v2o>Qz*# zg-&6nRkC}U9($>c<`Q60@vs(-X;k)NeI{dbob!0jIc%93aK0icD}4u#5rDclg!%~A zS?q@)ga04>wQC?T)ZZQ&e3ZZ~k4248*ASAdV==l^? z1jmF!h=sr6%Xocml-VH9?FYo@!D>e8coK0j8oAk5l1G!coHsHo*pjw*Valya&~?1t zI2)3AU7lRj>q+>MLLeX{eF={@8i~qslmmjweiJiDT^%eGH=xT#A(+|_;DtppHEMRl zE$JKKiJaUEA-s`z9antW4a@1~kI}*=>A$X8nV-<>l)4baqOz}Zg((VRzuR)aats8Y zXOlLFo?{lV7_jCb`U(`i2#$kW!#PeRDlx-ci^s(CDmhpdf=nqIHI#dENFu~SNOb%p zIp5l%&2CqMvMp{CZ6e~cY=_hIPYFx}fX<22MdGBy5x1Of|Sjh=U-+jGX z)i(TxZqveMr-sXC4t; zZXuZz+<`~V__?}3*i9a6Vr>cqTAEKlPcaxOL(OraQErBt;IUS_{2!?R6oqJ74^~&H z)L~og@uOP**$*T51&%cfB$)pH2lgnzp0ELi>cSnl=NwcC(ht?QZRCk5puZ5%H7b}8 z0TF?Vlh0|#7y1_#{;MyL3VH)R$cO(-7S2O|Tszg;2$vI@mMEja#AIa3@8A*{xpZPq zHLGdU+l(mGn-apcWotzm1=$n@H?8M-OXlm2?Dk#sWjP$^-6|Q?CygXNHCZfvlJC9W zEb^xr%-D`+1GOYdS$AL)C1W%vO>iw>VxhGZLCp+d88eGGPS`Wb;53KR-~lAMKwMx8%BB>CeZ!CUnTp}2n`;M`vc zFkdlPCYpg%sC<_;j*ys&G7{jMzS3Hr@x$ zCzB0tr3zHovb9mo28+cYPn;}KP!wj4(=*cQwaPqf9lO)#GE0K67e$F)5QKerWB1VU z%IDH&(_hBNeS+}3{)VNRK_RVg!nR5gc1bF`Y}#y!1~?)rg~$c~Wv1rPnN$IHCH7q- zeg@o7m`)G4Z_Eo75H$%A6qJk0K~y0MPGp#3pUQqQGv(OejAE8=^Ku#e&CB=1M}kvR z!3-n^_VG+vO=D0CmId|&_65)c(jTB5vQj;5MYTOVHkJkpCMv>&mGvGf?D4w)@v-z{ zw|zW#*G+gm!H=*L4>7lQ_wVDx-+%n3yMlQA4}Jvfyv<>A9gv_GO62AF8-RMQZbJns z7ED90yn`2*IBCYttX_o511~)~+M{Y6nqXsl8|vQq!pjtNx-kBx)2H8b8pIPZb_khe z{A=C}uY1S8=515G%QIiVw@$x_(*#{s4D(P>5~3kWlxT&ErP2(69)ghwbGZ5nSpmfq zb(M|f)6Ls`LRyU3P9K@Jy4c8(!!B=mBb*NlzT08@lgj^iu*EzF{B`jU?sr72@H!z* zvo&^X%)?r;%SU$5HV6ixE%mf283cplDZmW&KMX_Hr|H0&5u|Fz7-#Ovxuk38`8sQ;6Zu}38qI{rW+6pExK zGBZ)NWOv+j)E_-GQKd@%RZE?H14T;7Wk#+N1P%xg*zm%|8-(qGNY+HmF%E##v$Ol{ zh0ck)AKY&b>`rJW?*4knS(+$6G`A?3JD=RYa-vhP{b>J6_J)L3u*E~KdupOwlJqy= zl8Lo0?qt|>F^mv9sg)pfkZ}%T32Im>aupv+cuHuYN(6($am=mKfWWxbr1-66CZ#i> zT|*~M4BZj%-Rlp;=iU*@q$SMvb@7JZHPkFOhg|+f{AuoUdvLa|Dw6ynTz z2)&p)L&1PUh=f$Nd~mt{}B!`6J(NL9j#|;rtk)|7uHCr-NDpgj0^vKXM<3 z#O=suJt(={^1Bsjbk4z+YJ%vtLIje6BUnG0RHEW`7^BFKA14n0qmB&>WTB9cC?E}x z@ruyn5h^N5B8U|G_UDh?)BoGgAJFct?Ek#o{~1a9d|di@Et6{>h_Lv5C!BZp|Kh&V z8K&NsOTTtxiuPUL`1u>+Jsp7oo@jq_i29D$qYP#o>Y`il`Rl zd23M+>N+r$t$v#b1MIwgc9!Ibx?#|{bJ*)kgu-5*?>p7zqOW@6;)P@0$@u=HE#^`D zk)U`sb58U?gBprY_F&Pe4i`kPFQ4%G3ce3keT&VifAP)7ADxU3F}vUq&!*3c!AL;y z#B7QE@ks#tBNi)rmR-UG5zJYb;giE6DY7h*Gy^_NyqJ^`MUcr_E(=1D1%qKfniGhL z#zZJN;+LKr(MGbv_vXCu5m_$!!iBUeoKLe~cZL1oY{27uviN#cj;FGj|18}vHKacr zzO5n`oAPAZ&A*CygE7ErVgC$LvI~_aUIViOx~`ChLzdB!M8g1Z)X1~~;ald~5$!gr zfFJw;vIwvUq#XDG9P$*2Mlrx80ZR;0hyWN7MR0s4db$+V7H}1iVJZQvAkcfAq0&X`OQ z#mdWC`^3Y6ivKlxCa#m`FYNfNV>E?y-g>lgbh6ah+`FGs1%7*7pZ5bwrtvTh3hakc zO*e$fQpHjeKbR?r&=Vs#HfXWs1(KI*Wz>s~1^iN>ioo?)AQ-_;4M+cs%m#hE?O>@> zdcIzn_XWgiq3sJgA=1?<3rsSV1kwhK{2fd%I3Tt1Ly!>ahm*<(PzACW@(>JWU`S+- zr^AjqdooZgnt#)`EiT@+`0#=A=MU^X>-;o>1)NQV*Ui)T-rI40@wRWBfBX6C_8cQy z_|IA)B%7kTsl=Hv!n)fBf-0HnNN%9%)n#~7pK0;|ugD5ftEn*56M!+rf=VGZe zJ3B8xmXOKJ1MRvbgU%OW2ZEp~2s|dY+rOYr#Sss0htn}$kgQfYH7cubi%#3Dqfq=2 z6UnTRzb0=JH&ChBECM4#0V$%$F^_;oiK$9qNZlWbBqO6p9I^*Qr(0rs`Ypa3BrEnH zBNI`XA!T0CePZ;q4VW|5seo?}!4PQfv)+VT4H#kFjlPK8-ibMmeQjKUo>3&pi1b66 zF+J)AK2}7)^LR!qs9uy6cDgbQ;GuX5Wnue2z$S&J<2*}-3wj7&<(7grh#+AfMu}od z-1OtKK$_K22e`vQr6J3hJ_uf1$0m@0Yy@VBDdj3UCGaK21Fy+FJUMi}kBIV2QPm?$IJJ(w7Yha<_*;z}PlkS2MIpUwn!0UKHOh!;8bKIV?)XL&tinw(AeX?qZLihGAOC-< zi0(*KVecv{0fk;;FreXm_3@{w03WqVhvgt%0eOt?2lzeoYWlo~0^04Nbo&h7KHqLH zx7$BjSy^6LVJHc${~O?DL2$+_mK*Xk)~gOfR|)DdY4*re1@J+n!EzR7nYy<;|H=7@ zxw#4c_I3!|Gc*0KU{fkG%fz|Ju3ga^@47KcZ-*LBHoS{BE_(T<@g(j?7RWCE#CD@s ziU3=D7j|S3QjvmZAt4CRDaxmOLNMbG)MRTc8?(+71y9`T6nvtH<5_>emnuoV zAU}sf3U+C9$QuY`&=puLI7G$mcDmfzpgOOHvIzT(MVvy+?e(TBFtngbq1S!JH|lc+ z)80VPn+~#BcP8Z)f@w!kl7ilnP4Z{l@?M!A4Y;%k!A2*T&1Rj@TmiwIqSL;x9G9$- zaMbBM5=o}Z<#b#=?C?fMSWFJfR+xx$9$EI}+NHa--qm0=G%Ry=wM^=6eJjg+MBk>}U4zuF%AlgA5a(dYl{^Gbh zoOgzwwFX`Ju%}X7cZdi^cL-re4CUYhCDD(akmztYd}8nYZol81eC%|@6LGjb9=8KK zr-y7_x7U?)xr#$WzPQVkbbH*oCacRbHnLX`yC!)B-VK9C*0?B+(1tGL6Wy&`t`-mh z!YtLobo>QUj9-XP7pj{k3i44=hVn2N55hjeru+eJMsyla#_6a`U2rb5=Hlt4D3obl zxu3s7w$`iipZYaPy)Q6M)HPB#_ruiZJ}n0Va^Mqu`zL;(;FjGN@hUh1Opjf)Q`-+v6OywB}Mkz~)aD*-H-?t$-N*c7Y6gLmMe;e%!J&f!ol8rhE;aL+4M z5f1@fia(>H^c4t5I6zw@ni3+D zWq|xSXu^o^Nqj>BH<4IaQERrGm}^S(uM>=0*VnD_plTJZVa2Cqrx#iOL-t)#;1J1S z^sOelfQsYKJr5d;BJ%N&6iTu+=1QxJ(^e-7svrIp=Wj|9ESs{7_8$EWYV)G^&iM;i z6bKifgqKQiav=l^5_$s{A~OjA21#RJTCnNT^wwp{mgRg6-(l}|Io|tThbwono=MBO zi|9t2dAA(1+f$MBgl@+2uDe95rXfvFmUkhiN*?NThGdrWE%=;cu}ISHD5eo@23waa z!>P2M0Y>I?GS|~6Fan;(N}~a*pOJcc#4DsttSJ z0VD)MyzZ>8gI<^l#g?*TVQ7g#|7igWSUjxYh=UdtFA`)B)+Vua_>(O3I=t(`uES{l z-AD4f1U!+DK$e%yUBBAF;oM!j%Axnk5eagYgF1 z9g%9W#91~pK3Wp7L_H6;PLU@JR23)lB8w<&zbNLFd?<86el#L0k-S`Rdfd*u@(_5h z;thqo%00?sbjBvR31ub}D#&>!4!m28iC)D^hkeRD@?)Wp zPr+LCKhMfUP4#)Ay#SYFr$7MaxA}`Wg2Our$jg^%To;hQAq;7D(`*f!Y9WgAe4W|5 zxo~=(d-BSc7N?Vm6?CK29vwJ*YbCRyU4q8SZq#kpe7pS2^rCN`0s?DIZu92UAbdB< z4aAf_i0$H=`FheRIRmMl?W-K9w7oNI)kbj9Zjo zZG}L=q~7Yn{?*uIpbEgjK@!mX z*7wDSGm8D-YYy6#Od)>XHP5uK2= z^khbED1_juTMP*~w)XJcoKCP^snk$BUX-L%C{*-%hg_}@H$DH{u3fw50@Jrw{UZ~T zqyFKM;Y>J@jKRVdl_LM9+nEXbb?uX&no3{5{CdmdsJAyh3Jf6=8QJdks z8ht@^Aa-zr(xsJ^T-b+jj^$-gB}iAzr6moDs4m1DB?>nCIko3=xxRAbF%o~YLbZMK zu5x@}3IbSRUgC#L@H16_BxpHU%*+U9LO>mnQ$>Chq&@3I4wen{`>cB;m)^4{ox8TT3CZi2MmX0CAWP8lL<+2cS*ljR2HX!<0`qLZ6d;i~ zWCk0ye$zGS*Q&Q?t|?!Wxm|s2`kI?|9$?bTp4$8_FkHg=ZE))W6|1(*Pl1yv2q*3n8)|xtYXUX2wsbjSs#*6xUORev6$M&PG*3-sLxq~*Y z#RR?3GaS=lvAhR{yN4)z-@*-a5JEWd<|3sC9OX_s?yclBoTSZ09Xa|pFCRQO#Uhh| zWHv7EEtmI7ha-D){9ts_pUlNJ53+|A&o4&(v6Lj2_m-vka4om<02k9VFu*_NGXevA zQG}KPt+N3`5me5`>`Wb+o=8jaGu5}vPdzmK#_4H6%2xL+EU-hjT|f7s%u^Y*Sj|ep zG)_GfPr3a(8U4SQ0P%C|JRj7CqU^C3M}0{qjA zS}>({(`{_No5vX_*P!*5o#M1yui>MwyuLN7`j8Z3)Na*-X#RwsxprWyA7K-lUj#1z zmp9YOs8#JXmJ`rRAefTcjj@2uz^+XON}*5$1A?UoyX3{G&&bHHg?dgR8IYa4>Lfpt zCP{=|foH(5VVYrs&-J{s+HCH1*ZDxjX}oyzUAO%sYuodZe9NxGbD4ltu%pmLK?)7k z-&fZ^_WvkIy2-hK91P0qLxsYLy^{>KEjGE=+*y)Gg~^5KWL_ARon9wC6=PFVLplC2 zNxw7x3^GR27ZKGl>d9!5R1*=YkrAE{<}G?qvTpIj2?$&^EKq@+=eYP8zGX0qXHsSR zxP2^@sg%Yik42Glw08LRZj+-SqE7I4jgrf#Bgy0ldeO?~RW-JcNw*&wpimV2XV}p} zmP+&@dpi9mQxO{Hji=Kn(38#_|DEFqf*SnvB|1(=(m02241NM448{YZi~GyR170Ei z@A9}muFdGuD-kr*oRBzw=hGz3gv_u2*6vK~T|!Qy+T*~;e)hl@tg#@WRopv*k_&I< zpuL&HK{5Ac>9`4~^2cy#vRP128XWqt=x`GTKAN8+gvA3dU9ZwHm@|I-0?I#U#B5hi zU}H81`fIW=t0QtcFIY$MZZ+OrgvI!K+u!R#lWudjKdh&ty)8TG@+PJHgv*zVvfKnd zM4A4n|E-Sk&xipIMpMC@<96<@-BkC@a4pINs(Q0KRuNDpoZPn0RXhvT{( zgbF^jVQ!S#?Ts&dfpubGUASZDyT@T#H>`-b!}XT8g5(%aE)t?PAgtFQi77x`!d&Q7 z4!rHut@!7cQO0ESCf)uE^W)$T29-DlSVw@~vtFOwdySN>jm^fM5^P*0tI9qWQWTHh z=ON8)`}>uS(RX%yZ%Xm_{2r)%TbD2o#c+!0?cbYDo8uZeTZ_crWoKNwTSj`B-+ZZC zyMFN*^C-PlBmvX;>iX)Z7tX1>%UKB( zYfGtoGOC>N?;fsHhG()$DE&oP8P=2i)#RF9&XMHKbp-R0KZlGzJo#832uLF2YGb6^ z$H#|BlCU{SnwVBb#i(-TAa6E?rv!(}<_LL+cd@fwfijAj*ea=m{l8y)AeVb! z@s{JExFj9Fh2`_`w&#`7EvbWd9+;UqaO0Cn0imYJC$Tz|MgC3pO%N!ea*(oTLJ-zO z?ndS^BuR}-eg63sSk+|po2jQZ)K-#to|pPBsn55|(l?V&-=hAonZmU+i!Kz{ptewE zL9IclP#^;IDumWmbwll;4j!b+a+}JGH6_|=TxO#PfpzYg;h}8MafJM&RaD4wiFam>Y=u|_xFy$HRAE16EN-<1M61i{S0+RDsMU(H zBzDQJytCl63Q-$Nfi?=V-6tt5JT>X`r<|h8>KbNNuhl*@hVXZh>Qc>9vY*u^+wEz` z1Mjlit`FU2v%mAeqQm;S(q4yk?$mo-63ff}sKf3NQ+{T1*z6-AIQs%lhm}taf~jD_ zmdW?UowCr(@dRdV1j;=j4GzK^S+Q`c1~C~z*a`%)6_UEJLFOy$7sOk%mDLTkLx=f> z{QL1RoN?T7-NurxBCUaNm==}p65`laMW&d z^ks|@uqTpoLGVvJO2S&>BtzUEmR6Q~%?>(saDeyn}~xzH8D#R>uZ+Z z+bqLnJ_IF^k06zX%$IyTG-qA@6m2Be0Gii`g`t{~{uoT{^{8MR&oIWk#eoeQ0BJjB zE^f&KBOv0G6hvQhqXC()%v+U8g=s?P>aRR=T%yI(RS>;U!4d({Omu2`Do_H{DgfZoI)Vw))w8cGc#|!>_JEx#H!KbjF|Wg zMb}Ds4HTSiS0w5Ti6Tsp;fOurwAmsrbNqNH zmlQ=uG-$jdYh1h|99PnTCERry6fazix;1eQ1%3+U(O3@iHZIz~`rl$eMcmn`6=539cZ)H4D zvFz~YTZnM5l|i;8q@1!~4310Dfrwalz*%;OydEX$V;T#mJ!#3~mtNOwCL?ZV*xhWF zCQ@E8=yBq^u5co{vLYuU9(SxTGh(0_>AX5!<@AE(4BAR)#c3;SbeweS?^M~1$PbnE zi2pqgqTx|BtY=~qoguQ0@;z%8Iit|Ej!E7-NWl|>1|rgpV-5g{FbT#J5G44GQBQ_v zsLfkZr)B`FSUcw#nT%;#Bo-P9hlfJ3h^ECRM?AS^Vb{T2?%=LMkDM5I^>X2K)c%KR zT+AVbF@b7EZmLwhtG&S_evKBg#R^^De~b%uoJ!$g>ZNgT|Ky2Q4CH~@A0$LJ_y z4q)7%5l>icc~0yabXY(J&bCiP14!*86ao%4@O`9T>mLO0ki(I(JY1pMZ|(ll(Dabk zO~-t>iGlr7c+BY`k#EcTX*%F#>y=?;Eb>3OdlNWE&ic-~N>}N=OC|MDQny-Cx76o! ztL5<=mdE26&*kyejgMfD4{Vq=hrweo5L*xja2x}6=rJUl#E_Vyn~<dpA+x=e-8}cpfd^+dVY2Mt;x#I<;OYlvMCCqd@?jRS2q8Tlr@`fSg zqefDtMq_I6_S+Y)ooe2Gd-E&m^ICNT0Gjd8cVJ2#{xx+3+A3UpQ*rS;OqZM_H1SR{ zDx?P-sfj0LOHot<&d!YJ2^KEPM~vt&fvsv@eV!;{FS;Vol#gQ0Ja-NsELRYy>r3us za`95G7`P%DYsyEic#I@H3jc9rge62qasAj1Kovh++rg{dD5EAkQ;IME~|ZdTr28Czb~*O%8ges1~Zh2@J25V1`KS2X#~bD(%xI!}J{pC8XXJr5WW8ftaoAWJf{G)gkn1Qz_T;yXKJ9IWs(gpt&|{^b<@J!vBEJXuL<8XOBsLeea`O}%MfVEd%x zFf}R$m*^f7XHySnukI1+(f$TMckb`wzPQgQ`Xz~K&M@F-?D=s1iuvQdK*{GE&dE`K z(eNc*(tAwxg-B{3a^`ayL*{MB0rx|o#7kyK1Wj<27H%vsAO<5`hF;hnL;WxOHh+0f zE_q)vx2GJ~ozK)=x*?wVLM2`~Gx9!vGUo50U+Irok)*tm>5tKI@nA{5K zbs9(Cgpi)2@isT>&XE-7n3mg3F$@qwSe35)@5~Wvl-O@oc@d7CLD^%NE*BJ^6JaFn zW9Eu^OmCREtf(}vPaT9zPS!!Re)OF_~l#UyYh&_$e*+Q}Tr!Lx^`E3+WVci8UO)XBkg6 zZM#X)<)g1WWTcEA7{*+0lbc?cUeF)zUGeeWmJEu{-d=-?Q(P^Zz^*fLb#Dwgwaa7O z5Kj9eYNBuU9{+-m-u%%|5{X9iPXh%VbL-ZV1eKO|br=_J00z0hdTk)xa(+=>d(nQ^ z)IzEi2<)QvtyD90)#HPY|14jLtovDZ_4Br^E<8E4kZy5sSAfeF-tJtczRG3ljhm_- z;y8v86x6v@kpY55LJ39|ancM+olVWz4H%|q!YB z_UoSto6&S7n{L$O@jCGh3zo-AjQ;tR^QRu^{(+B7kFj`KKbDTiyMLmWjIgi!49>@i zP$QHGhNHUSB=8Zz^gR9&;)pgb;wegIO?)$u^(?E#Y*963hGa&XBa&Dgs-%v>dqm}w z^Ul;nlWw#x9$Fd=jHa(YA~T2y) zCXebRUefHT;8eZN$7>q(r9PoIsNTOMnM`y^WhR0@iKrcj=2fniEYF(=DAGlY%HTw8&@Xm z{$t6E<_Ct8+0iV2$>D+g-->5NTO}cJ+$erq|0?yv!s&8&6tZdWqHauIwRcpw^!TBR zGP5Ty8Vu^2o{>FQP6@XjoGt0&2d=pu3hAQGk{3hP6@sBDq069gky*UZc87;q?ucR- z=}XIyVH&oss(POc1Q`&z*(s!!ahzHP!Rnq3uO|!pW-6C0*NDl2XO0#Y z+x&PU)A;GgVx?}vbUPphGB0_utUvzN<&8w~> zT12zKQ6rnk8t)Bea6p+HesNq88BpK6P;l%%^>>Z^ zB2wzh6?ac_rO)1W_3tVo`0d}nzoGVca$TE%B>pzwysSq8IkXfAP#%F>l6NIHKSJY> zj}aIR@v8fe^;Zq%nBd0b;QgCl*E`SDiSC0OGx<5!4CI|O^{p-*#SG~@#ht}uL zDMvoY0E^dZ0l=cFH2orkKL;3|)i12?KHC@c9?8}d=|E(cy~~_SCql*%?+d*AH*BBp zia;=#nlrgD5=bZN*(2UypOs(2!Hd*pMoBLh5Icke1Obuk7zm>4xyUUf*2O}02)B<} zB$ZTumi_B1E3c}TSSY6c2+;P*PI>o5TqxHL^O-EYQ?9D-DVZfjjhE1lB@dj`tsx6) z0vb2*uD6)Da7Q?-`gD%?8PJORD0wbrKu2ok;v(*3on!?U_&~Cf2*h5bc9QtZCo0{4 zFVs3$&z(N~BzzIilY0Hp$WRnqGAf@x2&O{psLy?cG$;<~g)m&U%}VU;u?pRIK%3G( zsz0M}bB)ysELU(q|3!4tpX&bowI7Ma?C4nZrsz-GH`#xxC$IfyzOk0cjj{6GMCdD+ z(#b6+l75*EXeuZ`x`0<9cbPI6fIRW`K&v&vICAWP4bhh#wPztf;t9)Cm2`6qH@&mE z3KQyH)@G_9H#S5@96z*RH^weqdg|!0V`t9XCmlhKFA--ILbcI``YhF%jUr4gH|*x+ z<8w>xO1?fZQ6DFou&tV5e=!y6k2G+p59H$I&850tZJ$?s29Er&luL)C`^nRq-CK6Q$x zZ%@SMO+%*Jl^2hUTzutZZ_B*e{-O?2_cj=g$V?_qIHU?`e;A=!k0`n$V~c6?+nk5)D8&u)SNkrO>lQfd@d26e6?!Ao{El) zM338h6UP$8MD>@Zz88IZx-=CHxZ;#W!_Y${YikcA9IWEzt~h?l@DQeOQ z`i-Mkjb0BWorp%Sf5}yMUQZ5z0Q-M;{rF(PE)+Z0j~CevLPT~2)4tkOdYB*F5as%@ z==FDAb>|H%bi@zFqPO*a@u$6CoD=1ZtWUM8kXmIDY$7yC#@BJ`t7TfMMy|q$5YVqI zQcc=ORat8MN3Hdi-HJxnc}(k-_Eqlg)%IuCTcd@8CCj!-S6VBUey?-o7?(y{yX>o5 z{6coGvI|^UFXiog>G$(17K5~b9Jh&Zd$aax?E$gWitTR^!+6{a)l{T20P#eWSi}Lg zwYX^6-qzx@2e@8D+x_H=%f)@D_=_S~#Jv`{J%n|d54_iVgj{@&6fTNOVWv;Q)w54@ z*M7mnG9KYjBoPYf!7u_&GM&)TFT*TAgh0mvQn7f@@P&h3G9QE@;YcbTk0-(*Ptr0Y zUQdKLHJ>kH=8}4X^kl(QCY9ia-Y0|`Z%1$s1&LRq;41W-maq+PAV%nx5hmYa)X;SU zk9i+I3z1aHN6amu#C~5a5ohtLn3?foz55PVSmtI zAo;yxzJTrZvc8sgFc=#0l2Od>u_Zrz@(YI_gsAB!?OTe|x4iq5{{9aEwE4zj5!)N$ z7lWbTpxPNWB3^$ke$n9vpqbtOR=mZYy5)&mz%m>veIAM-p4?MN_D2LNCryUKIW6UB zAfm(;@3FiN6Jl2V7#C%PX<&$&gD4n4y>p-tpy_2xH=D^wBypCHq$zuyXXLYa^o0-q zGfR%VPLCGSfj|(mrSVv1@J*SdUZAG;Mv}?MGnF^U<_+(UBodJib@WUmnFu$J{iu`O z&$Guw4p!lZXFLdJWtkv#p@?pZ8c5rv+>m;M5Y)+=iJZT3x5_OTE5+3&D_>vcVE z-#BF-m&&?>LkxK0=;WprmZeM-#z)I4EkI}_db-eJlmUpH!cx^rc#kbFpVm7_SjtDuz%Q2_yJWwM9Oq8=dJ(md{$CE|oc>d0Q z&m5;}v-F*QC2O?eCKwoXw%)|$dX@vap$<&w-uQq2d9e+?gQeiiCM$J5=!P;O%sti#vS-9<5Hrh;eyWZ-k5RC(0L z*kc^Z+vqp#c%O%mtG>c;tMPWKGYflLhNYK6XU9oO81<%y-|a<_8VL?N_0 zvD*<9Fpi72o-0ic0@2Q6c-}{INMm4n#^a<1EfR;(+mmI3Tn%BqZ@&WD(wT^OzP!tq zj654j`X(hRE2e8|)BQpZTll&IE~dNRE9g%^`tx$uR%T{(5C z`)s4#KzC~>6Yd5Is(9rrq7hy}m1ROAD=|16HGp&`s^^;XEvYg-eWFF9v2OLLNL~Hb zI=@r48Swf0CC#`D&J-RFeq`WRpgt&d@8bNh0M7y-6v?bA<)NA<>+=R-W=cT3zq&q6> zGPN8F+J&GXeZVvcs5irlb!%)@end|>v+4uy!HAX|_gM)C{(Dt$ypS34`jW+LcBI*R z4SjU0>9;%VV={%-1>tkyzFfgifNr*I=E>;lSZ9}> z#TkFQ7DXjc`~j7WF^Jue@rW~)K=caYRJy8~P0G7KjaC_}a$!~9hy@!gpuogtaD7Zg zi9lf)lO;4B^p~UZUPomrm3VvpNDN-s3^6({s!Pq=OF)AKA1;ces){xRZK;oN3`|3=q)ofAd}8RdB6Kb8VDqGhH~fxUz!H z1gK-1%eU1fuq9S$SQHL&pR5p~#($f&t;K);2<+f7?H9GrYhM$ z6iKo4q}P+seQ6ea)x9>0vKoQ3kEOvp$?a1?)ZhgB<+z9FJ}V#u;MK;RqNVPQtj zX6JzIY{;}xA4xF?E<2}hAduAs~d)kkF5 zLxTUzHLtbzg;M^^i9ja83@@!L&Lo#|89_^gPNxb__W0yw;o$H?VI;ZE>epXvJ#qS2 zETe2Yj%hW@I^!p`7cpa8rYzN}fX{9_i7epf)^a$=j2G7x25Ue1U9Ih~F|>?Yt<|!u zr|3rM$|Ng8dpxdpMjht1yek+tVws7(dlT8od_SNc4jD>0k)J(oSqlr4^CHp8oo;Rz ziJ7s0GaYY_5Nw>*Tm12{I)5zhM&W8D5v0i-?Gxc+Q_rd-Vp&g{Tbcs0=tRWNhD@5{`r*&+Z3tp*NraftzBbkwG$`u?B5waHJFqc%q^1 zpNFCz{cXv5eauuMPRAU>SZgGs(InGph0exIqN0SyFbMbM*^rk4Z=apR2!bDFt6CGE zI2i^O>9m~gh61btv(wgi7ac5=1Ai7M7b1ZdznC@0BH3Wtl_^$o(r=BG%}zW#F*rC8 z4n{M%OoFUHyBwh-`v0-IxLCa`Fd&matIVlMWq5ax5Rfcpnrp2By%Hy5Awc@%f;HUC z9oup`>rsn$Y}=~r*OxEJe?KR#Y7ftIv2{#8-cJkU7dJT;EA^x9cL#Id&tIb4+91sm zptw%Y`G5yXOi&g=OG!RkMyqgUHQ{8^0mB2wECSW8>&s7OVmYP}DR^>CGY1s4fggdc zL0Xs4JTSYo+n+ebgya6AZHSJV!L%*jGA@gep^ht09Qtc(zT6^HuFdRHSRk8v5y_U3*zOrimO>G%TWeh9O0d{GMhYtQ4L6gw+)AS z!JFN+v;6zMZSTFU*!?4Y8Qp)0Wy3oSvf%E!%@*HU#d;jCJb z0r15@h{=qnfRi$75a&RaflRA4r5WQbVqq!NHeVk(Fcmf#o_o<&o>1kxY1r(=+wWA;9b z47RoJdb_>%((BXeK7qhJQ?G#3XexiJc%g_DxP=;V6sPY~3QX+b2QYI{iJl+qA){H1 zk)4)d!vDbz9cvJLia|*ZOGXr1uHRmYMx}beGxOr|)}P~Ks6M?yz9p;-%W$dDi3BsH zOuoeIC^azPkVEkk!c2}Ht?Qe_k~nv`Fh1lgx2QMH%MBW#q@QFNooqBm96~hdHsv6ye}ix(tN0R3o^gf}AxXTCxho##_bu1Tsu%XaL+LXne`Gk50@j zajQe)r9JN?bxj~w?EV2@=~Qeu5s3I74G&p)GvF(vX<;KWHk?d{^+%xq+XC$1mJQm4 zHzo9eH*sZ-mU=t0ydWk9#qDSlHS2N~8Jhc*vJZ&BMIyR|s7YpC1iXQu;Yp=ZX>Zx6 z3|k}E3NDa-He7Mx` zF`a=W-fJStI4BqXCVnaeIkT`el}D|fVn@ITk}*+w&H0VN;h|RUuoW+-+xVsei*&y| zYh|*NCEJ(EC;nPEekT+6?Xx>;`Z|_}+~IsIq0b`fbFH3xcsgekx%4f9AvIdTxNooB ziQ(1YE~Fsd=8~9y7({deC4CV}D@YefHu1eNSfZ$$BZ5af(M=Mm$)qrhoYkymnoN{M zPI1IvBc1S~Uk(6r^HB?UIb=s2LhZH3d{IK1* zIr%l*#xUo28zzgO+Usk32TnYvH6E}(bwbyg_5*8sU%|rS`v#783iV6vPaW4EEHv%$ zWBXotVSO@E71EKmnqC@+nM2k?RULiPtxxw0QXg>(6#gv>AtrmFtV-%o+=Tp}^7C>F z3BM<9)X&xb^^5*IOMTqN#{*_OBxn$2F z9v0@hzj<`A(0*h0X^XBhu^^JrX@*R&v7QI0;nJ|OiTcdgCha9~%5^4F= zQLd1qk7p+*vy^Xy8;x*8yn9oH$Z@ZCk=4COnsKWyWG47+K6>lcv14*ukV5slZ1zQs zi25x<#Oc)Y(Do`mV9-gu>~LV9H#jU7u~gQA>43Vqt{>Q5aU<{JR%qWG(pPVA5a%2G zzG#TN?q07Eiu(L2bnj{V#0h)mpb-iglu3JL#y+8M2+*v1upkE|hc%W<^1#yv_=0_> zc;ZBH`YBHFi$M6hEK*TC!Aw{}Mqfw33sPY;fEq(ssv~OpR&@iZJmiL8%T8mz{-O_zNH{=ah3@ zwF+w&DJJd#TS5d1)VRENkR#IS{1Kb!xNLDwzu2D$q{}F{o(#$OgP>(3@(g6m6dClR zbJ2llJ`wg9{-_x)j*)Ye<*+<@GUC%CzHHh8v7RVGO(^0Ez0FVDZzN2> zRbU_yABacHu!m*Q(q=s1PuTB^q@(%v2$H%#ZVVj0y5{kDLV$^0Pj|e=31JTw78^)`{AZ3`t@Fkpw-64VH@B!hFL-L9SzwYlS4B3yJDP z3IH|DOv$zeQ`<6C>COGA6Qw5y@RS|dZM{VDN)1d76zT(>Xaq!Upu4`}DVn*W-hk90 zi91sHm&b-?R+i;_E?Y>G#Y+zlHU_L(0W@#ls}m**E&9yJkO zB^xjnq){=kowr+G`&!FBO|-gz8SCr%ihWW2A{%z<%u?}hlHi<8dL)Mh2s$WmBXCJe z=$+$m%RRSL7{|#r5~{z$oG$bLf(cw1`E&eg3)AL1>Y<2>3Op-k+N!z&f=Z%GH1moB zOsEV7$U#(Av6|NW+(N6Wzxud6ePi*wbYZ&0N>|E9t)uHpEJ%E#y_@dK2aR{g3*oEg z5BPg`-}GpRxe}D1h>4*bbhi4Xrc?|?yH$57SGUcjLh8?fHRp(feGRf6f7p=t(^ocd zXT^z2V!v_ujNam$QlF3(!CC}q$RSkIYLyG$L}b&d7tFz^iMI>1Ron48h19Q+r-6U^ zuzJ}Q8I!z}&@%CZi0Vb6%ZOw-cTC<{y`e|~o3tJgO3oWHF1O#2A!}Ny(-vRwRq;Vn z@0v+oxxRi+C>^@+joZ92gMx?qBLQn7F~{={dA*Ta9IKl1=Hd}5qvgE#$V=RBSrI>1 z^@Um~?KlGYL=46kauf3YD*x^V&iTEzPYeW$6aEAJq1Xrf6UE>_!tI+> zV|U<{BLE!ycGtR(sT{x;-Sk!6Su)z|00`+WZ%#z4bk^+jvg%V68g*zZc zpmdZL@s0um=+PNaYMB{WB$Z+Fq@pl$9n%zpiB;2Af~=9L z=2|p&8}ZiNbsbx%41K3!o14y9>EP2by)%xU1KSuQzx<|mZ>~2|xw{9Z1J$GsG z9(^~`r){sl2q@&o;u@$#V*#C|{q#UQQVDo%pTDH*CBN@^r(P+;iJ}JxF3Gh5vfd#y{F$@qjAJ)C2UT@Nef9CcnpReHYVPy4< zcy;w;p57LdC{6xVzU-xK!Me52Zo%Gxz*D8;B3}r#hJ-tgT?IL zw=TEs=AqhHyI^N$2ZftCOy4mAI>8Xa;}vS7v|phZ&^P62*faaJO%g1i`^y{x(Z(y` z*>nN-3VapV>7IX9*%epdKdaDE*Q4lvhd+^y*T(;(Cy~B_&aqpZh%AW=fz`b3?IhEU zoo}3W2%y7!mc^|@ChwNiATrRD@Bwgu7BT9|_~NDr0LE%U!}@K$Xf6m~reluWd`W8g zVUP5Pf=4G7OS!CRjvs0c4>u2uOP6^(VxeRG@6P^#`FoZkVfRAml)$84;#S=2!x7?E zM0itEe_RO|3G~SQcz8GgJ4{TZav`ua6+*_&mPjSLUKjmkD$9tIoB|9!#j%i+VOhV| zeaqkkDOHGp9NjlC{$8;v$D<`9i1?edW5vw$;{*FfMU>2@iqW_juM5+ezX%#1j@e1B zxlDik(D>FB<5Rs0iq6@fQHsX(n^Nxmxn03|!eiY0!}63~!;A1FfXC%Dym+F>YdP{Q zin3xQ{mB{@Etd-ebcis+oMHn%KjPnXj+hKQ^u~dA>?tj0?L?A%NKj;Rg zuJ`?%g%mmplXASX0`M`hanC8IMoXFKM9_FXW9C%^en#1Wg7kB2cb`y>rRC+b7x2ue zSobbGNP-oXn0KeByFJ%vWAk&rxm(7Osl@(Gz_=knS_ClPq5Sppyb939w3qcVdc(?O zw2`^=u^Vr6Gl$@vx7e$s{^;_uZ*2F`30iMJRL6;O=Rmk3VM$N*b8W@ft;{9r`9j0?o5t8YSr*dV z&(#6l?Q^pPNL8)C5KGi$CuvUC^68^Ni#%7^gI$*m#;MqWQ9Tvq6O2#H!T-r|bVXu9z>C0yy#dM&{dNvr7jmeor#(i_agZ z@E$fg(Px#>GOti$p(Y5SCV38#N|xrUp)ii31Ijurl+F`oV`z zzoYuhbJgdx75mq1pZ?IwL4Bj~uG97I!&P77^vG}6zU~`mF1rkJpVM-^9-qcufg^FH z#&D4tCsPij5M4x^@{|hDvZVjrxmY777X~AXp}@kYjxl}WAMAU4i}7qWj=YlgP8W}_ z!x+;gmgx#PK#OnGmoJ}vPi2U!=11G+(pUeXc#l6D|HF7T9-Xm|qrv2}V|nk0S74b^ zE*Kig7BhFf$Iiy@y?0r{0R)^sPcut`G{D0QRw#xBxqh7rH;F7Ts2U#O;C)T&y9Nma z?Cuo=UYnul1Kk_#`$rb+zpHn@rMFM%M~^KpcmHC>6dz49qrcz2KR7a9YSg{Az@A+* zKnRdrtY$TuM~O}Js3kqhsFbDw!zY?WmYTFAl@Br(Q0{Oo*C_pUARG{#Y|hr--~A}o z46O4t;;z@@_CTWhfyVUj|1}FXZ=m}eoU^+(>X|}eb-J;4^{2)G-kew6)W1S^m!SB( zDjwU?+)jj{LY&;7LbMzSD%>LOC_OZYs6T&uq|~V$Och@41;L1H%yqwznoUml4PHQD_g!O}In-WpWzwvxw#I0F_^Dh!Dcl>y|$ zeti~GNs$2rYKDR+z>8v%0;i*k;LIkqHpTOz3jB(Nj+)IoB7~AE&{UY1oU}Twj9voz zHjdpLN<^ZmdZzTL587+H1D;6e?S*Kfkc#Jg6ZV~#Q2*NXwHrIG_mtjFWP{hQd@zzs z$08Bp2!EBIU53k0ffNI&LLxeD-}ya%G?39#H}xw2S?JvW^lm~@N{CKQvq=%}UvWlJ zd%Idz#bx`voum|UWd*)63!6$OZ^zhcziy%0ts{BQUWwGR*S%4p1(M@$X@yJpa!MnH>3~a?Y>s;H{G{WOV5+v*f z%9%r>M!S>b(A9p2Ir>yJ6!&syMXRX*L>Yey2+|uzFi=MW-hgi?F_Ry<_>x{f|9ktl z3hC+B*?-5t%4hPm94Oqtr0t(HM)d3vux(aOBYv3x^!!h{y?oIASU-G@KxpFB*AJZ|F!~(r?OvH+s7Nf3 z0&#o9So|UIaB)P=a&yE`T%7P4RzDO7P1$pMe*4RM<5|3<5Cr>efj}Tit=jCg+mh~1 z0Pph*URkJKq?BFCIde;?bU2k@9u{I24sOV{$cXwQe!rFK{ta2kQ(p=grRL8*?0@L3 zP{Gj~Zoqt`o7c;kzerip!FXx0SigGa%pKmbJ>9dmu0+I#QOFb7>+4-9j;vjz!FaF z*b{^>A;|OylXQ_Vs6a)y6js5eDE(arX#~LCfDXBeyN>TqmjysJ*M(S#?WE>t^Uehw zY>tidj1En^&ZA)lm|-d$(r)6#1Z-sB{W!5{<+AEAXWUXb2J8z&r@6J(ANuja((KgN ze`H)5P&==wH~!zpr0tj;j#u0Z&JNclsy_m)fB$)t;|bxN=)N!R@z9%ldhqjS$3M6s zXBTd%n_$^usE{P3Dy0vD&XtTrZ>$pE3!U&f8k~}R1^>tI!O0#S=h@3pV zyr+`TlctBm=Xz!SYQf)!ypheqFZkdV$pt+Y#*0po1yt8@)+Hpgso{GP5Dz~F983k^& z*ZZoXScBVQ8D+$L{-c}yj}%n{*_=P#vfb$dmPxozDm5vgKmD(sA;{qW(4$=5BjaEQ zZ&;jnGZ$b|7D){duB&9tw$zaBYj08C`i3s)w&Z1<7k_bjdUm4l1yVo$)i)b#? zvaxuozTVLaF9Tp_S+hoNs$yM-^x-z0;a{}LKH~fY6v2@PJ_pDq`Xty0h6n@Wp9B8O zE)p{ipb%!$*%P!HW3$y#d_d|<_%3mw^ZLf69xtBM$oYDF%&w%1d81;F#r0?i*I2LT zQs;E4H8O%!td6jp%0?p=DOH9IR;Dz317_K-gb9bL*kyBo1F`sUr4%73L#|Pd1cOq+`H_MRbLTax^9q}fkm4S~zhuCY;wpPm@MxiE+3^e>}$n+P5vau8#Qivj4CUow-{#38QJ#|bL)%;^Z@taf4Q0R+^#KG`DI21aVcxx;cEyq5K z8$CXLPfW#Pd#9(5<01bWAue6uqK;e}X4U6|iMMgD7}o~4ns#-?Wr_M41~zFD@^-a$ zi}rHu4JGCU;OB^GJuqN zgjBkO!!$|Qa;d_UV8d`9jXP!dYo}z8Vf!=ZD>`0tWHc+M)L0 z3!rs+65kcMDx!CeTnUA0?vX8*Ezvwpl~ydSl=6PpG&d-xtZ#d!ZIHPRyZcVBv}FPt zI!vc)A^j4R6oE|L#+&ov3{FMgYv_8+9)_wKuOKRpiOb4nO)JNlT8)t^_-?IMt;yGF z3x5LmMN{?`Eo+fa#w^H*C13ds&h*iAIvOJ(q`fea_e}UuN{Pi@Rf&p6(jFb0*$f0R zPLC2D95jd>PI+=9cS*sTr2^vS7=t{-u37)`%6SDUvN0}`d$z9W6bl-T@M z2|bQ`Btkjl_gX%mg|mSKEOXFLmUcG2Va^3)X`h@oz`0=#dTAO5;@ec7!la^d94^G1 z0rPe|sT4&oXP}&n4aXK$YY|fhGU`Zv*7;ip_Kb+NAe|~kVnee zaHq#Rez2}zb1Ib<^krnvKq)<$AKO0@3y});%l7Qn@mah3G_7@KC=;H%V%85wa1kKrE4D&%8Q_zW6d(-8QD;#aCn&xT) zrUt;B%CDIZimy*qaP>BX}z@@uh{A#1X;U3tX#cf+<%Op~hmlCs#Il`-wZH@cP zH^0z6)#;Sv<7ecfQ|kR|yE|%os@`S|t?tI@b{%)YGwpV%)A_vm{2BGRRw}6rNyKz-8Pl2{-kOU`H&1Gh!hMt8GjqkZgx5tR#(-h{)w&2y61Xc z1}yM>R%FEXvy6)d-VqX;=sIr2kZK5=Q#{to_*Wj^B4i5+Pj$p_L3Jd3g+i^IKmssP zL>ozfFS5%rUy$oyIA*VMP>MG8G;ri;OEM3Xh^wr&QaD#=WTqUs;eCeNOoU zIDjzvUlTXzauae+EtF*d>8eGaxrl4&;_6!U;!=INHq%*F3k82+rnU_a)Glu(DwRa@ z^4hzsEAM;iDg4tvICG`-F5cgblaTSBMS|xY)d+9RF;oc{zy>-m`AcQpt@hGpdv&$l zY1BKNm)vvFiH*0umCDQNJKus0$lO`rn-CLfEF+xeQ%Zo$V>A?_S|cve(O;D6A|_U4 zE?Zpa7iG!wS3kYc`2ASCyt~o(m%LdF$BeoW3zL)6SWOe`jN3({5d4U&J2~S--Tgp_|IVw%oXxcrN!83!u5pyH4Xcxv7a- z?2`}Bg#7ZfqDLlyL=s?+grX@~UFG=do+pU^n0@=GJ?j4LO!>9R`Qyb2_as-Tr#j;) z1Fk1ozv0IHZVo##pJ0_ha8~i~JYEqtgm@&B?cviiSx0+X)c(j=A~=+@B3JwNW=G6J z!31F!}-2VDnZ^I_z8QhvZ-eGY0hguUyDho9BLIG(3s6l{mn_s;&SU~Gi7FqY3DbQ zrhZvh>YUP!>7QW!jEn1Ng@8O1WaSJ*D3S6SP}nPV#3KUfswFvjE87FJr5{TLk}0z~ zKUCRQ^)x(#69wGn`C}bHf1ogv4xBD^H=7H|W;40aOf;LDf%Hsacvm&2mPpGDGzPht zOs2^|>U8NNO)lwOOXb@1kF3%Y(GI}=`Wp;0E>as39C93HT`ESWDG3nkf~#&QJzx3N zW8bMkz&2eJ?flqYYdDt8Wn)A6y}7BmWRaPQ<*VW1`MhHhU`cXW9KBTGaVMjD^c2o+=RD)%xB&Z7k_ zx6dIfi*Fu@Ass+Krg!&jr=7!@M-VH=-%q%!B}#wAU#m#;O-7iH8{Z?Ix2Sjuvh>W& ziW-4y3~W>XboWiD{qh24{{!lSHPSnd&f3+*aw=6`tlG1qIls3y_;9wAJyOz_R;7mW zQ5(tzvYB|ckl`=STeeW;JNR6ww6A}VB;AB4?lg90_?0GR}mlqasno_J%A`~4M zRVii)YWO|j*Q_N`ST5Y9cHKp$`az2&VbyhIQD<;SYw*EMp6xZjXw?twWj_9 zW>Au5%S`(O&owe8-YGxu7AE%`Z8VPVnJjpJu&6gZX%M7jzL55Gzo6^Td}sB5723Rr zP%0s9PKbc8dQu3G;>cn5(((WVHSmH$3JFY!&Z!b_(B`x6}nKQh3{xw_WhPkC})Mir9iw6r(#n6#68t4u)b?*N(QI zbVov`0T9)09_#3(@)avhMVzD~8ik)|u0uMVIF|FUibE)Mw`g~3uVb=ftrC&!e=;Ma zc<(q}kA%{v5te`GiT=euKJ#NHi+pJy?8L`qhla9JUhnAk0dj&ly#4Z?2}EE0aS}%k zxY2ec=XR`6?V<#zm@-FD3tgD1uO~$25s~3}Y+W>%mZSpR!Ob6AUq=^_l{-|(gWQ+S z*hC!VpsSAIuz*Jq@dEH=H;v?meVcwm_XCnpQnJIW;IOdHu;;-hR|(naxhm*w<+-44 zw}N)At^!a-_<}n1&h{J^c#k$@M}+bcdk5uq!hB?c8)}w21YP9M9^~ZYMa1eToYS(@ z>J{c}-Gh^~7Yi=cz!wsfI~<9PWbC&J5bKr)dIu?S-!m9TP&M>>izNzDa% z5&yRfC^EvE`p+a*|94~!s4cWwH%r-xo~#@`e7Hg3-VQOA7-&(Jdb1s2&_F_K0Sj9C z=6m+;eb2q+haM{5dX;(j=CQGx51aa)*rSieUUK%TtIif@Z`vPRUJmZRiH>lImUso! zNa|;_EW83178c(7(ELLW?fNObv9@;e`|h~oeK$jJoetRm5R{>n?|Zd*!sx29%&)XF z`8Iq00O`#RjeG7KA(@Rc?i+O&RV(%7#*=5%+c?6YS8gYcm(N>FZ5?lo3)~VX*Vj6( z80T(#{9uz-mlR==#*z4~Z5gUxp4!Uxjdb7u`b|f1LF{sd7MhbQg_BgsnPPe;Q_6}H z)6=*uh2NVlC|9P}XJ-n<-T9X;$wlt`W~-ApZIop_f`4hG$Q<@N%7bZtB$`RTl-K^r zo-Ht|jZ#gf2r{n7B`796oob z-iLYr{P)p+?Dx@Ea;D^8%;9tuigursS2}(Aoyud!)f{AHjCrK!%XqB|^anBR)DSxm zs06Z;5ujw$8t!R=ZyB7EYY?gtS0&v2g3T)|FgONnZvj8#RfSI~4@Jj* zqJ&jJD`mFz4etKTb1moR*bQ2&2(wXKyu4aH*eZr2hyW5`AlTvB8lyKF?S9k6#yalK zl7DQml%K7dp7D!<@##JPI(bENXlUWcls_AVRK8h$Eq8eW9x>ogN9Q8xh|;`}hkDz2 zdu}MhqV%Z)jiH8S#ikGggF0blWyz`3H)m2&3NaDNO zaFD*sE7(t3H8_r;A9Jq%q`F*kR?Fos1#_SuMmeHU@4vp;T?W$c6@BIOlcyI?Q-!u- zEdA@BafLHx$;{QJGTK>)rEa zkD)d;O?_pD5+=x?pn>vP$C9spZHt%WOr?AS!mbh@j4IxxKDU^Xof&RR&?_Fz4_6E&u>o^>|ODXt*8~| z-GSyvVnj$|)l*uhYlCSns2su&U;1-i|JYs8^k-z8sHJH(&z>ch9cyKtxC;*Aq~7>U zTDdON)xck3YzTVuze~(>!uUnxQg9nn37?tfNDYTSQ8g67VX2)>WTFOHTzc$IXLK*G ztvF1w08Z_aG-pP-$ogKU-9fVF9H$lNLxD~e^2U3&C?Yt>)-a&n1Si6WWhz3edw+`P zaa?{RMRFa=k91}Y!0xp5X7+Mz$v4g zflbJafART|rp)ImQ{A%2%ED(3OZM}!|MsIIZKaqvYczvuY8`#dqg!52&f_O}sZaM$ zlCYMj&mkX&yrdYjeBPYLHy8~1{gX_6=Zx2PXU|ZtcUIJ(6=8;qL2C=Fl!pCbvVQh1=3Sc*Oe5?Jh>Am_RxgyI|5Eoh^328VQ<}Y*AkEzb; zOQl?F#Li~zkr=c;6EjFp7D=VaKfCnfsIQDd7sn4Em15OZ>*=VjWwi!?B4|5l2-|wS z4eMj|68?z)A%WvkAr%@L&Sr;)Fc>OrWd)MwIJ&oLaC*k?w)WX`prPrM+1$j39RZIl;0e(h6508@$JsqNsHEL_u#dNEVZLM z_!-j^r(cMnqK4GbA%|JpSpt}4(KhvTv0fJAP>1-6^Q! zJf_2AIy@#N$OP~q#JwlY5VWaGtFuF%4))~sTDv$qg!V}wSgASYe^I0HBL7&k)LCg~ z3Rz~&60_zT`Ztt2WsP=gLUm=vpx}tRzRRz82O)Bzs9C{_4#dz!P(Wom%A3ck2n3EXvolCL}~gq;b8 zdY*o+S6A#F2MLUl4rkxSTO+8&lFvXDbNuN-h?5J>wx2i6T>CU1 zEM4eMwj;RY1mF;O=R~)pjsAmYRn}r|cG?7$S9kIUBBe;A)NbP)W|o#r21;8S(!T^T z7yu@&z%P}zkOCyBHhfb_$t2|%F)?@5;EFXSy*?cMl+@nD^%u!qoZ#-bd~vmIUH;J( z7VTAm4vw_`spyN(4PKsWtTqqczalH!n#x02mYx!$%~;{dj=uBQ{l*ho4wJTjCn4K+eb zZ^+fYv%IXIJv(Vs_C^w^U#Op5lcZy@q(e+s704Tp`KQBZg7xV@b!a+1Kn&Q&p6w*F zcp$Mn+Xjin3++N0ikrzmaarQqNx{9TD5**Fi4)Ng8IY1|z+}3$NER88yq}A*60(b^ zs!TCz;D~Dt8ThxyAaW#G6PffPB%D{PEh=Xg=qGL&UvsD1Ep=Zx&qBPN;fY^$CSYN% zoiF?9-ihH(dQ;YPth2b|NCRI;^y{-d;Ki`)Ol)y3GEd%_Jb@SkI{hS~YvS0;Qa7nEXtnMdgKkT^G zNAh;)Q++^z{<%PS#5ZK=KJuIRbAI{ECu=#$=2nuA+<4OBSd4Rg`ttE4D+2VAy^VNM zv3%bTS^2~Hq2S#nKSaf1jWzXiE0*g0@B?Bhf!z%E47Ah2dN?-hZhPks^u8Oe%e-C+ z8Iz+I)W%!tug#Bmk6Mys9$W9BZ`X&cb=xmuQDF%rs^#PzXo02+gluJadHzn@y~f?L zO1Iio{LKW|eg?^-&9HL1TJ^giY`sxZM(C(1c52Ge8l(aEbkQ+y&n*((W3k>C!yu=Z zdKB~*b7Dzkxs;ecfDl>rwMSb4f2r{r@@Gc^sqjRB<)I&OXV2MZo)Im=Oaz89cjcbP{ccZ$KhWgj7-N#rdp~rAwEu0V)4oupkm^FPNQaU`hsW+-Gmv* z2kna?9Y!Q+i1FbQ$ibOKy$#Wx`2135RsJnoDZ$rSFK0Oz^Uc)jl5+S&fo$~zW697A zhim^@s+1}Ty`8P>zM=gQ%q!BvZG54hCerf+@WHbRKvR&HzjoVuO7~w^T8PJ0b9QLX z4xDBIb@ygPTa2E?TybBjM<|D*8SW?P9!Q?6I>Mu;Jp>dgsmncR@KtDqW7QBk!stStG@)$0qq)p+1{WRa9gO-z z>1dRN2-!^;L0ODb?+lrKStHh;9WLe~v+Y`1msO$kbgey$ExR3&8Ok!ish~Yy!yz%4 zs+h`^C{pr;yg9Ey&Yhs2P0kw<=T(N33(iG=_s3Kch~wJz1n|E`dozy1fJKWvhzchM zc_*V6RZR9$=~`#z$d*=6@y7i~C)z)=#%&i9A$9v^J5Ti+0xtNK%EAH)j)39JwL1}C z%xv~_y!+d|$+stKDtYEK%+Wd2S=*L!Ojlg#tS2IIM4#b!G~Qiz=VE7_ufqsL@kpXl znnm_;6@)#!RAw+5jhQv~7K0oTX(u{(LvK30g43=L^s_H;?A{kR_HlrXHbYVT1B7=w z$;|~Shi&)tE%>nF%Pf=U=$UwMA;=+=AQ81Bj)x&9GaE~qLC=&KYWgwe27h8|Tyhjj zGg&<2AeRVqB=l}{(jzejMySpz?fMxsMKT_Y*oeA!QFNpCTdMT1{&!cYzNsO!u>I0ej^b#3`m!ymE z%Mib}C6g6lm%v02%Va2?SFJJ4)V!E9@34IotF0!%LL{Qu4s(LgX&zs#31Wf(#|KFh z)PO86wrYV|waNfwHk+0VK1<)&Qea;k4GtZuZ7rsZtE}!J9lkkYj$8bjddQlZvaGWa ziQrKUCQh(;05TVKMm*2a!M{b|OFETDxQ$N|BW{I~o%&WbQOQ zW#yifD71WL3`R~?Cs;rtI2o;vAO!RF9*wv6<4C|75|ZQ3YI&7!uX5v2Qt8&K%c}*D z@zrQx6qNPN@7+|~yZKvg7MQ|xwm7g~rT3Al49#1mWckg+c=4w{_PrbJy_?#5Gh%Y7BL7oNCF8cd^mb4o|S16S^;EV@t{Co0I)+ja#8{ z>rpY*@{bH1474_y=mwgoWM$AKD#nYJh=@+RSO!Y!l4Qp1{mJ^`IIw)r{mu!6Mog;t zCEBNJv=Q2_7@}C7U`fK8L`B-~-8K~!X7;o22?L?Y@+j@Lq`kI)B+w)xcpWaa*RDST^WZ8E0Vz}+MY8?dt`G5J>Aj+ zh1e1!t z?C;_CrF3~TLpMh-B06`->#UMXyN`?x%(%yns_p=$8yMBKerp+nbcM;f%5ZgkaS==O zK4vei`aCADgk~=!OHg5u8?`(%e!hy&H>BEI9G)*9EtM`Wm6GjtvsBVM4u4nq$a=C| zNPT%u+rVYG+5N%>m2#Qc|KGATIS~PpH$&nsaJZMO84Mg}B9bYCCS^s-huI=$oW^-k!`Ctw8kUt77< z+SQpEzIwWTgzQ%h-|+PAk-lB`G&I@uXcT|<3z-4jNcg{N?L_Agxj>|3h2ivZgctC1 z?`H^Y*S#G-cS*otnmoCoEz%mF2eg43v=k4(DTysS!Du|W^o0G1C7jGZVL!3-$9|j$umu~o!niTX8p0I<=>%c zg_mpE0Otm2`=KD^Lz*_cpK?Ft>y+m-%|1-|bxkW`3uW zjZ)uH`gZgzspI0Kl>f|B+)bh0 zt!FgtqFKsEG;KHc+x;NrziHaVCn!8?PnGgPP1`$8`Lw3(%To4I-cI?VrtL3L=-d6@ z)U->u=Or(ve4a_NLisCAyL6Cp3+0`Z-=fer2Y#9I-!<*B>nZP}FcuG%Df=k=?jY}a zkoUPfL%D&%_d}}`>U)T`KRimgk-~dj!TqmzfWq-3TziCP98FS=QogKd$EGN>>9Ox> z+Hv~*IDL5{r)gLI1cmoHX;WTLVVqrc1%>lh2PwBv-cR{gruGra+bDmaY1eX(Yu`cn zKFLfte%fpq zmr`h-+oF`WYTE7e+3n2R+rO@9cQ7XIco&87@{$G02Pw4uolk4pT_2_VK+|5jp=mF> zThmTcuhYM%X)AY8zM^S&Q|Fh{pD(9PU%^~>#YxJ)qwxDzE>b>3`5q*1n$n^0n^*l0 zO}pn9<YTo13k5N8D`Daag4deVZ_fdX_!uNY?lm{ua$(aGl;}q_F-}My6$bFld z_FBf|YiaY>zJ@~Iyl$RyibC7H?n|0>e}%%k-~UNXdp*B<{jX4dplNRyq+CP!6AJfy zBje$XKd)&&nWEfE`L?D#!1)K>O!*ij+oJIM2Y(HPK&MP#81s7@@HL4(j#JGnD_Ex$}XqN2fGqXdmDMvW0$ zjJ@|LQ8X4r#TrFpi(;>_Ype+>u|*BmD3+iuh{!HRSS(S4`n*4LzIVR`@b`OOujh}4 zeSMgFr=B@;=FFLL=li&G7dL{#z+=u`QUj>dCD(#?ocjZD{y?6W9t+x?yX@zHu*;zB za{9#O&~pWCbLGv>UA4D!Q)z>#hXUkd>T3*b=!|RN!!^%3ckQa+Ebvd~t|RVs|8Va5 ztpWADVO#K=b2sh^Xrr6p`AxLl%_+d|X7akFH`oJE)-4}9cPsV3^%(G`bGP*eM}t3u zZ=Ab*6d>;HS2*{l1R#5V`XhM5xjXQ`<89~eq|7^!skBu{S175mgi?L25&p}9C z75J}nf4|SU=T`(Lfqy&q0(rfFe7-mw&{qFw0!M-uotuGN&A0)4>)cD9JNGj3`pOPq zp>wa2{#DxHwN1eb;2Y;&KL}8tfA#~{f$yDrV=L$0gw8i#b#CThaJF-AtpM(K?(KEJ zBbYzb;T`w-_5d+$U*e(xhAAGCo}0rK9yKe!D*)9h8j1%R^V z>d{4;5p|Owt}Moyje61oDZO95%SSB!@0%OYw>vi zdOkzWKchaMLBr>30@8dzn|<+$b6@@%&@caU2!J17^#SDd^&S8@`}#BIzUdF9fajh2 zZv%jaCCy+H@JlceTmcZIZ{f$c$lbR)fMdYT0D8Zj@7#Bz0qy!7_4^K4`F0xWhuBW?DU^I>yvEtu_m z)gIstW<$q=Po1wh)%n^rzSMK$7sMOKaIGJH-Zl5 zdp_WNuU_CB@OS5%_?V*UEby`O&8LBHobP=MfQ~+Efz!csOzyFO?x za2{CXd>i#>BhAp=0C9)0xHXKpD~<i3*phw({8^dH3H}J)aDIoC!9L(&=Xa#uJHo3S;p;Cp0{?Y>r`5m(;9t)Fauslz^E=Zo#t}a5 zYUg)J0X*1cf%CgU!>;gUw-cS;eFJd5^LuOz?s5KCYXbPQCwc6NeD3+V^S?d-yzcy7 zy8!sUcW0BwH2A>ak) z4}`A=PILYs!VcOOoBpIh6Vx`WWE-Fl6;G z@;V&%h!J3t^GA9BjYm!g@ck&BkD|?vravA{+M{PXe++)d+yTCJ{x{o!^FXKb$F2^J z2Cq1O9C60e$9}s$Kn9ObzzxoyFcdrjh(BR3KshHu=ZWy-#P^&(=^*fs^S`5S|Bf~} zc?$ror~C?ZG3`DST;u#{{lV{@pST}DhEAsrr@!v}B+8p~Hh9zdGg<-sID>wB25o%C zlg^(R0MBQB==@pm^{h?7#m-NLuajx#$@IO+(0%rX;3NQl&bbIshjXFx+=rJE%=-Bj~)fSaQ-pm{;|0% zulyK5>tEr`H1e8u5Fp;;JppMSr(RF|6x`+flfML~fW^*FKN8Sq|8_i}eV(FCpL)sp zr*{HxIseQ6fNVXR0c7bp`1jlq;BM#t?!k`W0r0W&&yNL{IR64^UZ5>rYyfj9LUpvqF*LMalI{#1d{O8TizcB<*zc-QZ zH(zjmCT%(sy5HIbyvefC*5D53-=R(4dDr=OY3p}8o&VPr&d(a={ChtFzXN}F{(ai{ zed_kX4uH04zZejA_9XC(^K(Xm8=e0U{|~=+elBe?_cG@{qHoOGm*uNwfc(tw10Hw2 z<2dI#YXQ7iPzRoJ{u6lc$rb>)`ZxUg6kdG#2>8_bh16{!JYF;wyy|?{R^W8!7bgJz zeAWVJpU*yb{`0BMe?c9-q+P$9450fzBb@&2HT^$h2~=?mb+f9WItg`OqQvV^j~ z9S+Fv+Yg-oZgT)F->(2D>-%q9;vRNM@>4M1B`Lp#n0C1&Ti}wg3n0Aec$ZY4>ynxp zaIs5j2Y};TQpdt*-EY8?E~#$=e|1U2?%-*c^!OQ==aR-L0JrC!;5(P}8Vl}mNfU9f zZ<6M(UDA6;@GeV$<6Y911FwC5?UH`AU@!2FOIBzBkAcrz(*H^@%OwLScffltY1tNh z<&uHtyJXPkE*bnsmkhbfC9Tlfx~ogtegR0^_MuCL?(ULdd|kKV002$HA9u-0*SKWF zZh-eyMt}=kvMN8kwpwp6(IuluvwA;pB>37TYnayM6T=Mhv!4=?pmu$ZefSw%=09eYs*V}G(YeA#CM0MGYD4)%iw`~L<^bIAd3x#U22 zb>Mq0IS5`HOg#_219ZCN5Z({10&<^r$zhW~yGstIj3XSNjgCyg^)5MT9JtOUN7n#c z)_#&>ehQ%LH>-oQTypFqE;+6qtOKa~amefV4Z&sLLzn!v7uX-%>yqOMKb|%^VO4<4 zPdLCOCvF9f2e*K?U2+oi{EoId`6u97u-GN1tnZRj2ZAdBG@rJjOD2v22fO6-ZNSCg zF_%o@ebOf`Ipde$8kd~e0ww@>b=Gq(nY^A$&Q1YscHY|HBbS^{T`qw3-_z$Ve9|Qs zjR&;Vlz+J7;{5H*}NP+UVb(p&K2UQOA%%dFh zqCNT!`_IC?dv5ZDt4;85?(LgzSYPhHHoNaQxd}=H2mZzsI2`JZ{`&v_**`YF*i#wf z*c#%0xx%{LZ-=|X@lh;`xtg08pYH7TQ>b!Kx^aXm+~O!l?pSb_#ZbKsBc@{Ie|(xj z43*7s^Z2a1`f^a;a@Dh9jNyNkAR5L{_i^q7+{0ta+*i4%G>dn5eA8E~3b%j1A{WlT z0L64MPo-LwCzYaqs)gkuzcJiVqY`y)Mma0p7-A`gJu%6ym(am`J*H@!>v#m_luFIPESP#>Kpq{|WI)VWQps zcE#=Meiq{?2c=hS6=&VTo2V=P6Yq0=sJ2#XlQL1Lr#syvvGj>CrfQ%6Q_0Ff{}ela z7ZpmY996bGNj_AT+EjUoCZlpklQD@7m65wBRT(IyJEi}Z-5QYtL9a#U&ho5+*Z!>CgE3RS-2Vu-bX(KRvp zD_nmY0j1SnU$;+z=em|p@8kHT4Yh(=OFnt2hsU(?wOUUsxJJ=sgkDD6)i`V~xlv1t zQ_5qUdy}JU*YYQ+G3rln)A4oODxes79gHTuIdZqRF+3{|<*l-$6GV&rRgcx^HTqw% z6)r#hP2^d%Q9k;AHOkuvSMQdS{@1glKlih8tj>z7l=8E9%1Nn;e^zS#?qfXjQ;Dnb zsilRf)Y3o6o%Nw{9AUAzDoL?bKb5$RefM3+!SXR$j01Vj>Z_`)-j#=yum2U>{LRRM;vjw9@lcSdaAE0*6J}_ZP_<|vn!4q4pf_QZjTsCZ_0O_m_nr)b>=@VhN_$~ zF_vPg43i9NFQqX`jatjk=uu2PDZS;eF2?~U;;UTth#^K3n{P3$)kLu^_d6+9)arln zN4dCIcgsUsYz#T76r=uUV)QA#YAgLV23Op#iGF&ry!2$XxBBO~7%%ju7*jwVE*)m2-x=M$ zkrN~Me>373tz$SxK8m-s@jDz>SPSTHWyh?V*!CtW>`DKtJ~>}EqpvHaQ8JErBM2W` z5?kCUP3uZ15VcB~mt(n$3u;lLc>vEjPep~5ez-d)=4#wCfALY_;&d*PF4jtNp*Uk> z>ilg8KC1(T>A7!g1G)0Eo~O5wgy$4kO;p0+F=wOP{?FU6HF8z@zh`VU*)B%aIP5Bu z)w~qTPotaixGa`sej_6lDtD7e&B4SO!Z!R9|=#ys+L#x>)U;_gfyP2^f^A+xdi5@sdmWh#epj1v8Tl_j4sQRnOFa3D)1Z=XEQ z-uOyl>|Obqlv|BdH~Cl$Ye&_(XTeuI^O`T{U-$p`l>JLx#zbO@V;{?J=VkwGRdB!H zZ19;%8Pe_)p6w);b-(g3(T)E8`|jKoQd&YAv{(Y=G2EW3cXq6<#P|3mJ?~jHdrp35 zJgedBhI~YMQhU}upnYij@b*#dYqoFL{>%39?bF(yY=5SG(d-jvUp9N{?5AfxKl|0$ z|C&8#PBQ0+InT^_Va|*XYd-A%;YJ^}fB5O#-gDQOJLaSHK04*2+4I`wZ8LArdHc>g zXx?w&CY{4OH|*T3bDPc`I(P5fyYtY_ z@tr3wXkD<%g6$UUuyDe{+ZKMZXwOAQFS=yW?ThYP^z5Qn7QMb`)}lF!K3VidSJIVr z_3Ucy>eJP)Yhc%@U6Z=b>^i&ag09E9{@V3o*Xvy~yWZ}a)itlHvuk13S6xdMS1oQ> z+<)V0ta;f}v_Ooyw_cf8gy6Rx%wxcUiPUEJ|Sfvc{wwsS=1MxA3ix9!}qbC1q_ zI*;l6?Sg>|MlRTR!S)L`SO!;Li(Fl>=!-?)z}2d*rUF+_={h}f_1vzj;p!7zGrHb@ ztN-fypld!{?SiWguCB1SW%0_3SBqR-YwuasAw!YLlqjf^-eyw}9?$Wwb>-Mc%wQk-zvNa5Oc*sLT{ygNwArpq2Fr@F0 zK0}&^G!5xBc=+I9gWel-|Dbz^+`w;5-aBOakUIvgJ7~zD!Gi`3o;VMM9bqX(^?*D zd9>x>mWNvY+;V@*eJ%I4-0fV;Z7sL7+}v_g%k?eSwoGlgy5)~8SF~K-a%sySS}tz6 zsO7?z-?yCIGMRW20eiqL<6GFhZebUD!0iLrU+??(z8mztw(qa|yxey{-{w9O``qeW zpO^Zu``m}#-G|*|{(rU4Hhs2suJ^gUPwD-fe0sB^9bIk8=aSG5>^M8O^AM-sN5KgrWp z{v3avzY>=`J?+8ISv$ zh4aG&;qT%3@Iv@FEC}z0C&R?BU3f7J41W$=g*C#8Vf*l4_;r{Ujtx78d%~jdpYVD3 zGJF-j4hut9_;2_ud=VB`CHiQlsTk&+p2AjGv5~ zj*-=&=M6n@_XYH0=4Y-Qr#<68WT$&^QNr{IR&uGlw%b{&%=D4E{9E4ON30{3qhlCqL}Z^CVo# z{%|9nFUGwFP@aDPmoh*6l;|5Nu0qq?WcYkmY&&{~MHH39> zA2o#iaH;paXUPYC&U??0{1^8FL$U;y@`Z%_KOSTV8SW~E>>Jz;LjsRKrrz^C@xRBd z2hfsI|M^W|1)jnDbpU)zhv5DkQ15glT;yo}aXh2#=0o#*&IhJH!-eMgFZ29+T-ur9 zTzWGu?b%Vq^P9M|Pe)Il-^Hb@j?HvXPyNJJ*m+ z#GPlzPRFIOgiJjC1pJ%lGjJCgva@g(gU|4vjQa)nl4rHU*M{soTx3zm)F#N8kX^ue zJO>hGK9gn8ykY+Zej?daDQwFKf&G9z&@?(+{_S=%g!-i z8}givyR9M6KAp&@5FW$b&Jd8n&Yv3sZQqG(31Kzd9SlM4j$n84d=VEp5CXE@`71-% z6Ssh%@LwCk1l+w0p$9JVA%vm0`+!5qllJR828`$VeO%g72p{4eZwP zOv63V5a98GfuI$Cc)4JtA&_ptDu#f(FW4AR|BU?O`AF)Q(Vh!80BVb`a7n+Ac-en( z;r~MTp3#;I;kgiK%Z2cKA?*<8+Y84ULIdvRhR`2(3qxqZ{iz`g!rc;VP1+&2w3QHs z;nH40SQ(eL62h9e&?|&>aA_|gKeR%@Am_g~-A}+Bwi}3zZ%O+G-&(AcRwJkpUr`hP#&` zoQ_NT3*lm1WMJX`JYR~d@<8|_?ty?Z!&F?_dm&|p8*vXagj;YAH-x)!j{rvz=U&{S z4dGE-(Fej`aDQV6uizeQ2(RPPXN2$u?s!A^7cMd=g!ge(HxTCFB2Pl-z@1D3eIQ(q`(FcRUfrT4hR})ots&fi z`<)^D9`}1g7|D5IX9&nkmp6pBaT7z>3^y|bkZ)-xDAFt8+P?Dgu8GX4FMVK>S+k0ahnVQUUoGb!as5Q7{XlKeujX&b`3NH zr_La{W-tmx+dW-8qYKY@!)Jj_&M&mhJgHboo5I~;+}5^hv8me2uI*v z4W^Q(Xt@Sl%kxUO;ui>O;nHS87=ugO2w^PljfSu#?oEcUE$+<#dIPj}A$vj)jmV7< z{(*akA$)*)ryX zdbkf7!V|a;8N%bZ4;zBgJz@v}mwqk;#eK{WPR9MKAzX#4yg+yd_en!oA9uPT?2P+2 zLwFkZDML`1dI#a(xX&2EbGV`#1o2PrAkhE1{%#10`@A8%hx>vdi1rr^L42KI2%_aB zgVr*;UN(d&xUU$(D!Ae=2&>~tc3jkjhVU`2WCDZ*xE+S@E^enGh~Enh;Z)o%LzsxW z*buhE{mc-=o6ikFeeMfGkc@n32wUO)#}L-Q{mKwl#9d+t@Q>^x!uGh{5Rfm<*hPe2 zqYdFZ+_el<)wpXL$kHud#}K~9UDr@0zOHAes>5C1P$j-@WC*m$ z;*AZg3-tQ_+X$Ea$2Iva$heyQMONE0=yUr3d-nVq(msXfgtdW_3(xvF)bk3@SxFpy ztUjyYU&Susmu_=+G~Y6x=#J&O!-L%+ZoF$_Z)`Lt6E@&!D?*RP{|NRoNAbRmJId|P z`a+xg34TZ5?$n*`xcGLUJC3-=va5EWJAjx!XXRpi^f{C#rPziXjwYYuNP8f8{}$hU zNwH=09Ut9e@jsBbYmvif+>O8wR%7RMiZ#Gwb{$5TWWL-kWQ{+0*aP%eR<=ePEk_(%P`WO%Y|a!hi0)0P7! zj+pkNBi5Zf_T(*g-1@ogcHF*gx2^a7^1w?D-st#!PMC7)A(u|O`i`knZrJ{oF}ED$ zdLR>{xY~7$+m?Nry=eDik)6q`=3JSLLe}~dV=((h!(3aoDy26dH-ocPc+w@AgR_x5 z)y1ckd8&<1BY3KbPb=|M9iN8tR283AzjVGW+Fgw=7agmnt;TCs#cjfQhdU=z0mD;D+a|MhUK z@MI`0G?e|lL2h8SUPYPfTMo$|acfYq=TdLE@Y?A^V z8&|~NNb#6iC9Y3N?9B?XH?4^MW5q@<)`cckSo^y(RQjunCA+Ir!qCD0X z6|sI=h_!iHtgR|yZC!}9WsG$i2i%+e2tUT}!Akb!{vJQmf0y)6)=0KY_DqgXE=+Du z?n_=xzDb9r>!tgo=cIR~Gty2Psb4la88^@G*VRli&P zY4tZXEj6pwY+G|g&6PFNYrd*oqxO*6>uYD$HP>xXcSzmDx;yF~t$VR9tW;S#-eAlC2k0Cuq^w^-sPCbt4 zaZZnid(7;yq_Meiy~dpy4{My4E1H@qP{z< ziE;*jp{_afBIi6!BfS6$$We6n;D7ajDE~nh&;L-oHYn)lda+7btXEln{$b>E7=26m z4TTep{D@coOh2hIwEMkKnrrjN5?lU?r5|b)--h~8%54 zjhC+1UH9@h17fY3({*u|m4|+mtSMcGHd-n)UAy2bNovb$lCDKNw82&5gY;{GZ>#}T z^Clklic)zv+|j%0UXYUHAyT*UHwX!pj1R_@erw8_sX;NMHMWQ@*Od+&;D#pCkc(x6 zCx3;?qQ80rnlpIaHtr#0v&n2R))bLi%OXk+Xc1 zEcCZ@O;QcyZxAvzkTlX3QS-1nQj3r7PVMgR>1b+8KZvc|&owa%t%|9nIa*osR0>Jq zh**PO)b%Q)5vwQGtVHL#2WT&(m9o^=Rf6XhHWbd8vz=)?Gvu3qNX zNX?tlQ8AYoFPlql(shGXe`r+u^%ZUWsfX$1RDM%p;xR4d8##WKyU$5%(p-#gLNGH~9$a z|F`Ly;eV9ZWG*#cUMlgd4`mMGPwk@8o8YJ9vMKrS2k5L!SxV=eAE2``U6Ib&@OXK2 ziccElG#-jR$-KBWjCUk8X^(wx*&OX1Th8>g`nV`)NGhF28aIZKuAo^m zE?XqE+Cn;2JzTA56qRWc|7ZHEeyv&kWGMR;HM}*ETVK*heh)?)$VVg5ApRdhOxf+t z><8;t`-&mm)&iEx2-Tn@Oxi$NL>%cA+YpVy&Te_$(julamlWtwsTzIzr>n*MRGRve zMijM$xTP^8(wY@hNnYri$@a**(NUzXpg*CeThCUrkyX#RIV^McKtiSZnenyKKMQSsn9j)XK@AmH%d6io~)4MrYK0-x(M~hnje3FsK zaxICKZHunTee?Ewu$v-rjgr~t&RaoxP})+mBD>`Ybd{wyZMj-^eo86+4Rw6YRfr?M zr~{L2y6e(N4U3$AoKc7T*y)$sGy6KyBFjM9W+-FBHqg?GKO1}0Bcvgk(e$g5cX>!j zP198lN`Ir%Mz$W&TF|IKuSi!$7ym%)ED%fK#vPrZpe9aS~4YD(1|RWDY}sajG!vU&^VuE$rOSA8Wj*Xhh$=T|SOY0N%`&*gF{ zE=7xk|6AQeq^K;MlMI?`wo$)sIZd{sRWyr`jbw8s#@NsXhoqqg&^pRh+CAEy=@`cJ zLP)wG3Y0|b5hNjA9$5duX_2pS(grptK6-_ZPgw*;cmlIOspIA;vwSRm$Ayt0b zazcXt>vBS}>}6V7?b!%Vd-K0ZMoIgyVyjls*lE6!0L{6~Miu{CU4Op;+)+EpW>Xu= z&XQ)7=0X1a`bbY{xW>`Jem&?a^;PL3BuReVijeM>@#|EC*cd=*er>cvX>O88=5k&$ z&QgELom#)uuL-@SA<|d0Ru1GDtEQx9LKUyk8CBhHC1{^5OSG5CZGKSpkvOV~SBw||t}a-Vz@R{b9#Med*L6Io^o<1lax zlLe*{htmJm*CXesvHF`Vn(y&Z9_8^QgIZxSebeN=TV`(Jo3*j5e%X=JV~Wb$)OVHR zAonf&uPBW(CaQ(a7&X4BhSEpUDAI0)FwPxmHlvzoWbDg1l?L9Wqs-E?S|V@k%4zhJ zWDQDw0XG@bdDFL;^g+(LRP)qCXdKnDdE_Imh$qtG#ZhqywNVeWKBy5>y0t&B+5dlO zm-2A+tR^Qbr`%s_c^dh@ri}8CT$5`~Z5C!8_p3-vY3bb~Os09i^3lo*;{xX+)c=PT z>M&UKgbry1)sj~7$G~~%5RE*!eb$LR9{Yv3n!Oau6F*y{onU$>QkDG+j%xnN7{Iw9 z)lTz!jT>e)M>$D1j``&wPsI}TrgbQ#XbvmT8kW|4`g3YP)bxxc8fD@_&I|EV^@??1 zkK`LHhE@HRoY|h}FZH*w2lJwz=eLwvwYtBYxduC^{+WlzuVzxM145P6a_TY^3B+foR6J8GUt6Wu|s%VN^M~WM^Wc~Y`hHD!hXn3aK<%Y%l1lI5#YxsX5X&RAjB}4NfwPka%Rf)gC zja$wBUD_p&pO5SsU9bWDJ0)S#o*GNVZ)xGTW4>07&G5CRDcPbw`nPD&JlEbTAHSKj zXzmv!#_RW2b06)H)NoCA(WeHVYX5qPPZd7FzgCjB)_zz=_Wwjj#+*{Cr^&Qz7E#0~ z$hl(KBkH~CqXpX*S5~s@EXnfoNM&~%cH^a))sL-L#}SfUfYr%E+%RtC`Dv^sE&JOx z=1Je#I&`$T()XcM+!{fwf=$Ag0xRIB{6)Lw!OBw{7Ui0+YxTrNY-sSW;Jdu|r$wqt z^HR-aZK*Z?-ks94oz1@0XPVt}kz%W*m8@C&Q1>jo*GkLNNQVw8PW&c zd6RJ$;VM<2J*k`a+REG9Z3~-EjkLW z6VK8uHy&r&#Ye3=svOc}gSverhj1{tHkPJ1w%%_NEvb-o++B7$k7vs(${|$Cm0S&H z<>O^Wfs)Xysqo%nC38wv+-c!2Z)=Tb8o|!%ju}JzOOe88Z$ZP#Nac)ZKbeolXT@tv zeuA!$OzXY76{wNfLnRiH|3{RarDCRAM!Sce=}&|@g)ljmImE2LFQ0dQ&{4k5o=AQ%HGci2+ zaoSNoRI2B~ED$~`U29x9jB5*==n=0iPLDViYX;Jm{xs$jrISsX)7{N%pDb79(S>aXmEyJZtj59-{>9i@Hj1dtG_GnKQIFT&HS<~j z0=}kStX)gvn8sEM^>L3(_DgQahvgp%^3tfgirej#T@La8vdwa;>m@okt^GYxYW+uZ^$+ zvM1r5T1Y+C*45RjR(tWzdbN7YLzGb((`EvyndMc`UdgSo{)HSl*)ML}Xrx{=&_5q* zoZA^@OVV=w?@RfsRa*UX^o^ojq874#IW&D0|I!dqBH4^(`)6Z)i{(g{5B1MP>T=%` zVh$!Zl1uTlIQEd1gtOMy2}B8Bucb*rw-X3)l=x(yA6ZJ<1@lGOc$j%=}Fjw4Q5A%z$Z@YG8Q3^YV%u42QD6Bs#ulq57x;4EgeKnn%HDtrGvDqQndD%VL zj5vQ8`O4>d#2_TwGfJgNft8TY5X!6%?$sVZ{9-(fO!??#H0rHP6Z7ra3d>BR z9UiUGRmA5TLR$s3Fxiq;Mj?Lk3@uxvL2EOOe0wJuk*#dI$~M23?n6WR{gBl>)cTi= z{VyN|@|W&ul{gx+jM@JzwNpp?Hrgi%X_K1r9Y3h zr0niOA56DHCY5(H-v_B>&92v|ZR?jyTM~bT!qRvZRutbwRu#kjGH3WjRc@h3 zTdTJ80lq>|{fZ$PNmyS`KBF&{`ddl1x7m~U(48zM<`2hVl`eVee~2Z14o#khuglGg z?=(~R)J9&taAkE`Pbi$eK~t#(7+;dVAtBOT)?1>T$jN9)QmM5m`$6kgvbi)eDBe)M z*s3F*){PZr8mKMVgShgowCq*(0M|d+oseaP+lUC&gbq!1gQDffLa!#fLd~*bXdj{{ zx(~gVoWuXiilf=zK+0G)C6aUXq?iZa&@4NTXtyW3EQe0nGU^i}l5xvPA4l+H=jDXP z{UdT;HZLXB^w{K=%MFh!n#oRu7Ak9t>@`|TBa`};EC=y1x9oq?N*4 z`MaQ@GzXnc>FG75$=7CAva?i|!d|#P3(hPZYJAg*k51u4eMlV!Fb6&}#%I@_GHu;T zwx#-x&5_Tb->as@aA}`jd^x;Ag}g<{OLU2gI=Q#hJSyF`P>%L_w0@mi zT35z&n&+#(X;oi(vAaH5dkmM=V!F_JYq4GDqS4GkmcCNCvV_rG>GzS3YF`T}8(jdP^*W7^NGa9L3rQPKQ96nwScu9-kwy~%cq z`bCy+cijlLxq@0oBRjdLTSuFvEFNEU%Z{-bh(;sjx)D2K=eb*1$C~FeKg@685AqZI z6n{Opa=hs0_(e$#JH_j8{{Aq|IA4(5jMefwHcOH=a?W|%^rZBXbXwdiZp=nzJ7Tj; z%C67u%AUyParee3)_f1(K8Y#ZpK)J!id!)>^ z-hR{sjtuf2QrpTf*`PK<3VzNHhG%{@^{z~>-mNh{`1T(NRoY%lrL|KydFk!{LyXLS zz*t>YK3~h%M<1<1n5;&9neIrxQ_S3d%|c2^t~CD8wB5mp!n!i}Dlm7gBnXj!!G$+rM`PxqYh~!z?pqPVJ zZ*7z)>~5voGy5xqCl|#WR8G`jCIRVxpiM2Wal4H%Q}aAl!Lq6Jl<3d5hWR?V#^-2} z5!XiT+zuU!Y}s0RG0rN)G7C&Pu&f8WkY8fXN( zD`+5QU@MfxD?KHX&u1m=MpZN4?$;CF)(fO*q|bQIZpBY+x&rT|>GJ&r)jRf>Oec1W zF-tf`tKW=1D~3t?OKT$&*_~yn2Ek)#XwCH6vYX0M$qFy%((FdKP|QzSPO~Fv*n+Mj zuI$wts8wk^)s}PS*&Ss$TN=q)TlObn6jRt)$wCd`)`hf=*|7t{82W;wT9Ospo^Ob? zk7?A4f3g{D<}QBbqh?#s-g9|8NtjkHY@f3={FvHQ#;_cg1K(i3J-EW zv#`!1_uNNXLuKZp;#HKBhsoED4cfb@Q0Pw)oMU z8#=&G_E&LJ({p_DGKX30$Yh`7%H%0d4SmV}->RG%nw;LpDDXM+)*Z9)*;VNOx3fju zXS5Oe|AKHmH#EJ^Iidc1ljDFT?BB ztJ}J6m%5|s&Z)bH?_S=o&+7ZvkE-9f{*d~U>L=G}H1qz@S01Cr?HBVZO;ttf?Yoq(z6zUxe3hoZ2>H^xP7rMm zEqYe}lGZos)N`c$G(I*F$0%HG9RG7-mgXYK(%3G!5*LbVNYcUis58KC_kWR2ecCwF z>VJklDJ@U3s$QiXby>$|*|6H|Wh<7)v^|&o$*tU9{ad}b&Fi#cX_!WXs3ZK=6(Jf? z#igPC2+A%^BkqYR&4Rmkw8&lhQr77Jzg0yYmYc$Fx!jn!jGA5AiX!55- z{uRSyS3s#hIj$8I{L|gZK{910SESR5Yt_5Ok+L*Q>-(%LWlx}a^Hdtg^0jGcMCJwA zrQxp}4XP)CxL1_BHyq=$D_P{0e<5UwFqYJoellyYU~9LTsaK0io)H>Z@8K z*KDr4<+Cfu)hqznD{2A4lEy-r_S*+!@2)+Djb>-2SLm~oS_(RV>%X-G*MlAknloTK|i z6++v}1 zJy~qFN}`^oz9daP$W7q?%24Z_wgw%0M!GZ7s2RFyDeWSzm(7Zaq4LUOXrvTZq#1q* zU1j0P)aavn>0zj}wKQj^Q4(6=FQqOZrK+W89x0XX!XuW;qApc)C-Z^(cn{+?O!c z?M91EU~PA*yT|>7-Mm@u6Zf63V>Yy&-RQ*!8??mP`0jFY=!p9bmmBWB!rt5t;e<^%^G{na*&)4PWR*8_+1)SIOUY? z8+(a3TNDW3V`%1zCeNlIaa!#bj|zQ^o93iV%+IV6+nEvb=rLs#BlHG1HameY=oPc`WJaVd>t~w!}Z( zi&D)3?Y1e&Q50(33%MqSMlac@r7>c^HGM&CcF+cmVQ!%CEN2IS2 zqCO;>TrI4xm!%1sx%bS@2Ps5aurTjPe+@@sitHM6oOlxLXzuG%ELpX=KCO@sZe&)U z?v9a!!n>8&$KM}IlzoV%32MuT4doI?6S{6x3#$of+2tDOGaS!`ebtF>*! zK+`7)bXz>+Eb-)$zo`XxLSpP)b=Dlm&gw`Di!RB9Mw`930j4SYXB=lV0@`@h%zc9z z1!e7OwVJ1FKR9OV-b37`-14*sr|GZfJG@sp3(^Ojv!y?b`_J$3GdK;>%+AUN$ymO@ zJ2h&Y_tPvLl5UwEkxoc-?t&XjxcOLeE-h@UkVs8>FfY3qURVkr8d z7}T9yGzu;|mo7@RFiAq}1KbI!FEZ4h_3gGs&$tRrE|LM`xyIPszb)(ocWi&hW?yYy zvjh3$ly`qe>c`RUr6DFK{r%3dCdCvgOZ~WH-@t2^w=`{W4Ov=dpx>z?54Cv3xfB13 z*p9_=l(PFouRj{uC@n#@hh*F2wxlO97VcP4$L_f4L1@H*^giOJ2gX>^R~3CRJpc*P z`RGCEzp!E?Tk0R;nC&`=^U^`x_7Bg}l`HYBr}B@_>4&6~MpxU3S86#~%UV5;T98(l zf=@Ay%>wfjcacwNSmb2PNiE!#9Y9W!cxHC7J;e=CB)ukSRL^NmcA%DdEbCE)c-*9^ z{RB%dIkeGXsc$3`X^~<)jdNOUFbl9-3KK4z&tqlpA$8JD`P!3G58*bkV;KFPaC3Z> zAIZI92Ql(br5{fBzmIho5&0(S)c5789vZVHD^Y&^1<=f$Jj;!#I%}SK{{IlKFpKdQ z5x+9O+{(|_?3(?BvDKDeDpseTvWz&g@MV+Poyu}acJ?az zq$An0K8!D%?@M1y+xb$dSGGpBZMGj@IA6k9yLaPRyAAk#i3!}yH7(5KoZaxMjjFb< zI;QGO?&W%->Sexb{=DkD>IS}T-iWW8_u}j33;0gynd)}FY;LRBpk{2%UNvXdOs%=6 z=DC{ononz%@U_w!wOepM*YUOI)J|pJVg_F;4a(kxC${sTUSl?1Ojr6ZiKy5%s%5oy{gzKVjb~ zISJQN*bb-4?7lH0IkCVyOCt_6Clk6U&DSABqgEzuhBP!eA?h+|3dQJN-=i+^J`Te3 zx|WBVH6qzMzPqj#!%ig?tT`w|69QSsaBiInj+FMSiG$asHGXMyhgujSpr8 z4M+}UyeWp-%{m$Z^Ab!ho0CJz+Dh8R>`KW*!D>rn6&CZ-YP)F{BqtnDRuj#fG&-17 zp&7U=4b7^sHIjqMYGM`_yB5e~sVtOez2rcwonpy0GRZpCxeooW8cFW*+8j{E6YD+t||Y_d;T-%^a0WbZOQ**vpgJCS2) zYuS30>`l|r^U<2Q^~o1>?hE~=Z_Kt0^nYZaFF$5&!5_;~e6r87+_z8Y7W(*?Agh1lGxVEv?>a5VQ9 zW$|W%bT*|HVj%OHo7-vLQk!^Mtf9>T@;IADy1RP`Z~B@}`%}I64NBFiG)y+FjVlMm z@=C)rhqRg()&sfkR5e&CPSQZ_B}r{TJHVR9=uK%QQ-#?*_cPlHs$@@=wZ>re6Scec zP~r+hQcoFi-icqyOg^cL){FL-lmg1QAKGHd_HHFVt$kr-CVSBWx-Cq;%D;PuGWj(v z+#Ql09^VRJRZOg{@?7$em7{+Lttq@mg zb3fe_kk3H!IZJsSHL*pO8$Xq$p%Z5+e>-;-H_*M|zGUV-ihEmkiRV~uw8PO+zZ=s~f{wSar6qVpM}%Z<_2E?xF}MLyPo+VrVC#sKo~-y7?gw zvl+iaC5v%1$qr}TWpJWBOs$h?9I#dA!VX!Y-RfdUKI6-|xpA~QEnPb)^KV4dPfTly zYb*JyV!T+V)YfEej1i|}uMEFK>NOVUD<0kJ7P0559~wuRxP4t?@&6bzoJ7vckB42u zZy(8uTwYGrLif{Z8lT0N!b%RmwNvy{YI-ztKfA9+@ua~tUsySLFE=g@sUq};~t%CK(@4skPpiw(=(Q9WT+G$ZLjqdAW zc^Z92_(Leg!bL51UP+zt=XXxj#?qeBC?;bXhlD*6+yIqF@lN!j5y)K00yM?0Hscj=iP9~h1yZ295na_-Vk zV~i_eZLR(qFI1O`v4C%C^_6OQoXeom{NniHccm4SRynBUb=tN$J1nNu{;Kkfv&8KB z62F2bOztg=_QU)i(O9-72%oYqkq(XUk~UFiD^^GezbYecONMd_vCKM0wlzbw7~N8u z>BjmvL!<4jZT^FFYm8=Ioc@ORY9HO=G7wj9>RB3v)qYU}x!0)aQnC0o7>&_Nt2W6~ z*g3sIPW&=Vv|^WvlZPK3>tcDBUX|rgLQBxxA}^&FqmVv3v?SE#3ngi@L!yPC7J`@I z(8vkf2h{pSujCXYLRQAz(biFYE9Kx-TFE%EE_<$LvR3}0`^5KRpLHL9vcJPW%vk-p z?_{lfbh15bIVbVmD0J8H!J;)+h^9u)?-y?FGlN2 zvitagQr{x?`1#JaIwo<%r2YG1olC#`D&g`IF^dp67Ej2QIteKA_ zB-hRAu_a?bs`ba^$E3HV+J*R`81$x8GQ0dZg;QqenQh63Q z$1fl0NqxcE(N=y-cGi>g<0#l2BRMUO4YCEaVpGsLiB8sOWY2xo|71bHiA3McREB9r zq+Ul4N~DFAQ#@V4v-F!rQn-@zj~cxY#_#t@e{1D^7`vIMUCo z3n^S&$R&=LRaJ0FG0k>tN_A2z+5)6e`_b=Hts~}sD#!-a7!fXlQk}Y0?rH%$xn>qb-clX#z;^LeOIvSHyG4sIJAzcQor-yM zTcPPJ=r0e8Yt~r`{pJ4Rf_lcpxXV1&@5Fw{@%{pKL#F%peJA&}_2=HUJvrNQPI4*t zwmqtQ2bk|VzT#Vzy9c&sPh?7Z2XoyyoNO7L?ZkI{r^ed{rf2iAZ}<)C?YX&aYM8dLD7_=aN^zfsb!@CzlA_;%yr>Q}2jscEPgS+ix$0X3J_+*dP=eUMLU zYidW-j;%ecc5>|OeS-%*Nq*IGV0F&mGB$T#1u z6~%?`=a`3`!8lb24Yxz5Mng%GP9WYHQ)+aSPM0>cS#Gpq(uIXkoo3J1RixFTM5dES zBN^9tCOs>yCR)W4X>rN+@I<#l7h~Cs=x*v*^iztsyPYhEBWlbsyDg4B8aE3TLb7u7 z(Riy>O7Y;T*yH7s*S1>=lPZ>#Eh@}H2c)M{ckx+gF4QZVV+cATyOwszcNa#4+hW?B zo61GC6GxiUCTPgNAGP_02hME0i5*5b*epyW4 zgq7zIW2NtO=WXM(IA0iNg1+msR7;HxoG3A^sudoMsm0r(%GSx;PrK=>j3?_)Gfwq` zpOQyjQh9E9tSyl3JceX5YQu1I!B=*_Nh~L5lhbK+#bt!cjw5%;zS(c3?P~pvwoY`* zvp8+G1|v}N4OH1GPj@Ur%WKw@e2pYl#7gJjBdfePs#(s`0j0ib{h{f^SWc<`GGZs% zaji_P{xF!j^-grgG+*^F`;U1!q3S>4u5#C#`WXC9HveD67ysgnHyMj9@;~P)Tq6jO^ITK8*7h9NPz{~h@0S=z=%L)l`cjkKfvCn#Dv-1K1|e{G@e<*9A0bh)48p?m!=d9^G=D*}aepyZXZki2wyq1TO!#oV+? zT6jxdE~%BRSW2&pfBln}O6bmYh*o>-gmzPQY*|{33b}4=%6`Lhu|)OMl5r;asw`CP zD1DK)@{EEUo5iCsu<{;aJELRY*|hqr%jhr*NKz#W=#Pc=C$IEVw75o|wr~S-XY)Mi zt|)&|4rRA0r7S1OSBNzq+EFvKVR43fgSMYGiEf&NV%)kV6agvfUr)@xsh0J+&mXTbc>i>S&+z zltTVWD_tY{8`G0{Q~vTb>sWS7w2;!@A#-_{T3>CcI$EEwd5!dJ!R98uaX@)3Gk$tf zp^YqtQcB;Mwkg;?>524_ywqF{P2Z|5#ZAd!T%#jyvBYJ@O()QUin*0)S!s!0sidoW z9tJJtZGU^@Sz(q&Xl%>0A+|}uH|T3`qsZ(R#nR|tyB2NyqPo^sMR5!dSH?U=zxs!) z9(Iw#6^zQVSky9VfwuGn(v|u=Oh~TrB)O7(aZa(j+koF()qK_VMapEqvTl5DVRt4e zkII<29U>|D3EHBNV_FaG>a$uEmJ~&;kiCTtk#GNSIeyYLva-c%wXUR7(jdObwpIIC zn-|9GMBlFbFH(ie;8bP2!u|_om~52i+!p1eoSupl+0jr{nQO_;N*os?K^0VIM@3GT z=e^8y;nHPrMdN@*(Uozn1tkq?i<~R1%izi~QYAxT&CBUf``N6Eoo-@C+Lj$dylYUw7u{jO)eKIIYr0CO3r8zx5#?U@NVLp`BMOl$gTXtlOty2QlFLaJ!l-rr_ zL9XYv%xBzOP7=0-dyy!8`>6FS@mQAr2)+Q)+JN~=Hgg`SU&$7fWXYbs8eQ>2@uH54 z9Bp;lY0;P|sQ={lwMJB}WNm}BR17cf{ccU23jV3?Z_=~oRo1^vs_ovQ*7QtrR=Dj9 zDXyrL^tXn4NUQmVYGeH&*WjX{HQWuqO2apI=fH;tSebu=FQGnlOZXCMq#w)5&t$%U zdWy5`v;61W6ErN@I@v9mz%QX*pG@O!_|Mr-@6YY<8*sPb__#u^6^2>qBG%{|vkkIc z;%@qb@%K>cLJN0AY!P+}$A|O6tzmk2HO%G4h<@C1xDUT6b7R$vM5ogA3#5`god&@w z43EZE)7Voox`sz02d#f=bjWM|F#193sm+;wPg=5bKawL0O%{|^Wt-B)aSkb6fsXLk z#W$@q!I`v+)|Otj^&G8niHG((maU2118q7`EvsG?S2~kbp+_?zX-9>KGENF7tHin# z{TralMl7v+i5^j=)$QR~7uJsItr1JTvwMFqJQS(05YxtH!$>1*RBB7lquw!Xc#yW$ zllrA};5ATYPxf7stT{A)_;Z|N*%+(UrQv)fr{7yJiBp|TcH>T6rd_e}5SuxOR-5Ic z1JZLTyCha}26AZc((2OF(m!Ssu)mjF7{@0`cu9D6GA*W5>if!l#qaWokIf-++4M%O$;^xP)i=j4?csq`_xv%c&&-H|j$OGI= z`e?x~`<==u>E9(1N_nLt+d;8TMNLrSbXKM`t#0_x*FL3wy5D2_0!2}WWG6*VXa!S} zCL6-6bh$q-)Tk^h)45UQS?ar8AT^Pfo9N77bV`GWM^hKGn_N2YD6OiB1TB@aYihz?0w-|$tGV7nbz{XsP^Ss!+<$2ko&rDw-{#6e0* z7sZ;H?hr@1Pto&ir&LqE5v#ffvoTyDQ2|ni9Nwq7CquJZ!YPPDa(@0lDeUbf^)He2M)+sB@EMj_7 zs@*WD6=N*8-c=>{fFuziM(%%?y6kq^7p5c1-PFwI}mS-qUMm*3PZ{hIR5` ztds9ocWT{*bvN>>-qY)5^1CLB>Kp3&)wk8JQNLaNe*C)0WLC`|;MctuHDnEK4eRjh z-iI`t#IJil-|z{)Y_dU*{d!F4F~6}_<0g%VG#=Y{VdKq>4>rEo*xtCL=b)bJ_1wDW zPCfVOc|_0idQR&(tLHbp`uEzT*CD;8^m?k-=S{CC3PnqF^Cn%8I^)4Wsj zna$IhKk414_XfQW>OHCVRlOhW{ci8MeX9Bl>NBd(rhRtqvtOSHea`7~VV~RkywT_L zzC-$M-FJN7iG8Q^y|(XP`p)P(ukV-rdi5LDZ&bfA>7BIf2zru6MU53&=aGeIqa?bW z82Ywuc`@QFD0zpJ%ZZanes$-u*6zzReDYRIWg(J>k`<8bI`na#%F38YPmVsxXmYgO z14<y24u(A>HGDm`U#{O_PuRKO%jpzvR5I`j(x^b7`3Ry0n4%&(KVJ0SZNPr*|Oz z>VrD_Suv-;r$n0(6HB5ZW_gT1p&KeoK%|ujJ)4v{GoKqX!d@-J@(0LTk{GC@lxXVKP47N^^LH_Riy!^cwd|`hN5eT8~v*YL57S3Om;ryQ(UV-?R5VV`A#qj?>yFGndx; zq58#2w7!X{CVntcV`?obi6IzGYz#5RL?vnz5iL~OkXo^}q(;zEp{+onLa7xf6l0_s zXemm;S_u+^jV7SR|8K3c&pr3tJDo4{*pIc>UVFXw<3MksRM%CdcE$Nhm|H?L4d-Tn zOS{a$__%P%PWw5!EuI|l1z7soqa6*%?8LLi*#l@p{&53xyX_FN^7NWBGb@)7NcHo2~F8T#9p>qZ%1+k#c$y4QkEOo$8xuhrHr}!B_aEK+)gnuExsI zhLz@3XxWPN%T^uw#!n$lrTwB!6E<%aObTi*?GuD%4SuC_DLHfK(iQBzl7sp`jf4L; zp6(V_%~CQ@?l(!U)9o#M(9=%6UOJ$5&7RN(4$JerO*CrOb23A#mVVLdSJAHSx2J^> zny-eFZf(`N{&bwWX?KhM;KGSX);;6JcRy-)nxD7feuAw}`EZL)luxBQ#7T9ph~2>| zu(q`)n7$^yrxe~|=ZL?n{R;aJ>ai#BvSHb*%MxGf_;}M$|GG`VPVOLVznvwkQtXn3 zYSa~%NNzlKfKPoc=M>?otURh&xcuR9u&*wUsC;Ok6f7xyP;;x=mJf&){LS9RMCVfV zbshtL_Snf3jw`Q2hCuvR{>J`-*FLP?%w?%^gA?TuwSxDt$E=deQk7W=e-JKY_bK(L zK(r0Vg}+J@Z)(Bo)xA6Yhju5jnNBZSPwHGgk<*ESb#wj6Ybw=xl)si_<3birb(C=ywv0%Je zT9=1sY(vJ$AQl%G4t=cP8RUkHnd?>aYKmpTygA-*J5Fb-XTdJtY%Pfp?et`^r1Sb& zTI2r?dX|er#))<^8j^t?636EQvCoA$&l1 zktepSwQyzTNRxOdan6rAKiLIuF<0JfYLtfmS}W&s^cm~YEiSK0u^(=ylt+#`ZM2cO znYcr1j#M@CHgG|ugG;{hJgR;&5*v99Bk9aa+^+dqNxD)R0~*3N^WuDIBFAtd{z$OV z8hB6S9kb1aE)#|JvxjOqQPq$8hzkAnLiF6?c%$%d!$Whp>`z4B;T#+ft6*o6;8JD;yDw`#Np7;hLsg(ghT1u+Zc z1^ytvqAICBrD zrP8v!V8Jp{;luE~|jnA}&}Id6|9~)(n`I_uA@nk{+6S zz60-5vRM8~o+prUU3Koad`aU_jvd86cAJjPl+{g}jpMx5Jy~Yy@6Y&6>XXt)*1tSx zZT%HGX6`v4RwS>_3F*#yuTvwLZ<+k-)x5-SGc9)7T6;ugXA;VLtY03tvfS}|(tz-S zVN)zr8|Hu>WA+w{1~TfDR=z^|YDce2>1Db(DlzXzGpA3bJIlNE*I-ROg4($^Q+;=( zc&+qevn_rWkyORU1#;D_&*zZbBWt#tKV!@6U02a;fuxRxITUdg8)OsEN}6YRKy)C^ zhQiVZaZ0SWd9CPayJ8TsA1TLOR zTh-F<#QDnfX~~PHUQXpSDP5)8OzXm@^i7p-=tTDRuvZ!9<2sdnHvA{f z(JNq_%Ko5o&)4Wy(*t^0|9@#|T9wu)_k4xEuySKMtlaaY_DeVDb^Tp>speRDx_m+3 zR_W=rn)i&Y8~dW}9&ghL?T5zBq-!K)veTmH3Q-q53N@#~zeI2LQ{AiknYeIyyhr~N zFF-5kgKent9Fe={t-A0wQHadlMENKA`pOywb`;UyXj|49juVu4z{+j?3@STC(#i2I ztt4EJJTn^QgZhRzyxqc2!FJ=FBkD}IXv8~&FFcBVffKcQ;fER}m$7bGCbS)%BfIY^ z3vX@otIigMErO8yp-HnQ!xlP?{QOWug2HCehCYkK_2PQ|Qp>=rmHdsLCmR#VB=A2r z$~hj4?c_pniy-jw&veO`8Z45F&k8&Kg8$)DS*!At#e8ys3uCYH^QnBAgU-hmkD-ylXNUZ`W^pV@_=2Pr8M# zRzH2)DCD)d&hS)AXw!|$%*P#U;Wf7jw+z|(rmHk+zoZ%?&%B1n+YX~zIaE%V4AsUx zHWqVoE}Tv$3`)NQt{_%MB70$#sO;xNkj04(c?AETv&PfqlbV(Pj}2)=>ytv?l3Q=BseBWys1H<=}SOX4rF#``hh_h+4ZFi9O3< zENBTYoHFmi;Z$-Am5WaglvmM;GS|LON_N#GwLGcy@|(TRF-U#4JRu&2I~6O16J|@$ zbj%oiS^2!_v`Rdqgsd`i*KVfa!W+fu_yV3SVO^%vw={5iwrkwAI&n}T8#%K(Vu+}39ogx z;reRz#iLjVyK36s`?6-1Om~52$ijs`5uT>6@an=W2%4#j` zJgs#=Q#O3Z^3Re-Gzzjs_G4UU#n$U?@>lHM+p*5GI{!3RFL|!fJJ4U!Tb|o>NBMWf z8SNoY=sl4&VXbaiT@`K)hh)uP)Cs7SdOvur&OdF6H`|+Y=X5`Lb-FBVO1r~T8f%#_ zsB<~`5*w7EgvhR!p3+a|WxIa*+bs{)0-u8z6RH2W=Hac-63+dXXuX?duKU)DCe2b# zm!Wq))+)~$?k5J>qIBa#tzUvB@Ev@M?suuoR^XJ4n`^OBlDT+PKf#qd3GjefChILb z7(J`jstxZIb?_eW2F$OE4+9%<0o65EAlnu zT*KY~_;lkDQ6QI+MX0>a=wDTE_|A3R#O>nTHe3Ixcvx8FQnVwyUD>vHzs<#=m{kq$ zXyBLQbX(W(_6BsX(YHcW>b^2_&!zZRcpN7A@laz1wD7ZBOX7VEygcUc{HFLj-rE=p zIY1(Nk+>|+#P`pTm+^uffhwD-brF>{OLQMn#TxPQMy_Wha-Pn2AGP_j2JB0)KF{c9 zZi}TFh^?hhpryA*IvRIbB#B_xuVenm>RO{vE_Vtb^Zhf>U$)uyTVR(Lg(r=x{H{zD zCna`QOy6rH@bxpXo)_pAm#VH^OB?4__f(b@pEMiE3iV+$TOmJ{?^%3embUDgAp`OQ z;z7}d(LHDEetNZoU7i-52kTafE|=@xuDyOL-8HUTyDRkq>J@syeyd)~JgD=VXBCxP zAnmnU?`3`@tXEWWb=am?7XBEX3opg7*ozm(b@8&eAzrEPJ?@FWFS!XzevXp?J>Btr zUNpj{xc}}^B_54sPYPa8gR`)dXdBt&bc24wzgUpG@8P>DXrxMR(iW}rs8()C%xg%K z;yP~ww>5jeM%3unplKd8Uzii({tXOtOU{44P8jAqJXq#Dm)Y#{IdOch^(+Ey;4NPP z=V19A;orvVU|4Z~vBEgaOR9*w{F}*&mpO;|oF~KIg`-Q--+&TB$8(4d0 z#P8TmlxNj0M|ZAu*-OPEf%`1~6&DCI)5oGYadx--tH$z-*fSc-G^&0g?OzbiXw0U3 z^A&KFh36G3&P~^;j(W1daDLH<*lh+c&BDS8D~nM%?swKVV$PaM%82wn;j}Fd&A!;&uBGr zJ-!;c%QRo)t25Miyj8`K`cBNx4Z4+=e-RbYg7Z5og#(g+-z{0tiz0Y>j0TUB>z|6p z3`fe~G3bYEfajw4h>hK^L&M^YAk)BCTpb^_x%AsOUxEoE&+8PO6o0Gra9O}xf?MEE z>Y0agtoy`K>vCb|qOj4Vh&Urlk^7#@;&HX`-MXqKKBigb66P5+|D^sMjj%v7UTD_2 Kr+vezPUrt*c&HZu literal 0 HcmV?d00001 diff --git a/site/mitre/assets/icons/baseline-grid_on-24px.svg b/site/mitre/assets/icons/baseline-grid_on-24px.svg new file mode 100644 index 0000000..92399ed --- /dev/null +++ b/site/mitre/assets/icons/baseline-grid_on-24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_camera_alt_black_24px.svg b/site/mitre/assets/icons/ic_camera_alt_black_24px.svg new file mode 100644 index 0000000..3f052f2 --- /dev/null +++ b/site/mitre/assets/icons/ic_camera_alt_black_24px.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_check_box_black_24px.svg b/site/mitre/assets/icons/ic_check_box_black_24px.svg new file mode 100644 index 0000000..f4a93dd --- /dev/null +++ b/site/mitre/assets/icons/ic_check_box_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_check_box_outline_blank_black_24px.svg b/site/mitre/assets/icons/ic_check_box_outline_blank_black_24px.svg new file mode 100644 index 0000000..431090c --- /dev/null +++ b/site/mitre/assets/icons/ic_check_box_outline_blank_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_clear_black_24px.svg b/site/mitre/assets/icons/ic_clear_black_24px.svg new file mode 100644 index 0000000..ec8d116 --- /dev/null +++ b/site/mitre/assets/icons/ic_clear_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_clear_gray_24px.svg b/site/mitre/assets/icons/ic_clear_gray_24px.svg new file mode 100644 index 0000000..61aca53 --- /dev/null +++ b/site/mitre/assets/icons/ic_clear_gray_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_close_black_24px.svg b/site/mitre/assets/icons/ic_close_black_24px.svg new file mode 100644 index 0000000..0369486 --- /dev/null +++ b/site/mitre/assets/icons/ic_close_black_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_color_lens_black_24px.svg b/site/mitre/assets/icons/ic_color_lens_black_24px.svg new file mode 100644 index 0000000..db6f9bf --- /dev/null +++ b/site/mitre/assets/icons/ic_color_lens_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_content_copy_black_24px.svg b/site/mitre/assets/icons/ic_content_copy_black_24px.svg new file mode 100644 index 0000000..7ee7f4c --- /dev/null +++ b/site/mitre/assets/icons/ic_content_copy_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_description_black_24px.svg b/site/mitre/assets/icons/ic_description_black_24px.svg new file mode 100644 index 0000000..6ae8360 --- /dev/null +++ b/site/mitre/assets/icons/ic_description_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_done_black_24px.svg b/site/mitre/assets/icons/ic_done_black_24px.svg new file mode 100644 index 0000000..9bba7f8 --- /dev/null +++ b/site/mitre/assets/icons/ic_done_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_done_gray_24px.svg b/site/mitre/assets/icons/ic_done_gray_24px.svg new file mode 100644 index 0000000..3b9c4db --- /dev/null +++ b/site/mitre/assets/icons/ic_done_gray_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_exportAllExcel_black_24px.svg b/site/mitre/assets/icons/ic_exportAllExcel_black_24px.svg new file mode 100644 index 0000000..0725a7a --- /dev/null +++ b/site/mitre/assets/icons/ic_exportAllExcel_black_24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_exportAllJson_black_24px.svg b/site/mitre/assets/icons/ic_exportAllJson_black_24px.svg new file mode 100644 index 0000000..dc93d91 --- /dev/null +++ b/site/mitre/assets/icons/ic_exportAllJson_black_24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_exportJson_black_24px.svg b/site/mitre/assets/icons/ic_exportJson_black_24px.svg new file mode 100644 index 0000000..8ef5c55 --- /dev/null +++ b/site/mitre/assets/icons/ic_exportJson_black_24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_file_download_black_24px.svg b/site/mitre/assets/icons/ic_file_download_black_24px.svg new file mode 100644 index 0000000..6e3674b --- /dev/null +++ b/site/mitre/assets/icons/ic_file_download_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_file_upload_black_24px.svg b/site/mitre/assets/icons/ic_file_upload_black_24px.svg new file mode 100644 index 0000000..e4ee4dd --- /dev/null +++ b/site/mitre/assets/icons/ic_file_upload_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_file_upload_gray_24px.svg b/site/mitre/assets/icons/ic_file_upload_gray_24px.svg new file mode 100644 index 0000000..b952c31 --- /dev/null +++ b/site/mitre/assets/icons/ic_file_upload_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_filter_list_black_24px.svg b/site/mitre/assets/icons/ic_filter_list_black_24px.svg new file mode 100644 index 0000000..833debc --- /dev/null +++ b/site/mitre/assets/icons/ic_filter_list_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_format_color_fill_black_24px.svg b/site/mitre/assets/icons/ic_format_color_fill_black_24px.svg new file mode 100644 index 0000000..a42c324 --- /dev/null +++ b/site/mitre/assets/icons/ic_format_color_fill_black_24px.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/mitre/assets/icons/ic_format_color_fill_black_nobottom_24px.svg b/site/mitre/assets/icons/ic_format_color_fill_black_nobottom_24px.svg new file mode 100644 index 0000000..feb6d5c --- /dev/null +++ b/site/mitre/assets/icons/ic_format_color_fill_black_nobottom_24px.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/mitre/assets/icons/ic_format_color_fill_gray_nobottom_24px.svg b/site/mitre/assets/icons/ic_format_color_fill_gray_nobottom_24px.svg new file mode 100644 index 0000000..3a34e7a --- /dev/null +++ b/site/mitre/assets/icons/ic_format_color_fill_gray_nobottom_24px.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/mitre/assets/icons/ic_format_size_black_24px.svg b/site/mitre/assets/icons/ic_format_size_black_24px.svg new file mode 100644 index 0000000..05f1da1 --- /dev/null +++ b/site/mitre/assets/icons/ic_format_size_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_insert_chart_black_24px.svg b/site/mitre/assets/icons/ic_insert_chart_black_24px.svg new file mode 100644 index 0000000..056cae7 --- /dev/null +++ b/site/mitre/assets/icons/ic_insert_chart_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_insert_chart_gray_24px.svg b/site/mitre/assets/icons/ic_insert_chart_gray_24px.svg new file mode 100644 index 0000000..46cd9db --- /dev/null +++ b/site/mitre/assets/icons/ic_insert_chart_gray_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_insert_comment_black_24px.svg b/site/mitre/assets/icons/ic_insert_comment_black_24px.svg new file mode 100644 index 0000000..6cea43c --- /dev/null +++ b/site/mitre/assets/icons/ic_insert_comment_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_insert_comment_gray_24px.svg b/site/mitre/assets/icons/ic_insert_comment_gray_24px.svg new file mode 100644 index 0000000..693ace0 --- /dev/null +++ b/site/mitre/assets/icons/ic_insert_comment_gray_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_keyboard_arrow_down_black_24px.svg b/site/mitre/assets/icons/ic_keyboard_arrow_down_black_24px.svg new file mode 100644 index 0000000..f7122dd --- /dev/null +++ b/site/mitre/assets/icons/ic_keyboard_arrow_down_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_keyboard_arrow_right_black_24px.svg b/site/mitre/assets/icons/ic_keyboard_arrow_right_black_24px.svg new file mode 100644 index 0000000..5c1e3e4 --- /dev/null +++ b/site/mitre/assets/icons/ic_keyboard_arrow_right_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_keyboard_arrow_up_black_24px.svg b/site/mitre/assets/icons/ic_keyboard_arrow_up_black_24px.svg new file mode 100644 index 0000000..528e52a --- /dev/null +++ b/site/mitre/assets/icons/ic_keyboard_arrow_up_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_layers_clear_black_24px.svg b/site/mitre/assets/icons/ic_layers_clear_black_24px.svg new file mode 100644 index 0000000..7256428 --- /dev/null +++ b/site/mitre/assets/icons/ic_layers_clear_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_layers_clear_gray_24px.svg b/site/mitre/assets/icons/ic_layers_clear_gray_24px.svg new file mode 100644 index 0000000..bf2017f --- /dev/null +++ b/site/mitre/assets/icons/ic_layers_clear_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_link_black_24px.svg b/site/mitre/assets/icons/ic_link_black_24px.svg new file mode 100644 index 0000000..80edbf6 --- /dev/null +++ b/site/mitre/assets/icons/ic_link_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_link_gray_24px.svg b/site/mitre/assets/icons/ic_link_gray_24px.svg new file mode 100644 index 0000000..6f3394b --- /dev/null +++ b/site/mitre/assets/icons/ic_link_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_lock_black_24px.svg b/site/mitre/assets/icons/ic_lock_black_24px.svg new file mode 100644 index 0000000..cc45a35 --- /dev/null +++ b/site/mitre/assets/icons/ic_lock_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_lock_open_black_24px.svg b/site/mitre/assets/icons/ic_lock_open_black_24px.svg new file mode 100644 index 0000000..86f9ed5 --- /dev/null +++ b/site/mitre/assets/icons/ic_lock_open_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_metadata_black_24px.svg b/site/mitre/assets/icons/ic_metadata_black_24px.svg new file mode 100644 index 0000000..48a5288 --- /dev/null +++ b/site/mitre/assets/icons/ic_metadata_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_metadata_gray_24px.svg b/site/mitre/assets/icons/ic_metadata_gray_24px.svg new file mode 100644 index 0000000..ed443d2 --- /dev/null +++ b/site/mitre/assets/icons/ic_metadata_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_palette_black_24px.svg b/site/mitre/assets/icons/ic_palette_black_24px.svg new file mode 100644 index 0000000..db6f9bf --- /dev/null +++ b/site/mitre/assets/icons/ic_palette_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_photo_size_select_large_black_24px.svg b/site/mitre/assets/icons/ic_photo_size_select_large_black_24px.svg new file mode 100644 index 0000000..298ed11 --- /dev/null +++ b/site/mitre/assets/icons/ic_photo_size_select_large_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_playlist_add_black_24px.svg b/site/mitre/assets/icons/ic_playlist_add_black_24px.svg new file mode 100644 index 0000000..6ecd376 --- /dev/null +++ b/site/mitre/assets/icons/ic_playlist_add_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_push_pin_black_24px.svg b/site/mitre/assets/icons/ic_push_pin_black_24px.svg new file mode 100644 index 0000000..e1abd90 --- /dev/null +++ b/site/mitre/assets/icons/ic_push_pin_black_24px.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_push_pin_gray.svg b/site/mitre/assets/icons/ic_push_pin_gray.svg new file mode 100644 index 0000000..901264a --- /dev/null +++ b/site/mitre/assets/icons/ic_push_pin_gray.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_remove_circle_black_24px.svg b/site/mitre/assets/icons/ic_remove_circle_black_24px.svg new file mode 100644 index 0000000..a88ec92 --- /dev/null +++ b/site/mitre/assets/icons/ic_remove_circle_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_save_black_24px.svg b/site/mitre/assets/icons/ic_save_black_24px.svg new file mode 100644 index 0000000..f473722 --- /dev/null +++ b/site/mitre/assets/icons/ic_save_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_save_gray_24px.svg b/site/mitre/assets/icons/ic_save_gray_24px.svg new file mode 100644 index 0000000..961a75a --- /dev/null +++ b/site/mitre/assets/icons/ic_save_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_search_black_24px.svg b/site/mitre/assets/icons/ic_search_black_24px.svg new file mode 100644 index 0000000..ccc84b6 --- /dev/null +++ b/site/mitre/assets/icons/ic_search_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_search_gray_24px.svg b/site/mitre/assets/icons/ic_search_gray_24px.svg new file mode 100644 index 0000000..087646d --- /dev/null +++ b/site/mitre/assets/icons/ic_search_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_sort_alphabetically_ascending.svg b/site/mitre/assets/icons/ic_sort_alphabetically_ascending.svg new file mode 100644 index 0000000..1b3680a --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_alphabetically_ascending.svg @@ -0,0 +1,10 @@ + + + + A + Z + + + diff --git a/site/mitre/assets/icons/ic_sort_alphabetically_ascending_black_24px.svg b/site/mitre/assets/icons/ic_sort_alphabetically_ascending_black_24px.svg new file mode 100644 index 0000000..1b3680a --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_alphabetically_ascending_black_24px.svg @@ -0,0 +1,10 @@ + + + + A + Z + + + diff --git a/site/mitre/assets/icons/ic_sort_alphabetically_black_24px.svg b/site/mitre/assets/icons/ic_sort_alphabetically_black_24px.svg new file mode 100644 index 0000000..56ef33b --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_alphabetically_black_24px.svg @@ -0,0 +1,8 @@ + + + + A + + diff --git a/site/mitre/assets/icons/ic_sort_alphabetically_descending.svg b/site/mitre/assets/icons/ic_sort_alphabetically_descending.svg new file mode 100644 index 0000000..f487b73 --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_alphabetically_descending.svg @@ -0,0 +1,9 @@ + + + + Z + A + + diff --git a/site/mitre/assets/icons/ic_sort_alphabetically_descending_black_24px.svg b/site/mitre/assets/icons/ic_sort_alphabetically_descending_black_24px.svg new file mode 100644 index 0000000..f487b73 --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_alphabetically_descending_black_24px.svg @@ -0,0 +1,9 @@ + + + + Z + A + + diff --git a/site/mitre/assets/icons/ic_sort_numerically_ascending.svg b/site/mitre/assets/icons/ic_sort_numerically_ascending.svg new file mode 100644 index 0000000..04357c7 --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_numerically_ascending.svg @@ -0,0 +1,9 @@ + + + + 1 + 2 + + diff --git a/site/mitre/assets/icons/ic_sort_numerically_ascending_black_24px.svg b/site/mitre/assets/icons/ic_sort_numerically_ascending_black_24px.svg new file mode 100644 index 0000000..04357c7 --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_numerically_ascending_black_24px.svg @@ -0,0 +1,9 @@ + + + + 1 + 2 + + diff --git a/site/mitre/assets/icons/ic_sort_numerically_black_24px.svg b/site/mitre/assets/icons/ic_sort_numerically_black_24px.svg new file mode 100644 index 0000000..bc7396f --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_numerically_black_24px.svg @@ -0,0 +1,8 @@ + + + + # + + diff --git a/site/mitre/assets/icons/ic_sort_numerically_descending.svg b/site/mitre/assets/icons/ic_sort_numerically_descending.svg new file mode 100644 index 0000000..39d8c21 --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_numerically_descending.svg @@ -0,0 +1,10 @@ + + + + 2 + 1 + + + diff --git a/site/mitre/assets/icons/ic_sort_numerically_descending_black_24px.svg b/site/mitre/assets/icons/ic_sort_numerically_descending_black_24px.svg new file mode 100644 index 0000000..39d8c21 --- /dev/null +++ b/site/mitre/assets/icons/ic_sort_numerically_descending_black_24px.svg @@ -0,0 +1,10 @@ + + + + 2 + 1 + + + diff --git a/site/mitre/assets/icons/ic_texture_black_24px.svg b/site/mitre/assets/icons/ic_texture_black_24px.svg new file mode 100644 index 0000000..e2a46b9 --- /dev/null +++ b/site/mitre/assets/icons/ic_texture_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_texture_gray_24px.svg b/site/mitre/assets/icons/ic_texture_gray_24px.svg new file mode 100644 index 0000000..3390b09 --- /dev/null +++ b/site/mitre/assets/icons/ic_texture_gray_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_unfold_more_alt.svg b/site/mitre/assets/icons/ic_unfold_more_alt.svg new file mode 100644 index 0000000..a4ef49a --- /dev/null +++ b/site/mitre/assets/icons/ic_unfold_more_alt.svg @@ -0,0 +1,2 @@ + + diff --git a/site/mitre/assets/icons/ic_view_large_black_24px.svg b/site/mitre/assets/icons/ic_view_large_black_24px.svg new file mode 100644 index 0000000..106a02d --- /dev/null +++ b/site/mitre/assets/icons/ic_view_large_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_view_list_black_24px.svg b/site/mitre/assets/icons/ic_view_list_black_24px.svg new file mode 100644 index 0000000..d381015 --- /dev/null +++ b/site/mitre/assets/icons/ic_view_list_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_view_list_grey_24px.svg b/site/mitre/assets/icons/ic_view_list_grey_24px.svg new file mode 100644 index 0000000..2af1fed --- /dev/null +++ b/site/mitre/assets/icons/ic_view_list_grey_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_view_medium_black_24px.svg b/site/mitre/assets/icons/ic_view_medium_black_24px.svg new file mode 100644 index 0000000..ddb0ec9 --- /dev/null +++ b/site/mitre/assets/icons/ic_view_medium_black_24px.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/site/mitre/assets/icons/ic_view_small_black_24px.svg b/site/mitre/assets/icons/ic_view_small_black_24px.svg new file mode 100644 index 0000000..82b43f5 --- /dev/null +++ b/site/mitre/assets/icons/ic_view_small_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_visibility_black_24px.svg b/site/mitre/assets/icons/ic_visibility_black_24px.svg new file mode 100644 index 0000000..2e21adb --- /dev/null +++ b/site/mitre/assets/icons/ic_visibility_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/ic_visibility_gray_24px.svg b/site/mitre/assets/icons/ic_visibility_gray_24px.svg new file mode 100644 index 0000000..a4f8af4 --- /dev/null +++ b/site/mitre/assets/icons/ic_visibility_gray_24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/mitre/assets/icons/ic_visibility_off_black_24px.svg b/site/mitre/assets/icons/ic_visibility_off_black_24px.svg new file mode 100644 index 0000000..8e8af52 --- /dev/null +++ b/site/mitre/assets/icons/ic_visibility_off_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/table_view_FILL0_wght400_GRAD0_opsz24.svg b/site/mitre/assets/icons/table_view_FILL0_wght400_GRAD0_opsz24.svg new file mode 100644 index 0000000..0725a7a --- /dev/null +++ b/site/mitre/assets/icons/table_view_FILL0_wght400_GRAD0_opsz24.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/mitre/assets/icons/unfold_less_black_24px.svg b/site/mitre/assets/icons/unfold_less_black_24px.svg new file mode 100644 index 0000000..ed629cd --- /dev/null +++ b/site/mitre/assets/icons/unfold_less_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/unfold_less_gray_24px.svg b/site/mitre/assets/icons/unfold_less_gray_24px.svg new file mode 100644 index 0000000..ff79547 --- /dev/null +++ b/site/mitre/assets/icons/unfold_less_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/unfold_more_alt_black_24px.svg b/site/mitre/assets/icons/unfold_more_alt_black_24px.svg new file mode 100644 index 0000000..6721095 --- /dev/null +++ b/site/mitre/assets/icons/unfold_more_alt_black_24px.svg @@ -0,0 +1,2 @@ + + diff --git a/site/mitre/assets/icons/unfold_more_alt_gray_24px.svg b/site/mitre/assets/icons/unfold_more_alt_gray_24px.svg new file mode 100644 index 0000000..c22f07a --- /dev/null +++ b/site/mitre/assets/icons/unfold_more_alt_gray_24px.svg @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/site/mitre/assets/icons/unfold_more_black_24px.svg b/site/mitre/assets/icons/unfold_more_black_24px.svg new file mode 100644 index 0000000..74f625a --- /dev/null +++ b/site/mitre/assets/icons/unfold_more_black_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/icons/unfold_more_gray_24px.svg b/site/mitre/assets/icons/unfold_more_gray_24px.svg new file mode 100644 index 0000000..e559494 --- /dev/null +++ b/site/mitre/assets/icons/unfold_more_gray_24px.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/site/mitre/assets/image_scoreVariableExample.png b/site/mitre/assets/image_scoreVariableExample.png new file mode 100644 index 0000000000000000000000000000000000000000..025cf5d3c4ae2308e6e474f361ce98e85778a1bb GIT binary patch literal 17885 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

0ZJX8d?ZpTJN5e$#FzKwl~!9fQvbmL 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 literal 0 HcmV?d00001 diff --git a/site/mitre/index.html b/site/mitre/index.html new file mode 100644 index 0000000..0b97a22 --- /dev/null +++ b/site/mitre/index.html @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/site/mitre/layers/README.md b/site/mitre/layers/README.md new file mode 100644 index 0000000..73965f4 --- /dev/null +++ b/site/mitre/layers/README.md @@ -0,0 +1,9 @@ +# ATT&CK Navigator Layers + +A layer constitutes a set of annotations on the ATT&CK matrix for a specific technology domain. Layers can also store a default configuration of the view such as sorting, visible platforms, and more. The ATT&CK Navigator includes functionalities for exporting annotations into layer files, as well as the ability to import layer files for viewing. + +See the latest [layer format specification](spec/v4.5/layerformat.md) for more information about Layer files. + +## Sample Layers + +This repository includes a couple of [sample layers](samples/) demonstrating example use cases of layers and the ATT&CK Navigator. The scripts used to generate these layer files can be found in the [mitreattack-python repository](https://github.com/mitre-attack/attack-scripts/tree/master/scripts/layers/samples). These scripts may serve as examples on how to access and work with [ATT&CK data](https://github.com/mitre/cti). diff --git a/site/mitre/layers/samples/ATTACKcon 2018/Black_Pins.json b/site/mitre/layers/samples/ATTACKcon 2018/Black_Pins.json new file mode 100644 index 0000000..94700cb --- /dev/null +++ b/site/mitre/layers/samples/ATTACKcon 2018/Black_Pins.json @@ -0,0 +1,208 @@ +{ + "name": "Black Pins", + "version": "3.0", + "domain": "mitre-enterprise", + "description": "ATT&CKcon Matrix Question: With your ATT&CK-mapped detections, which ones generate the most true positives?\n", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "Linux", + "macOS" + ] + }, + "sorting": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1172", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1086", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1060", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1116", + "tactic": "defense-evasion", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1003", + "tactic": "credential-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1081", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1094", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1041", + "tactic": "exfiltration", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1143", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1056", + "tactic": "collection", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1056", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1208", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1036", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1046", + "tactic": "discovery", + "score": 4, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1075", + "tactic": "lateral-movement", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1186", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1219", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1193", + "tactic": "initial-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1192", + "tactic": "initial-access", + "score": 4, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1082", + "tactic": "discovery", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1100", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1100", + "tactic": "privilege-escalation", + "score": 1, + "color": "", + "comment": "", + "enabled": true + } + ], + "gradient": { + "colors": [ + "#cfcfcf", + "#3c3c3c" + ], + "minValue": 1, + "maxValue": 8 + }, + "legendItems": [], + "showTacticRowBackground": true, + "tacticRowBackground": "#205b8f", + "selectTechniquesAcrossTactics": true +} \ No newline at end of file diff --git a/site/mitre/layers/samples/ATTACKcon 2018/Blue_Pins.json b/site/mitre/layers/samples/ATTACKcon 2018/Blue_Pins.json new file mode 100644 index 0000000..d37b297 --- /dev/null +++ b/site/mitre/layers/samples/ATTACKcon 2018/Blue_Pins.json @@ -0,0 +1,288 @@ +{ + "name": "Blue Pins", + "version": "3.0", + "domain": "mitre-enterprise", + "description": "\nATT&CKcon Matrix Question: With your ATT&CK-mapped detections, which ones generate the most false positives?", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "Linux", + "macOS" + ] + }, + "sorting": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1156", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1059", + "tactic": "execution", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1043", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1002", + "tactic": "exfiltration", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1132", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1172", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1190", + "tactic": "initial-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1107", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1083", + "tactic": "discovery", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1054", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1177", + "tactic": "execution", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1177", + "tactic": "persistence", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1112", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1050", + "tactic": "persistence", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1050", + "tactic": "privilege-escalation", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1086", + "tactic": "execution", + "score": 7, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1060", + "tactic": "persistence", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1053", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1053", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1064", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1064", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1071", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "defense-evasion", + "score": 6, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "persistence", + "score": 6, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "privilege-escalation", + "score": 6, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "initial-access", + "score": 6, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1102", + "tactic": "command-and-control", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1102", + "tactic": "defense-evasion", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1047", + "tactic": "execution", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1028", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1028", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + } + ], + "gradient": { + "colors": [ + "#c0d6ed", + "#042e5a" + ], + "minValue": 1, + "maxValue": 8 + }, + "legendItems": [], + "showTacticRowBackground": true, + "tacticRowBackground": "#205b8f", + "selectTechniquesAcrossTactics": true +} \ No newline at end of file diff --git a/site/mitre/layers/samples/ATTACKcon 2018/Gold_Pins.json b/site/mitre/layers/samples/ATTACKcon 2018/Gold_Pins.json new file mode 100644 index 0000000..c263d0b --- /dev/null +++ b/site/mitre/layers/samples/ATTACKcon 2018/Gold_Pins.json @@ -0,0 +1,248 @@ +{ + "name": "Gold Pins", + "version": "3.0", + "domain": "mitre-enterprise", + "description": "ATT&CKcon Matrix Question: What techniques keep you up at night?", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "Linux", + "macOS" + ] + }, + "sorting": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1190", + "tactic": "initial-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1086", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1071", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "defense-evasion", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "persistence", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "privilege-escalation", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1078", + "tactic": "initial-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1155", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1155", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1094", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1001", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1041", + "tactic": "exfiltration", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1052", + "tactic": "exfiltration", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1200", + "tactic": "initial-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1170", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1170", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1205", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1205", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1205", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1180", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1193", + "tactic": "initial-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1195", + "tactic": "initial-access", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1072", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1072", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1199", + "tactic": "initial-access", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1204", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1077", + "tactic": "lateral-movement", + "score": 2, + "color": "", + "comment": "", + "enabled": true + } + ], + "gradient": { + "colors": [ + "#f7ffb0", + "#ffd700" + ], + "minValue": 1, + "maxValue": 5 + }, + "legendItems": [], + "showTacticRowBackground": true, + "tacticRowBackground": "#205b8f", + "selectTechniquesAcrossTactics": true +} diff --git a/site/mitre/layers/samples/ATTACKcon 2018/Red_Pins.json b/site/mitre/layers/samples/ATTACKcon 2018/Red_Pins.json new file mode 100644 index 0000000..0f62e6b --- /dev/null +++ b/site/mitre/layers/samples/ATTACKcon 2018/Red_Pins.json @@ -0,0 +1,224 @@ +{ + "name": "Red Pins", + "version": "3.0", + "domain": "mitre-enterprise", + "description": "ATT&CKcon Matrix Question: What’s the least likely\u000b ATT&CK technique to\u000b be seen in the wild?", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "Linux", + "macOS" + ] + }, + "sorting": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1155", + "tactic": "execution", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1155", + "tactic": "lateral-movement", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1067", + "tactic": "persistence", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1109", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1109", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1024", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1140", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1052", + "tactic": "exfiltration", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1200", + "tactic": "initial-access", + "score": 4, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1062", + "tactic": "persistence", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1215", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1079", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1205", + "tactic": "defense-evasion", + "score": 8, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1205", + "tactic": "persistence", + "score": 8, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1205", + "tactic": "command-and-control", + "score": 8, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1145", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1091", + "tactic": "lateral-movement", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1091", + "tactic": "initial-access", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1029", + "tactic": "exfiltration", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1113", + "tactic": "collection", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1218", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1218", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1195", + "tactic": "initial-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1099", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + } + ], + "gradient": { + "colors": [ + "#ebaaaa", + "#c60505" + ], + "minValue": 1, + "maxValue": 8 + }, + "legendItems": [], + "showTacticRowBackground": true, + "tacticRowBackground": "#205b8f", + "selectTechniquesAcrossTactics": true +} \ No newline at end of file diff --git a/site/mitre/layers/samples/ATTACKcon 2018/Submitter_Responses.json b/site/mitre/layers/samples/ATTACKcon 2018/Submitter_Responses.json new file mode 100644 index 0000000..1ec81b3 --- /dev/null +++ b/site/mitre/layers/samples/ATTACKcon 2018/Submitter_Responses.json @@ -0,0 +1,417 @@ +{ + "name": "Submitter Responses", + "version": "3.0", + "domain": "mitre-enterprise", + "description": "Answers submitted to the ATT&CKcon CFP in response to \"What is your favorite technique?\"", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "Linux", + "macOS" + ] + }, + "sorting": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1015", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1015", + "tactic": "privilege-escalation", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1098", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1098", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1017", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1067", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1110", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1191", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1191", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1059", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1043", + "tactic": "command-and-control", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1122", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1122", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1003", + "tactic": "credential-access", + "score": 7, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1094", + "tactic": "command-and-control", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1073", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1048", + "tactic": "exfiltration", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1190", + "tactic": "initial-access", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1179", + "tactic": "persistence", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1179", + "tactic": "privilege-escalation", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1179", + "tactic": "credential-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1056", + "tactic": "collection", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1056", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1208", + "tactic": "credential-access", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1036", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1075", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1013", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1013", + "tactic": "privilege-escalation", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1086", + "tactic": "execution", + "score": 6, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1093", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1055", + "tactic": "defense-evasion", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1055", + "tactic": "privilege-escalation", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1117", + "tactic": "defense-evasion", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1117", + "tactic": "execution", + "score": 3, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1218", + "tactic": "defense-evasion", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1218", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1151", + "tactic": "defense-evasion", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1151", + "tactic": "execution", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1193", + "tactic": "initial-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1206", + "tactic": "privilege-escalation", + "score": 2, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1209", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1199", + "tactic": "initial-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1111", + "tactic": "credential-access", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1077", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1084", + "tactic": "persistence", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1028", + "tactic": "execution", + "score": 1, + "color": "", + "comment": "", + "enabled": true + }, + { + "techniqueID": "T1028", + "tactic": "lateral-movement", + "score": 1, + "color": "", + "comment": "", + "enabled": true + } + ], + "gradient": { + "colors": [ + "#bedbf9", + "#24282d" + ], + "minValue": 1, + "maxValue": 7 + }, + "legendItems": [ + { + "color": "#bedbf9", + "label": "1" + }, + { + "color": "#24282d", + "label": "7" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#205b8f", + "selectTechniquesAcrossTactics": true +} \ No newline at end of file diff --git a/site/mitre/layers/samples/Bear_APT.json b/site/mitre/layers/samples/Bear_APT.json new file mode 100644 index 0000000..eeb9246 --- /dev/null +++ b/site/mitre/layers/samples/Bear_APT.json @@ -0,0 +1,644 @@ +{ + "name": "*Bear APTs", + "version": "3.0", + "description": "All techniques used by an APT group with phrase 'bear' in the group aliases", + "domain": "mitre-enterprise", + "techniques": [ + { + "techniqueID": "T1001.001", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1091", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1114.002", + "comment": "used by Fancy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1105", + "comment": "used by Fancy Bear, Berserk Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1559.002", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1564.001", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1070.006", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1566.002", + "comment": "used by Fancy Bear, Cozy Bear, Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1120", + "comment": "used by Fancy Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1113", + "comment": "used by Fancy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1083", + "comment": "used by Fancy Bear, Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1070.001", + "comment": "used by Fancy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1204.002", + "comment": "used by Fancy Bear, Cozy Bear, Berserk Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1546.015", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1566.001", + "comment": "used by Fancy Bear, Cozy Bear, Berserk Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1213.002", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1037.001", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1040", + "comment": "used by Fancy Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1542.003", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1068", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1211", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1119", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1134.001", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1025", + "comment": "used by Fancy Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1074.001", + "comment": "used by Fancy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1550.002", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1078", + "comment": "used by Fancy Bear, Berserk Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1199", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1218.011", + "comment": "used by Fancy Bear, Cozy Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1071.003", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1059.001", + "comment": "used by Fancy Bear, Cozy Bear, Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1092", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1005", + "comment": "used by Fancy Bear, Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1003.001", + "comment": "used by Fancy Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1070.004", + "comment": "used by Fancy Bear, Cozy Bear, Berserk Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1027", + "comment": "used by Fancy Bear, Cozy Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1014", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1560", + "comment": "used by Fancy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1059.003", + "comment": "used by Fancy Bear, Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1090.002", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1057", + "comment": "used by Fancy Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1210", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1056.001", + "comment": "used by Fancy Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1140", + "comment": "used by Fancy Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1203", + "comment": "used by Fancy Bear, Cozy Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1137.002", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1221", + "comment": "used by Fancy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1573.001", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1550.001", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1528", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1564.003", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1071.001", + "comment": "used by Fancy Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1003", + "comment": "used by Fancy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1547.001", + "comment": "used by Cozy Bear, Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1546.008", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1548.002", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1546.003", + "comment": "used by Cozy Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1027.002", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1090.003", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1047", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1550.003", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1090.004", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1095", + "comment": "used by Cozy Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1053.005", + "comment": "used by Cozy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1547.009", + "comment": "used by Cozy Bear, Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1036", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1069.002", + "comment": "used by Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1059", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1071", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1136.001", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1562.004", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1112", + "comment": "used by Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1189", + "comment": "used by Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1003.002", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1018", + "comment": "used by Berserk Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1135", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1012", + "comment": "used by Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1187", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1016", + "comment": "used by Berserk Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1505.003", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1110.002", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1133", + "comment": "used by Berserk Bear, VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1021.001", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1033", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1098", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1087.002", + "comment": "used by Berserk Bear, VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1204.001", + "comment": "used by Berserk Bear, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1059.006", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1003.003", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1003.004", + "comment": "used by Berserk Bear", + "color": "#ff6666" + }, + { + "techniqueID": "T1132.001", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1090", + "comment": "used by VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1041", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1555.003", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1102.002", + "comment": "used by VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1036.005", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1485", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1561.002", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1059.005", + "comment": "used by VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1571", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1219", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1195.002", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1082", + "comment": "used by VOODOO BEAR, WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1087.003", + "comment": "used by VOODOO BEAR", + "color": "#ff6666" + }, + { + "techniqueID": "T1110", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1007", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1055", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1547.004", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1027.005", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1049", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1021.002", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1124", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1546.013", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1106", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1562.001", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1134.002", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1555", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1567.002", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1560.001", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1055.001", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1570", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1069.001", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1087.001", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1201", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1213", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + }, + { + "techniqueID": "T1518.001", + "comment": "used by WhiteBear (AKA VENOMOUS BEAR)", + "color": "#ff6666" + } + ], + "legendItems": [ + { + "label": "Used by a group the phrase 'bear' in the group aliases", + "color": "#ff6666" + } + ] +} \ No newline at end of file diff --git a/site/mitre/layers/samples/heatmap_layer.json b/site/mitre/layers/samples/heatmap_layer.json new file mode 100644 index 0000000..1a7bcc5 --- /dev/null +++ b/site/mitre/layers/samples/heatmap_layer.json @@ -0,0 +1,1721 @@ +{ + "name": "heatmap example", + "version": "3.0", + "sorting": 3, + "description": "An example layer where all techniques have a randomized score", + "domain": "mitre-enterprise", + "techniques": [ + { + "techniqueID": "T1546.004", + "score": 20 + }, + { + "techniqueID": "T1003.008", + "score": 46 + }, + { + "techniqueID": "T1548", + "score": 77 + }, + { + "techniqueID": "T1134", + "score": 44 + }, + { + "techniqueID": "T1546.008", + "score": 57 + }, + { + "techniqueID": "T1531", + "score": 37 + }, + { + "techniqueID": "T1087", + "score": 7 + }, + { + "techniqueID": "T1098", + "score": 17 + }, + { + "techniqueID": "T1098.003", + "score": 8 + }, + { + "techniqueID": "T1137.006", + "score": 1 + }, + { + "techniqueID": "T1098.001", + "score": 22 + }, + { + "techniqueID": "T1546.009", + "score": 97 + }, + { + "techniqueID": "T1546.010", + "score": 7 + }, + { + "techniqueID": "T1059.002", + "score": 87 + }, + { + "techniqueID": "T1550.001", + "score": 25 + }, + { + "techniqueID": "T1499.003", + "score": 52 + }, + { + "techniqueID": "T1071", + "score": 41 + }, + { + "techniqueID": "T1546.011", + "score": 46 + }, + { + "techniqueID": "T1010", + "score": 84 + }, + { + "techniqueID": "T1499.004", + "score": 55 + }, + { + "techniqueID": "T1560", + "score": 37 + }, + { + "techniqueID": "T1560.003", + "score": 49 + }, + { + "techniqueID": "T1560.002", + "score": 47 + }, + { + "techniqueID": "T1560.001", + "score": 80 + }, + { + "techniqueID": "T1573.002", + "score": 85 + }, + { + "techniqueID": "T1055.004", + "score": 68 + }, + { + "techniqueID": "T1053.001", + "score": 93 + }, + { + "techniqueID": "T1053.002", + "score": 13 + }, + { + "techniqueID": "T1123", + "score": 5 + }, + { + "techniqueID": "T1547.002", + "score": 42 + }, + { + "techniqueID": "T1119", + "score": 66 + }, + { + "techniqueID": "T1020", + "score": 85 + }, + { + "techniqueID": "T1197", + "score": 54 + }, + { + "techniqueID": "T1552.003", + "score": 70 + }, + { + "techniqueID": "T1102.002", + "score": 79 + }, + { + "techniqueID": "T1027.001", + "score": 40 + }, + { + "techniqueID": "T1547", + "score": 49 + }, + { + "techniqueID": "T1037", + "score": 43 + }, + { + "techniqueID": "T1542.003", + "score": 63 + }, + { + "techniqueID": "T1217", + "score": 3 + }, + { + "techniqueID": "T1176", + "score": 78 + }, + { + "techniqueID": "T1110", + "score": 95 + }, + { + "techniqueID": "T1548.002", + "score": 95 + }, + { + "techniqueID": "T1218.003", + "score": 90 + }, + { + "techniqueID": "T1574.012", + "score": 40 + }, + { + "techniqueID": "T1003.005", + "score": 5 + }, + { + "techniqueID": "T1546.001", + "score": 90 + }, + { + "techniqueID": "T1070.003", + "score": 100 + }, + { + "techniqueID": "T1070.002", + "score": 87 + }, + { + "techniqueID": "T1070.001", + "score": 43 + }, + { + "techniqueID": "T1115", + "score": 15 + }, + { + "techniqueID": "T1136.003", + "score": 28 + }, + { + "techniqueID": "T1087.004", + "score": 55 + }, + { + "techniqueID": "T1078.004", + "score": 12 + }, + { + "techniqueID": "T1069.003", + "score": 31 + }, + { + "techniqueID": "T1552.005", + "score": 38 + }, + { + "techniqueID": "T1538", + "score": 15 + }, + { + "techniqueID": "T1526", + "score": 72 + }, + { + "techniqueID": "T1553.002", + "score": 75 + }, + { + "techniqueID": "T1059", + "score": 7 + }, + { + "techniqueID": "T1092", + "score": 94 + }, + { + "techniqueID": "T1027.004", + "score": 43 + }, + { + "techniqueID": "T1218.001", + "score": 28 + }, + { + "techniqueID": "T1542.002", + "score": 28 + }, + { + "techniqueID": "T1559.001", + "score": 70 + }, + { + "techniqueID": "T1546.015", + "score": 1 + }, + { + "techniqueID": "T1554", + "score": 94 + }, + { + "techniqueID": "T1195.003", + "score": 67 + }, + { + "techniqueID": "T1195.001", + "score": 58 + }, + { + "techniqueID": "T1195.002", + "score": 46 + }, + { + "techniqueID": "T1213.001", + "score": 63 + }, + { + "techniqueID": "T1218.002", + "score": 97 + }, + { + "techniqueID": "T1136", + "score": 99 + }, + { + "techniqueID": "T1578.002", + "score": 99 + }, + { + "techniqueID": "T1134.002", + "score": 82 + }, + { + "techniqueID": "T1578.001", + "score": 28 + }, + { + "techniqueID": "T1543", + "score": 100 + }, + { + "techniqueID": "T1056.004", + "score": 94 + }, + { + "techniqueID": "T1110.004", + "score": 77 + }, + { + "techniqueID": "T1552.001", + "score": 26 + }, + { + "techniqueID": "T1555", + "score": 100 + }, + { + "techniqueID": "T1555.003", + "score": 2 + }, + { + "techniqueID": "T1552.002", + "score": 40 + }, + { + "techniqueID": "T1053.003", + "score": 62 + }, + { + "techniqueID": "T1003.006", + "score": 79 + }, + { + "techniqueID": "T1574.001", + "score": 49 + }, + { + "techniqueID": "T1574.002", + "score": 16 + }, + { + "techniqueID": "T1071.004", + "score": 43 + }, + { + "techniqueID": "T1568.003", + "score": 18 + }, + { + "techniqueID": "T1485", + "score": 75 + }, + { + "techniqueID": "T1132", + "score": 52 + }, + { + "techniqueID": "T1486", + "score": 60 + }, + { + "techniqueID": "T1565", + "score": 40 + }, + { + "techniqueID": "T1001", + "score": 19 + }, + { + "techniqueID": "T1074", + "score": 54 + }, + { + "techniqueID": "T1030", + "score": 17 + }, + { + "techniqueID": "T1530", + "score": 17 + }, + { + "techniqueID": "T1213", + "score": 36 + }, + { + "techniqueID": "T1005", + "score": 18 + }, + { + "techniqueID": "T1039", + "score": 29 + }, + { + "techniqueID": "T1025", + "score": 16 + }, + { + "techniqueID": "T1102.001", + "score": 94 + }, + { + "techniqueID": "T1491", + "score": 13 + }, + { + "techniqueID": "T1078.001", + "score": 96 + }, + { + "techniqueID": "T1578.003", + "score": 60 + }, + { + "techniqueID": "T1140", + "score": 67 + }, + { + "techniqueID": "T1498.001", + "score": 54 + }, + { + "techniqueID": "T1006", + "score": 60 + }, + { + "techniqueID": "T1562.002", + "score": 31 + }, + { + "techniqueID": "T1562.007", + "score": 2 + }, + { + "techniqueID": "T1562.004", + "score": 84 + }, + { + "techniqueID": "T1562.001", + "score": 74 + }, + { + "techniqueID": "T1561.001", + "score": 40 + }, + { + "techniqueID": "T1561.002", + "score": 26 + }, + { + "techniqueID": "T1561", + "score": 11 + }, + { + "techniqueID": "T1021.003", + "score": 54 + }, + { + "techniqueID": "T1136.002", + "score": 92 + }, + { + "techniqueID": "T1087.002", + "score": 5 + }, + { + "techniqueID": "T1078.002", + "score": 63 + }, + { + "techniqueID": "T1556.001", + "score": 45 + }, + { + "techniqueID": "T1090.004", + "score": 4 + }, + { + "techniqueID": "T1568.002", + "score": 40 + }, + { + "techniqueID": "T1069.002", + "score": 16 + }, + { + "techniqueID": "T1482", + "score": 85 + }, + { + "techniqueID": "T1189", + "score": 33 + }, + { + "techniqueID": "T1574.004", + "score": 23 + }, + { + "techniqueID": "T1559.002", + "score": 64 + }, + { + "techniqueID": "T1568", + "score": 22 + }, + { + "techniqueID": "T1055.001", + "score": 23 + }, + { + "techniqueID": "T1548.004", + "score": 86 + }, + { + "techniqueID": "T1087.003", + "score": 37 + }, + { + "techniqueID": "T1114", + "score": 72 + }, + { + "techniqueID": "T1114.003", + "score": 77 + }, + { + "techniqueID": "T1546.014", + "score": 95 + }, + { + "techniqueID": "T1573", + "score": 60 + }, + { + "techniqueID": "T1499", + "score": 26 + }, + { + "techniqueID": "T1480.001", + "score": 99 + }, + { + "techniqueID": "T1546", + "score": 43 + }, + { + "techniqueID": "T1098.002", + "score": 92 + }, + { + "techniqueID": "T1574.005", + "score": 7 + }, + { + "techniqueID": "T1480", + "score": 4 + }, + { + "techniqueID": "T1048", + "score": 16 + }, + { + "techniqueID": "T1048.002", + "score": 98 + }, + { + "techniqueID": "T1011.001", + "score": 40 + }, + { + "techniqueID": "T1041", + "score": 18 + }, + { + "techniqueID": "T1011", + "score": 100 + }, + { + "techniqueID": "T1052", + "score": 97 + }, + { + "techniqueID": "T1048.001", + "score": 40 + }, + { + "techniqueID": "T1048.003", + "score": 46 + }, + { + "techniqueID": "T1567", + "score": 18 + }, + { + "techniqueID": "T1052.001", + "score": 99 + }, + { + "techniqueID": "T1567.002", + "score": 75 + }, + { + "techniqueID": "T1567.001", + "score": 27 + }, + { + "techniqueID": "T1190", + "score": 39 + }, + { + "techniqueID": "T1203", + "score": 37 + }, + { + "techniqueID": "T1212", + "score": 47 + }, + { + "techniqueID": "T1211", + "score": 57 + }, + { + "techniqueID": "T1068", + "score": 89 + }, + { + "techniqueID": "T1210", + "score": 59 + }, + { + "techniqueID": "T1491.002", + "score": 28 + }, + { + "techniqueID": "T1090.002", + "score": 20 + }, + { + "techniqueID": "T1133", + "score": 52 + }, + { + "techniqueID": "T1055.011", + "score": 61 + }, + { + "techniqueID": "T1008", + "score": 57 + }, + { + "techniqueID": "T1568.001", + "score": 73 + }, + { + "techniqueID": "T1070.004", + "score": 78 + }, + { + "techniqueID": "T1071.002", + "score": 12 + }, + { + "techniqueID": "T1083", + "score": 84 + }, + { + "techniqueID": "T1222", + "score": 56 + }, + { + "techniqueID": "T1495", + "score": 5 + }, + { + "techniqueID": "T1187", + "score": 53 + }, + { + "techniqueID": "T1056.002", + "score": 11 + }, + { + "techniqueID": "T1553.001", + "score": 67 + }, + { + "techniqueID": "T1558.001", + "score": 62 + }, + { + "techniqueID": "T1484", + "score": 94 + }, + { + "techniqueID": "T1552.006", + "score": 61 + }, + { + "techniqueID": "T1562.003", + "score": 4 + }, + { + "techniqueID": "T1200", + "score": 30 + }, + { + "techniqueID": "T1564.005", + "score": 97 + }, + { + "techniqueID": "T1564.001", + "score": 17 + }, + { + "techniqueID": "T1564.002", + "score": 84 + }, + { + "techniqueID": "T1564.003", + "score": 78 + }, + { + "techniqueID": "T1564", + "score": 98 + }, + { + "techniqueID": "T1574", + "score": 58 + }, + { + "techniqueID": "T1546.012", + "score": 14 + }, + { + "techniqueID": "T1562", + "score": 32 + }, + { + "techniqueID": "T1525", + "score": 12 + }, + { + "techniqueID": "T1562.006", + "score": 68 + }, + { + "techniqueID": "T1027.005", + "score": 24 + }, + { + "techniqueID": "T1070", + "score": 60 + }, + { + "techniqueID": "T1202", + "score": 76 + }, + { + "techniqueID": "T1105", + "score": 44 + }, + { + "techniqueID": "T1490", + "score": 90 + }, + { + "techniqueID": "T1056", + "score": 5 + }, + { + "techniqueID": "T1553.004", + "score": 69 + }, + { + "techniqueID": "T1218.004", + "score": 4 + }, + { + "techniqueID": "T1559", + "score": 96 + }, + { + "techniqueID": "T1491.001", + "score": 82 + }, + { + "techniqueID": "T1090.001", + "score": 15 + }, + { + "techniqueID": "T1534", + "score": 11 + }, + { + "techniqueID": "T1036.001", + "score": 86 + }, + { + "techniqueID": "T1059.007", + "score": 84 + }, + { + "techniqueID": "T1001.001", + "score": 63 + }, + { + "techniqueID": "T1558.003", + "score": 12 + }, + { + "techniqueID": "T1547.006", + "score": 63 + }, + { + "techniqueID": "T1555.001", + "score": 88 + }, + { + "techniqueID": "T1056.001", + "score": 87 + }, + { + "techniqueID": "T1546.006", + "score": 53 + }, + { + "techniqueID": "T1574.006", + "score": 84 + }, + { + "techniqueID": "T1557.001", + "score": 70 + }, + { + "techniqueID": "T1003.004", + "score": 55 + }, + { + "techniqueID": "T1547.008", + "score": 12 + }, + { + "techniqueID": "T1003.001", + "score": 49 + }, + { + "techniqueID": "T1570", + "score": 88 + }, + { + "techniqueID": "T1543.001", + "score": 97 + }, + { + "techniqueID": "T1543.004", + "score": 47 + }, + { + "techniqueID": "T1569.001", + "score": 36 + }, + { + "techniqueID": "T1053.004", + "score": 26 + }, + { + "techniqueID": "T1222.002", + "score": 67 + }, + { + "techniqueID": "T1136.001", + "score": 12 + }, + { + "techniqueID": "T1087.001", + "score": 97 + }, + { + "techniqueID": "T1078.003", + "score": 41 + }, + { + "techniqueID": "T1074.001", + "score": 10 + }, + { + "techniqueID": "T1114.001", + "score": 12 + }, + { + "techniqueID": "T1069.001", + "score": 33 + }, + { + "techniqueID": "T1037.002", + "score": 73 + }, + { + "techniqueID": "T1037.001", + "score": 51 + }, + { + "techniqueID": "T1127.001", + "score": 53 + }, + { + "techniqueID": "T1071.003", + "score": 26 + }, + { + "techniqueID": "T1134.003", + "score": 78 + }, + { + "techniqueID": "T1204.002", + "score": 14 + }, + { + "techniqueID": "T1204.001", + "score": 21 + }, + { + "techniqueID": "T1185", + "score": 54 + }, + { + "techniqueID": "T1557", + "score": 90 + }, + { + "techniqueID": "T1036.004", + "score": 94 + }, + { + "techniqueID": "T1036", + "score": 3 + }, + { + "techniqueID": "T1036.005", + "score": 53 + }, + { + "techniqueID": "T1556", + "score": 50 + }, + { + "techniqueID": "T1578", + "score": 90 + }, + { + "techniqueID": "T1112", + "score": 36 + }, + { + "techniqueID": "T1218.005", + "score": 86 + }, + { + "techniqueID": "T1218.007", + "score": 62 + }, + { + "techniqueID": "T1104", + "score": 94 + }, + { + "techniqueID": "T1090.003", + "score": 35 + }, + { + "techniqueID": "T1003.003", + "score": 13 + }, + { + "techniqueID": "T1564.004", + "score": 59 + }, + { + "techniqueID": "T1106", + "score": 41 + }, + { + "techniqueID": "T1546.007", + "score": 82 + }, + { + "techniqueID": "T1498", + "score": 27 + }, + { + "techniqueID": "T1037.003", + "score": 28 + }, + { + "techniqueID": "T1046", + "score": 20 + }, + { + "techniqueID": "T1070.005", + "score": 95 + }, + { + "techniqueID": "T1135", + "score": 96 + }, + { + "techniqueID": "T1040", + "score": 66 + }, + { + "techniqueID": "T1095", + "score": 11 + }, + { + "techniqueID": "T1132.002", + "score": 86 + }, + { + "techniqueID": "T1571", + "score": 17 + }, + { + "techniqueID": "T1003", + "score": 87 + }, + { + "techniqueID": "T1499.001", + "score": 45 + }, + { + "techniqueID": "T1027", + "score": 52 + }, + { + "techniqueID": "T1218.008", + "score": 73 + }, + { + "techniqueID": "T1137", + "score": 74 + }, + { + "techniqueID": "T1137.001", + "score": 64 + }, + { + "techniqueID": "T1137.002", + "score": 81 + }, + { + "techniqueID": "T1102.003", + "score": 17 + }, + { + "techniqueID": "T1137.003", + "score": 69 + }, + { + "techniqueID": "T1137.004", + "score": 13 + }, + { + "techniqueID": "T1137.005", + "score": 70 + }, + { + "techniqueID": "T1134.004", + "score": 25 + }, + { + "techniqueID": "T1550.002", + "score": 46 + }, + { + "techniqueID": "T1550.003", + "score": 100 + }, + { + "techniqueID": "T1110.002", + "score": 79 + }, + { + "techniqueID": "T1556.002", + "score": 79 + }, + { + "techniqueID": "T1110.001", + "score": 66 + }, + { + "techniqueID": "T1201", + "score": 95 + }, + { + "techniqueID": "T1110.003", + "score": 14 + }, + { + "techniqueID": "T1574.007", + "score": 51 + }, + { + "techniqueID": "T1574.008", + "score": 40 + }, + { + "techniqueID": "T1574.009", + "score": 26 + }, + { + "techniqueID": "T1120", + "score": 55 + }, + { + "techniqueID": "T1069", + "score": 26 + }, + { + "techniqueID": "T1566", + "score": 6 + }, + { + "techniqueID": "T1547.011", + "score": 36 + }, + { + "techniqueID": "T1556.003", + "score": 49 + }, + { + "techniqueID": "T1205.001", + "score": 51 + }, + { + "techniqueID": "T1547.010", + "score": 59 + }, + { + "techniqueID": "T1055.002", + "score": 86 + }, + { + "techniqueID": "T1059.001", + "score": 77 + }, + { + "techniqueID": "T1546.013", + "score": 44 + }, + { + "techniqueID": "T1542", + "score": 53 + }, + { + "techniqueID": "T1552.004", + "score": 48 + }, + { + "techniqueID": "T1003.007", + "score": 11 + }, + { + "techniqueID": "T1055.009", + "score": 51 + }, + { + "techniqueID": "T1057", + "score": 72 + }, + { + "techniqueID": "T1055.013", + "score": 57 + }, + { + "techniqueID": "T1055.012", + "score": 16 + }, + { + "techniqueID": "T1055", + "score": 86 + }, + { + "techniqueID": "T1001.003", + "score": 4 + }, + { + "techniqueID": "T1572", + "score": 69 + }, + { + "techniqueID": "T1090", + "score": 54 + }, + { + "techniqueID": "T1055.008", + "score": 61 + }, + { + "techniqueID": "T1216.001", + "score": 23 + }, + { + "techniqueID": "T1059.006", + "score": 4 + }, + { + "techniqueID": "T1012", + "score": 100 + }, + { + "techniqueID": "T1563.002", + "score": 61 + }, + { + "techniqueID": "T1037.004", + "score": 25 + }, + { + "techniqueID": "T1547.007", + "score": 20 + }, + { + "techniqueID": "T1498.002", + "score": 85 + }, + { + "techniqueID": "T1547.001", + "score": 50 + }, + { + "techniqueID": "T1218.009", + "score": 40 + }, + { + "techniqueID": "T1218.010", + "score": 21 + }, + { + "techniqueID": "T1219", + "score": 21 + }, + { + "techniqueID": "T1074.002", + "score": 14 + }, + { + "techniqueID": "T1021.001", + "score": 80 + }, + { + "techniqueID": "T1114.002", + "score": 97 + }, + { + "techniqueID": "T1563", + "score": 8 + }, + { + "techniqueID": "T1021", + "score": 79 + }, + { + "techniqueID": "T1018", + "score": 97 + }, + { + "techniqueID": "T1036.003", + "score": 8 + }, + { + "techniqueID": "T1091", + "score": 59 + }, + { + "techniqueID": "T1496", + "score": 3 + }, + { + "techniqueID": "T1578.004", + "score": 99 + }, + { + "techniqueID": "T1036.002", + "score": 56 + }, + { + "techniqueID": "T1207", + "score": 73 + }, + { + "techniqueID": "T1014", + "score": 91 + }, + { + "techniqueID": "T1564.006", + "score": 64 + }, + { + "techniqueID": "T1218.011", + "score": 20 + }, + { + "techniqueID": "T1565.003", + "score": 53 + }, + { + "techniqueID": "T1134.005", + "score": 45 + }, + { + "techniqueID": "T1553.003", + "score": 14 + }, + { + "techniqueID": "T1021.002", + "score": 25 + }, + { + "techniqueID": "T1505.001", + "score": 95 + }, + { + "techniqueID": "T1021.004", + "score": 70 + }, + { + "techniqueID": "T1098.004", + "score": 63 + }, + { + "techniqueID": "T1563.001", + "score": 83 + }, + { + "techniqueID": "T1053.005", + "score": 26 + }, + { + "techniqueID": "T1053", + "score": 68 + }, + { + "techniqueID": "T1029", + "score": 40 + }, + { + "techniqueID": "T1113", + "score": 36 + }, + { + "techniqueID": "T1546.002", + "score": 100 + }, + { + "techniqueID": "T1003.002", + "score": 11 + }, + { + "techniqueID": "T1518.001", + "score": 55 + }, + { + "techniqueID": "T1547.005", + "score": 74 + }, + { + "techniqueID": "T1555.002", + "score": 99 + }, + { + "techniqueID": "T1505", + "score": 45 + }, + { + "techniqueID": "T1569.002", + "score": 34 + }, + { + "techniqueID": "T1499.002", + "score": 10 + }, + { + "techniqueID": "T1489", + "score": 23 + }, + { + "techniqueID": "T1574.010", + "score": 7 + }, + { + "techniqueID": "T1574.011", + "score": 89 + }, + { + "techniqueID": "T1548.001", + "score": 99 + }, + { + "techniqueID": "T1129", + "score": 64 + }, + { + "techniqueID": "T1213.002", + "score": 55 + }, + { + "techniqueID": "T1547.009", + "score": 55 + }, + { + "techniqueID": "T1218", + "score": 96 + }, + { + "techniqueID": "T1216", + "score": 85 + }, + { + "techniqueID": "T1558.002", + "score": 7 + }, + { + "techniqueID": "T1072", + "score": 100 + }, + { + "techniqueID": "T1518", + "score": 28 + }, + { + "techniqueID": "T1027.002", + "score": 93 + }, + { + "techniqueID": "T1036.006", + "score": 66 + }, + { + "techniqueID": "T1566.001", + "score": 99 + }, + { + "techniqueID": "T1566.002", + "score": 22 + }, + { + "techniqueID": "T1566.003", + "score": 40 + }, + { + "techniqueID": "T1132.001", + "score": 57 + }, + { + "techniqueID": "T1037.005", + "score": 41 + }, + { + "techniqueID": "T1528", + "score": 23 + }, + { + "techniqueID": "T1539", + "score": 12 + }, + { + "techniqueID": "T1558", + "score": 40 + }, + { + "techniqueID": "T1027.003", + "score": 67 + }, + { + "techniqueID": "T1001.002", + "score": 62 + }, + { + "techniqueID": "T1565.001", + "score": 62 + }, + { + "techniqueID": "T1553", + "score": 55 + }, + { + "techniqueID": "T1548.003", + "score": 94 + }, + { + "techniqueID": "T1195", + "score": 12 + }, + { + "techniqueID": "T1573.001", + "score": 58 + }, + { + "techniqueID": "T1497.001", + "score": 36 + }, + { + "techniqueID": "T1542.001", + "score": 11 + }, + { + "techniqueID": "T1082", + "score": 100 + }, + { + "techniqueID": "T1016", + "score": 33 + }, + { + "techniqueID": "T1049", + "score": 12 + }, + { + "techniqueID": "T1033", + "score": 49 + }, + { + "techniqueID": "T1007", + "score": 29 + }, + { + "techniqueID": "T1569", + "score": 53 + }, + { + "techniqueID": "T1529", + "score": 7 + }, + { + "techniqueID": "T1124", + "score": 74 + }, + { + "techniqueID": "T1543.002", + "score": 81 + }, + { + "techniqueID": "T1080", + "score": 26 + }, + { + "techniqueID": "T1221", + "score": 71 + }, + { + "techniqueID": "T1055.003", + "score": 71 + }, + { + "techniqueID": "T1055.005", + "score": 3 + }, + { + "techniqueID": "T1497.003", + "score": 58 + }, + { + "techniqueID": "T1547.003", + "score": 95 + }, + { + "techniqueID": "T1070.006", + "score": 38 + }, + { + "techniqueID": "T1134.001", + "score": 49 + }, + { + "techniqueID": "T1205", + "score": 90 + }, + { + "techniqueID": "T1537", + "score": 51 + }, + { + "techniqueID": "T1565.002", + "score": 48 + }, + { + "techniqueID": "T1505.002", + "score": 95 + }, + { + "techniqueID": "T1546.005", + "score": 34 + }, + { + "techniqueID": "T1127", + "score": 67 + }, + { + "techniqueID": "T1199", + "score": 13 + }, + { + "techniqueID": "T1111", + "score": 87 + }, + { + "techniqueID": "T1059.004", + "score": 43 + }, + { + "techniqueID": "T1552", + "score": 94 + }, + { + "techniqueID": "T1535", + "score": 11 + }, + { + "techniqueID": "T1550", + "score": 52 + }, + { + "techniqueID": "T1497.002", + "score": 46 + }, + { + "techniqueID": "T1204", + "score": 11 + }, + { + "techniqueID": "T1055.014", + "score": 36 + }, + { + "techniqueID": "T1021.005", + "score": 74 + }, + { + "techniqueID": "T1078", + "score": 73 + }, + { + "techniqueID": "T1125", + "score": 53 + }, + { + "techniqueID": "T1497", + "score": 77 + }, + { + "techniqueID": "T1059.005", + "score": 99 + }, + { + "techniqueID": "T1056.003", + "score": 90 + }, + { + "techniqueID": "T1071.001", + "score": 12 + }, + { + "techniqueID": "T1102", + "score": 74 + }, + { + "techniqueID": "T1550.004", + "score": 26 + }, + { + "techniqueID": "T1505.003", + "score": 75 + }, + { + "techniqueID": "T1059.003", + "score": 96 + }, + { + "techniqueID": "T1222.001", + "score": 10 + }, + { + "techniqueID": "T1047", + "score": 69 + }, + { + "techniqueID": "T1546.003", + "score": 81 + }, + { + "techniqueID": "T1021.006", + "score": 87 + }, + { + "techniqueID": "T1543.003", + "score": 2 + }, + { + "techniqueID": "T1547.004", + "score": 21 + }, + { + "techniqueID": "T1220", + "score": 74 + } + ] +} \ No newline at end of file diff --git a/site/mitre/layers/spec/v1.0/layerformat.md b/site/mitre/layers/spec/v1.0/layerformat.md new file mode 100644 index 0000000..0bcd4e0 --- /dev/null +++ b/site/mitre/layers/spec/v1.0/layerformat.md @@ -0,0 +1,72 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 1.0** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "1.0" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewFullTable | Boolean | No | true | Specifies the view mode for the layer as follows:
**true**: display the full table with tactic and technique names
**false**: display compact table with abbreviated tactic and technique names | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values. | +| platforms | Array of String | No | All platforms defined within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "windows", "linux", "mac"
**domain=mitre-mobile**: "android", "ios" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator. | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores. | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## Example +The following example illustrates the layer file format: +```json +{ + "version": "1.0", + "name": "example", + "description": "hello, world", + "domain": "mitre-enterprise", + "filters": { + "stages": ["act"], + "platforms": ["windows"], + }, + "sorting": 2, + "techniques": [ + { + "techniqueID": "T1156", + "enabled": false, + "comment": "disabled technique with a comment" + }, + { + "techniqueID": "T1103", + "score": 50 + }, + { + "color": "#FF00FF", + "techniqueID": "T1015", + }, + ] +} +``` diff --git a/site/mitre/layers/spec/v1.1/layerformat.md b/site/mitre/layers/spec/v1.1/layerformat.md new file mode 100644 index 0000000..0e24134 --- /dev/null +++ b/site/mitre/layers/spec/v1.1/layerformat.md @@ -0,0 +1,72 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 1.1** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "1.1" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewMode | Number | No | 0 | Specifies the view mode for the layer as follows:
**0**: display the full table with tactic and technique names
**1**: display compact table with abbreviated tactic and technique names
**2**: display mini table with no text with the exception of tooltips | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values. | +| platforms | Array of String | No | All platforms defined within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "windows", "linux", "mac"
**domain=mitre-mobile**: "android", "ios" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator. | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores. | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## Example +The following example illustrates the layer file format: +```json +{ + "version": "1.1", + "name": "example", + "description": "hello, world", + "domain": "mitre-enterprise", + "filters": { + "stages": ["act"], + "platforms": ["windows"], + }, + "sorting": 2, + "techniques": [ + { + "techniqueID": "T1156", + "enabled": false, + "comment": "disabled technique with a comment" + }, + { + "techniqueID": "T1103", + "score": 50 + }, + { + "color": "#FF00FF", + "techniqueID": "T1015", + }, + ] +} +``` diff --git a/site/mitre/layers/spec/v1.2/layerformat.md b/site/mitre/layers/spec/v1.2/layerformat.md new file mode 100644 index 0000000..fe29db5 --- /dev/null +++ b/site/mitre/layers/spec/v1.2/layerformat.md @@ -0,0 +1,86 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 1.2** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "1.2" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewMode | Number | No | 0 | Specifies the view mode for the layer as follows:
**0**: display the full table with tactic and technique names
**1**: display compact table with abbreviated tactic and technique names
**2**: display mini table with no text with the exception of tooltips | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values | +| platforms | Array of String | No | All platforms defined within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "windows", "linux", "mac"
**domain=mitre-mobile**: "android", "ios" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores. | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + + +## Example +The following example illustrates the layer file format: +```json +{ + "version": "1.2", + "name": "example", + "description": "hello, world", + "domain": "mitre-enterprise", + "filters": { + "stages": ["act"], + "platforms": ["windows"], + }, + "sorting": 2, + "techniques": [ + { + "techniqueID": "T1156", + "enabled": false, + "comment": "disabled technique with a comment" + }, + { + "techniqueID": "T1103", + "score": 50 + }, + { + "color": "#FF00FF", + "techniqueID": "T1015", + }, + ], + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v1.3/layerformat.md b/site/mitre/layers/spec/v1.3/layerformat.md new file mode 100644 index 0000000..307ac89 --- /dev/null +++ b/site/mitre/layers/spec/v1.3/layerformat.md @@ -0,0 +1,91 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 1.3** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "1.3" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewMode | Number | No | 0 | Specifies the view mode for the layer as follows:
**0**: display the full table with tactic and technique names
**1**: display compact table with abbreviated tactic and technique names
**2**: display mini table with no text with the exception of tooltips | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values | +| platforms | Array of String | No | All platforms defined within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "windows", "linux", "mac"
**domain=mitre-mobile**: "android", "ios" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + + +## Example +The following example illustrates the layer file format: +```json +{ + "version": "1.3", + "name": "example", + "description": "hello, world", + "domain": "mitre-enterprise", + "filters": { + "stages": ["act"], + "platforms": ["windows"], + }, + "sorting": 2, + "techniques": [ + { + "techniqueID": "T1156", + "enabled": false, + "comment": "disabled technique with a comment" + }, + { + "techniqueID": "T1103", + "score": 50 + }, + { + "color": "#FF00FF", + "techniqueID": "T1015", + }, + ], + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#205b8f" +} +``` diff --git a/site/mitre/layers/spec/v2.0/layerformat.md b/site/mitre/layers/spec/v2.0/layerformat.md new file mode 100644 index 0000000..396d9d2 --- /dev/null +++ b/site/mitre/layers/spec/v2.0/layerformat.md @@ -0,0 +1,113 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 2.0** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "2.0" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewMode | Number | No | 0 | Specifies the view mode for the layer as follows:
**0**: display the full table with tactic and technique names
**1**: display compact table with abbreviated tactic and technique names
**2**: display mini table with no text with the exception of tooltips | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values | +| platforms | Array of String | No | All platforms defined within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "windows", "linux", "mac"
**domain=mitre-mobile**: "android", "ios" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "version": "2.0", + "domain": "mitre-enterprise", + "description": "hello, world", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "windows", + "mac" + ] + }, + "sorting": 2, + "viewMode": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1155", + "tactic": "execution", + "color": "#fd8d3c", + "comment": "This is a comment for technique T1155 only under the Execution tactic." + }, + { + "techniqueID": "T1155", + "tactic": "lateral-movement", + "score": 75 + }, + { + "techniqueID": "T1010", + "tactic": "discovery", + "enabled": false + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false +} +``` diff --git a/site/mitre/layers/spec/v2.1/layerformat.md b/site/mitre/layers/spec/v2.1/layerformat.md new file mode 100644 index 0000000..cfc0d87 --- /dev/null +++ b/site/mitre/layers/spec/v2.1/layerformat.md @@ -0,0 +1,145 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 2.1** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "2.1" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewMode | Number | No | 0 | Specifies the view mode for the layer as follows:
**0**: display the full table with tactic and technique names
**1**: display compact table with abbreviated tactic and technique names
**2**: display mini table with no text with the exception of tooltips | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID | +| metadata | Array of Metadata objects | No | | User defined metadata for this layer. See definition of Metadata object below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values | +| platforms | Array of String | No | All platforms defined within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "windows", "linux", "mac"
**domain=mitre-mobile**: "android", "ios" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects | No | | User defined metadata for this technique. See definition of Metadata object below | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | the name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "version": "2.1", + "domain": "mitre-enterprise", + "description": "hello, world", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "windows", + "mac" + ] + }, + "sorting": 2, + "viewMode": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1155", + "tactic": "execution", + "color": "#fd8d3c", + "comment": "This is a comment for technique T1155 only under the Execution tactic." + }, + { + "techniqueID": "T1017", + "tactic": "lateral-movement", + "score": 75 + }, + { + "techniqueID": "T1010", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1189", + "tactic": "initial-access", + "metadata": [ + { + "name": "T1189 metadata1", + "value": "T1189 metadata1 value" + }, + { + "name": "T1189 metadata2", + "value": "T1189 metadata2 value" + } + ] + }, + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v2.2/layerformat.md b/site/mitre/layers/spec/v2.2/layerformat.md new file mode 100644 index 0000000..eeae6da --- /dev/null +++ b/site/mitre/layers/spec/v2.2/layerformat.md @@ -0,0 +1,145 @@ +# ATT&CK® Navigator Layer File Format Definition +This document describes **Version 2.2** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "2.2" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| viewMode | Number | No | 0 | Specifies the view mode for the layer as follows:
**0**: display the full table with tactic and technique names
**1**: display compact table with abbreviated tactic and technique names
**2**: display mini table with no text with the exception of tooltips | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID | +| metadata | Array of Metadata objects | No | | User defined metadata for this layer. See definition of Metadata object below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values | +| platforms | Array of String | No | **domain=mitre-enterprise**: "Windows", "Linux", "macOS"
**domain=mitre-mobile**: "Android", "iOS" | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "Windows", "Linux", "macOS", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mitre-mobile**: "Android", "iOS" | + +## Technique Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####" | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects | No | | User defined metadata for this technique. See definition of Metadata object below | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | the name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "version": "2.2", + "domain": "mitre-enterprise", + "description": "hello, world", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "viewMode": 0, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1155", + "tactic": "execution", + "color": "#fd8d3c", + "comment": "This is a comment for technique T1155 only under the Execution tactic." + }, + { + "techniqueID": "T1017", + "tactic": "lateral-movement", + "score": 75 + }, + { + "techniqueID": "T1010", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1189", + "tactic": "initial-access", + "metadata": [ + { + "name": "T1189 metadata1", + "value": "T1189 metadata1 value" + }, + { + "name": "T1189 metadata2", + "value": "T1189 metadata2 value" + } + ] + }, + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v3.0/layerformat.md b/site/mitre/layers/spec/v3.0/layerformat.md new file mode 100644 index 0000000..3270e3a --- /dev/null +++ b/site/mitre/layers/spec/v3.0/layerformat.md @@ -0,0 +1,165 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 3.0** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| version | String | Yes | n/a | Must be "3.0" | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "mitre-enterprise" or "mitre-mobile" | +| filters |Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects | No | | User defined metadata for this layer. See definition of Metadata object below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| stages | Array of String | No | ["act"] | Specifies the logical stages of the attack lifecycle to display. Valid choices are: "prepare" and "act". Array must contain at least one of these values | +| platforms | Array of String | No | **domain=mitre-enterprise**: "Windows", "Linux", "macOS"
**domain=mitre-mobile**: "Android", "iOS" | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=mitre-enterprise**: "Windows", "Linux", "macOS", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mitre-mobile**: "Android", "iOS" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects | No | | User defined metadata for this technique. See definition of Metadata object below | +| showSubtechniques | boolean | false | false | if true, the subtechniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls — this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | the name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "version": "3.0", + "domain": "mitre-enterprise", + "description": "hello, world", + "filters": { + "stages": [ + "act" + ], + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001" + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v4.0/layerformat.md b/site/mitre/layers/spec/v4.0/layerformat.md new file mode 100644 index 0000000..1f5c660 --- /dev/null +++ b/site/mitre/layers/spec/v4.0/layerformat.md @@ -0,0 +1,173 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 4.0** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| versions | Version object | No | | See Version object definition below | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "enterprise-attack", "mobile-attack", "ics-attack" | +| filters | Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects | No | | User defined metadata for this layer. See definition of Metadata object below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| platforms | Array of String | No | all platforms within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=enterprise-attack**: "PRE", "Windows", "Linux", "macOS", "Network", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mobile-attack**: "Android", "iOS".
**domain=ics-attack**: "Windows", "Control Server", "Data Historian", "Engineering Workstation", "Field Controller/RTU/PLC/IED", "Human-Machine Interface", "Input/Output Server", "Safety Instrumented System/Protection Relay" | + +## Version Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| attack | String | No | Current version of ATT&CK: "8" | ATT&CK version of this layer | +| navigator | String | Yes | | Must be "4.0" | +| layer | String | Yes | | Must be "4.0" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects | No | | User defined metadata for this technique. See definition of Metadata object below | +| showSubtechniques | boolean | false | false | if true, the subtechniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls — this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | the name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "versions": { + "attack": "8", + "navigator": "4.0", + "layer": "4.0" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001" + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v4.1/layerformat.md b/site/mitre/layers/spec/v4.1/layerformat.md new file mode 100644 index 0000000..475bac4 --- /dev/null +++ b/site/mitre/layers/spec/v4.1/layerformat.md @@ -0,0 +1,181 @@ +# ATT&CKTM Navigator Layer File Format Definition +This document describes **Version 4.1** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| versions | Version object | No | | See Version object definition below | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "enterprise-attack", "mobile-attack", "ics-attack" | +| filters | Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects | No | | User defined metadata for this layer. See definition of Metadata object | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| platforms | Array of String | No | all platforms within domain | Specifies the platforms within the technology domain – only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=enterprise-attack**: "PRE", "Windows", "Linux", "macOS", "Network", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mobile-attack**: "Android", "iOS".
**domain=ics-attack**: "Windows", "Control Server", "Data Historian", "Engineering Workstation", "Field Controller/RTU/PLC/IED", "Human-Machine Interface", "Input/Output Server", "Safety Instrumented System/Protection Relay" | + +## Version Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| attack | String | No | Current version of ATT&CK: "8" | ATT&CK version of this layer | +| navigator | String | Yes | | Must be "4.2" | +| layer | String | Yes | | Must be "4.1" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score – the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects and Metadata Separator objects | No | | User defined metadata for this technique. See definition of Metadata object and Metadata Separator object below | +| showSubtechniques | boolean | No | false | if true, the sub-techniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls — this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | The name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +## Metadata Separator Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| divider | Boolean | Yes | n/a | If true, display a horizontal separator in the metadata tooltip where this object occurs in the list of metadata + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "versions": { + "attack": "8", + "navigator": "4.2", + "layer": "4.1" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001" + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "divider": true + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v4.2/layerformat.md b/site/mitre/layers/spec/v4.2/layerformat.md new file mode 100644 index 0000000..2622ddd --- /dev/null +++ b/site/mitre/layers/spec/v4.2/layerformat.md @@ -0,0 +1,189 @@ +# ATT&CK® Navigator Layer File Format Definition +This document describes **Version 4.2** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| versions | Version object | No | | See Version object definition below | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "enterprise-attack", "mobile-attack", "ics-attack" | +| filters | Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects | No | | User defined metadata for this layer. See definition of Metadata object | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| platforms | Array of String | No | all platforms within domain | Specifies the platforms within the technology domain - only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=enterprise-attack**: "PRE", "Windows", "Linux", "macOS", "Network", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mobile-attack**: "Android", "iOS".
**domain=ics-attack**: "Windows", "Control Server", "Data Historian", "Engineering Workstation", "Field Controller/RTU/PLC/IED", "Human-Machine Interface", "Input/Output Server", "Safety Instrumented System/Protection Relay" | + +## Version Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| attack | String | No | Current version of ATT&CK: "9" | ATT&CK version of this layer | +| navigator | String | Yes | | Must be "4.4.1" | +| layer | String | Yes | | Must be "4.2" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score - the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects and Metadata Separator objects | No | | User defined metadata for this technique. See definition of Metadata object and Metadata Separator object below | +| showSubtechniques | boolean | No | false | if true, the sub-techniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls - this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | The name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +## Metadata Separator Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| divider | Boolean | Yes | n/a | If true, display a horizontal separator in the metadata tooltip where this object occurs in the list of metadata + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | +| showAggregateScores | Boolean | No | false | if true, show the aggregate scores of techniques and its subtechniques in the matrix | +| countUnscored | Boolean | No | false | if true, count the unscored techniques in the calculation of the aggregate score of techniques in the matrix | +| aggregateFunction | String | No | "average" | The aggregate function used to calculate aggregate scores for techniques in the matrix. Either "average", "min", "max" or "sum" | + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "versions": { + "attack": "8", + "navigator": "4.4.4", + "layer": "4.2" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false, + "showAggregateScores": true, + "countUnscored": true, + "aggregateFunction": "average" + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "score": 0, + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "score": 100, + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001" + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "divider": true + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v4.3/layerformat.md b/site/mitre/layers/spec/v4.3/layerformat.md new file mode 100644 index 0000000..07efb44 --- /dev/null +++ b/site/mitre/layers/spec/v4.3/layerformat.md @@ -0,0 +1,222 @@ +# ATT&CK® Navigator Layer File Format Definition +This document describes **Version 4.3** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| versions | Version object | No | | See Version object definition below | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "enterprise-attack", "mobile-attack", "ics-attack" | +| filters | Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects and Divider objects | No | | User defined metadata for this layer. See definition of Metadata objects and Divider objects below | +| links | Array of Link objects and Divider objects | No | | User assigned links for this layer. See definitions of Link objects and Divider objects below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| platforms | Array of String | No | all platforms within domain | Specifies the platforms within the technology domain - only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=enterprise-attack**: "PRE", "Windows", "Linux", "macOS", "Network", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mobile-attack**: "Android", "iOS".
**domain=ics-attack**: "Windows", "Control Server", "Data Historian", "Engineering Workstation", "Field Controller/RTU/PLC/IED", "Human-Machine Interface", "Input/Output Server", "Safety Instrumented System/Protection Relay" | + +## Version Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| attack | String | No | Current version of ATT&CK | ATT&CK version of this layer | +| navigator | String | Yes | | Must be "4.6.5" | +| layer | String | Yes | | Must be "4.3" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score - the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects and Divider objects | No | | User defined metadata for this technique. See definitions of Metadata objects and Divider objects below | +| links | Array of Link objects and Divider objects | No | | User assigned links for this technique. See definitions of Link objects and Divider objects below | +| showSubtechniques | boolean | No | false | if true, the sub-techniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls - this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | The name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +Note: Divider objects can be used alongside Metadata objects. + +## Link Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The label for the hyperlink | +| url | String | Yes | n/a | The URL to open when the label is clicked. Note: URLs must be prefixed with a protocol identifier (e.g. 'https://') | + +Note: Divider objects can be used alongside Link objects. + +## Divider Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| divider | Boolean | Yes | n/a | If true, display a horizontal separator in the Metadata tooltip or Link context menu where this object occurs in the list + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | +| showAggregateScores | Boolean | No | false | if true, show the aggregate scores of techniques and its subtechniques in the matrix | +| countUnscored | Boolean | No | false | if true, count the unscored techniques in the calculation of the aggregate score of techniques in the matrix | +| aggregateFunction | String | No | "average" | The aggregate function used to calculate aggregate scores for techniques in the matrix. Either "average", "min", "max" or "sum" | + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "versions": { + "attack": "11", + "navigator": "4.6.5", + "layer": "4.3" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false, + "showAggregateScores": true, + "countUnscored": true, + "aggregateFunction": "average" + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "score": 0, + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "score": 100, + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001", + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "divider": true + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + }, + { + "techniqueID": "T1098", + "tactic": "persistence", + "score": 80, + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "divider": true + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v4.4/layerformat.md b/site/mitre/layers/spec/v4.4/layerformat.md new file mode 100644 index 0000000..8743ac7 --- /dev/null +++ b/site/mitre/layers/spec/v4.4/layerformat.md @@ -0,0 +1,223 @@ +# ATT&CK® Navigator Layer File Format Definition +This document describes **Version 4.4** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| versions | Version object | No | | See Version object definition below | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "enterprise-attack", "mobile-attack", "ics-attack" | +| customDataURL | String | No | n/a | The URL of the custom Collection or STIX bundle from which the layer was built. | +| filters | Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects and Divider objects | No | | User defined metadata for this layer. See definition of Metadata objects and Divider objects below | +| links | Array of Link objects and Divider objects | No | | User assigned links for this layer. See definitions of Link objects and Divider objects below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| platforms | Array of String | No | all platforms within domain | Specifies the platforms within the technology domain - only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=enterprise-attack**: "PRE", "Windows", "Linux", "macOS", "Network", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mobile-attack**: "Android", "iOS".
**domain=ics-attack**: "Windows", "Control Server", "Data Historian", "Engineering Workstation", "Field Controller/RTU/PLC/IED", "Human-Machine Interface", "Input/Output Server", "Safety Instrumented System/Protection Relay" | + +## Version Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| attack | String | No | Current version of ATT&CK | ATT&CK version of this layer | +| navigator | String | Yes | | Must be at least "4.8.0" | +| layer | String | Yes | | Must be "4.4" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score - the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects and Divider objects | No | | User defined metadata for this technique. See definitions of Metadata objects and Divider objects below | +| links | Array of Link objects and Divider objects | No | | User assigned links for this technique. See definitions of Link objects and Divider objects below | +| showSubtechniques | boolean | No | false | if true, the sub-techniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls - this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | The name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +Note: Divider objects can be used alongside Metadata objects. + +## Link Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The label for the hyperlink | +| url | String | Yes | n/a | The URL to open when the label is clicked. Note: URLs must be prefixed with a protocol identifier (e.g. 'https://') | + +Note: Divider objects can be used alongside Link objects. + +## Divider Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| divider | Boolean | Yes | n/a | If true, display a horizontal separator in the Metadata tooltip or Link context menu where this object occurs in the list + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | +| showAggregateScores | Boolean | No | false | if true, show the aggregate scores of techniques and its subtechniques in the matrix | +| countUnscored | Boolean | No | false | if true, count the unscored techniques in the calculation of the aggregate score of techniques in the matrix | +| aggregateFunction | String | No | "average" | The aggregate function used to calculate aggregate scores for techniques in the matrix. Either "average", "min", "max" or "sum" | + +## Example +The following example illustrates the layer file format: +```json +{ + "name": "example layer", + "versions": { + "attack": "13", + "navigator": "4.8.2", + "layer": "4.4" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false, + "showAggregateScores": true, + "countUnscored": true, + "aggregateFunction": "average" + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "score": 0, + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "score": 100, + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001", + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "divider": true + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + }, + { + "techniqueID": "T1098", + "tactic": "persistence", + "score": 80, + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "divider": true + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` diff --git a/site/mitre/layers/spec/v4.5/layerformat.md b/site/mitre/layers/spec/v4.5/layerformat.md new file mode 100644 index 0000000..3f6bdb9 --- /dev/null +++ b/site/mitre/layers/spec/v4.5/layerformat.md @@ -0,0 +1,487 @@ +# ATT&CK® Navigator Layer File Format Definition +This document describes **Version 4.5** of the MITRE ATT&CK Navigator Layer file format. The ATT&CK Navigator stores layers as JSON, therefore this document defines the JSON properties in a layer file. Users are now able to download all open layers into a single file. These layers will be stored in a list. + +## Property Table + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| versions | Version object | No | | See Version object definition below | +| name | String | Yes | n/a | The name of the layer | +| description | String | No | "" | A free-form text field that describes the contents or intent of the layer | +| domain | String | Yes | n/a | Technology domain that this layer represents. Valid values are: "enterprise-attack", "mobile-attack", "ics-attack" | +| customDataURL | String | No | n/a | The URL of the custom Collection or STIX bundle from which the layer was built. | +| filters | Filter object | No | | See Filter object definition below +| sorting | Number | No | 0 | Specifies the ordering of the techniques within each tactic category as follows:
**0**: sort ascending alphabetically by technique name
**1**: sort descending alphabetically by technique name
**2**: sort ascending by technique score
**3**: sort descending by technique score | +| layout | Layout object | No | | See definition of Layout object below | +| hideDisabled | Boolean | No | false | Specifies whether techniques that have been disabled are still displayed (greyed-out) or omitted from the view as follows:
**true**: omit techniques marked as disabled from the view
**false**: include disabled techniques in the view but display as greyed-out | +| techniques | Array of Technique objects | No | | See definition of Technique object below | +| gradient | Gradient object | No | Red to Green, minValue=0, maxValue=100 | See definition of Gradient object below | +| legendItems | Array of LegendItem objects | no | | See definition of LegendItem object below | +| showTacticRowBackground | boolean | no | false | If true, the tactic row background color will be the value of the _tacticRowBackground_ field | +| tacticRowBackground | string | no | "#dddddd" | The tactic row background color | +| selectTechniquesAcrossTactics | boolean | no | true | If true, selecting a technique also selects all instances with the same technique ID. See also selectSubtechniquesWithParent and selectVisibleTechniques | +| selectSubtechniquesWithParent | boolean | no | true | If true, selecting a technique will also select all subtechniques of the technique. See also selectTechniquesAcrossTactics and selectVisibleTechniques | +| selectVisibleTechniques | boolean | no | false | If true, no hidden techniques will be selected. See also selectSubtechniquesWithParent and selectTechniquesAcrossTactics | +| metadata | Array of Metadata objects and Divider objects | No | | User defined metadata for this layer. See definition of Metadata objects and Divider objects below | +| links | Array of Link objects and Divider objects | No | | User assigned links for this layer. See definitions of Link objects and Divider objects below | + + +## Filter Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| platforms | Array of String | No | all platforms within domain | Specifies the platforms within the technology domain - only those techniques tagged with these platforms are to be displayed. Valid values are as follows:
**domain=enterprise-attack**: "PRE", "Windows", "Linux", "macOS", "Network", "AWS", "GCP", "Azure", "Azure AD", "Office 365", "SaaS"
**domain=mobile-attack**: "Android", "iOS".
**domain=ics-attack**: "Windows", "Control Server", "Data Historian", "Engineering Workstation", "Field Controller/RTU/PLC/IED", "Human-Machine Interface", "Input/Output Server", "Safety Instrumented System/Protection Relay" | + +## Version Object Properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| attack | String | No | Current version of ATT&CK | ATT&CK version of this layer | +| navigator | String | Yes | | Must be at least "4.9.0" | +| layer | String | Yes | | Must be "4.5" | + +## Technique Object properties + +Technique objects are used to store both techniques and subtechniques. The only difference in representation between a technique and a subtechnique is in the techniqueID field, which for subtechniques is the parent technique ID followed by the subtechnique-id suffix. + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| techniqueID | String | Yes | n/a | Unique identifier of the ATT&CK technique, e.g. "T####". For subtechniques, the format is "T####.###", where the substring to the left of the decimal is the parent technique ID, and the right-side substring is the subtechnique ID suffix. | +| tactic | String | No | n/a | Unique identifier of the ATT&CK technique's tactic, e.g. "lateral-movement". If the field is not present, the annotations for the technique will appear under every tactic the technique belongs to | +| comment | String | No | "" | Free-text field | +| enabled | Boolean | No | true | Specifies if the technique is considered enabled or disabled in this layer | +| score | Number | No | (unscored) | Optional numeric score assigned to this technique in the layer. If omitted, the technique is considered to be "unscored" meaning that it will not be assigned a color from the gradient by the Navigator | +| color | String | No | "" | Explicit color value assigned to the technique in this layer. Note that explicitly defined color overrides any color implied by the score - the Navigator will display the technique using the explicitly defined color | +| metadata | Array of Metadata objects and Divider objects | No | | User defined metadata for this technique. See definitions of Metadata objects and Divider objects below | +| links | Array of Link objects and Divider objects | No | | User assigned links for this technique. See definitions of Link objects and Divider objects below | +| showSubtechniques | boolean | No | false | if true, the sub-techniques under this technique will be shown by default. This field is only valid under a technique with subtechniques. Note that subtechniques can still be shown/hidden using the UI controls - this field is simply the default state. | + +## Gradient Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| colors | Array of String | Yes | n/a | Specifies the hexadecimal RGB color values that constitute the color spectrum in use. The array must contain at least two (2) values, corresponding to the minValue and maxValue scores | +| minValue | Number | Yes | n/a | Lower bound score of the gradient | +| maxValue | Number | Yes | n/a | Upper bound score of the gradient. *Note: maxValue must be > minValue* | + +## LegendItem Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The name of the legend item | +| color | String | Yes | n/a | The color of the legend item | + +## Metadata Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| name | String | Yes | n/a | The name of the metadata | +| value | String | Yes | n/a | The value of the metadata | + +Note: Divider objects can be used alongside Metadata objects. + +## Link Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| label | String | Yes | n/a | The label for the hyperlink | +| url | String | Yes | n/a | The URL to open when the label is clicked. Note: URLs must be prefixed with a protocol identifier (e.g. 'https://') | + +Note: Divider objects can be used alongside Link objects. + +## Divider Object properties + +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| divider | Boolean | Yes | n/a | If true, display a horizontal separator in the Metadata tooltip or Link context menu where this object occurs in the list + +## Layout Object properties +| Name | Type | Required? | Default Value (if not present) | Description | +| :------------- | :------------- | :------------- | :------------- | :------------- | +| layout | String | No | "side' | The layout of the matrix. Either "side", "flat" or "mini" | +| showID | Boolean | No | false | if true, show the ATT&CK ID of techniques and tactics in the matrix | +| showName | Boolean | No | true | if true, show the name of techniques and tactics in the matrix | +| showAggregateScores | Boolean | No | false | if true, show the aggregate scores of techniques and its subtechniques in the matrix | +| countUnscored | Boolean | No | false | if true, count the unscored techniques in the calculation of the aggregate score of techniques in the matrix | +| aggregateFunction | String | No | "average" | The aggregate function used to calculate aggregate scores for techniques in the matrix. Either "average", "min", "max" or "sum" | +| expandedSubtechniques | String | No | "none" | How to display the subtechniques. Either "none", "all" or "annotated" | + +## Example +The following example illustrates the layer file format of a single layer: +```json +{ + "name": "example layer", + "versions": { + "attack": "13", + "navigator": "5.1.0", + "layer": "4.5" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false, + "showAggregateScores": true, + "countUnscored": true, + "aggregateFunction": "average", + "expandedSubtechniques": "annotated" + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "score": 0, + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "score": 100, + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001", + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "divider": true + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + }, + { + "techniqueID": "T1098", + "tactic": "persistence", + "score": 80, + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "selectVisibleTechniques": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "divider": true + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] +} +``` + +The following example illustrates the layer file format of multiple layers. The layers are stored in a list: +```json +[ + { + "name": "example layer", + "versions": { + "attack": "14", + "navigator": "5.1.0", + "layer": "4.5" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "showName": true, + "showID": false, + "showAggregateScores": true, + "countUnscored": true, + "aggregateFunction": "average" + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "score": 0, + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "showSubtechniques": true + }, + { + "techniqueID": "T1110.001", + "score": 100, + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001", + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic" + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "enabled": false + }, + { + "techniqueID": "T1053", + "tactic": "privilege-escalation", + "metadata": [ + { + "name": "T1053 metadata1", + "value": "T1053 metadata1 value" + }, + { + "divider": true + }, + { + "name": "T1053 metadata2", + "value": "T1053 metadata2 value" + } + ] + }, + { + "techniqueID": "T1098", + "tactic": "persistence", + "score": 80, + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ] + } + ], + "gradient": { + "colors": [ + "#ff6666", + "#ffe766", + "#8ec843" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "label": "Legend Item Label", + "color": "#FF00FF" + } + ], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "selectVisibleTechniques": false, + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "divider": true + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ] + }, + { + "name": "example layer", + "versions": { + "attack": "14", + "navigator": "5.1.0", + "layer": "4.5" + }, + "domain": "enterprise-attack", + "description": "hello, world", + "filters": { + "platforms": [ + "Windows", + "macOS" + ] + }, + "sorting": 2, + "layout": { + "layout": "side", + "aggregateFunction": "average", + "showID": false, + "showName": true, + "showAggregateScores": true, + "countUnscored": true + }, + "hideDisabled": false, + "techniques": [ + { + "techniqueID": "T1110", + "tactic": "credential-access", + "score": 0, + "color": "#fd8d3c", + "comment": "This is a comment for technique T1110", + "enabled": true, + "metadata": [], + "links": [], + "showSubtechniques": false + }, + { + "techniqueID": "T1110.001", + "tactic": "credential-access", + "score": 100, + "color": "", + "comment": "This is a comment for T1110.001 - the first subtechnique of technique T1110.001", + "enabled": true, + "metadata": [], + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ], + "showSubtechniques": false + }, + { + "techniqueID": "T1134", + "tactic": "defense-evasion", + "score": 75, + "color": "", + "comment": "this is a comment for T1134 which is only applied on the defense-evasion tactic", + "enabled": true, + "metadata": [], + "links": [], + "showSubtechniques": false + }, + { + "techniqueID": "T1078", + "tactic": "discovery", + "color": "", + "comment": "", + "enabled": false, + "metadata": [], + "links": [], + "showSubtechniques": false + }, + { + "techniqueID": "T1098", + "tactic": "persistence", + "score": 80, + "color": "", + "comment": "", + "enabled": true, + "metadata": [], + "links": [ + { + "label": "Navigator GitHub", + "url": "https://github.com/mitre-attack/attack-navigator" + } + ], + "showSubtechniques": false + }, + { + "techniqueID": "T1497", + "tactic": "discovery", + "color": "", + "comment": "", + "enabled": true, + "metadata": [], + "links": [], + "showSubtechniques": true + } + ], + "gradient": { + "colors": [ + "#ff6666ff", + "#ffe766ff", + "#8ec843ff" + ], + "minValue": 0, + "maxValue": 100 + }, + "legendItems": [ + { + "color": "#FF00FF", + "label": "Legend Item Label" + } + ], + "metadata": [ + { + "name": "layer metadata 1", + "value": "layer metadata 1 value" + }, + { + "divider": true + }, + { + "name": "layer metadata 2", + "value": "layer metadata 2 value" + } + ], + "links": [], + "showTacticRowBackground": true, + "tacticRowBackground": "#dddddd", + "selectTechniquesAcrossTactics": false, + "selectSubtechniquesWithParent": false, + "selectVisibleTechniques": false + } +] +``` \ No newline at end of file diff --git a/site/mitre/main.js b/site/mitre/main.js new file mode 100644 index 0000000..85c2786 --- /dev/null +++ b/site/mitre/main.js @@ -0,0 +1,16232 @@ +(self["webpackChunknav_app"] = self["webpackChunknav_app"] || []).push([["main"],{ + +/***/ 20092: +/*!**********************************!*\ + !*** ./src/app/app.component.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppComponent: () => (/* binding */ AppComponent) +/* harmony export */ }); +/* harmony import */ var _tabs_tabs_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tabs/tabs.component */ 10154); +/* harmony import */ var _utils_globals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/globals */ 98552); +/* harmony import */ var _utils_cookies__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/cookies */ 71555); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./services/config.service */ 43696); +/* harmony import */ var _services_icons_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./services/icons.service */ 87936); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/platform-browser */ 80436); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/common */ 60316); + + + + + + + + + +class AppComponent { + promptNavAway($event) { + if (!this.configService.getFeature('leave_site_dialog')) return; + //this text only shows in the data, not visible to user as far as I can tell + //however, if it's not included the window doesn't open. + $event.returnValue = 'Are you sure you want to navigate away? Your data may be lost!'; + } + constructor(configService, iconsService, titleService) { + this.configService = configService; + this.iconsService = iconsService; + this.titleService = titleService; + this.navVersion = _utils_globals__WEBPACK_IMPORTED_MODULE_1__.navVersion; + this.title = 'ATT&CK® Navigator'; + Array.prototype.includes = function (value) { + for (let i = 0; i < this.length; i++) { + if (this[i] === value) return true; + } + return false; + }; + if ((0,_utils_cookies__WEBPACK_IMPORTED_MODULE_2__.hasCookie)('is_user_theme_dark') && (0,_utils_cookies__WEBPACK_IMPORTED_MODULE_2__.getCookie)('is_user_theme_dark') === 'true') { + this.user_theme = 'theme-override-dark'; + } else if ((0,_utils_cookies__WEBPACK_IMPORTED_MODULE_2__.getCookie)('is_user_theme_dark') === 'false') { + this.user_theme = 'theme-override-light'; + } else { + this.user_theme = 'theme-use-system'; + } + } + ngOnInit() { + this.iconsService.registerIcons(); + this.titleService.setTitle(this.title); + } + themeChangeHandler(theme) { + if (theme === 'system') { + if ((0,_utils_cookies__WEBPACK_IMPORTED_MODULE_2__.hasCookie)('is_user_theme_dark')) (0,_utils_cookies__WEBPACK_IMPORTED_MODULE_2__.deleteCookie)('is_user_theme_dark'); + this.user_theme = 'theme-use-system'; + } else { + this.user_theme = theme === 'dark' ? 'theme-override-dark' : 'theme-override-light'; + (0,_utils_cookies__WEBPACK_IMPORTED_MODULE_2__.setCookie)('is_user_theme_dark', theme === 'dark' ? 'true' : 'false', 180); + } + } + static #_ = this.ɵfac = function AppComponent_Factory(t) { + return new (t || AppComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_3__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_icons_service__WEBPACK_IMPORTED_MODULE_4__.IconsService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_6__.Title)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({ + type: AppComponent, + selectors: [["app-root"]], + viewQuery: function AppComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵviewQuery"](_tabs_tabs_component__WEBPACK_IMPORTED_MODULE_0__.TabsComponent, 5); + } + if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵloadQuery"]()) && (ctx.tabsComponent = _t.first); + } + }, + hostBindings: function AppComponent_HostBindings(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("beforeunload", function AppComponent_beforeunload_HostBindingHandler($event) { + return ctx.promptNavAway($event); + }, false, _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresolveWindow"]); + } + }, + decls: 6, + vars: 3, + consts: [[3, "ngClass"], [1, "app-container"], [1, "nav-app"], [3, "onUserThemeChange", "userTheme"], [1, "version-footer", 3, "click"]], + template: function AppComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "tabs", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("onUserThemeChange", function AppComponent_Template_tabs_onUserThemeChange_3_listener($event) { + return ctx.themeChangeHandler($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "button", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function AppComponent_Template_button_click_4_listener() { + return ctx.tabsComponent.openDialog("changelog"); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", ctx.user_theme); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("userTheme", ctx.user_theme); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate1"]("MITRE ATT&CK\u00AE Navigator v", ctx.navVersion, ""); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_7__.NgClass, _tabs_tabs_component__WEBPACK_IMPORTED_MODULE_0__.TabsComponent], + styles: ["\n\n\n\n\n\n\n\n\n\n.app-container[_ngcontent-%COMP%] {\n height: 100vh;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system[_ngcontent-%COMP%] .app-container[_ngcontent-%COMP%] {\n background-color: white;\n }\n}\n.theme-override-light[_ngcontent-%COMP%] .app-container[_ngcontent-%COMP%] {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system[_ngcontent-%COMP%] .app-container[_ngcontent-%COMP%] {\n background-color: #1a1a23;\n }\n}\n.theme-override-dark[_ngcontent-%COMP%] .app-container[_ngcontent-%COMP%] {\n background-color: #1a1a23;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] {\n background-color: white;\n }\n}\n.theme-override-light[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] {\n background-color: black;\n }\n}\n.theme-override-dark[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] {\n background-color: black;\n}\n.nav-app[_ngcontent-%COMP%] tabs[_ngcontent-%COMP%] {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif;\n font-size: 9pt;\n}\n.nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%] {\n font-size: 7pt;\n border: none;\n background-color: transparent;\n text-align: right;\n margin-left: 16px;\n padding: 0;\n display: block;\n position: fixed;\n bottom: 16px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%] {\n color: #39434c;\n }\n}\n.theme-override-light[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%] {\n color: #39434c;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%] {\n color: #fa6341;\n }\n}\n.theme-override-dark[_ngcontent-%COMP%] .nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%] {\n color: #fa6341;\n}\n.nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n@media print {\n .nav-app[_ngcontent-%COMP%] .version-footer[_ngcontent-%COMP%] {\n display: none;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDUEE7RUFFSSxhQUFBO0FBT0o7QUQrS1E7RUFISjtJQUlRLHVCQ3hMb0M7RUFZOUM7QUFDRjtBRDhLSTtFQUdJLHVCQzlMd0M7QUFnQmhEO0FEMExRO0VBSEo7SUFJUSx5QkMzTWlEO0VBb0IzRDtBQUNGO0FEeUxJO0VBR0kseUJDak5xRDtBQXdCN0Q7O0FEK0pRO0VBSEo7SUFJUSx1QkNuTG9DO0VBd0I5QztBQUNGO0FENkpJO0VBR0ksdUJDekx3QztBQTRCaEQ7QUR5S1E7RUFISjtJQUlRLHVCQ3RNa0Q7RUFnQzVEO0FBQ0Y7QUR3S0k7RUFHSSx1QkM1TXNEO0FBb0M5RDtBQWxDSTtFQUNJLHdJQUFBO0VBQ0EsY0FBQTtBQW9DUjtBQWpDSTtFQUVJLGNBQUE7RUFDQSxZQUFBO0VBQ0EsNkJBQUE7RUFDQSxpQkFBQTtFQUNBLGlCQUFBO0VBQ0EsVUFBQTtFQUNBLGNBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtBQWtDUjtBRCtIUTtFQUhKO0lBSVEsY0MzSzZCO0VBK0N2QztBQUNGO0FEOEhJO0VBR0ksY0NqTGlDO0FBbUR6QztBRDBJUTtFQUhKO0lBSVEsY0M5TDhDO0VBdUR4RDtBQUNGO0FEeUlJO0VBR0ksY0NwTWtEO0FBMkQxRDtBQWpEUTtFQUNJLDBCQUFBO0VBQ0EsZUFBQTtBQW1EWjtBQWpEUTtFQWZKO0lBZ0JRLGFBQUE7RUFvRFY7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi9jb2xvcnMuc2Nzcyc7XG5cbi5hcHAtY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKGJvZHkpLCBjb2xvcihkYXJrLTEpKTtcbiAgICBoZWlnaHQ6IDEwMHZoO1xufVxuXG4ubmF2LWFwcCB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihsaWdodCksIGRhcmtlbihjb2xvcihkYXJrKSwgOCUpKTtcblxuICAgIHRhYnMge1xuICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIE94eWdlbiwgVWJ1bnR1LCBDYW50YXJlbGwsICdPcGVuIFNhbnMnLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmO1xuICAgICAgICBmb250LXNpemU6IDlwdDtcbiAgICB9XG5cbiAgICAudmVyc2lvbi1mb290ZXIge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCBvbi1jb2xvcihsaWdodCksIG9uLWNvbG9yKGRhcmstMikpO1xuICAgICAgICBmb250LXNpemU6IDdwdDtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAxNnB4O1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBib3R0b206IDE2cHg7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIH1cbiAgICAgICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"] + }); +} + +/***/ }), + +/***/ 50635: +/*!*******************************!*\ + !*** ./src/app/app.module.ts ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppModule: () => (/* binding */ AppModule) +/* harmony export */ }); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @angular/platform-browser */ 80436); +/* harmony import */ var _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @angular/platform-browser/animations */ 43835); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @angular/material/input */ 95541); +/* harmony import */ var _angular_material_select__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @angular/material/select */ 25175); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @angular/material/progress-spinner */ 41134); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); +/* harmony import */ var _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @angular/material/checkbox */ 97024); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @angular/material/snack-bar */ 3347); +/* harmony import */ var _angular_material_menu__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @angular/material/menu */ 31034); +/* harmony import */ var _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @angular/material/expansion */ 19322); +/* harmony import */ var _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! @angular/material/sidenav */ 17049); +/* harmony import */ var ngx_color_picker__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ngx-color-picker */ 36245); +/* harmony import */ var ngx_drag_drop__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ngx-drag-drop */ 53935); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @angular/common/http */ 46443); +/* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app.component */ 20092); +/* harmony import */ var _datatable_data_table_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./datatable/data-table.component */ 75193); +/* harmony import */ var _tabs_tabs_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tabs/tabs.component */ 10154); +/* harmony import */ var _help_help_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./help/help.component */ 12492); +/* harmony import */ var _svg_export_svg_export_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./svg-export/svg-export.component */ 88688); +/* harmony import */ var _matrix_technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./matrix/technique-cell/technique-cell.component */ 62460); +/* harmony import */ var _matrix_matrix_side_matrix_side_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./matrix/matrix-side/matrix-side.component */ 31132); +/* harmony import */ var _matrix_matrix_flat_matrix_flat_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./matrix//matrix-flat/matrix-flat.component */ 91388); +/* harmony import */ var _matrix_matrix_mini_matrix_mini_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./matrix//matrix-mini/matrix-mini.component */ 31524); +/* harmony import */ var _matrix_technique_cell_tooltip_tooltip_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./matrix/technique-cell/tooltip/tooltip.component */ 58892); +/* harmony import */ var _search_and_multiselect_search_and_multiselect_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./search-and-multiselect/search-and-multiselect.component */ 38514); +/* harmony import */ var _matrix_technique_cell_contextmenu_contextmenu_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./matrix/technique-cell/contextmenu/contextmenu.component */ 60572); +/* harmony import */ var _matrix_tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./matrix/tactic-cell/tactic-cell.component */ 39132); +/* harmony import */ var _version_upgrade_version_upgrade_component__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./version-upgrade/version-upgrade.component */ 96412); +/* harmony import */ var _sidebar_sidebar_component__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sidebar/sidebar.component */ 7244); +/* harmony import */ var _layer_upgrade_layer_upgrade_component__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./layer-upgrade/layer-upgrade.component */ 34048); +/* harmony import */ var _layer_upgrade_changelog_cell_changelog_cell_component__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./layer-upgrade/changelog-cell/changelog-cell.component */ 56559); +/* harmony import */ var _angular_material_card__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! @angular/material/card */ 53777); +/* harmony import */ var _angular_material_divider__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! @angular/material/divider */ 14102); +/* harmony import */ var _angular_material_stepper__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! @angular/material/stepper */ 56622); +/* harmony import */ var _angular_material_paginator__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! @angular/material/paginator */ 24624); +/* harmony import */ var _layer_settings_layer_settings_component__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./layer-settings/layer-settings.component */ 89616); +/* harmony import */ var ngx_markdown__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ngx-markdown */ 8329); +/* harmony import */ var _layer_information_layer_information_component__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./layer-information/layer-information.component */ 20880); +/* harmony import */ var _changelog_changelog_component__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./changelog/changelog.component */ 88492); +/* harmony import */ var _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! @angular/material/tabs */ 38223); +/* harmony import */ var _list_input_list_input_component__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./list-input/list-input.component */ 54120); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./services/config.service */ 43696); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! @angular/material/form-field */ 24950); +/* harmony import */ var _angular_material_core__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! @angular/material/core */ 74646); + + + +// material + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class AppModule { + static #_ = this.ɵfac = function AppModule_Factory(t) { + return new (t || AppModule)(); + }; + static #_2 = this.ɵmod = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_22__["ɵɵdefineNgModule"]({ + type: AppModule, + bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_0__.AppComponent] + }); + static #_3 = this.ɵinj = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_22__["ɵɵdefineInjector"]({ + providers: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_23__.Title, _services_config_service__WEBPACK_IMPORTED_MODULE_21__.ConfigService, { + provide: _angular_core__WEBPACK_IMPORTED_MODULE_22__.APP_INITIALIZER, + useFactory: configService => { + return () => configService.loadConfig(); + }, + deps: [_services_config_service__WEBPACK_IMPORTED_MODULE_21__.ConfigService], + multi: true + }], + imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_23__.BrowserModule, _angular_common_http__WEBPACK_IMPORTED_MODULE_24__.HttpClientModule, _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_25__.BrowserAnimationsModule, _angular_material_select__WEBPACK_IMPORTED_MODULE_26__.MatSelectModule, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.FormsModule, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.ReactiveFormsModule, _angular_material_input__WEBPACK_IMPORTED_MODULE_28__.MatInputModule, _angular_material_button__WEBPACK_IMPORTED_MODULE_29__.MatButtonModule, _angular_material_icon__WEBPACK_IMPORTED_MODULE_30__.MatIconModule, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_31__.MatProgressSpinnerModule, _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_32__.MatCheckboxModule, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_33__.MatTooltipModule, _angular_material_menu__WEBPACK_IMPORTED_MODULE_34__.MatMenuModule, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionModule, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_36__.MatDialogModule, _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_37__.MatSnackBarModule, ngx_color_picker__WEBPACK_IMPORTED_MODULE_38__.ColorPickerModule, ngx_drag_drop__WEBPACK_IMPORTED_MODULE_39__.DndModule, _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_40__.MatSidenavModule, _angular_material_card__WEBPACK_IMPORTED_MODULE_41__.MatCardModule, _angular_material_divider__WEBPACK_IMPORTED_MODULE_42__.MatDividerModule, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_43__.MatStepperModule, _angular_material_paginator__WEBPACK_IMPORTED_MODULE_44__.MatPaginatorModule, ngx_markdown__WEBPACK_IMPORTED_MODULE_45__.MarkdownModule.forRoot(), _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabsModule, _angular_material_select__WEBPACK_IMPORTED_MODULE_26__.MatSelectModule, _angular_material_input__WEBPACK_IMPORTED_MODULE_28__.MatInputModule, _angular_material_button__WEBPACK_IMPORTED_MODULE_29__.MatButtonModule, _angular_material_icon__WEBPACK_IMPORTED_MODULE_30__.MatIconModule, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_33__.MatTooltipModule, _angular_material_menu__WEBPACK_IMPORTED_MODULE_34__.MatMenuModule, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionModule, _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabsModule] + }); +} +(function () { + (typeof ngJitMode === "undefined" || ngJitMode) && _angular_core__WEBPACK_IMPORTED_MODULE_22__["ɵɵsetNgModuleScope"](AppModule, { + declarations: [_app_component__WEBPACK_IMPORTED_MODULE_0__.AppComponent, _datatable_data_table_component__WEBPACK_IMPORTED_MODULE_1__.DataTableComponent, _tabs_tabs_component__WEBPACK_IMPORTED_MODULE_2__.TabsComponent, _help_help_component__WEBPACK_IMPORTED_MODULE_3__.HelpComponent, _svg_export_svg_export_component__WEBPACK_IMPORTED_MODULE_4__.SvgExportComponent, _matrix_technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_5__.TechniqueCellComponent, _matrix_matrix_side_matrix_side_component__WEBPACK_IMPORTED_MODULE_6__.MatrixSideComponent, _matrix_matrix_flat_matrix_flat_component__WEBPACK_IMPORTED_MODULE_7__.MatrixFlatComponent, _matrix_matrix_mini_matrix_mini_component__WEBPACK_IMPORTED_MODULE_8__.MatrixMiniComponent, _matrix_technique_cell_tooltip_tooltip_component__WEBPACK_IMPORTED_MODULE_9__.TooltipComponent, _search_and_multiselect_search_and_multiselect_component__WEBPACK_IMPORTED_MODULE_10__.SearchAndMultiselectComponent, _matrix_technique_cell_contextmenu_contextmenu_component__WEBPACK_IMPORTED_MODULE_11__.ContextmenuComponent, _matrix_tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_12__.TacticCellComponent, _version_upgrade_version_upgrade_component__WEBPACK_IMPORTED_MODULE_13__.VersionUpgradeComponent, _sidebar_sidebar_component__WEBPACK_IMPORTED_MODULE_14__.SidebarComponent, _layer_upgrade_layer_upgrade_component__WEBPACK_IMPORTED_MODULE_15__.LayerUpgradeComponent, _layer_upgrade_changelog_cell_changelog_cell_component__WEBPACK_IMPORTED_MODULE_16__.ChangelogCellComponent, _layer_information_layer_information_component__WEBPACK_IMPORTED_MODULE_18__.LayerInformationComponent, _changelog_changelog_component__WEBPACK_IMPORTED_MODULE_19__.ChangelogComponent, _list_input_list_input_component__WEBPACK_IMPORTED_MODULE_20__.ListInputComponent, _layer_settings_layer_settings_component__WEBPACK_IMPORTED_MODULE_17__.LayerSettingsComponent], + imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_23__.BrowserModule, _angular_common_http__WEBPACK_IMPORTED_MODULE_24__.HttpClientModule, _angular_platform_browser_animations__WEBPACK_IMPORTED_MODULE_25__.BrowserAnimationsModule, _angular_material_select__WEBPACK_IMPORTED_MODULE_26__.MatSelectModule, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.FormsModule, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.ReactiveFormsModule, _angular_material_input__WEBPACK_IMPORTED_MODULE_28__.MatInputModule, _angular_material_button__WEBPACK_IMPORTED_MODULE_29__.MatButtonModule, _angular_material_icon__WEBPACK_IMPORTED_MODULE_30__.MatIconModule, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_31__.MatProgressSpinnerModule, _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_32__.MatCheckboxModule, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_33__.MatTooltipModule, _angular_material_menu__WEBPACK_IMPORTED_MODULE_34__.MatMenuModule, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionModule, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_36__.MatDialogModule, _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_37__.MatSnackBarModule, ngx_color_picker__WEBPACK_IMPORTED_MODULE_38__.ColorPickerModule, ngx_drag_drop__WEBPACK_IMPORTED_MODULE_39__.DndModule, _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_40__.MatSidenavModule, _angular_material_card__WEBPACK_IMPORTED_MODULE_41__.MatCardModule, _angular_material_divider__WEBPACK_IMPORTED_MODULE_42__.MatDividerModule, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_43__.MatStepperModule, _angular_material_paginator__WEBPACK_IMPORTED_MODULE_44__.MatPaginatorModule, ngx_markdown__WEBPACK_IMPORTED_MODULE_45__.MarkdownModule, _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabsModule], + exports: [_angular_material_select__WEBPACK_IMPORTED_MODULE_26__.MatSelectModule, _angular_material_input__WEBPACK_IMPORTED_MODULE_28__.MatInputModule, _angular_material_button__WEBPACK_IMPORTED_MODULE_29__.MatButtonModule, _angular_material_icon__WEBPACK_IMPORTED_MODULE_30__.MatIconModule, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_33__.MatTooltipModule, _angular_material_menu__WEBPACK_IMPORTED_MODULE_34__.MatMenuModule, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionModule, _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabsModule] + }); +})(); +_angular_core__WEBPACK_IMPORTED_MODULE_22__["ɵɵsetComponentScope"](_tabs_tabs_component__WEBPACK_IMPORTED_MODULE_2__.TabsComponent, function () { + return [_angular_common__WEBPACK_IMPORTED_MODULE_47__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_47__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_47__.NgIf, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_48__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_48__.MatLabel, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_48__.MatHint, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_48__.MatSuffix, _angular_material_select__WEBPACK_IMPORTED_MODULE_26__.MatSelect, _angular_material_core__WEBPACK_IMPORTED_MODULE_49__.MatOption, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.NumberValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.RequiredValidator, _angular_forms__WEBPACK_IMPORTED_MODULE_27__.NgModel, _angular_material_input__WEBPACK_IMPORTED_MODULE_28__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_29__.MatButton, _angular_material_button__WEBPACK_IMPORTED_MODULE_29__.MatIconButton, _angular_material_icon__WEBPACK_IMPORTED_MODULE_30__.MatIcon, _angular_material_checkbox__WEBPACK_IMPORTED_MODULE_32__.MatCheckbox, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_33__.MatTooltip, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatAccordion, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionPanel, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionPanelHeader, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionPanelTitle, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_35__.MatExpansionPanelDescription, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_36__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_36__.MatDialogTitle, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_36__.MatDialogContent, _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabNav, _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabNavPanel, _angular_material_tabs__WEBPACK_IMPORTED_MODULE_46__.MatTabLink, _datatable_data_table_component__WEBPACK_IMPORTED_MODULE_1__.DataTableComponent]; +}, []); + +/***/ }), + +/***/ 88492: +/*!**************************************************!*\ + !*** ./src/app/changelog/changelog.component.ts ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ChangelogComponent: () => (/* binding */ ChangelogComponent) +/* harmony export */ }); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var ngx_markdown__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ngx-markdown */ 8329); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/material/button */ 84175); + + + + + +const _c0 = ["markdownElement"]; +class ChangelogComponent { + constructor(dialog, markdownService, data) { + this.dialog = dialog; + this.markdownService = markdownService; + this.data = data; + // intentionally left blank + } + static #_ = this.ɵfac = function ChangelogComponent_Factory(t) { + return new (t || ChangelogComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialog), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](ngx_markdown__WEBPACK_IMPORTED_MODULE_2__.MarkdownService), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MAT_DIALOG_DATA)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ + type: ChangelogComponent, + selectors: [["app-changelog"]], + viewQuery: function ChangelogComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵviewQuery"](_c0, 5); + } + if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵloadQuery"]()) && (ctx.markdownElement = _t.first); + } + }, + decls: 9, + vars: 1, + consts: [["markdownElement", ""], [1, "changelog-dialog", "mat-dialog"], ["mat-dialog-title", ""], [1, "content", "markdown"], [3, "src"], ["mat-button", "", "mat-dialog-close", ""]], + template: function ChangelogComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 1)(1, "h1", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](2, "Changelog"); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](3, "mat-dialog-content", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](4, "markdown", 4, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](6, "mat-dialog-actions")(7, "button", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](8, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("src", "./CHANGELOG.md"); + } + }, + dependencies: [_angular_material_button__WEBPACK_IMPORTED_MODULE_3__.MatButton, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogTitle, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogActions, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_1__.MatDialogContent, ngx_markdown__WEBPACK_IMPORTED_MODULE_2__.MarkdownComponent], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 59294: +/*!**********************************************!*\ + !*** ./src/app/classes/context-menu-item.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ContextMenuItem: () => (/* binding */ ContextMenuItem) +/* harmony export */ }); +class ContextMenuItem { + constructor(label, url, subtechnique_url = null) { + this.label = label; + this.url = url; + this.subtechnique_url = subtechnique_url; + } + getReplacedURL(technique, tactic) { + if (this.subtechnique_url && technique.isSubtechnique) { + return this.subtechnique_url.replace(/{{parent_technique_attackID}}/g, technique.parent.attackID).replace(/{{parent_technique_stixID}}/g, technique.parent.id).replace(/{{parent_technique_name}}/g, technique.parent.name.replace(/ /g, '-').toLowerCase()).replace(/{{subtechnique_attackID}}/g, technique.attackID).replace(/{{subtechnique_attackID_suffix}}/g, technique.attackID.split('.')[1]).replace(/{{subtechnique_stixID}}/g, technique.id).replace(/{{subtechnique_name}}/g, technique.name.replace(/ /g, '-').toLowerCase()).replace(/{{tactic_attackID}}/g, tactic.attackID).replace(/{{tactic_stixID}}/g, tactic.id).replace(/{{tactic_name}}/g, tactic.shortname); + } else { + return this.url.replace(/{{technique_attackID}}/g, technique.attackID).replace(/{{technique_stixID}}/g, technique.id).replace(/{{technique_name}}/g, technique.name.replace(/ /g, '-').toLowerCase()).replace(/{{tactic_attackID}}/g, tactic.attackID).replace(/{{tactic_stixID}}/g, tactic.id).replace(/{{tactic_name}}/g, tactic.shortname); + } + } +} + +/***/ }), + +/***/ 40021: +/*!***********************************!*\ + !*** ./src/app/classes/domain.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Domain: () => (/* binding */ Domain) +/* harmony export */ }); +class Domain { + get tactics() { + let tactics = []; + for (let matrix of this.matrices) { + tactics = tactics.concat(matrix.tactics); + } + return tactics; + } + constructor(domain_identifier, name, version, urls) { + this.urls = []; + this.taxii_url = ''; + this.taxii_collection = ''; + this.dataLoaded = false; + this.dataLoadedCallbacks = []; + // this should only be enabled if the user loads custom data via URL + this.isCustom = false; + this.matrices = []; + this.techniques = []; + this.platforms = []; // platforms defined on techniques and software of the domain + this.subtechniques = []; + this.software = []; + this.campaigns = []; + this.assets = []; + this.dataComponents = []; + this.dataSources = new Map(); // Map data source ID to name and urls to be used by data components + this.groups = []; + this.mitigations = []; + this.notes = []; + this.relationships = { + // subtechnique subtechnique-of technique + // ID of technique to [] of subtechnique IDs + subtechniques_of: new Map(), + // data component related to technique + // ID of data component to [] of technique IDs + component_rel: new Map(), + // group uses technique + // ID of group to [] of technique IDs + group_uses: new Map(), + // software uses technique + // ID of software to [] of technique IDs + software_uses: new Map(), + // campaign uses technique + // ID of campaign to [] of technique IDs + campaign_uses: new Map(), + // campaigns attributed to group + // ID of group to [] of campaign IDs + campaigns_attributed_to: new Map(), + // mitigation mitigates technique + // ID of mitigation to [] of technique IDs + mitigates: new Map(), + // object is revoked-by object + // ID of object to ID of revoking object + revoked_by: new Map(), + // technique targets asset + // ID of asset to [] of technique IDs + targeted_assets: new Map() + }; + this.id = `${domain_identifier}-${version.number}`; + this.domain_identifier = domain_identifier; + this.name = name; + this.version = version; + if (urls) this.urls = urls; + } + /** + * Get the version number for this domain + */ + getVersion() { + return this.version.number; + } + executeCallbacks() { + for (let callback of this.dataLoadedCallbacks) { + callback(); + } + } +} + +/***/ }), + +/***/ 37107: +/*!***********************************!*\ + !*** ./src/app/classes/filter.ts ***! + \***********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Filter: () => (/* binding */ Filter) +/* harmony export */ }); +class Filter { + constructor() { + this.platforms = { + selection: [], + options: [] + }; + } + /** + * Initialize the platform options according to the data in the domain + * @param {Domain} domain the domain to parse for platform options + */ + initPlatformOptions(domain) { + this.platforms.options = JSON.parse(JSON.stringify(domain.platforms)); + if (!this.platforms.selection.length) { + // prevent overwriting current selection + this.platforms.selection = JSON.parse(JSON.stringify(domain.platforms)); + } + } + /** + * toggle the given value in the given filter + * @param {*} filterName the name of the filter + * @param {*} value the value to toggle + */ + toggleInFilter(filterName, value) { + if (!this[filterName].options.includes(value)) { + console.error('not a valid option to toggle', value, this[filterName]); + return; + } + if (this[filterName].selection.includes(value)) { + let index = this[filterName].selection.indexOf(value); + this[filterName].selection.splice(index, 1); + } else { + this[filterName].selection.push(value); + } + } + /** + * determine if the given value is active in the filter + * @param {*} filterName the name of the filter + * @param {*} value the value to determine + * @returns {boolean} true if value is currently enabled in the filter + */ + inFilter(filterName, value) { + return this[filterName].selection.includes(value); + } + /** + * Return the string representation of this filter + * @return stringified filter + */ + serialize() { + return JSON.stringify({ + platforms: this.platforms.selection + }); + } + /** + * Replace the properties of this object with those of the given serialized filter + * @param rep filter object + */ + deserialize(rep) { + let isStringArray = function (arr) { + for (let item of arr) { + if (typeof item !== 'string') { + console.error('TypeError:', item, '(', typeof item, ')', 'is not a string'); + return false; + } + } + return true; + }; + if (rep.platforms) { + if (isStringArray(rep.platforms)) { + let backwards_compatibility_mappings = { + //backwards compatibility with older layers + android: 'Android', + ios: 'iOS', + windows: 'Windows', + linux: 'Linux', + mac: 'macOS', + AWS: 'IaaS', + GCP: 'IaaS', + Azure: 'IaaS' + }; + const selection = new Set(); + rep.platforms.forEach(function (platform) { + if (platform in backwards_compatibility_mappings) selection.add(backwards_compatibility_mappings[platform]);else selection.add(platform); + }); + this.platforms.selection = Array.from(selection); + } else console.error('TypeError: filter platforms field is not a string[]'); + } + } +} + +/***/ }), + +/***/ 91145: +/*!*************************************!*\ + !*** ./src/app/classes/gradient.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Gcolor: () => (/* binding */ Gcolor), +/* harmony export */ Gradient: () => (/* binding */ Gradient) +/* harmony export */ }); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinycolor2 */ 62002); +/* harmony import */ var tinygradient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinygradient */ 63883); +/* harmony import */ var tinygradient__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(tinygradient__WEBPACK_IMPORTED_MODULE_1__); + + +class Gradient { + constructor() { + // gradient class used by ViewModels + // official colors used in gradients: + this.colors = [new Gcolor('red'), new Gcolor('green')]; //current colors + this.options = ['#ffffff', '#ff6666', '#ffaf66', '#ffe766', '#8ec843', '#66b1ff', '#ff66f4']; //possible colors + this.minValue = 0; + this.maxValue = 100; + // presets in dropdown menu + this.presets = { + redgreen: [new Gcolor('#ff6666'), new Gcolor('#ffe766'), new Gcolor('#8ec843')], + greenred: [new Gcolor('#8ec843'), new Gcolor('#ffe766'), new Gcolor('#ff6666')], + bluered: [new Gcolor('#66b1ff'), new Gcolor('#ff66f4'), new Gcolor('#ff6666')], + redblue: [new Gcolor('#ff6666'), new Gcolor('#ff66f4'), new Gcolor('#66b1ff')], + transparentblue: [new Gcolor('#ffffff00'), new Gcolor('#66b1ff')], + transparentred: [new Gcolor('#ffffff00'), new Gcolor('#ff6666')] + }; + this.setGradientPreset('redgreen'); + } + /** + * Create a string version of this gradient + * @return string version of gradient + */ + serialize() { + let colorList = []; + this.colors.forEach(function (gColor) { + let hexstring = (0,tinycolor2__WEBPACK_IMPORTED_MODULE_0__["default"])(gColor.color).toHex8String(); // include the alpha channel + colorList.push(hexstring); + }); + let rep = { + colors: colorList, + minValue: this.minValue, + maxValue: this.maxValue + }; + return JSON.stringify(rep, null, '\t'); + } + /** + * Restore this gradient from the given serialized representation + * @param rep serialized gradient + */ + deserialize(rep) { + let obj = JSON.parse(rep); + let isColorStringArray = function (colors) { + for (let color of colors) { + if (typeof color !== 'string' || !(0,tinycolor2__WEBPACK_IMPORTED_MODULE_0__["default"])(color).isValid()) { + console.error('TypeError:', color, '(', typeof color, ')', 'is not a color-string'); + return false; + } + } + return true; + }; + if (isColorStringArray(obj.colors)) { + this.colors = []; + let self = this; + obj.colors.forEach(function (hex) { + self.colors.push(new Gcolor(hex)); + }); + } else console.error('TypeError: gradient colors field is not a color-string[]'); + this.minValue = obj.minValue; + this.maxValue = obj.maxValue; + this.updateGradient(); + } + /** + * Convert a preset to tinycolor array + * @param preset preset name from preset array + * @return [description] + */ + presetToTinyColor(preset) { + let colorarray = []; + this.presets[preset].forEach(function (gcolor) { + colorarray.push(gcolor.color); + }); + return tinygradient__WEBPACK_IMPORTED_MODULE_1__(colorarray).css('linear', 'to right'); + } + /** + * set this gradient to use the preset + * @param preset preset to use + */ + setGradientPreset(preset) { + this.colors = this.presets[preset].map(color => new Gcolor(color.color)); //deep copy gradient preset + this.updateGradient(); + } + /** + * recompute gradient + */ + updateGradient() { + let colorarray = []; + this.colors.forEach(function (colorobj) { + colorarray.push(colorobj.color); + }); + this.gradient = tinygradient__WEBPACK_IMPORTED_MODULE_1__(colorarray); + this.gradientRGB = this.gradient.rgb(100); + } + /** + * Add a color to the end of the gradient + */ + addColor() { + this.colors.push(new Gcolor(this.colors[this.colors.length - 1].color)); + } + /** + * Remove color at the given index + * @param index index to remove color at + */ + removeColor(index) { + this.colors.splice(index, 1); + } + // get the gradient hex color for a given value in the scale. Value is string format number + getHexColor(valueString) { + if (!this.gradient) this.updateGradient(); + let value; + if (valueString.length == 0) return;else value = Number(valueString); + if (value >= this.maxValue) { + return this.gradientRGB[this.gradientRGB.length - 1].toHexString(); + } + if (value <= this.minValue) { + return this.gradientRGB[0].toHexString(); + } + let index = (value - this.minValue) / (this.maxValue - this.minValue) * 100; + return this.gradientRGB[Math.round(index)].toHexString(); + } +} +// a color in the gradient +class Gcolor { + constructor(color) { + this.color = color; + } +} + +/***/ }), + +/***/ 47557: +/*!**********************************!*\ + !*** ./src/app/classes/index.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ContextMenuItem: () => (/* reexport safe */ _context_menu_item__WEBPACK_IMPORTED_MODULE_3__.ContextMenuItem), +/* harmony export */ Domain: () => (/* reexport safe */ _domain__WEBPACK_IMPORTED_MODULE_2__.Domain), +/* harmony export */ Filter: () => (/* reexport safe */ _filter__WEBPACK_IMPORTED_MODULE_5__.Filter), +/* harmony export */ Gcolor: () => (/* reexport safe */ _gradient__WEBPACK_IMPORTED_MODULE_4__.Gcolor), +/* harmony export */ Gradient: () => (/* reexport safe */ _gradient__WEBPACK_IMPORTED_MODULE_4__.Gradient), +/* harmony export */ LayoutOptions: () => (/* reexport safe */ _layout_options__WEBPACK_IMPORTED_MODULE_6__.LayoutOptions), +/* harmony export */ Link: () => (/* reexport safe */ _link__WEBPACK_IMPORTED_MODULE_7__.Link), +/* harmony export */ Metadata: () => (/* reexport safe */ _metadata__WEBPACK_IMPORTED_MODULE_8__.Metadata), +/* harmony export */ Tab: () => (/* reexport safe */ _tab__WEBPACK_IMPORTED_MODULE_11__.Tab), +/* harmony export */ TechniqueVM: () => (/* reexport safe */ _technique_vm__WEBPACK_IMPORTED_MODULE_9__.TechniqueVM), +/* harmony export */ Version: () => (/* reexport safe */ _version__WEBPACK_IMPORTED_MODULE_1__.Version), +/* harmony export */ VersionChangelog: () => (/* reexport safe */ _version_changelog__WEBPACK_IMPORTED_MODULE_0__.VersionChangelog), +/* harmony export */ ViewModel: () => (/* reexport safe */ _view_model__WEBPACK_IMPORTED_MODULE_10__.ViewModel) +/* harmony export */ }); +/* harmony import */ var _version_changelog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version-changelog */ 74518); +/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./version */ 49685); +/* harmony import */ var _domain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./domain */ 40021); +/* harmony import */ var _context_menu_item__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./context-menu-item */ 59294); +/* harmony import */ var _gradient__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./gradient */ 91145); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./filter */ 37107); +/* harmony import */ var _layout_options__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layout-options */ 55352); +/* harmony import */ var _link__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./link */ 40905); +/* harmony import */ var _metadata__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./metadata */ 65572); +/* harmony import */ var _technique_vm__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./technique-vm */ 84801); +/* harmony import */ var _view_model__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./view-model */ 66448); +/* harmony import */ var _tab__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./tab */ 79726); + + + + + + + + + + + + + +/***/ }), + +/***/ 55352: +/*!*******************************************!*\ + !*** ./src/app/classes/layout-options.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LayoutOptions: () => (/* binding */ LayoutOptions) +/* harmony export */ }); +class LayoutOptions { + constructor() { + // current layout selection + this.layoutOptions = ['side', 'flat', 'mini']; + this._layout = this.layoutOptions[0]; + // aggregate function options + this.aggregateFunctionOptions = ['average', 'min', 'max', 'sum']; + this._aggregateFunction = this.aggregateFunctionOptions[0]; + // show technique/tactic IDs in the view? + this._showID = false; + // show technique/tactic names in the view? + this._showName = true; + // show aggregate scores? + this._showAggregateScores = false; + this._countUnscored = false; + // how to display subtechniques + this.expandedSubtechniquesOptions = ['none', 'annotated', 'all']; + this._expandedSubtechniques = this.expandedSubtechniquesOptions[0]; + } + set layout(newLayout) { + if (!this.layoutOptions.includes(newLayout)) { + console.warn('invalid matrix layout', newLayout); + return; + } + let oldLayout = this._layout; + this._layout = newLayout; + if (this._layout == 'mini') { + // mini-table cannot show ID or name + this.showID = false; + this.showName = false; + } + if (oldLayout == 'mini' && newLayout != 'mini') { + this.showName = true; // restore default show value for name + } + } + get layout() { + return this._layout; + } + set aggregateFunction(newAggregateFunction) { + if (!this.aggregateFunctionOptions.includes(newAggregateFunction)) { + console.warn('invalid aggregate fx option', newAggregateFunction); + return; + } + this._aggregateFunction = newAggregateFunction; + } + get aggregateFunction() { + return this._aggregateFunction; + } + set showID(newval) { + this._showID = newval; + if (newval && this._layout == 'mini') this._layout = 'side'; + } + get showID() { + return this._showID; + } + set showName(newval) { + this._showName = newval; + if (newval && this._layout == 'mini') this._layout = 'side'; + } + get showName() { + return this._showName; + } + set showAggregateScores(newval) { + this._showAggregateScores = newval; + } + get showAggregateScores() { + return this._showAggregateScores; + } + set countUnscored(newval) { + this._countUnscored = newval; + } + get countUnscored() { + return this.aggregateFunction === 'average' ? this._countUnscored : false; + } + set expandedSubtechniques(newExpandedSubtechniques) { + if (!this.expandedSubtechniquesOptions.includes(newExpandedSubtechniques)) { + console.warn('invalid expand subtechnique option', newExpandedSubtechniques); + return; + } + this._expandedSubtechniques = newExpandedSubtechniques; + } + get expandedSubtechniques() { + return this._expandedSubtechniques; + } + serialize() { + return { + layout: this.layout, + aggregateFunction: this.aggregateFunction, + showID: this.showID, + showName: this.showName, + showAggregateScores: this.showAggregateScores, + countUnscored: this.countUnscored, + expandedSubtechniques: this.expandedSubtechniques + }; + } + deserialize(rep) { + if ('showID' in rep) { + if (typeof rep.showID === 'boolean') this.showID = rep.showID;else console.error("TypeError: layout field 'showID' is not a boolean:", rep.showID, '(', typeof rep.showID, ')'); + } + if ('showName' in rep) { + if (typeof rep.showName === 'boolean') this.showName = rep.showName;else console.error("TypeError: layout field 'showName' is not a boolean:", rep.showName, '(', typeof rep.showName, ')'); + } + //make sure this one goes last so that it can override name and ID if layout == 'mini' + if ('layout' in rep) { + if (typeof rep.layout === 'string') this.layout = rep.layout;else console.error("TypeError: layout field 'layout' is not a string:", rep.layout, '(', typeof rep.layout, ')'); + } + if ('aggregateFunction' in rep) { + if (typeof rep.aggregateFunction === 'string') this.aggregateFunction = rep.aggregateFunction;else console.error("TypeError: layout field 'aggregateFunction' is not a boolean:", rep.aggregateFunction, '(', typeof rep.aggregateFunction, ')'); + } + if ('showAggregateScores' in rep) { + if (typeof rep.showAggregateScores === 'boolean') this.showAggregateScores = rep.showAggregateScores;else console.error("TypeError: layout field 'showAggregateScores' is not a boolean:", rep.showAggregateScores, '(', typeof rep.showAggregateScores, ')'); + } + if ('countUnscored' in rep) { + if (typeof rep.countUnscored === 'boolean') this.countUnscored = rep.countUnscored;else console.error("TypeError: layout field 'countUnscored' is not a boolean:", rep.countUnscored, '(', typeof rep.countUnscored, ')'); + } + if ('expandedSubtechniques' in rep) { + if (typeof rep.expandedSubtechniques === 'string') this.expandedSubtechniques = rep.expandedSubtechniques;else console.error("TypeError: layout field 'expandedSubtechniques' is not a string:", rep.expandedSubtechniques, '(', typeof rep.expandedSubtechniques, ')'); + } + } +} + +/***/ }), + +/***/ 40905: +/*!*********************************!*\ + !*** ./src/app/classes/link.ts ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Link: () => (/* binding */ Link) +/* harmony export */ }); +class Link { + constructor() { + // intentionally left blank + } + serialize() { + return this.label && this.url ? { + label: this.label, + url: this.url + } : { + divider: this.divider + }; + } + deserialize(rep) { + let obj = typeof rep == 'string' ? JSON.parse(rep) : rep; + if ('url' in obj) { + // label & url object + if (typeof obj.url === 'string') this.url = obj.url;else console.error("TypeError: Link field 'url' is not a string"); + if ('label' in obj) { + if (typeof obj.label === 'string') this.label = obj.label;else console.error("TypeError: Link field 'label' is not a string"); + } else console.error("Error: Link required field 'label' not present"); + } else if ('divider' in obj) { + // divider object + if (typeof obj.divider === 'boolean') this.divider = obj.divider;else console.error("TypeError: Link field 'divider' is not a boolean"); + } else console.error("Error: Link required field 'url' or 'divider' not present"); + } + valid() { + return this.label && this.label.length > 0 && this.url && this.url.length > 0 || this.divider !== undefined; + } +} + +/***/ }), + +/***/ 65572: +/*!*************************************!*\ + !*** ./src/app/classes/metadata.ts ***! + \*************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Metadata: () => (/* binding */ Metadata) +/* harmony export */ }); +class Metadata { + serialize() { + return this.name && this.value ? { + name: this.name, + value: this.value + } : { + divider: this.divider + }; + } + deserialize(rep) { + let obj = typeof rep == 'string' ? JSON.parse(rep) : rep; + if ('name' in obj) { + // name & value object + if (typeof obj.name === 'string') this.name = obj.name;else console.error("TypeError: Metadata field 'name' is not a string"); + if ('value' in obj) { + if (typeof obj.value === 'string') this.value = obj.value;else console.error("TypeError: Metadata field 'value' is not a string"); + } else console.error("Error: Metadata required field 'value' not present"); + } else if ('divider' in obj) { + // divider object + if (typeof obj.divider === 'boolean') this.divider = obj.divider;else console.error("TypeError: Metadata field 'divider' is not a boolean"); + } else console.error("Error: Metadata required field 'name' or 'divider' not present"); + } + valid() { + return this.name && this.name.length > 0 && this.value && this.value.length > 0 || this.divider !== undefined; + } +} + +/***/ }), + +/***/ 76652: +/*!***************************************!*\ + !*** ./src/app/classes/stix/asset.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Asset: () => (/* binding */ Asset) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class Asset extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Get techniques targeting this asset + * @returns {string[]} technique IDs targeting this asset + */ + targeted(domainVersionID) { + let rels = this.dataService.getDomain(domainVersionID).relationships.targeted_assets; + if (rels.has(this.id)) { + return rels.get(this.id); + } else { + return []; + } + } + /** + * Get all techniques related to the asset + */ + relatedTechniques(domainVersionID) { + return this.targeted(domainVersionID); + } +} + +/***/ }), + +/***/ 71028: +/*!******************************************!*\ + !*** ./src/app/classes/stix/campaign.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Campaign: () => (/* binding */ Campaign) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class Campaign extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Get techniques used by the campaign + * @param domainVersionID the ID of the domain and version + * @returns {string[]} technique IDs used by the campaign + */ + used(domainVersionID) { + let relationships = this.dataService.getDomain(domainVersionID).relationships.campaign_uses; + if (relationships.has(this.id)) { + return relationships.get(this.id); + } else { + return []; + } + } + /** + * Get all techniques related to the campaign + * @param domainVersionID the ID of the domain and version + * @returns {string[]} technique IDs used by the campaign + */ + relatedTechniques(domainVersionID) { + return this.used(domainVersionID); + } +} + +/***/ }), + +/***/ 44152: +/*!************************************************!*\ + !*** ./src/app/classes/stix/data-component.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DataComponent: () => (/* binding */ DataComponent) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class DataComponent extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + constructor(stixSDO, dataService) { + super(stixSDO, dataService, false); + this.dataSource = stixSDO.x_mitre_data_source_ref; + } + /** + * Get techniques related to the data component + * @param domainVersionID the ID of the domain and version + * @returns {Technique[]} list of techniques used by the data component + */ + techniques(domainVersionID) { + const techniques = []; + const domain = this.dataService.getDomain(domainVersionID); + let relationships = domain.relationships.component_rel; + if (relationships.has(this.id)) { + relationships.get(this.id).forEach(targetID => { + const technique = domain.techniques.find(t => t.id === targetID); + if (technique) techniques.push(technique); + }); + } + return techniques; + } + /** + * Get the data source related to this data component + * @param domainVersionID the ID of the domain and version + * @returns { name: string, url: string } the name and first url of the data source referenced by this data component + */ + source(domainVersionID) { + const dataSources = this.dataService.getDomain(domainVersionID).dataSources; + if (dataSources.has(this.dataSource)) { + const source = dataSources.get(this.dataSource); + let url = ''; + if (source.external_references && source.external_references[0] && source.external_references[0].url) url = source.external_references[0].url; + return { + name: source.name, + url: url + }; + } else return { + name: '', + url: '' + }; + } +} + +/***/ }), + +/***/ 30739: +/*!***************************************!*\ + !*** ./src/app/classes/stix/group.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Group: () => (/* binding */ Group) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class Group extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Get the techniques used by this group + * @param domainVersionID the ID of the domain and version + * @returns {string[]} technique IDs used by this group + */ + used(domainVersionID) { + let rels = this.dataService.getDomain(domainVersionID).relationships.group_uses; + if (rels.has(this.id)) { + return rels.get(this.id); + } else { + return []; + } + } + /** + * Get techniques used by campaigns attributed to this group + * @param domainVersionID the ID of the domain and version + * @returns {string[]} technique IDs used by campaigns attributed to this group + */ + campaignsUsed(domainVersionID) { + // get campaigns attributed to groups + let attributedCampaigns = this.dataService.getDomain(domainVersionID).relationships.campaigns_attributed_to; + // get techniques used by campaigns + let rels = this.dataService.getDomain(domainVersionID).relationships.campaign_uses; + if (attributedCampaigns.has(this.id)) { + // get set of techniques used by attributed campaigns + let techniques = []; + attributedCampaigns.get(this.id).forEach(campaign_id => { + if (rels.has(campaign_id)) techniques = techniques.concat(rels.get(campaign_id)); + }); + return techniques; + } else return []; // no attributed campaigns + } + /** + * Get all techniques related to the group + */ + relatedTechniques(domainVersionID) { + let usedSet = new Set(this.used(domainVersionID).concat(this.campaignsUsed(domainVersionID))); + return Array.from(usedSet); + } +} + +/***/ }), + +/***/ 54448: +/*!***************************************!*\ + !*** ./src/app/classes/stix/index.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Asset: () => (/* reexport safe */ _asset__WEBPACK_IMPORTED_MODULE_10__.Asset), +/* harmony export */ Campaign: () => (/* reexport safe */ _campaign__WEBPACK_IMPORTED_MODULE_1__.Campaign), +/* harmony export */ DataComponent: () => (/* reexport safe */ _data_component__WEBPACK_IMPORTED_MODULE_2__.DataComponent), +/* harmony export */ Group: () => (/* reexport safe */ _group__WEBPACK_IMPORTED_MODULE_3__.Group), +/* harmony export */ Matrix: () => (/* reexport safe */ _matrix__WEBPACK_IMPORTED_MODULE_4__.Matrix), +/* harmony export */ Mitigation: () => (/* reexport safe */ _mitigation__WEBPACK_IMPORTED_MODULE_5__.Mitigation), +/* harmony export */ Note: () => (/* reexport safe */ _note__WEBPACK_IMPORTED_MODULE_6__.Note), +/* harmony export */ Software: () => (/* reexport safe */ _software__WEBPACK_IMPORTED_MODULE_7__.Software), +/* harmony export */ StixObject: () => (/* reexport safe */ _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject), +/* harmony export */ Tactic: () => (/* reexport safe */ _tactic__WEBPACK_IMPORTED_MODULE_8__.Tactic), +/* harmony export */ Technique: () => (/* reexport safe */ _technique__WEBPACK_IMPORTED_MODULE_9__.Technique) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); +/* harmony import */ var _campaign__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./campaign */ 71028); +/* harmony import */ var _data_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data-component */ 44152); +/* harmony import */ var _group__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./group */ 30739); +/* harmony import */ var _matrix__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./matrix */ 25311); +/* harmony import */ var _mitigation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mitigation */ 91261); +/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./note */ 53962); +/* harmony import */ var _software__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./software */ 64675); +/* harmony import */ var _tactic__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tactic */ 35830); +/* harmony import */ var _technique__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./technique */ 77426); +/* harmony import */ var _asset__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./asset */ 76652); + + + + + + + + + + + + +/***/ }), + +/***/ 25311: +/*!****************************************!*\ + !*** ./src/app/classes/stix/matrix.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Matrix: () => (/* binding */ Matrix) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); +/* harmony import */ var _tactic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tactic */ 35830); + + +class Matrix extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Creates an instance of Matrix. + * @param {*} stixSDO for the matrix + * @param {Map} idToTacticSDO map of tactic ID to tactic SDO + * @param {Technique[]} techniques all techniques defined in the domain + */ + constructor(stixSDO, idToTacticSDO, techniques, dataService) { + super(stixSDO, dataService); + this.tactics = stixSDO.tactic_refs.map(tacticID => idToTacticSDO.get(tacticID)) // Get tacticSDOs + .filter(tacticSDO => tacticSDO) // Filter out nulls (tacticSDO not found) + .map(tacticSDO => new _tactic__WEBPACK_IMPORTED_MODULE_1__.Tactic(tacticSDO, techniques, this.dataService)); // Create Tactic objects + } +} + +/***/ }), + +/***/ 91261: +/*!********************************************!*\ + !*** ./src/app/classes/stix/mitigation.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Mitigation: () => (/* binding */ Mitigation) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class Mitigation extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Get techniques mitigated by this mitigation + * @returns {string[]} technique IDs mitigated by this mitigation + */ + mitigated(domainVersionID) { + let rels = this.dataService.getDomain(domainVersionID).relationships.mitigates; + if (rels.has(this.id)) { + return rels.get(this.id); + } else { + return []; + } + } + /** + * Get all techniques related to the mitigation + */ + relatedTechniques(domainVersionID) { + return this.mitigated(domainVersionID); + } +} + +/***/ }), + +/***/ 53962: +/*!**************************************!*\ + !*** ./src/app/classes/stix/note.ts ***! + \**************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Note: () => (/* binding */ Note) +/* harmony export */ }); +class Note { + /** + * Creates an instance of Note. + * @param {any} stixSDO for the note + */ + constructor(stixSDO) { + if (stixSDO.abstract) this.abstract = stixSDO.abstract; + this.content = stixSDO.content; + this.object_refs = stixSDO.object_refs; + } +} + +/***/ }), + +/***/ 64675: +/*!******************************************!*\ + !*** ./src/app/classes/stix/software.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Software: () => (/* binding */ Software) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class Software extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Creates an instance of Software. + * @param {any} stixSDO for the software + * @param {DataService} DataService the software occurs within + */ + constructor(stixSDO, dataService) { + super(stixSDO, dataService); + this.platforms = []; //platforms for this software + this.platforms = stixSDO.x_mitre_platforms ? stixSDO.x_mitre_platforms.map(platform => platform.trim()) : undefined; + } + /** + * Get techniques used by this software + * @param domainVersionID the ID of the domain and version + * @returns {string[]} technique IDs used by this software + */ + used(domainVersionID) { + let rels = this.dataService.getDomain(domainVersionID).relationships.software_uses; + if (rels.has(this.id)) { + return rels.get(this.id); + } else { + return []; + } + } + /** + * Get all techniques related to the software + */ + relatedTechniques(domainVersionID) { + return this.used(domainVersionID); + } +} + +/***/ }), + +/***/ 60470: +/*!*********************************************!*\ + !*** ./src/app/classes/stix/stix-object.ts ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ StixObject: () => (/* binding */ StixObject) +/* harmony export */ }); +class StixObject { + constructor(stixSDO, dataService, supportsAttackID = true) { + // Properties + this.id = stixSDO.id; + this.name = stixSDO.name; + this.description = stixSDO.description; + this.created = stixSDO.created; + this.modified = stixSDO.modified; + this.revoked = stixSDO.revoked ? stixSDO.revoked : false; + this.deprecated = stixSDO.x_mitre_deprecated ? stixSDO.x_mitre_deprecated : false; + this.version = stixSDO.x_mitre_version ? stixSDO.x_mitre_version : ''; + this.dataService = dataService; + // ATT&CK ID + if (supportsAttackID) { + if (stixSDO.external_references && stixSDO.external_references[0] && stixSDO.external_references[0].external_id) { + this.attackID = stixSDO.external_references[0].external_id; + } else { + alert('Error: external_references has invalid format in imported StixObject (ID: ' + stixSDO.id + ')'); + throw new Error('Error: external_references has invalid format in imported StixObject. Read more here: https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_72bcfr3t79jx'); + } + } + // URL + if ('external_references' in stixSDO && stixSDO.external_references.length > 0) { + this.url = stixSDO.external_references[0].url; + } else { + this.url = ''; + } + } + /** + * Compare this object's version number to another object's version number + * @param that the object to compare to + * @returns 0 if the objects have the same version, + * > 0 if this object's version is greater, + * < 0 if that object's version is greater + */ + compareVersion(that) { + if (!this.version || !that.version) return 0; // one or both of the objects have no version + let thisVersion = this.version.split('.'); + let thatVersion = that.version.split('.'); + for (let i = 0; i < Math.max(thisVersion.length, thatVersion.length); i++) { + if (thisVersion.length == thatVersion.length && thisVersion.length < i) return 0; + if (thisVersion.length < i) return -1; + if (thatVersion.length < i) return 1; + if (+thisVersion[i] == +thatVersion[i]) continue; + return +thisVersion[i] - +thatVersion[i]; + } + return 0; + } + /** + * get the stix object that this object is revoked by + * @param {string} domainVersionID the ID of the domain & version this object is found in + * @returns {string} object ID this object is revoked by + */ + revoked_by(domainVersionID) { + let rels = this.dataService.getDomain(domainVersionID).relationships.revoked_by; + if (rels.has(this.id)) return rels.get(this.id);else return undefined; + } +} + +/***/ }), + +/***/ 35830: +/*!****************************************!*\ + !*** ./src/app/classes/stix/tactic.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Tactic: () => (/* binding */ Tactic) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); + +class Tactic extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + /** + * Creates an instance of Tactic. + * @param {any} stixSDO for the tactic + * @param {Technique[]} techniques all techniques in the domain + */ + constructor(stixSDO, techniques, dataService) { + super(stixSDO, dataService); + this.shortname = stixSDO.x_mitre_shortname; + this.techniques = techniques.filter(technique => { + if (!technique.revoked && !technique.deprecated) return technique.tactics.includes(this.shortname); + }); + } +} + +/***/ }), + +/***/ 77426: +/*!*******************************************!*\ + !*** ./src/app/classes/stix/technique.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Technique: () => (/* binding */ Technique) +/* harmony export */ }); +/* harmony import */ var _stix_object__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stix-object */ 60470); +/* harmony import */ var _tactic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tactic */ 35830); + + +class Technique extends _stix_object__WEBPACK_IMPORTED_MODULE_0__.StixObject { + get isSubtechnique() { + return this.parent != null; + } + /** + * Creates an instance of Technique. + * @param {any} stixSDO for the technique + * @param {Technique[]} subtechniques occuring under the technique + */ + constructor(stixSDO, subtechniques, dataService) { + super(stixSDO, dataService); + this.parent = null; // parent technique. Only present if it's a sub-technique + this.platforms = stixSDO.x_mitre_platforms ? stixSDO.x_mitre_platforms.map(platform => platform.trim()) : undefined; + this.datasources = stixSDO.x_mitre_data_sources ? stixSDO.x_mitre_data_sources.toString() : ''; + if (!this.revoked && !this.deprecated) { + this.tactics = stixSDO.kill_chain_phases.map(phase => phase.phase_name); + } + this.subtechniques = subtechniques.filter(sub => !(sub.deprecated || sub.revoked)); + for (let subtechnique of this.subtechniques) { + subtechnique.parent = this; + } + } + /** + * Get an ID identifying this technique under a specific tactic + * @param {string|Tactic} tactic tactic name in phase-name/shortname format, or a Tactic object itself + * @returns {string} ID for this technique under that tactic + */ + get_technique_tactic_id(tactic) { + let tactic_shortname = tactic instanceof _tactic__WEBPACK_IMPORTED_MODULE_1__.Tactic ? tactic.shortname : tactic; + if (!this.tactics.includes(tactic_shortname)) { + throw new Error(tactic_shortname + ' is not a tactic of ' + this.attackID); + } + return this.attackID + '^' + tactic_shortname; + } + /** + * Get all possible IDs identifying this technique under tactics + * Basically the same as calling get_technique_tactic_id with all valid tactic values + */ + get_all_technique_tactic_ids() { + if (this.revoked || this.deprecated) return []; + return this.tactics.map(shortname => this.get_technique_tactic_id(shortname)); + } +} + +/***/ }), + +/***/ 79726: +/*!********************************!*\ + !*** ./src/app/classes/tab.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Tab: () => (/* binding */ Tab) +/* harmony export */ }); +class Tab { + constructor(title, isCloseable, showScoreVariables, domain, isDataTable) { + this.domain = ''; + this.isCloseable = false; + this.showScoreVariables = false; + this.title = title; + this.isCloseable = isCloseable; + this.showScoreVariables = showScoreVariables; + this.domain = domain; + this.isDataTable = isDataTable; + } +} + +/***/ }), + +/***/ 84801: +/*!*****************************************!*\ + !*** ./src/app/classes/technique-vm.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TechniqueVM: () => (/* binding */ TechniqueVM) +/* harmony export */ }); +/* harmony import */ var _link__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./link */ 40905); +/* harmony import */ var _metadata__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./metadata */ 65572); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tinycolor2 */ 62002); + + + +class TechniqueVM { + get metadataStr() { + return JSON.stringify(this.metadata); + } + get linkStr() { + return JSON.stringify(this.links); + } + constructor(technique_tactic_union_id) { + this.score = ''; + this.color = ''; // manually assigned color-class name + this.enabled = true; + this.comment = ''; + this.metadata = []; + this.links = []; + this.showSubtechniques = false; + this.isVisible = true; // is technique currently displayed on matrix? + this.technique_tactic_union_id = technique_tactic_union_id; + let idSplit = technique_tactic_union_id.split('^'); + this.techniqueID = idSplit[0]; + this.tactic = idSplit[1]; + } + /** + * Has this TechniqueVM been modified from its initialized state? + * @return true if it has been modified, false otherwise + */ + modified() { + return this.annotated() || this.showSubtechniques; + } + /** + * Check if this TechniqueVM has been annotated + * @return true if it has annotations, false otherwise + */ + annotated() { + return this.score != '' || this.color != '' || !this.enabled || this.comment != '' || this.links.length !== 0 || this.metadata.length !== 0; + } + /** + * Reset this TechniqueVM's annotations to their default values + */ + resetAnnotations() { + this.score = ''; + this.comment = ''; + this.color = ''; + this.enabled = true; + this.aggregateScore = ''; + this.aggregateScoreColor = ''; + this.links = []; + this.metadata = []; + } + /** + * Set isVisible based on filters + */ + setIsVisible(visible) { + this.isVisible = visible; + } + /** + * Convert to string representation + * @return string representation + */ + serialize() { + let rep = {}; + rep.techniqueID = this.techniqueID; + rep.tactic = this.tactic; + if (this.score !== '' && !isNaN(Number(this.score))) rep.score = Number(this.score); + rep.color = this.color; + rep.comment = this.comment; + rep.enabled = this.enabled; + rep.metadata = this.metadata.filter(m => m.valid()).map(m => m.serialize()); + rep.links = this.links.filter(l => l.valid()).map(l => l.serialize()); + rep.showSubtechniques = this.showSubtechniques; + return JSON.stringify(rep, null, '\t'); + } + /** + * Restore this technique from serialized technique + * @param rep serialized technique string + */ + deserialize(rep, techniqueID, tactic) { + let obj = JSON.parse(rep); + if (techniqueID !== undefined) this.techniqueID = techniqueID;else console.error('ERROR: TechniqueID field not present in technique'); + if (tactic !== undefined && tactic !== '') this.tactic = tactic;else { + console.error('WARNING: tactic field not present in technique'); + alert(`WARNING: The tactic field on the technique ID ${techniqueID} is not defined. Annotations for this technique may not be restored.`); + } + if ('comment' in obj) { + if (typeof obj.comment === 'string') this.comment = obj.comment;else console.error('TypeError: technique comment field is not a number:', obj.comment, '(', typeof obj.comment, ')'); + } + if ('color' in obj && obj.color !== '') { + if (typeof obj.color === 'string' && (0,tinycolor2__WEBPACK_IMPORTED_MODULE_2__["default"])(obj.color).isValid()) this.color = obj.color;else console.error('TypeError: technique color field is not a color-string:', obj.color, '(', typeof obj.color, ')'); + } + if ('score' in obj) { + if (typeof obj.score === 'number') this.score = String(obj.score);else console.error('TypeError: technique score field is not a number:', obj.score, '(', typeof obj.score, ')'); + } + if ('enabled' in obj) { + if (typeof obj.enabled === 'boolean') this.enabled = obj.enabled;else console.error('TypeError: technique enabled field is not a boolean:', obj.enabled, '(', typeof obj.enabled, ')'); + } + if ('showSubtechniques' in obj) { + if (typeof obj.showSubtechniques === 'boolean') this.showSubtechniques = obj.showSubtechniques;else console.error('TypeError: technique showSubtechnique field is not a boolean:', obj.showSubtechniques, '(', typeof obj.showSubtechniques, ')'); + } + if (this.tactic !== undefined && this.techniqueID !== undefined) { + this.technique_tactic_union_id = this.techniqueID + '^' + this.tactic; + } else { + console.error('ERROR: Tactic and TechniqueID field needed.'); + } + if ('metadata' in obj) { + for (let metadataObj of obj.metadata) { + let m = new _metadata__WEBPACK_IMPORTED_MODULE_1__.Metadata(); + m.deserialize(metadataObj); + if (m.valid()) this.metadata.push(m); + } + } + if ('links' in obj) { + for (let linkObj of obj.links) { + let link = new _link__WEBPACK_IMPORTED_MODULE_0__.Link(); + link.deserialize(linkObj); + if (link.valid()) this.links.push(link); + } + } + } +} + +/***/ }), + +/***/ 74518: +/*!**********************************************!*\ + !*** ./src/app/classes/version-changelog.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ VersionChangelog: () => (/* binding */ VersionChangelog) +/* harmony export */ }); +class VersionChangelog { + constructor(oldDomainVersionID, newDomainVersionID) { + this.additions = []; // new objects added to newest version + this.changes = []; // object changes between versions + this.minor_changes = []; // changes to objects without version increments + this.deprecations = []; // objects deprecated since older version + this.revocations = []; // objects revoked since older version + this.unchanged = []; // objects which have not changed between versions + this.reviewed = new Set(); + this.copied = new Set(); + this.oldDomainVersionID = oldDomainVersionID; + this.newDomainVersionID = newDomainVersionID; + } + /** Get the length of the version changelog */ + length() { + return this.additions.length + this.changes.length + this.minor_changes.length + this.deprecations.length + this.revocations.length + this.unchanged.length; + } +} + +/***/ }), + +/***/ 49685: +/*!************************************!*\ + !*** ./src/app/classes/version.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Version: () => (/* binding */ Version) +/* harmony export */ }); +class Version { + /** + * Creates an instance of Version + * @param name version name + * @param number version number + */ + constructor(name, number) { + this.name = name; + this.number = number; + } +} + +/***/ }), + +/***/ 66448: +/*!***************************************!*\ + !*** ./src/app/classes/view-model.ts ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ViewModel: () => (/* binding */ ViewModel) +/* harmony export */ }); +/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./filter */ 37107); +/* harmony import */ var _gradient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./gradient */ 91145); +/* harmony import */ var _layout_options__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layout-options */ 55352); +/* harmony import */ var _link__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./link */ 40905); +/* harmony import */ var _metadata__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./metadata */ 65572); +/* harmony import */ var _technique_vm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./technique-vm */ 84801); +/* harmony import */ var _utils_globals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/globals */ 98552); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tinycolor2 */ 62002); + + + + + + + + +class ViewModel { + get linksMatch() { + return !this.linkMismatches.length; + } + get metadataMatch() { + return !this.metadataMismatches.length; + } + get sidebarOpened() { + return this._sidebarOpened; + } + set sidebarOpened(newVal) { + this._sidebarOpened = newVal; + } + get sidebarContentType() { + return this._sidebarContentType; + } + set sidebarContentType(newVal) { + if (this.sidebarContentTypes.includes(newVal)) this._sidebarContentType = newVal;else this._sidebarContentType = ''; + } + constructor(name, uid, domainVersionID, dataService) { + this.dataService = dataService; + this.domain = ''; // attack domain + this.version = ''; // attack version + this.description = ''; // layer description + this.loaded = false; // whether or not techniqueVMs are loaded + this.techniqueVMs = new Map(); // configuration for each technique + this.selectedTechniques = new Set(); // currently selected techniques (technique_tactic_id) + this.linkMismatches = []; // subsequent selected technique_tactic_ids that do not have matching links + this.metadataMismatches = []; // subsequent selected technique_tactic_ids that do not have matching metadata + this.highlightedTactic = null; + this.highlightedTechniques = new Set(); + this.highlightedTechnique = null; // the Technique that was actually moused over + this.layout = new _layout_options__WEBPACK_IMPORTED_MODULE_2__.LayoutOptions(); + this.hideDisabled = false; // are disabled techniques hidden? + this.showTacticRowBackground = false; + this.tacticRowBackground = '#dddddd'; + this.stickyToolbar = true; + this.gradient = new _gradient__WEBPACK_IMPORTED_MODULE_1__.Gradient(); // scoring gradient + this.legendItems = []; + this.backgroundPresets = ['#e60d0d', '#fc3b3b', '#fc6b6b', '#fca2a2', '#e6550d', '#fd8d3c', '#fdae6b', '#fdd0a2', '#e6d60d', '#fce93b', '#fcf26b', '#fcf3a2', '#31a354', '#74c476', '#a1d99b', '#c7e9c0', '#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#756bb1', '#9e9ac8', '#bcbddc', '#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9']; + this.legendColorPresets = []; + this.initializeScoresTo = ''; // value to initialize scores to + this.metadata = []; + this.links = []; + this.technique_show_subtechnique = false; + /* + * 0: ascending alphabetically + * 1: descending alphabetically + * 2: ascending numerically + * 3: descending numerically + */ + this.sorting = 0; + this.selectTechniquesAcrossTactics = true; + this.selectSubtechniquesWithParent = false; + this.selectVisibleTechniques = false; + this.sidebarContentTypes = ['layerUpgrade', 'search', 'layerSettings']; + console.debug("initializing ViewModel '" + name + "'"); + this.domainVersionID = domainVersionID; + this.filters = new _filter__WEBPACK_IMPORTED_MODULE_0__.Filter(); + this.name = name; + this.uid = uid; + this.legendColorPresets = this.backgroundPresets; + } + openSidebar(contentType) { + this.sidebarContentType = contentType; + this.sidebarOpened = true; + } + loadVMData() { + let domain = this.dataService.getDomain(this.domainVersionID); + if (domain.isCustom) { + this.bundleURL = domain.urls[0]; + } + if (!this.domainVersionID || !domain.dataLoaded) { + let self = this; + this.dataService.onDataLoad(this.domainVersionID, function () { + self.initTechniqueVMs(); + self.filters.initPlatformOptions(self.dataService.getDomain(self.domainVersionID)); + }); + } else { + this.initTechniqueVMs(); + this.filters.initPlatformOptions(domain); + } + this.loaded = true; + } + initTechniqueVMs() { + for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) { + // init techniques + for (let id of technique.get_all_technique_tactic_ids()) { + let techniqueVM = new _technique_vm__WEBPACK_IMPORTED_MODULE_5__.TechniqueVM(id); + techniqueVM.score = this.initializeScoresTo; + this.setTechniqueVM(techniqueVM, false); + } + // init sub-techniques + for (let subtechnique of technique.subtechniques) { + for (let id of subtechnique.get_all_technique_tactic_ids()) { + let techniqueVM = new _technique_vm__WEBPACK_IMPORTED_MODULE_5__.TechniqueVM(id); + techniqueVM.score = this.initializeScoresTo; + this.setTechniqueVM(techniqueVM, false); + } + } + } + // display annotated subtechniques if "annotated" option is selected + if (this.layout.expandedSubtechniques == 'annotated') { + for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) { + if (technique.subtechniques.length > 0) { + for (let id of technique.get_all_technique_tactic_ids()) { + let tvm = this.getTechniqueVM_id(id); + for (let subtechnique of technique.subtechniques) { + tvm.showSubtechniques = tvm.showSubtechniques || subtechnique.get_all_technique_tactic_ids().some(sid => { + let svm = this.getTechniqueVM_id(sid); + return svm.annotated(); + }); + } + } + } + } + } + // display all subtechniques if "all" option is selected + else if (this.layout.expandedSubtechniques == 'all') { + for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) { + if (technique.subtechniques.length > 0) { + for (let id of technique.get_all_technique_tactic_ids()) { + let tvm = this.getTechniqueVM_id(id); + tvm.showSubtechniques = true; + } + } + } + } else { + for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) { + if (technique.subtechniques.length > 0) { + for (let id of technique.get_all_technique_tactic_ids()) { + let tvm = this.getTechniqueVM_id(id); + if (tvm.showSubtechniques) { + this.technique_show_subtechnique = true; + break; + } + } + } + } + if (this.layout.expandedSubtechniques == 'none' && !this.technique_show_subtechnique) { + this.techniqueVMs.forEach(function (tvm) { + tvm.showSubtechniques = false; + }); + } + } + // display none of the subtechniques if "none" option is selected + } + getTechniqueVM(technique, tactic) { + if (!this.hasTechniqueVM(technique, tactic)) { + throw Error('technique VM not found: ' + technique.attackID + ', ' + tactic.attackID); + } + return this.techniqueVMs.get(technique.get_technique_tactic_id(tactic)); + } + getTechniqueVM_id(technique_tactic_id) { + if (!this.hasTechniqueVM_id(technique_tactic_id)) { + throw Error('technique VM not found: ' + technique_tactic_id); + } + return this.techniqueVMs.get(technique_tactic_id); + } + /** + * setter + * @param {techniqueVM} techniqueVM: the techniqueVM to set + * @param {boolean} overwrite (default true) if true, overwrite existing techniqueVMs under that ID. + */ + setTechniqueVM(techniqueVM, overwrite = true) { + if (this.techniqueVMs.has(techniqueVM.technique_tactic_union_id)) { + if (overwrite) this.techniqueVMs.delete(techniqueVM.technique_tactic_union_id);else return; + } + this.techniqueVMs.set(techniqueVM.technique_tactic_union_id, techniqueVM); + } + hasTechniqueVM(technique, tactic) { + return this.techniqueVMs.has(technique.get_technique_tactic_id(tactic)); + } + hasTechniqueVM_id(technique_tactic_id) { + return this.techniqueVMs.has(technique_tactic_id); + } + /** + * Highlight the given technique under the given tactic + * @param {Technique} technique to highlight + * @param {Tactic} tactic wherein the technique occurs + */ + highlightTechnique(technique, tactic) { + if (this.selectSubtechniquesWithParent && technique.isSubtechnique) this.highlightedTechniques.add(technique.parent.id); + this.highlightedTechnique = technique; + this.highlightedTechniques.add(technique.id); + this.highlightedTactic = tactic; + } + /** + * Clear the technique highlight + */ + clearHighlight() { + this.highlightedTactic = null; + this.highlightedTechnique = null; + this.highlightedTechniques = new Set(); + } + /** + * Select the given technique. Depending on selectTechniquesAcrossTactics, either selects in all tactics or in given tactic + * @param {Technique} technique to select + * @param {Tactic} tactic wherein the technique occurs + */ + selectTechnique(technique, tactic) { + if (this.selectTechniquesAcrossTactics) this.selectTechniqueAcrossTactics(technique);else this.selectTechniqueInTactic(technique, tactic); + } + /** + * Unselect the given technique. Depending on selectTechniquesAcrossTactics, either unselects in all tactics or in given tactic + * @param {Technique} technique to select + * @param {Tactic} tactic wherein the technique occurs + */ + unselectTechnique(technique, tactic) { + if (this.selectTechniquesAcrossTactics) this.unselectTechniqueAcrossTactics(technique);else this.unselectTechniqueInTactic(technique, tactic); + } + /** + * Select the given technique in the given tactic + * @param {Technique} technique to select + * @param {Tactic} tactic wherein the technique occurs + * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique + */ + selectTechniqueInTactic(technique, tactic, walkChildren = true) { + if (this.selectSubtechniquesWithParent && walkChildren) { + // check parent / children / siblings + if (technique.isSubtechnique) { + // select from parent + this.selectTechniqueInTactic(technique.parent, tactic, true); + return; + } else { + // select sub-techniques + for (let subtechnique of technique.subtechniques) { + this.selectTechniqueInTactic(subtechnique, tactic, false); + } + } + } + let technique_tactic_id = technique.get_technique_tactic_id(tactic); + if (!this.isCurrentlyEditing()) { + // first selection + this.activeTvm = this.getTechniqueVM_id(technique_tactic_id); + } + if (this.selectVisibleTechniques && this.getTechniqueVM_id(technique_tactic_id).isVisible || !this.selectVisibleTechniques) { + this.selectedTechniques.add(technique_tactic_id); + this.checkValues(true, technique_tactic_id); + } + } + /** + * Select all techniques under the given tactic + * @param {Tactic} tactic wherein the techniques occur + */ + selectAllTechniquesInTactic(tactic) { + for (let technique of tactic.techniques) { + this.selectTechnique(technique, tactic); + } + } + /** + * select the given technique across all tactics in which it occurs + * @param {Technique} technique to select + * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique + * @param highlightTechniques, if true, highlight techniques rather than add to selected techniques group + */ + selectTechniqueAcrossTactics(technique, walkChildren = true, highlightTechniques = false) { + if (this.selectSubtechniquesWithParent && walkChildren) { + // walk to parent / children / siblings + if (technique.isSubtechnique) { + // select from parent + this.selectTechniqueAcrossTactics(technique.parent, true, highlightTechniques); + return; + } else { + // select sub-techniques + for (let subtechnique of technique.subtechniques) { + this.selectTechniqueAcrossTactics(subtechnique, false, highlightTechniques); + } + } + } + if (highlightTechniques) { + // highlight technique + this.highlightTechnique(technique); + } else { + for (let id of technique.get_all_technique_tactic_ids()) { + if (!this.isCurrentlyEditing()) this.activeTvm = this.getTechniqueVM_id(id); // first selection + if (this.selectVisibleTechniques && this.getTechniqueVM_id(id).isVisible || !this.selectVisibleTechniques) { + this.selectedTechniques.add(id); + this.checkValues(true, id); + } + } + } + } + /** + * Unselect the given technique in the given tactic + * @param {Technique} technique to unselect + * @param {Tactic} tactic wherein the technique occurs + * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique + */ + unselectTechniqueInTactic(technique, tactic, walkChildren = true) { + if (this.selectSubtechniquesWithParent && walkChildren) { + // walk to parent / children / siblings + if (technique.isSubtechnique) { + // select from parent + this.unselectTechniqueInTactic(technique.parent, tactic, true); + return; + } else { + // select sub-techniques + for (let subtechnique of technique.subtechniques) { + this.unselectTechniqueInTactic(subtechnique, tactic, false); + } + } + } + let technique_tactic_id = technique.get_technique_tactic_id(tactic); + this.selectedTechniques.delete(technique_tactic_id); + this.checkValues(false, technique_tactic_id); + } + /** + * Unselect all techniques in the given tactic + * @param {Tactic} tactic wherein the techniques occur + */ + unselectAllTechniquesInTactic(tactic) { + for (let technique of tactic.techniques) { + this.unselectTechnique(technique, tactic); + } + } + /** + * Unselect the given technique across all tactics in which it occurs + * @param {Technique} technique to unselect + * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique + */ + unselectTechniqueAcrossTactics(technique, walkChildren = true) { + if (this.selectSubtechniquesWithParent && walkChildren) { + // walk to parent / children / siblings + if (technique.isSubtechnique) { + // select from parent + this.unselectTechniqueAcrossTactics(technique.parent, true); + return; + } else { + // select sub-techniques + for (let subtechnique of technique.subtechniques) { + this.unselectTechniqueAcrossTactics(subtechnique, false); + } + } + } + for (let id of technique.get_all_technique_tactic_ids()) { + this.selectedTechniques.delete(id); + this.checkValues(false, id); + } + } + /* Unselect all techniques */ + clearSelectedTechniques() { + this.selectedTechniques.clear(); + this.activeTvm = undefined; + this.linkMismatches = []; + this.metadataMismatches = []; + } + /* Select all techniques */ + selectAllTechniques() { + this.clearSelectedTechniques(); + this.invertSelection(); + } + /* Set all selected techniques to deselected, and select all techniques not currently selected */ + invertSelection() { + let previouslySelected = new Set(this.selectedTechniques); + this.clearSelectedTechniques(); + let self = this; + this.techniqueVMs.forEach(function (tvm, key) { + if (!previouslySelected.has(tvm.technique_tactic_union_id)) { + if (self.selectVisibleTechniques && tvm.isVisible || !self.selectVisibleTechniques) { + if (!self.isCurrentlyEditing()) { + // first selection + self.activeTvm = self.getTechniqueVM_id(tvm.technique_tactic_union_id); + } + self.selectedTechniques.add(tvm.technique_tactic_union_id); + self.checkValues(true, tvm.technique_tactic_union_id); + } + } + }); + } + /** + * Select all techniques with annotations if nothing is currently selected, or + * select a subset of the current selection that has annotations + */ + selectAnnotated() { + let self = this; + if (this.isCurrentlyEditing()) { + // deselect techniques without annotations + let selected = new Set(this.selectedTechniques); + this.techniqueVMs.forEach(function (tvm, key) { + if (selected.has(tvm.technique_tactic_union_id) && !tvm.annotated()) { + self.selectedTechniques.delete(tvm.technique_tactic_union_id); + self.checkValues(false, tvm.technique_tactic_union_id); + } + }); + } else { + // select all techniques with annotations + this.techniqueVMs.forEach(function (tvm, key) { + if (tvm.annotated()) { + if (self.selectVisibleTechniques && tvm.isVisible || !self.selectVisibleTechniques) { + if (!self.isCurrentlyEditing()) self.activeTvm = self.getTechniqueVM_id(tvm.technique_tactic_union_id); // first selection + self.selectedTechniques.add(tvm.technique_tactic_union_id); + self.checkValues(true, tvm.technique_tactic_union_id); + } + } + }); + } + } + /** + * Select all techniques without annotations if nothing is currently selected, or + * select a subset of the current selection that do not have annotations + */ + selectUnannotated() { + let self = this; + if (this.isCurrentlyEditing()) { + // deselect techniques with annotations + let selected = new Set(this.selectedTechniques); + this.techniqueVMs.forEach(function (tvm, key) { + if (selected.has(tvm.technique_tactic_union_id) && tvm.annotated()) { + self.selectedTechniques.delete(tvm.technique_tactic_union_id); + self.checkValues(false, tvm.technique_tactic_union_id); + } + }); + } else { + // select all techniques without annotations + this.selectAnnotated(); + this.invertSelection(); + } + } + /** + * Copies all annotations from unchanged techniques and techniques + * which have had minor changes + */ + initCopyAnnotations() { + let self = this; + function copy(attackID) { + let fromTechnique = self.dataService.getTechnique(attackID, self.compareTo.domainVersionID); + let domain = self.dataService.getDomain(self.domainVersionID); + let tactics = fromTechnique.tactics.map(shortname => domain.tactics.find(t => t.shortname == shortname)); + tactics.forEach(tactic => { + let fromVM = self.compareTo.getTechniqueVM(fromTechnique, tactic); + if (fromVM.annotated()) { + let toTechnique = self.dataService.getTechnique(attackID, self.domainVersionID); + self.copyAnnotations(fromTechnique, toTechnique, tactic); + } + }); + } + if (this.versionChangelog) { + this.versionChangelog.unchanged.forEach(attackID => copy(attackID)); + this.versionChangelog.minor_changes.forEach(attackID => copy(attackID)); + } + } + /** + * Copy annotations from one technique to another under the given tactic. + * The previous technique will be disabled + * @param fromTechnique the technique to copy annotations from + * @param toTechnique the technique to copy annotations to + * @param tactic the tactic the techniques are found under + */ + copyAnnotations(fromTechnique, toTechnique, tactic) { + let fromVM = this.compareTo.getTechniqueVM(fromTechnique, tactic); + let toVM = this.getTechniqueVM(toTechnique, tactic); + this.versionChangelog.reviewed.delete(fromTechnique.attackID); + toVM.deserialize(fromVM.serialize(), fromTechnique.attackID, tactic.shortname); + this.updateScoreColor(toVM); + fromVM.enabled = false; + this.versionChangelog.copied.add(fromVM.technique_tactic_union_id); + if (fromTechnique.get_all_technique_tactic_ids().every(id => this.versionChangelog.copied.has(id))) { + this.versionChangelog.reviewed.add(fromTechnique.attackID); + } + } + /** + * Reset the techniqueVM that the annotations were previously copied to + * and re-enable the technique the annotations were copied from + * @param fromTechnique the technique that annotations were copied from + * @param toTechnique the technique that annotations were copied to + * @param tactic the tactic the techniques are found under + */ + revertCopy(fromTechnique, toTechnique, tactic) { + let fromVM = this.compareTo.getTechniqueVM(fromTechnique, tactic); + let toVM = this.getTechniqueVM(toTechnique, tactic); + this.versionChangelog.reviewed.delete(fromTechnique.attackID); + toVM.resetAnnotations(); + fromVM.enabled = true; + this.versionChangelog.copied.delete(fromVM.technique_tactic_union_id); + if (!fromTechnique.get_all_technique_tactic_ids().every(id => this.versionChangelog.copied.has(id))) { + this.versionChangelog.reviewed.delete(fromTechnique.attackID); + } + } + /** + * Return true if the given technique is selected, false otherwise + * @param {Technique} technique the technique to check + * * @param {Tactic} tactic wherein the technique occurs + * @return {boolean} true if selected, false otherwise + */ + isTechniqueSelected(technique, tactic, walkChildren = true) { + if (this.selectTechniquesAcrossTactics) { + if (this.selectSubtechniquesWithParent && walkChildren) { + // check parent / children / siblings + if (technique.isSubtechnique) { + // select from parent + return this.isTechniqueSelected(technique.parent, tactic, true); + } else { + for (let subtechnique of technique.subtechniques) { + if (this.isTechniqueSelected(subtechnique, tactic, false)) return true; + } + } + } + for (let id of technique.get_all_technique_tactic_ids()) { + if (this.selectedTechniques.has(id)) return true; + } + return false; + } else { + if (this.selectSubtechniquesWithParent && walkChildren) { + // check parent / children / siblings + if (technique.isSubtechnique) { + // select from parent + return this.isTechniqueSelected(technique.parent, tactic, true); + } else { + for (let subtechnique of technique.subtechniques) { + if (this.isTechniqueSelected(subtechnique, tactic, false)) return true; + } + } + } + return this.selectedTechniques.has(technique.get_technique_tactic_id(tactic)); + } + } + /** + * Return the number of selected techniques + * @return {number} the number of selected techniques + */ + getSelectedTechniqueCount() { + if (this.selectTechniquesAcrossTactics) { + if (this.selectSubtechniquesWithParent) { + // match across tactics + // match subtechniques and parents + // matches this part + // vvvvv + // T1001.001^TA1000 + let ids = new Set(); + this.selectedTechniques.forEach(unionID => ids.add(unionID.split('^')[0].split('.')[0])); + return ids.size; + } else { + // match across tactics + // differentiate subtechniques and parents + // matches this part + // vvvvv vvv + // T1001.001^TA1000 + let ids = new Set(); + this.selectedTechniques.forEach(unionID => ids.add(unionID.split('^')[0])); + return ids.size; + } + } else { + if (this.selectSubtechniquesWithParent) { + // differentiate tactics + // match subtechniques and parents + // matches this part + // vvvvv vvvvvv + // T1001.001^TA1000 + let ids = new Set(); + this.selectedTechniques.forEach(unionID => { + let split = unionID.split('^'); + let tacticID = split[1]; + let techniqueID = split[0].split('.')[0]; + ids.add(techniqueID + '^' + tacticID); + }); + return ids.size; + } else { + // differentiate tactics + // differentiate subtechniques and parents + // matches this part + // vvvvv vvv vvvvvv + // T1001.001^TA1000 + return this.selectedTechniques.size; + } + } + } + /** + * Returns true if the given tactic is selected + * @param {Tactic} tactic to check + * @return {boolean} true if selected + */ + isTacticSelected(tactic) { + let self = this; + let isSelected = tactic.techniques.every(function (technique) { + return self.isTechniqueSelected(technique, tactic); + }); + return isSelected; + } + /** + * Return true if currently editing any techniques, false otherwise + * @return {boolean} true if currently editing any techniques, false otherwise + */ + isCurrentlyEditing() { + return this.getSelectedTechniqueCount() > 0; + } + /** + * Edit the selected techniques + * @param {string} field the field to edit + * @param {any} value the value to place in the field + */ + editSelectedTechniques(field, value) { + this.selectedTechniques.forEach(id => { + this.getTechniqueVM_id(id)[field] = value; + }); + } + /** + * Edit the selected techniques list attribute + * @param {string} field the field to edit + * @param {(Link|Metadata)[]} values the list of values to place in the field + */ + editSelectedTechniqueValues(field, values) { + let fieldToType = { + links: _link__WEBPACK_IMPORTED_MODULE_3__.Link, + metadata: _metadata__WEBPACK_IMPORTED_MODULE_4__.Metadata + }; + this.selectedTechniques.forEach(id => { + const value_clone = values.map(value => { + // deep copy + let clone = new fieldToType[field](); + clone.deserialize(value.serialize()); + return clone; + }); + this.getTechniqueVM_id(id)[field] = value_clone; + }); + } + /** + * Reset the selected techniques' annotations to their default values + */ + resetSelectedTechniques() { + this.selectedTechniques.forEach(id => { + this.getTechniqueVM_id(id).resetAnnotations(); + }); + } + /** + * Get get a common value from the selected techniques + * @param field the field to get the common value from + * @return the value of the field if all selected techniques have the same value, otherwise "" + */ + getEditingCommonValue(field) { + if (!this.isCurrentlyEditing()) return ''; + let ids = Array.from(this.selectedTechniques); + let commonValue = this.getTechniqueVM_id(ids[0])[field]; + for (let i = 1; i < ids.length; i++) { + if (this.getTechniqueVM_id(ids[i])[field] != commonValue) return ''; + } + return commonValue; + } + /** + * If a technique has been selected, checks whether the link & metadata values of the selected technique match + * the link & metadata values of the first selected technique. If a technique has been deselected, removes it from + * the lists of mismatching techniques (if applicable) or re-evalutes the lists of mismatching + * techniques in the case where the deselected technique was the first selected technique + * @param selected true if the technique was selected, false if it was deselected + * @param id the technique_tactic_union_id of the technique + */ + checkValues(selected, id) { + if (selected) { + // selected technique(s) + let tvm = this.getTechniqueVM_id(id); + if (this.activeTvm.linkStr !== tvm.linkStr) this.linkMismatches.push(id); + if (this.activeTvm.metadataStr !== tvm.metadataStr) this.metadataMismatches.push(id); + } else { + // deselected technique(s) + if (this.linkMismatches.includes(id)) this.linkMismatches.splice(this.linkMismatches.indexOf(id), 1); + if (this.metadataMismatches.includes(id)) this.metadataMismatches.splice(this.metadataMismatches.indexOf(id), 1); + if (this.activeTvm && this.activeTvm.technique_tactic_union_id == id) { + // edge case where deselection was the first selected technique + let first_id = this.selectedTechniques.values().next().value; + this.activeTvm = first_id ? this.getTechniqueVM_id(first_id) : undefined; + // re-evaluate mismatched values + this.linkMismatches = []; + this.metadataMismatches = []; + for (let technique_tactic_id of Array.from(this.selectedTechniques.values())) { + let tvm = this.getTechniqueVM_id(technique_tactic_id); + if (this.activeTvm.linkStr !== tvm.linkStr) this.linkMismatches.push(technique_tactic_id); + if (this.activeTvm.metadataStr !== tvm.metadataStr) this.metadataMismatches.push(technique_tactic_id); + } + } + } + } + /** + * Filter tactics according to viewmodel state + * @param {Tactic[]} tactics to filter + * @param {Matrix} matrix that the tactics fall under + * @returns {Tactic[]} filtered tactics + */ + filterTactics(tactics, matrix) { + if (!this.loaded) return; // still initializing technique VMs + return tactics.filter(tactic => this.filterTechniques(tactic.techniques, tactic, matrix).length > 0); + } + /** + * Filter techniques according to viewModel state + * @param {Technique[]} techniques list of techniques to filter + * @param {Tactic} tactic tactic the techniques fall under + * @param {Matrix} matrix that the techniques fall under + * @returns {Technique[]} filtered techniques + */ + filterTechniques(techniques, tactic, matrix) { + return techniques.filter(technique => { + let techniqueVM = this.getTechniqueVM(technique, tactic); + // filter by enabled + if (this.hideDisabled && !this.isSubtechniqueEnabled(technique, techniqueVM, tactic)) { + techniqueVM.setIsVisible(false); + technique.subtechniques.forEach(subtechnique => { + let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic); + subtechniqueVM.setIsVisible(false); + }); + return false; + } + if (matrix.name == 'PRE-ATT&CK') { + techniqueVM.setIsVisible(true); + technique.subtechniques.forEach(subtechnique => { + let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic); + subtechniqueVM.setIsVisible(true); + }); + return true; // don't filter by platform if it's pre-attack + } + // filter by platform + let platforms = new Set(technique.platforms); + if (platforms.size == 0) { + platforms.add('None'); + } + for (let platform of this.filters.platforms.selection) { + if (platforms.has(platform)) { + techniqueVM.setIsVisible(true); + technique.subtechniques.forEach(subtechnique => { + let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic); + subtechniqueVM.setIsVisible(true); + }); + return true; //platform match + } + } + techniqueVM.setIsVisible(false); + technique.subtechniques.forEach(subtechnique => { + let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic); + subtechniqueVM.setIsVisible(false); + }); + return false; // no platform match + }); + } + isSubtechniqueEnabled(technique, techniqueVM, tactic) { + if (techniqueVM.enabled) return true;else if (technique.subtechniques.length > 0) { + return technique.subtechniques.some(subtechnique => { + let sub_platforms = new Set(subtechnique.platforms); + let filter = new Set(this.filters.platforms.selection); + let platforms = new Set(Array.from(filter.values()).filter(p => sub_platforms.has(p))); + return this.getTechniqueVM(subtechnique, tactic).enabled && platforms.size > 0; + }); + } else return false; + } + /** + * Sort techniques according to viewModel state + * @param {Technique[]} techniques techniques to sort + * @param {Tactic} tactic tactic the techniques fall under + * @returns {Technique[]} sorted techniques + */ + sortTechniques(techniques, tactic) { + return techniques.sort((technique1, technique2) => { + const techniqueVM1 = this.getTechniqueVM(technique1, tactic); + const techniqueVM2 = this.getTechniqueVM(technique2, tactic); + this.sortSubTechniques(technique1, tactic); + this.sortSubTechniques(technique2, tactic); + // prefer techniques scored 0 over unscored + let score1 = techniqueVM1.score.length > 0 ? Number(techniqueVM1.score) : Number.NEGATIVE_INFINITY; + let score2 = techniqueVM2.score.length > 0 ? Number(techniqueVM2.score) : Number.NEGATIVE_INFINITY; + if (this.layout.showAggregateScores) { + // if enabled, factor aggregate scores of parent techniques into sorting + if (technique1.subtechniques.length > 0) score1 = this.calculateAggregateScore(technique1, tactic); + if (technique2.subtechniques.length > 0) score2 = this.calculateAggregateScore(technique2, tactic); + } + return this.sortingAlgorithm(technique1, technique2, score1, score2); + }); + } + /** + * Sort subtechniques according to viewModel state + * @param {Technique} technique technique to sort + * @param {Tactic} tactic tactic the technique falls under + */ + sortSubTechniques(technique, tactic) { + technique.subtechniques.sort((technique1, technique2) => { + const techniqueVM1 = this.getTechniqueVM(technique1, tactic); + const techniqueVM2 = this.getTechniqueVM(technique2, tactic); + const score1 = techniqueVM1.score.length > 0 ? Number(techniqueVM1.score) : 0; + const score2 = techniqueVM2.score.length > 0 ? Number(techniqueVM2.score) : 0; + return this.sortingAlgorithm(technique1, technique2, score1, score2); + }); + } + /** + * Execute the sorting algorithm for techniques according to the viewModel state + * @param {Technique} technique1 the first technique in the comparison + * @param {Technique} technique2 the second technique in the comparison + * @param {number} score1 the first score in the comparison + * @param {number} score2 the second score in the comparison + * @returns technique or score comparison + */ + sortingAlgorithm(technique1, technique2, score1, score2) { + switch (this.sorting) { + case 1: + // Z-A + return technique2.name.localeCompare(technique1.name); + case 2: + // 1-2 + if (score1 === score2) { + return technique1.name.localeCompare(technique2.name); + } else { + return score1 - score2; + } + case 3: + // 2-1 + if (score1 === score2) { + return technique1.name.localeCompare(technique2.name); + } else { + return score2 - score1; + } + case 0: // A-Z + default: + return technique1.name.localeCompare(technique2.name); + } + } + calculateAggregateScore(technique, tactic) { + const tvm = this.getTechniqueVM(technique, tactic); + let score = tvm.score.length > 0 ? Number(tvm.score) : 0; + let validTechniquesCount = tvm.score.length > 0 ? 1 : 0; + let scores = [score]; + technique.subtechniques.forEach(subtechnique => { + const svm = this.getTechniqueVM(subtechnique, tactic); + const scoreNum = svm.score.length > 0 ? Number(svm.score) : 0; + if (svm.score.length > 0) { + validTechniquesCount += 1; + scores.push(scoreNum); + } + }); + if (validTechniquesCount === 0) return tvm.score.length > 0 ? score : Number.NEGATIVE_INFINITY; + let aggScore = 0; + switch (this.layout.aggregateFunction) { + case 'min': + if (scores.length > 0) aggScore = Math.min(...scores); + break; + case 'max': + if (scores.length > 0) aggScore = Math.max(...scores); + break; + case 'sum': + aggScore = scores.reduce((a, b) => a + b); + break; + case 'average': + default: + // Divide by count of all subtechniques + 1 (for parent technique) if counting unscored is enabled + // Otherwise, divide by count of all scored only + score = scores.reduce((a, b) => a + b); + aggScore = score / (this.layout.countUnscored ? technique.subtechniques.length + 1 : validTechniquesCount); + break; + } + aggScore = aggScore.toFixed(2); + tvm.aggregateScoreColor = this.gradient.getHexColor(aggScore.toString()); + tvm.aggregateScore = Number.isFinite(+aggScore) ? (+aggScore).toString() : ''; + return +aggScore; + } + /** + * Apply sort and filter state to techniques + * @param {Technique[]} techniques techniques to sort and filter + * @param {Tactic} tactic that the techniques fall under + * @param {Matrix} matrix that the techniques fall under + * @returns {Technique[]} sorted and filtered techniques + */ + applyControls(techniques, tactic, matrix) { + return this.sortTechniques(this.filterTechniques(techniques, tactic, matrix), tactic); + } + /** + * List of visible technique and subtechnique attack IDs + * @returns list of strings of each visible technique and subtechnique attack ID + */ + getVisibleTechniquesList() { + let visibleTechniques = []; + this.techniqueVMs.forEach(t => { + if (t.isVisible) { + visibleTechniques.push(t.technique_tactic_union_id); + } + }); + return visibleTechniques; + } + /** + * Number of modified hidden techniques + * @returns number of hidden techniques that are annotated + */ + modifiedHiddenTechniques() { + let modifiedHiddenTechniques = 0; + this.techniqueVMs.forEach(function (value, key) { + if (value.modified() && value.isVisible === false) { + modifiedHiddenTechniques++; + } + }); + return modifiedHiddenTechniques; + } + /** + * Stringify this ViewModel + * @return string representation + */ + serialize(downloadAnnotationsOnVisibleTechniques) { + let modifiedTechniqueVMs = []; + this.techniqueVMs.forEach(function (value, key) { + if (value.modified() && !downloadAnnotationsOnVisibleTechniques) { + modifiedTechniqueVMs.push(JSON.parse(value.serialize())); //only save techniqueVMs which have been modified + } else if (value.modified() && value.isVisible === true && downloadAnnotationsOnVisibleTechniques) { + modifiedTechniqueVMs.push(JSON.parse(value.serialize())); //only save techniqueVMs which have been modified and are visible + } + }); + let rep = {}; + rep.name = this.name; + rep.versions = { + attack: this.dataService.getDomain(this.domainVersionID).getVersion(), + navigator: _utils_globals__WEBPACK_IMPORTED_MODULE_6__.navVersion, + layer: _utils_globals__WEBPACK_IMPORTED_MODULE_6__.layerVersion + }; + let domain = this.dataService.getDomain(this.domainVersionID); + rep.domain = domain.domain_identifier; + if (domain.isCustom) { + // custom data url + rep.customDataURL = domain.urls[0]; + } + rep.description = this.description; + rep.filters = JSON.parse(this.filters.serialize()); + rep.sorting = this.sorting; + rep.layout = this.layout.serialize(); + rep.hideDisabled = this.hideDisabled; + rep.techniques = modifiedTechniqueVMs; + rep.gradient = JSON.parse(this.gradient.serialize()); + rep.legendItems = JSON.parse(JSON.stringify(this.legendItems)); + rep.metadata = this.metadata.filter(m => m.valid()).map(m => m.serialize()); + rep.links = this.links.filter(l => l.valid()).map(l => l.serialize()); + rep.showTacticRowBackground = this.showTacticRowBackground; + rep.tacticRowBackground = this.tacticRowBackground; + rep.selectTechniquesAcrossTactics = this.selectTechniquesAcrossTactics; + rep.selectSubtechniquesWithParent = this.selectSubtechniquesWithParent; + rep.selectVisibleTechniques = this.selectVisibleTechniques; + return JSON.stringify(rep, null, '\t'); + } + /** + * Restore the domain and version from a string + * @param rep string to restore from + * @return string representation of the obj version + */ + deserializeDomainVersionID(rep) { + let versionNumber = ''; + let obj = typeof rep == 'string' ? JSON.parse(rep) : rep; + this.name = obj.name; + // layer with no specified version defaults to current version + this.version = this.dataService.latestVersion.number; + if ('versions' in obj) { + if ('attack' in obj.versions) { + if (typeof obj.versions.attack === 'string') { + if (obj.versions.attack.length > 0) this.version = obj.versions.attack.match(/\d+/g)[0]; + } else console.error('TypeError: attack version field is not a string'); + } + versionNumber = String(obj.versions['layer']); + } + if ('version' in obj) { + // backwards compatibility with Layer Format 3 + versionNumber = String(obj.version); + } + // patch for old domain name convention + if (obj.domain in this.dataService.domain_backwards_compatibility) { + this.domain = this.dataService.domain_backwards_compatibility[obj.domain]; + } else { + this.domain = obj.domain; + } + this.domainVersionID = this.dataService.getDomainVersionID(this.domain, this.version); + return versionNumber; + } + /** + * Restore this vm from a string + * @param rep string to restore from + */ + deserialize(rep, restoreTechniques = true) { + let obj = typeof rep == 'string' ? JSON.parse(rep) : rep; + if ('description' in obj) { + if (typeof obj.description === 'string') this.description = obj.description;else console.error('TypeError: description field is not a string'); + } + if ('filters' in obj) { + this.filters.deserialize(obj.filters); + } + if ('sorting' in obj) { + if (typeof obj.sorting === 'number') this.sorting = obj.sorting;else console.error('TypeError: sorting field is not a number'); + } + if ('hideDisabled' in obj) { + if (typeof obj.hideDisabled === 'boolean') this.hideDisabled = obj.hideDisabled;else console.error('TypeError: hideDisabled field is not a boolean'); + } + if ('gradient' in obj) { + this.gradient = new _gradient__WEBPACK_IMPORTED_MODULE_1__.Gradient(); + this.gradient.deserialize(JSON.stringify(obj.gradient)); + } + if ('legendItems' in obj) { + for (let item of obj.legendItems) { + let legendItem = { + color: '#defa217', + label: 'default label' + }; + if (!('label' in item)) { + console.error("Error: LegendItem required field 'label' not present"); + continue; + } + if (!('color' in item)) { + console.error("Error: LegendItem required field 'label' not present"); + continue; + } + if (typeof item.label === 'string') { + legendItem.label = item.label; + } else { + console.error('TypeError: legendItem label field is not a string'); + continue; + } + if (typeof item.color === 'string' && (0,tinycolor2__WEBPACK_IMPORTED_MODULE_7__["default"])(item.color).isValid()) { + legendItem.color = item.color; + } else { + console.error('TypeError: legendItem color field is not a color-string:', item.color, '(', typeof item.color, ')'); + continue; + } + this.legendItems.push(legendItem); + } + } + if ('showTacticRowBackground' in obj) { + if (typeof obj.showTacticRowBackground === 'boolean') this.showTacticRowBackground = obj.showTacticRowBackground;else console.error('TypeError: showTacticRowBackground field is not a boolean'); + } + if ('tacticRowBackground' in obj) { + if (typeof obj.tacticRowBackground === 'string' && (0,tinycolor2__WEBPACK_IMPORTED_MODULE_7__["default"])(obj.tacticRowBackground).isValid()) this.tacticRowBackground = obj.tacticRowBackground;else console.error('TypeError: tacticRowBackground field is not a color-string:', obj.tacticRowBackground, '(', typeof obj.tacticRowBackground, ')'); + } + if ('selectTechniquesAcrossTactics' in obj) { + if (typeof obj.selectTechniquesAcrossTactics === 'boolean') this.selectTechniquesAcrossTactics = obj.selectTechniquesAcrossTactics;else console.error('TypeError: selectTechniquesAcrossTactics field is not a boolean'); + } + if ('selectSubtechniquesWithParent' in obj) { + if (typeof obj.selectSubtechniquesWithParent === 'boolean') this.selectSubtechniquesWithParent = obj.selectSubtechniquesWithParent;else console.error('TypeError: selectSubtechniquesWithParent field is not a boolean'); + } + if ('selectVisibleTechniques' in obj) { + if (typeof obj.selectVisibleTechniques === 'boolean') this.selectVisibleTechniques = obj.selectVisibleTechniques;else console.error('TypeError: selectVisibleTechniques field is not a boolean'); + } + if ('techniques' in obj && restoreTechniques) { + if (obj.techniques.length > 0) { + for (let objTechnique of obj.techniques) { + if ('tactic' in objTechnique) { + let tvm = new _technique_vm__WEBPACK_IMPORTED_MODULE_5__.TechniqueVM(''); + tvm.deserialize(JSON.stringify(objTechnique), objTechnique.techniqueID, objTechnique.tactic); + this.setTechniqueVM(tvm); + } else { + // occurs in multiple tactics, match to Technique by attackID + for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) { + if (technique.attackID == objTechnique.techniqueID) { + // match technique + // don't load deprecated/revoked, causes crash since tactics don't get loaded on revoked techniques + if (technique.deprecated || technique.revoked) break; + for (let tactic of technique.tactics) { + let tvm = new _technique_vm__WEBPACK_IMPORTED_MODULE_5__.TechniqueVM(''); + tvm.deserialize(JSON.stringify(objTechnique), objTechnique.techniqueID, tactic); + this.setTechniqueVM(tvm); + } + break; + } + //check against subtechniques + for (let subtechnique of technique.subtechniques) { + if (subtechnique.attackID == objTechnique.techniqueID) { + // don't load deprecated/revoked, causes crash since tactics don't get loaded on revoked techniques + if (subtechnique.deprecated || subtechnique.revoked) break; + for (let tactic of subtechnique.tactics) { + let tvm = new _technique_vm__WEBPACK_IMPORTED_MODULE_5__.TechniqueVM(''); + tvm.deserialize(JSON.stringify(objTechnique), objTechnique.techniqueID, tactic); + this.setTechniqueVM(tvm); + } + break; + } + } + } + } + } + } + } + if ('metadata' in obj) { + for (let metadataObj of obj.metadata) { + let m = new _metadata__WEBPACK_IMPORTED_MODULE_4__.Metadata(); + m.deserialize(metadataObj); + if (m.valid()) this.metadata.push(m); + } + } + if ('links' in obj) { + for (let link of obj.links) { + let l = new _link__WEBPACK_IMPORTED_MODULE_3__.Link(); + l.deserialize(link); + if (l.valid()) this.links.push(l); + } + } + // add custom data URL + if ('customDataURL' in obj) { + this.bundleURL = obj.customDataURL; + } + if ('layout' in obj) { + this.layout.deserialize(obj.layout); + } else if ('viewMode' in obj) { + /* + * viewMode backwards compatibility: + * 0: full table (side layout, show name) + * 1: compact table (side layout, show ID) + * 2: mini table (mini layout, show neither name nor ID) + */ + if (typeof obj.viewMode === 'number') { + switch (obj.viewMode) { + case 1: + this.layout.layout = 'side'; + this.layout.showName = false; + this.layout.showID = true; + break; + case 2: + this.layout.layout = 'mini'; + this.layout.showName = false; + this.layout.showID = false; + break; + case 0: + default: + break; + //default matrix layout already initialized + } + } else console.error('TypeError: viewMode field is not a number'); + } + this.updateGradient(); + } + /* Add a color to the end of the gradient */ + addGradientColor() { + this.gradient.addColor(); + this.updateGradient(); + } + /** + * Remove color at the given index + * @param index index to remove color at + */ + removeGradientColor(index) { + this.gradient.removeColor(index); + this.updateGradient(); + } + /* Update this vm's gradient */ + updateGradient() { + this.gradient.updateGradient(); + let self = this; + this.techniqueVMs.forEach(function (tvm, key) { + tvm.scoreColor = self.gradient.getHexColor(tvm.score); + }); + this.updateLegendColorPresets(); + } + /** + * Update the score color of a single technique VM to match the current + * score and gradient + * @param tvm technique VM to update + */ + updateScoreColor(tvm) { + tvm.scoreColor = this.gradient.getHexColor(tvm.score); + } + addLegendItem() { + let legendItem = { + label: 'NewItem', + color: '#00ffff' + }; + this.legendItems.push(legendItem); + } + deleteLegendItem(index) { + this.legendItems.splice(index, 1); + } + clearLegend() { + this.legendItems = []; + } + updateLegendColorPresets() { + this.legendColorPresets = []; + this.backgroundPresets.forEach(preset => this.legendColorPresets.push(preset)); + this.gradient.colors.forEach(color => this.legendColorPresets.push(color.color)); + } +} + +/***/ }), + +/***/ 75193: +/*!***************************************************!*\ + !*** ./src/app/datatable/data-table.component.ts ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DataTableComponent: () => (/* binding */ DataTableComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var exceljs_dist_exceljs_min_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! exceljs/dist/exceljs.min.js */ 54058); +/* harmony import */ var exceljs_dist_exceljs_min_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(exceljs_dist_exceljs_min_js__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinycolor2 */ 62002); +/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/utils */ 37709); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _tabs_tabs_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tabs/tabs.component */ 10154); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/platform-browser */ 80436); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../services/viewmodels.service */ 57833); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../services/config.service */ 43696); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @angular/material/form-field */ 24950); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @angular/material/input */ 95541); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @angular/material/progress-spinner */ 41134); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); +/* harmony import */ var ngx_color_picker__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ngx-color-picker */ 36245); +/* harmony import */ var _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @angular/material/sidenav */ 17049); +/* harmony import */ var _matrix_matrix_side_matrix_side_component__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../matrix/matrix-side/matrix-side.component */ 31132); +/* harmony import */ var _matrix_matrix_flat_matrix_flat_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../matrix/matrix-flat/matrix-flat.component */ 91388); +/* harmony import */ var _matrix_matrix_mini_matrix_mini_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../matrix/matrix-mini/matrix-mini.component */ 31524); +/* harmony import */ var _sidebar_sidebar_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../sidebar/sidebar.component */ 7244); +/* harmony import */ var _list_input_list_input_component__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../list-input/list-input.component */ 54120); + + + + + + + + + + + + + + + + + + + + + + + + + +const _c0 = ["scrollRef"]; +const _c1 = a0 => ({ + disabled: a0 +}); +const _c2 = () => ["platforms"]; +const _c3 = () => ["sorting alphabetically ascending", "sorting alphabetically descending", "sorting by score ascending", "sorting by score descending"]; +const _c4 = () => ["alpha_asc", "alpha_desc", "numeric_asc", "numeric_desc"]; +const _c5 = () => ["#ddd", "#aaaaaa", "#205B8F", "#B9482D"]; +const _c6 = () => ["expand subtechniques", "expand annotated subtechniques", "collapse subtechniques"]; +const _c7 = () => ["expanded", "annotated", "none"]; +const _c8 = (a0, a1) => ({ + viewModel: a0, + list: a1, + level: "technique", + type: "links", + nameField: "label", + valueField: "url" +}); +const _c9 = (a0, a1) => ({ + viewModel: a0, + list: a1, + level: "technique", + type: "metadata", + nameField: "name", + valueField: "value" +}); +function DataTableComponent_div_4_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_4_Template_div_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.setCurrentControlSection("selection")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, " Selection Controls "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("active", ctx_r1.currentControlSection === "selection" && ctx_r1.showControlsBar); + } +} +function DataTableComponent_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_5_Template_div_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.setCurrentControlSection("layer")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, " Layer Controls "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("active", ctx_r1.currentControlSection === "layer" && ctx_r1.showControlsBar); + } +} +function DataTableComponent_div_6_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_6_Template_div_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.setCurrentControlSection("technique")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, " Technique Controls "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("active", ctx_r1.currentControlSection === "technique" && ctx_r1.showControlsBar); + } +} +function DataTableComponent_ul_7_li_1_div_1_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("selection_controls", "search"))); + } +} +function DataTableComponent_ul_7_li_1_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_1_div_1_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r6); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openSearch()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_1_div_1_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "search"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](2, _c1, ctx_r1.viewModel.sidebarContentType === "layerUpgrade")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["selection"]); + } +} +function DataTableComponent_ul_7_li_1_div_2_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"]("Deselect ", ctx_r1.viewModel.getSelectedTechniqueCount(), " Techniques"); + } +} +function DataTableComponent_ul_7_li_1_div_2_Template(rf, ctx) { + if (rf & 1) { + const _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_1_div_2_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r7); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + ctx_r1.viewModel.clearSelectedTechniques(); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.currentDropdown = null); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_1_div_2_span_2_Template, 2, 1, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "clear"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "span", 32); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpropertyInterpolate1"]("matTooltip", "deselect ", ctx_r1.viewModel.getSelectedTechniqueCount(), " techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["selection"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](ctx_r1.viewModel.getSelectedTechniqueCount()); + } +} +function DataTableComponent_ul_7_li_1_div_3_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("selection_controls", "selecting_techniques"))); + } +} +function DataTableComponent_ul_7_li_1_div_3_div_5_div_6_Template(rf, ctx) { + if (rf & 1) { + const _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div")(1, "input", 40); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_1_div_3_div_5_div_6_Template_input_ngModelChange_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r10); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.selectSubtechniquesWithParent, $event) || (ctx_r1.viewModel.selectSubtechniquesWithParent = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "label", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "select sub-techniques with parent"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.selectSubtechniquesWithParent); + } +} +function DataTableComponent_ul_7_li_1_div_3_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 35, 2)(2, "div")(3, "input", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_1_div_3_div_5_Template_input_ngModelChange_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r9); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.selectTechniquesAcrossTactics, $event) || (ctx_r1.viewModel.selectTechniquesAcrossTactics = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "label", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "select techniques across tactics"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](6, DataTableComponent_ul_7_li_1_div_3_div_5_div_6_Template, 4, 1, "div", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](7, "div")(8, "input", 38); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_1_div_3_div_5_Template_input_ngModelChange_8_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r9); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.selectVisibleTechniques, $event) || (ctx_r1.viewModel.selectVisibleTechniques = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](9, "label", 39); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](10, "select only visible techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const dropdown_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r11)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.selectTechniquesAcrossTactics); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("subtechniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.selectVisibleTechniques); + } +} +function DataTableComponent_ul_7_li_1_div_3_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 33); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_1_div_3_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r8); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "selection_behavior" ? "selection_behavior" : null); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_1_div_3_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "lock"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_1_div_3_div_5_Template, 11, 5, "div", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["selection"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "selection_behavior"); + } +} +function DataTableComponent_ul_7_li_1_div_8_div_10_Template(rf, ctx) { + if (rf & 1) { + const _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div")(1, "input", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_1_div_8_div_10_Template_input_ngModelChange_1_listener($event) { + const control_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.getControl("selection_controls", control_r14).enabled, $event) || (ctx_r1.getControl("selection_controls", control_r14).enabled = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](4, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const control_r14 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.getControl("selection_controls", control_r14).enabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵattribute"]("id", "include-" + control_r14 + "-toggle"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵattribute"]("for", "include-" + control_r14 + "-toggle"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](4, 4, control_r14)); + } +} +function DataTableComponent_ul_7_li_1_div_8_Template(rf, ctx) { + if (rf & 1) { + const _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 35, 2)(2, "div")(3, "input", 42); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_1_div_8_Template_input_ngModelChange_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r12); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.showControlLabels["selection"], $event) || (ctx_r1.showControlLabels["selection"] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "label", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "Show Control Labels"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "div")(7, "div")(8, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](9, "Included Controls:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](10, DataTableComponent_ul_7_li_1_div_8_div_10_Template, 5, 6, "div", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const dropdown_r15 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r15)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.showControlLabels["selection"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.selectionControlsList); + } +} +function DataTableComponent_ul_7_li_1_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "li"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_1_div_1_Template, 5, 4, "div", 21)(2, DataTableComponent_ul_7_li_1_div_2_Template, 7, 4, "div", 21)(3, DataTableComponent_ul_7_li_1_div_3_Template, 6, 2, "div", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "div", 22)(5, "div", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_1_Template_div_click_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleSelectionControlsSettingsDropdown()); + })("keydown", function DataTableComponent_ul_7_li_1_Template_div_keydown_5_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleKeyDownSelection($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "span", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](7, " more_vert "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](8, DataTableComponent_ul_7_li_1_div_8_Template, 11, 4, "div", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("label", ctx_r1.showControlLabels["selection"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("search") && ctx_r1.isControlIncluded("selection_controls", "search")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("deselect_all") && ctx_r1.isControlIncluded("selection_controls", "deselect_all")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("selecting_techniques") && ctx_r1.isControlIncluded("selection_controls", "selecting_techniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "selection_control_settings"); + } +} +function DataTableComponent_ul_7_li_2_div_1_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("layer_controls", "layer_settings"))); + } +} +function DataTableComponent_ul_7_li_2_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r17 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 48); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_1_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r17); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openLayerSettings()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_1_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 49); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, " settings "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_2_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("layer_controls", "download_layer"))); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_6_Template(rf, ctx) { + if (rf & 1) { + const _r20 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 56); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_2_div_5_div_6_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r20); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.saveLayerLocally()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 57); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "code"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_7_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 60); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, " code_blocks "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_7_Template(rf, ctx) { + if (rf & 1) { + const _r21 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 58); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_2_div_5_div_7_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r21); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.saveAllLayersLocally()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_2_div_5_div_7_span_2_Template, 2, 0, "span", 59); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModelsService.viewModels.length > 1); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_8_Template(rf, ctx) { + if (rf & 1) { + const _r22 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 61); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_2_div_5_div_8_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r22); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.saveLayerLocallyExcel()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 57); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "grid_on"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_9_Template(rf, ctx) { + if (rf & 1) { + const _r23 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 62); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_2_div_5_div_9_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r23); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.saveAllLayersLocallyExcel()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 60); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "table_view"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_10_Template(rf, ctx) { + if (rf & 1) { + const _r24 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 63); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_2_div_5_div_10_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r24); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.exportRender()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 64); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "camera_alt"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_18_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 65)(1, "span", 66); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "warning"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "label", 67); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"]("", ctx_r1.viewModel.modifiedHiddenTechniques(), " hidden technique has annotations"); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_div_19_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 65)(1, "span", 66); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "warning"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "label", 67); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"]("", ctx_r1.viewModel.modifiedHiddenTechniques(), " hidden techniques have annotations"); + } +} +function DataTableComponent_ul_7_li_2_div_2_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r19 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 35, 2)(2, "div")(3, "b", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "Export"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](6, DataTableComponent_ul_7_li_2_div_2_div_5_div_6_Template, 4, 0, "div", 21)(7, DataTableComponent_ul_7_li_2_div_2_div_5_div_7_Template, 3, 1, "div", 21)(8, DataTableComponent_ul_7_li_2_div_2_div_5_div_8_Template, 4, 0, "div", 21)(9, DataTableComponent_ul_7_li_2_div_2_div_5_div_9_Template, 4, 0, "div", 21)(10, DataTableComponent_ul_7_li_2_div_2_div_5_div_10_Template, 4, 0, "div", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](11, "div")(12, "b", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](13, "Options"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](14, "div")(15, "input", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_2_div_2_div_5_Template_input_ngModelChange_15_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r19); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.downloadAnnotationsOnVisibleTechniques, $event) || (ctx_r1.downloadAnnotationsOnVisibleTechniques = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](16, "label", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](17, " Only download annotations on visible techniques "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](18, DataTableComponent_ul_7_li_2_div_2_div_5_div_18_Template, 5, 1, "div", 55)(19, DataTableComponent_ul_7_li_2_div_2_div_5_div_19_Template, 5, 1, "div", 55); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const dropdown_r25 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r25)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("download_layer")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("download_layer") && ctx_r1.viewModelsService.viewModels.length > 1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("export_excel")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("export_excel") && ctx_r1.viewModelsService.viewModels.length > 1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("export_render")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.downloadAnnotationsOnVisibleTechniques); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.downloadAnnotationsOnVisibleTechniques && ctx_r1.viewModel.modifiedHiddenTechniques() == 1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.downloadAnnotationsOnVisibleTechniques && ctx_r1.viewModel.modifiedHiddenTechniques() > 1); + } +} +function DataTableComponent_ul_7_li_2_div_2_Template(rf, ctx) { + if (rf & 1) { + const _r18 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 50); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_2_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r18); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleExportDropdown()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_2_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 51); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "file_download"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_2_div_2_div_5_Template, 20, 10, "div", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "export"); + } +} +function DataTableComponent_ul_7_li_2_div_3_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("layer_controls", "filters"))); + } +} +function DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r27 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 74)(1, "input", 75); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_div_1_Template_input_click_1_listener() { + const filterOption_r28 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r27).$implicit; + const filter_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.filters.toggleInFilter(filter_r29, filterOption_r28)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "label", 76); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const filterOption_r28 = ctx.$implicit; + const filter_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("id", filterOption_r28)("checked", ctx_r1.viewModel.filters.inFilter(filter_r29, filterOption_r28)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("for", filterOption_r28); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](filterOption_r28); + } +} +function DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_div_1_Template, 4, 4, "div", 73); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const filter_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.viewModel.filters[filter_r29].options); + } +} +function DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const filter_r29 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"]("Data does not include ", filter_r29, ""); + } +} +function DataTableComponent_ul_7_li_2_div_3_div_5_div_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 72)(1, "b", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](3, DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_Template, 2, 1, "div", 20)(4, DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_4_Template, 2, 1, "div", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const filter_r29 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](filter_r29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.filters[filter_r29].options.length !== 0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.filters[filter_r29].options.length == 0); + } +} +function DataTableComponent_ul_7_li_2_div_3_div_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 70, 2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_3_div_5_div_2_Template, 5, 3, "div", 71); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const dropdown_r30 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r30)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction0"](3, _c2)); + } +} +function DataTableComponent_ul_7_li_2_div_3_Template(rf, ctx) { + if (rf & 1) { + const _r26 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 68); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_3_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r26); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "filters" ? "filters" : null); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_3_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "filter_list"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_2_div_3_div_5_Template, 3, 4, "div", 69); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "filters"); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_3_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "A-Z Ascending"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_4_ng_container_3_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](3, "mat-icon", 79); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_4_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "A-Z Descending"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_4_ng_container_4_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](3, "mat-icon", 80); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_5_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Numerically Ascending"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_4_ng_container_5_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](3, "mat-icon", 81); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_6_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Numerically Descending"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_4_ng_container_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_4_ng_container_6_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](3, "mat-icon", 82); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_4_Template(rf, ctx) { + if (rf & 1) { + const _r31 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_4_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r31); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.sorting = (ctx_r1.viewModel.sorting + 1) % 4); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](3, DataTableComponent_ul_7_li_2_div_4_ng_container_3_Template, 4, 1, "ng-container", 78)(4, DataTableComponent_ul_7_li_2_div_4_ng_container_4_Template, 4, 1, "ng-container", 78)(5, DataTableComponent_ul_7_li_2_div_4_ng_container_5_Template, 4, 1, "ng-container", 78)(6, DataTableComponent_ul_7_li_2_div_4_ng_container_6_Template, 4, 1, "ng-container", 78); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matTooltip", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction0"](6, _c3)[ctx_r1.viewModel.sorting]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitch", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction0"](7, _c4)[ctx_r1.viewModel.sorting]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "alpha_asc"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "alpha_desc"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "numeric_asc"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "numeric_desc"); + } +} +function DataTableComponent_ul_7_li_2_div_5_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("layer_controls", "color_setup"))); + } +} +function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template(rf, ctx) { + if (rf & 1) { + const _r34 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div")(1, "div", 105)(2, "button", 106); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_button_click_2_listener() { + const $i_r35 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34).index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.removeGradientColor($i_r35)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, " remove "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "div", 107)(5, "input", 108); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("colorPickerChange", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_colorPickerChange_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + })("cpPresetColorsChange", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_cpPresetColorsChange_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + })("cpSliderChange", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_cpSliderChange_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + })("cpInputChange", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_cpInputChange_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("colorPickerChange", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_colorPickerChange_5_listener($event) { + const gradientStep_r36 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](gradientStep_r36.color, $event) || (gradientStep_r36.color = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + })("ngModelChange", function DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_ngModelChange_5_listener($event) { + const gradientStep_r36 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r34).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](gradientStep_r36.color, $event) || (gradientStep_r36.color = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const gradientStep_r36 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", ctx_r1.viewModel.gradient.colors.length == 2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background", gradientStep_r36.color); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("colorPicker", gradientStep_r36.color)("ngModel", gradientStep_r36.color); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("cpPresetColors", ctx_r1.viewModel.gradient.options); + } +} +function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template(rf, ctx) { + if (rf & 1) { + const _r37 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 109)(1, "div", 110); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r37); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + ctx_r1.viewModel.gradient.setGradientPreset("redgreen"); + ctx_r1.presetsMenuVisible = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, " red to green "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "div", 110); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r37); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + ctx_r1.viewModel.gradient.setGradientPreset("greenred"); + ctx_r1.presetsMenuVisible = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, " green to red "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "div", 110); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r37); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + ctx_r1.viewModel.gradient.setGradientPreset("bluered"); + ctx_r1.presetsMenuVisible = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](6, " blue to red "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](7, "div", 110); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_7_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r37); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + ctx_r1.viewModel.gradient.setGradientPreset("redblue"); + ctx_r1.presetsMenuVisible = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](8, " red to blue "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](9, "div", 110); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_9_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r37); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + ctx_r1.viewModel.gradient.setGradientPreset("transparentblue"); + ctx_r1.presetsMenuVisible = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](10, " transparent to blue "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](11, "div", 110); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_11_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r37); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + ctx_r1.viewModel.gradient.setGradientPreset("transparentred"); + ctx_r1.presetsMenuVisible = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](12, " transparent to red "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.presetToTinyColor("redgreen"))); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.presetToTinyColor("greenred"))); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.presetToTinyColor("bluered"))); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.presetToTinyColor("redblue"))); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.presetToTinyColor("transparentblue"))); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.presetToTinyColor("transparentred"))); + } +} +function DataTableComponent_ul_7_li_2_div_5_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r33 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 85, 2)(2, "div", 86)(3, "div", 87); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "Tactic Row Background"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "div", 88)(6, "input", 89); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_6_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.showTacticRowBackground, $event) || (ctx_r1.viewModel.showTacticRowBackground = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](7, "label", 90); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](8, "show"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](9, "input", 91); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("colorPickerChange", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_colorPickerChange_9_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.tacticRowBackground, $event) || (ctx_r1.viewModel.tacticRowBackground = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + })("ngModelChange", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_9_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.tacticRowBackground, $event) || (ctx_r1.viewModel.tacticRowBackground = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](10, "div", 92)(11, "div", 87); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](12, "Scoring Gradient"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](13, "div", 93)(14, "table")(15, "tr", 94)(16, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](17, "Low value:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](18, "td", 95)(19, "input", 96); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("input", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_input_19_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_19_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.gradient.minValue, $event) || (ctx_r1.viewModel.gradient.minValue = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](20, "tr")(21, "td", 97); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](22, DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template, 6, 6, "div", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](23, "td", 95); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](24, "tr")(25, "td")(26, "button", 98); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_button_click_26_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.addGradientColor()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](27, "add another color"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](28, "tr", 99)(29, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](30, "High value:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](31, "td", 95)(32, "input", 100); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("input", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_input_32_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_32_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.gradient.maxValue, $event) || (ctx_r1.viewModel.gradient.maxValue = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](33, "div", 101)(34, "div", 102); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_div_5_Template_div_click_34_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.presetsMenuVisible = !ctx_r1.presetsMenuVisible); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](35, " presets "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](36, "span", 103); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](37, "\u25BC"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](38, DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template, 13, 12, "div", 104); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const dropdown_r38 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r38)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.showTacticRowBackground); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background", ctx_r1.viewModel.tacticRowBackground); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("colorPicker", ctx_r1.viewModel.tacticRowBackground)("ngModel", ctx_r1.viewModel.tacticRowBackground); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("cpPresetColors", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction0"](16, _c5)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](10); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.gradient.minValue); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("max", ctx_r1.viewModel.gradient.maxValue); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.viewModel.gradient.colors); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background-image", ctx_r1.sanitize(ctx_r1.viewModel.gradient.gradient.css("linear", "to bottom"))); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](9); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.gradient.maxValue); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("min", ctx_r1.viewModel.gradient.minValue); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.presetsMenuVisible); + } +} +function DataTableComponent_ul_7_li_2_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r32 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 83); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_5_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r32); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "colorSetup" ? "colorSetup" : null; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.updateGradient()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_5_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "palette"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_2_div_5_div_5_Template, 39, 17, "div", 84); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "colorSetup"); + } +} +function DataTableComponent_ul_7_li_2_div_6_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Hide Disabled"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_6_span_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 113); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "visibility_off"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_6_span_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Show Disabled"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_6_span_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 114); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "visibility"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_6_Template(rf, ctx) { + if (rf & 1) { + const _r39 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_6_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r39); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.hideDisabled = !ctx_r1.viewModel.hideDisabled); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_2_div_6_span_2_Template, 2, 0, "span", 27)(3, DataTableComponent_ul_7_li_2_div_6_span_3_Template, 2, 0, "span", 111)(4, DataTableComponent_ul_7_li_2_div_6_span_4_Template, 2, 0, "span", 27)(5, DataTableComponent_ul_7_li_2_div_6_span_5_Template, 2, 0, "span", 112); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matTooltip", ctx_r1.viewModel.hideDisabled ? "Hide Disabled" : "Show Disabled"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"] && ctx_r1.viewModel.hideDisabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.hideDisabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"] && !ctx_r1.viewModel.hideDisabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", !ctx_r1.viewModel.hideDisabled); + } +} +function DataTableComponent_ul_7_li_2_div_7_ng_container_3_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Expand All Sub-techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_7_ng_container_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_7_ng_container_3_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 115); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "unfold_more"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_7_ng_container_4_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Expand Annotated Sub-techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_7_ng_container_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_7_ng_container_4_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](3, "mat-icon", 116); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_7_ng_container_5_span_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "Collapse Sub-techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_2_div_7_ng_container_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_7_ng_container_5_span_1_Template, 2, 0, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 117); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "unfold_less"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["layer"]); + } +} +function DataTableComponent_ul_7_li_2_div_7_Template(rf, ctx) { + if (rf & 1) { + const _r40 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_div_7_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r40); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + ctx_r1.showSubtechniquesType = (ctx_r1.showSubtechniquesType + 1) % 4; + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.showSubtechniquesTypeAlgorithm()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](3, DataTableComponent_ul_7_li_2_div_7_ng_container_3_Template, 4, 1, "ng-container", 78)(4, DataTableComponent_ul_7_li_2_div_7_ng_container_4_Template, 4, 1, "ng-container", 78)(5, DataTableComponent_ul_7_li_2_div_7_ng_container_5_Template, 4, 1, "ng-container", 78); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matTooltip", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction0"](5, _c6)[ctx_r1.showSubtechniquesType]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitch", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction0"](6, _c7)[ctx_r1.showSubtechniquesType]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "expanded"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "annotated"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngSwitchCase", "none"); + } +} +function DataTableComponent_ul_7_li_2_div_12_div_10_Template(rf, ctx) { + if (rf & 1) { + const _r42 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div")(1, "input", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_2_div_12_div_10_Template_input_ngModelChange_1_listener($event) { + const control_r43 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r42).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.getControl("layer_controls", control_r43).enabled, $event) || (ctx_r1.getControl("layer_controls", control_r43).enabled = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](4, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const control_r43 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.getControl("layer_controls", control_r43).enabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵattribute"]("id", "include-" + control_r43 + "-toggle"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵattribute"]("for", "include-" + control_r43 + "-toggle"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](4, 4, control_r43)); + } +} +function DataTableComponent_ul_7_li_2_div_12_Template(rf, ctx) { + if (rf & 1) { + const _r41 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 35, 2)(2, "div")(3, "input", 42); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_2_div_12_Template_input_ngModelChange_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r41); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.showControlLabels["layer"], $event) || (ctx_r1.showControlLabels["layer"] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "label", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "Show Control Labels"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "div")(7, "div")(8, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](9, "Included Controls:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](10, DataTableComponent_ul_7_li_2_div_12_div_10_Template, 5, 6, "div", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const dropdown_r44 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r44)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.showControlLabels["layer"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.layerControlsList); + } +} +function DataTableComponent_ul_7_li_2_Template(rf, ctx) { + if (rf & 1) { + const _r16 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "li"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_2_div_1_Template, 5, 1, "div", 21)(2, DataTableComponent_ul_7_li_2_div_2_Template, 6, 2, "div", 21)(3, DataTableComponent_ul_7_li_2_div_3_Template, 6, 2, "div", 21)(4, DataTableComponent_ul_7_li_2_div_4_Template, 7, 8, "div", 21)(5, DataTableComponent_ul_7_li_2_div_5_Template, 6, 2, "div", 21)(6, DataTableComponent_ul_7_li_2_div_6_Template, 6, 5, "div", 21)(7, DataTableComponent_ul_7_li_2_div_7_Template, 6, 7, "div", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](8, "div", 22)(9, "div", 47); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_2_Template_div_click_9_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r16); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleLayerControlsSettingsDropdown()); + })("keydown", function DataTableComponent_ul_7_li_2_Template_div_keydown_9_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r16); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleKeyDownLayer($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](10, "span", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](11, " more_vert "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](12, DataTableComponent_ul_7_li_2_div_12_Template, 11, 4, "div", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("label", ctx_r1.showControlLabels["layer"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("layer_settings") && ctx_r1.isControlIncluded("layer_controls", "layer_settings")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("download_layer") && ctx_r1.isControlIncluded("layer_controls", "download_layer")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("filters") && ctx_r1.isControlIncluded("layer_controls", "filters")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("sorting") && ctx_r1.isControlIncluded("layer_controls", "sorting")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("color_setup") && ctx_r1.isControlIncluded("layer_controls", "color_setup")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("toggle_hide_disabled") && ctx_r1.isControlIncluded("layer_controls", "toggle_hide_disabled")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("subtechniques") && ctx_r1.isControlIncluded("layer_controls", "subtechniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "layer_control_settings"); + } +} +function DataTableComponent_ul_7_li_3_div_1_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "disable_techniques"))); + } +} +function DataTableComponent_ul_7_li_3_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r46 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 119); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_1_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r46); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.setSelectedState()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_1_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 120); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "texture"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](3, _c1, !ctx_r1.viewModel.isCurrentlyEditing()))("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + } +} +function DataTableComponent_ul_7_li_3_div_2_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "manual_color"))); + } +} +function DataTableComponent_ul_7_li_3_div_2_div_5_div_4_Template(rf, ctx) { + if (rf & 1) { + const _r49 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 127); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_2_div_5_div_4_Template_div_click_0_listener() { + const color_r50 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r49).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.editSelectedTechniques("color", color_r50)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const color_r50 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background", color_r50); + } +} +function DataTableComponent_ul_7_li_3_div_2_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r48 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 124, 2)(2, "div", 125); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_2_div_5_Template_div_click_2_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r48); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.editSelectedTechniques("color", "")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "no color"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](4, DataTableComponent_ul_7_li_3_div_2_div_5_div_4_Template, 1, 2, "div", 126); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const dropdown_r51 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r51)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.viewModel.backgroundPresets); + } +} +function DataTableComponent_ul_7_li_3_div_2_Template(rf, ctx) { + if (rf & 1) { + const _r47 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 121); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_2_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r47); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.isCurrentlyEditing() ? ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "colorpicker" ? "colorpicker" : null : ctx_r1.continue); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_2_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 122); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "format_color_fill"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_3_div_2_div_5_Template, 5, 3, "div", 123); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](4, _c1, !ctx_r1.viewModel.isCurrentlyEditing()))("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "colorpicker"); + } +} +function DataTableComponent_ul_7_li_3_div_3_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "scoring"))); + } +} +function DataTableComponent_ul_7_li_3_div_3_div_5_mat_hint_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-hint", 135); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "not a number"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_3_div_3_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r53 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 131, 2)(2, "mat-form-field", 132)(3, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "score"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "input", 133); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_3_div_3_div_5_Template_input_ngModelChange_5_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r53); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.scoreEditField, $event) || (ctx_r1.scoreEditField = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("input", function DataTableComponent_ul_7_li_3_div_3_div_5_Template_input_input_5_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r53); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + ctx_r1.viewModel.editSelectedTechniques("score", $event.target.value); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.editSelectedTechniques("scoreColor", ctx_r1.viewModel.gradient.getHexColor($event.target.value))); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](6, DataTableComponent_ul_7_li_3_div_3_div_5_mat_hint_6_Template, 2, 0, "mat-hint", 134); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const dropdown_r54 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r54)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.scoreEditField); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.validateScoreInput()); + } +} +function DataTableComponent_ul_7_li_3_div_3_Template(rf, ctx) { + if (rf & 1) { + const _r52 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 128); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_3_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r52); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.isCurrentlyEditing() ? ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "score" ? "score" : null : ctx_r1.continue); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_3_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 129); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "insert_chart"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_3_div_3_div_5_Template, 7, 4, "div", 130); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](4, _c1, !ctx_r1.viewModel.isCurrentlyEditing()))("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "score"); + } +} +function DataTableComponent_ul_7_li_3_div_4_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "comments"))); + } +} +function DataTableComponent_ul_7_li_3_div_4_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r56 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 139, 2)(2, "mat-form-field", 132)(3, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "comments"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "textarea", 140); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_3_div_4_div_5_Template_textarea_ngModelChange_5_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r56); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.commentEditField, $event) || (ctx_r1.commentEditField = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("input", function DataTableComponent_ul_7_li_3_div_4_div_5_Template_textarea_input_5_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r56); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.editSelectedTechniques("comment", $event.target.value)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const dropdown_r57 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r57)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.commentEditField); + } +} +function DataTableComponent_ul_7_li_3_div_4_Template(rf, ctx) { + if (rf & 1) { + const _r55 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 136); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_4_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r55); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.isCurrentlyEditing() ? ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "comment" ? "comment" : null : ctx_r1.continue); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_4_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 137); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "insert_comment"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_3_div_4_div_5_Template, 6, 3, "div", 138); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](4, _c1, !ctx_r1.viewModel.isCurrentlyEditing()))("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "comment"); + } +} +function DataTableComponent_ul_7_li_3_div_5_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "links"))); + } +} +function DataTableComponent_ul_7_li_3_div_5_div_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 144, 2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](2, "app-list-input", 145); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const dropdown_r59 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r59)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("config", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction2"](3, _c8, ctx_r1.viewModel, ctx_r1.viewModel.activeTvm.links)); + } +} +function DataTableComponent_ul_7_li_3_div_5_Template(rf, ctx) { + if (rf & 1) { + const _r58 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 141); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_5_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r58); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.isCurrentlyEditing() && ctx_r1.viewModel.linksMatch ? ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "link" ? "link" : null : ctx_r1.continue); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_5_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 142); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "link"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_3_div_5_div_5_Template, 3, 6, "div", 143); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](5, _c1, !ctx_r1.viewModel.isCurrentlyEditing() || !ctx_r1.viewModel.linksMatch))("matTooltip", ctx_r1.viewModel.linksMatch ? "link" : "cannot edit links on selected techniques with differing links")("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "link"); + } +} +function DataTableComponent_ul_7_li_3_div_6_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "metadata"))); + } +} +function DataTableComponent_ul_7_li_3_div_6_div_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 144, 2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](2, "app-list-input", 145); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const dropdown_r61 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r61)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("config", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction2"](3, _c9, ctx_r1.viewModel, ctx_r1.viewModel.activeTvm.metadata)); + } +} +function DataTableComponent_ul_7_li_3_div_6_Template(rf, ctx) { + if (rf & 1) { + const _r60 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 141); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_6_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r60); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.isCurrentlyEditing() && ctx_r1.viewModel.metadataMatch ? ctx_r1.currentDropdown = ctx_r1.currentDropdown !== "metadata" ? "metadata" : null : ctx_r1.continue); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_6_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 146); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "list"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](5, DataTableComponent_ul_7_li_3_div_6_div_5_Template, 3, 6, "div", 143); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](5, _c1, !ctx_r1.viewModel.isCurrentlyEditing() || !ctx_r1.viewModel.metadataMatch))("matTooltip", ctx_r1.viewModel.metadataMatch ? "metadata" : "cannot edit metadata on selected techniques with differing metadata")("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "metadata"); + } +} +function DataTableComponent_ul_7_li_3_div_7_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](2, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](2, 1, ctx_r1.getControlDisplayName("technique_controls", "clear_annotations"))); + } +} +function DataTableComponent_ul_7_li_3_div_7_Template(rf, ctx) { + if (rf & 1) { + const _r62 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 147); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_div_7_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r62); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + ctx_r1.viewModel.resetSelectedTechniques(); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.populateEditFields()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_3_div_7_span_2_Template, 3, 3, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "span", 148); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "layers_clear"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](3, _c1, !ctx_r1.viewModel.isCurrentlyEditing()))("matTooltipDisabled", !ctx_r1.viewModel.isCurrentlyEditing()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.showControlLabels["technique"]); + } +} +function DataTableComponent_ul_7_li_3_div_12_div_10_Template(rf, ctx) { + if (rf & 1) { + const _r64 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div")(1, "input", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_3_div_12_div_10_Template_input_ngModelChange_1_listener($event) { + const control_r65 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r64).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.getControl("technique_controls", control_r65).enabled, $event) || (ctx_r1.getControl("technique_controls", control_r65).enabled = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipe"](4, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const control_r65 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.getControl("technique_controls", control_r65).enabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵattribute"]("id", "include-" + control_r65 + "-toggle"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵattribute"]("for", "include-" + control_r65 + "-toggle"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpipeBind1"](4, 4, control_r65)); + } +} +function DataTableComponent_ul_7_li_3_div_12_Template(rf, ctx) { + if (rf & 1) { + const _r63 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 35, 2)(2, "div")(3, "input", 42); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_ul_7_li_3_div_12_Template_input_ngModelChange_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r63); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.showControlLabels["technique"], $event) || (ctx_r1.showControlLabels["technique"] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "label", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "Show Control Labels"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "div")(7, "div")(8, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](9, "Included Controls:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](10, DataTableComponent_ul_7_li_3_div_12_div_10_Template, 5, 6, "div", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const dropdown_r66 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("left", ctx_r1.checkalign(dropdown_r66)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.techniqueControlsList); + } +} +function DataTableComponent_ul_7_li_3_Template(rf, ctx) { + if (rf & 1) { + const _r45 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "li"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_3_div_1_Template, 5, 5, "div", 21)(2, DataTableComponent_ul_7_li_3_div_2_Template, 6, 6, "div", 21)(3, DataTableComponent_ul_7_li_3_div_3_Template, 6, 6, "div", 21)(4, DataTableComponent_ul_7_li_3_div_4_Template, 6, 6, "div", 21)(5, DataTableComponent_ul_7_li_3_div_5_Template, 6, 7, "div", 21)(6, DataTableComponent_ul_7_li_3_div_6_Template, 6, 7, "div", 21)(7, DataTableComponent_ul_7_li_3_div_7_Template, 5, 5, "div", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](8, "div", 22)(9, "div", 118); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_3_Template_div_click_9_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r45); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleTechniqueControlsSettingsDropdown()); + })("keydown", function DataTableComponent_ul_7_li_3_Template_div_keydown_9_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r45); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleKeyDownTechnique($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](10, "span", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](11, " more_vert "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](12, DataTableComponent_ul_7_li_3_div_12_Template, 11, 4, "div", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("label", ctx_r1.showControlLabels["technique"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("disable_techniques") && ctx_r1.isControlIncluded("technique_controls", "disable_techniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("manual_color") && ctx_r1.isControlIncluded("technique_controls", "manual_color")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("scoring") && ctx_r1.isControlIncluded("technique_controls", "scoring")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("comments") && ctx_r1.isControlIncluded("technique_controls", "comments")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("links") && ctx_r1.isControlIncluded("technique_controls", "links")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("metadata") && ctx_r1.isControlIncluded("technique_controls", "metadata")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("clear_annotations") && ctx_r1.isControlIncluded("technique_controls", "clear_annotations")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.currentDropdown === "technique_control_settings"); + } +} +function DataTableComponent_ul_7_li_4_div_1_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 151); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "push_pin"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_4_div_1_span_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 152); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](1, "mat-icon", 153); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ul_7_li_4_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r67 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 22)(1, "div", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_ul_7_li_4_div_1_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r67); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.updateStickyToolbar()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, DataTableComponent_ul_7_li_4_div_1_span_2_Template, 2, 0, "span", 149)(3, DataTableComponent_ul_7_li_4_div_1_span_3_Template, 2, 0, "span", 150); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matTooltip", ctx_r1.viewModel.stickyToolbar ? "disable sticky toolbar" : "enable sticky toolbar"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.stickyToolbar); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", !ctx_r1.viewModel.stickyToolbar); + } +} +function DataTableComponent_ul_7_li_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "li"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_4_div_1_Template, 4, 3, "div", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("sticky_toolbar")); + } +} +function DataTableComponent_ul_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "ul", 18); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ul_7_li_1_Template, 9, 6, "li", 19)(2, DataTableComponent_ul_7_li_2_Template, 13, 10, "li", 19)(3, DataTableComponent_ul_7_li_3_Template, 13, 10, "li", 19)(4, DataTableComponent_ul_7_li_4_Template, 2, 1, "li", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeatureGroup("selection_controls", "any") && ctx_r1.currentControlSection === "selection"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeatureGroup("layer_controls", "any") && ctx_r1.currentControlSection === "layer"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeatureGroup("technique_controls", "any") && ctx_r1.configService.getFeature("selecting_techniques") && ctx_r1.currentControlSection === "technique"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeatureGroup("toolbar_controls", "any")); + } +} +function DataTableComponent_div_13_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 154); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](1, "mat-progress-spinner", 155); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function DataTableComponent_ng_template_14_div_1_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 160); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const matrix_r68 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", matrix_r68.name, " "); + } +} +function DataTableComponent_ng_template_14_div_1_div_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](1, "matrix-side", 161); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const matrix_r68 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matrix", matrix_r68)("viewModel", ctx_r1.viewModel); + } +} +function DataTableComponent_ng_template_14_div_1_div_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](1, "matrix-flat", 161); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const matrix_r68 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matrix", matrix_r68)("viewModel", ctx_r1.viewModel); + } +} +function DataTableComponent_ng_template_14_div_1_div_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](1, "matrix-mini", 161); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const matrix_r68 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("matrix", matrix_r68)("viewModel", ctx_r1.viewModel); + } +} +function DataTableComponent_ng_template_14_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 158); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ng_template_14_div_1_div_1_Template, 2, 1, "div", 159)(2, DataTableComponent_ng_template_14_div_1_div_2_Template, 2, 2, "div", 20)(3, DataTableComponent_ng_template_14_div_1_div_3_Template, 2, 2, "div", 20)(4, DataTableComponent_ng_template_14_div_1_div_4_Template, 2, 2, "div", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.dataService.getDomain(ctx_r1.viewModel.domainVersionID).matrices.length > 1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.layout.layout == "side"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.layout.layout == "flat"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.viewModel.layout.layout == "mini"); + } +} +function DataTableComponent_ng_template_14_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 156); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, DataTableComponent_ng_template_14_div_1_Template, 5, 4, "div", 157); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.dataService.getDomain(ctx_r1.viewModel.domainVersionID).matrices); + } +} +function DataTableComponent_div_18_Template(rf, ctx) { + if (rf & 1) { + const _r69 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 162); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_18_Template_div_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r69); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.showingLegend = !ctx_r1.showingLegend); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](1, "span", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "keyboard_arrow_up"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "div", 163); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "legend"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } +} +function DataTableComponent_div_19_div_11_Template(rf, ctx) { + if (rf & 1) { + const _r71 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 171)(1, "input", 172); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("colorPickerChange", function DataTableComponent_div_19_div_11_Template_input_colorPickerChange_1_listener($event) { + const item_r72 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r71).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](item_r72.color, $event) || (item_r72.color = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + })("ngModelChange", function DataTableComponent_div_19_div_11_Template_input_ngModelChange_1_listener($event) { + const item_r72 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r71).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](item_r72.color, $event) || (item_r72.color = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "mat-form-field", 173)(3, "input", 174); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function DataTableComponent_div_19_div_11_Template_input_ngModelChange_3_listener($event) { + const item_r72 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r71).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](item_r72.label, $event) || (item_r72.label = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "button", 175); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_19_div_11_Template_button_click_4_listener() { + const i_r73 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r71).index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.deleteLegendItem(i_r73)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](6, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const item_r72 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("background", item_r72.color); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("colorPicker", item_r72.color)("ngModel", item_r72.color); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("cpPosition", "top")("cpPresetColors", ctx_r1.viewModel.legendColorPresets); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", item_r72.label); + } +} +function DataTableComponent_div_19_Template(rf, ctx) { + if (rf & 1) { + const _r70 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 164)(1, "div", 165); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_19_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r70); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.showingLegend = !ctx_r1.showingLegend); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "span", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3, "keyboard_arrow_down"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "div", 166); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "legend"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "div", 167)(7, "button", 168); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_19_Template_button_click_7_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r70); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.addLegendItem()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](8, "Add Item"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](9, "button", 169); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function DataTableComponent_div_19_Template_button_click_9_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r70); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.viewModel.clearLegend()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](10, "Clear"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](11, DataTableComponent_div_19_div_11_Template, 7, 7, "div", 170); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](11); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.viewModel.legendItems); + } +} +class DataTableComponent { + get layerDomainVersion() { + let domain = this.dataService.getDomain(this.viewModel.domainVersionID); + return `${domain.name} v${domain.version.number}`; + } + constructor(dataService, tabs, sanitizer, viewModelsService, configService) { + this.dataService = dataService; + this.tabs = tabs; + this.sanitizer = sanitizer; + this.viewModelsService = viewModelsService; + this.configService = configService; + this.currentDropdown = ''; // current dropdown menu + this.dropdownChange = new _angular_core__WEBPACK_IMPORTED_MODULE_12__.EventEmitter(); + this.onScroll = new _angular_core__WEBPACK_IMPORTED_MODULE_12__.EventEmitter(); + this.customContextMenuItems = []; // items for custom context menu + this.showingLegend = false; // is the legend panel currently expanded + // scroll handling + this.previousScrollTop = 0; + this.headerHeight = 0; + this.footerHeight = 32; + this.controlsHeight = 34; + this.isScrollUp = true; + this.handleScroll = e => { + const diff = this.scrollRef.nativeElement.scrollTop - this.previousScrollTop; + if (!this.isScrollUp && diff < 0 || this.isScrollUp && diff > 0) { + this.isScrollUp = diff < 0; + this.calculateScrollHeight(); + this.previousScrollTop = this.scrollRef.nativeElement.scrollTop; + } else if (!this.isScrollUp && this.scrollRef.nativeElement.scrollTop > 0 && diff === 0) { + this.calculateScrollHeight(); + } + }; + this.calculateScrollHeight = () => { + const tabOffset = this.isScrollUp ? 0 : this.headerHeight; + this.onScroll.emit(-1 * tabOffset); + const scrollWindowHeight = this.isScrollUp ? this.headerHeight + this.controlsHeight + this.footerHeight : this.controlsHeight; + this.scrollRef.nativeElement.style.height = `calc(100vh - ${scrollWindowHeight}px)`; + }; + /* + * 0: expand subtechniques + * 1: expand annotated subtechniques + * 2: collapse subtechniques + */ + this.showSubtechniquesType = 0; + this.downloadAnnotationsOnVisibleTechniques = false; + this.showControlsBar = true; + this.previousControlSection = ''; + this.currentControlSection = "selection"; + this.showHelpDropDown = false; + // edit field bindings + this.commentEditField = ''; + this.scoreEditField = ''; + this.layerControlsList = []; + this.techniqueControlsList = []; + this.selectionControlsList = []; + this.showControlLabels = { + selection: false, + layer: false, + technique: false + }; + this.selectionChangeSubscription = this.viewModelsService.onSelectionChange.subscribe(() => { + this.onTechniqueSelect(); + }); + this.includedControls = configService.featureList; + for (let i = 0; i < this.includedControls.length; i++) { + if (this.includedControls[i].name == "layer_controls") { + for (let j = 0; j < this.includedControls[i].subfeatures.length; j++) { + this.layerControlsList.push(this.includedControls[i].subfeatures[j].display_name); + } + } else if (this.includedControls[i].name == "technique_controls") { + for (let j = 0; j < this.includedControls[i].subfeatures.length; j++) { + this.techniqueControlsList.push(this.includedControls[i].subfeatures[j].display_name); + } + } else if (this.includedControls[i].name == "selection_controls") { + for (let j = 0; j < this.includedControls[i].subfeatures.length; j++) { + this.selectionControlsList.push(this.includedControls[i].subfeatures[j].display_name); + } + } + } + } + ngAfterViewInit() { + this.headerHeight = document.querySelector('.header-wrapper')?.offsetHeight; + this.scrollRef.nativeElement.style.height = `calc(100vh - ${this.headerHeight + this.controlsHeight + this.footerHeight}px)`; + this.scrollRef.nativeElement.addEventListener('scroll', this.handleScroll); + } + ngOnDestroy() { + this.selectionChangeSubscription.unsubscribe(); + document.body.removeEventListener('scroll', this.handleScroll); + } + updateStickyToolbar() { + this.viewModel.stickyToolbar = !this.viewModel.stickyToolbar; + if (this.viewModel.stickyToolbar) { + this.headerHeight = document.querySelector('.header-wrapper')?.offsetHeight; + this.scrollRef.nativeElement.style.height = `calc(100vh - ${this.headerHeight + this.controlsHeight + this.footerHeight}px)`; + this.scrollRef.nativeElement.addEventListener('scroll', this.handleScroll); + } else { + this.scrollRef.nativeElement.style.height = null; + this.scrollRef.nativeElement.addEventListener('scroll', this.handleScroll); + } + } + handleSelectionControlsSettingsDropdown() { + if (this.currentDropdown !== 'selection_control_settings') { + this.currentDropdown = 'selection_control_settings'; + } else { + this.currentDropdown = ''; + } + this.dropdownChange.emit(this.currentDropdown); + } + handleLayerControlsSettingsDropdown() { + if (this.currentDropdown !== 'layer_control_settings') { + this.currentDropdown = 'layer_control_settings'; + } else { + this.currentDropdown = ''; + } + this.dropdownChange.emit(this.currentDropdown); + } + handleTechniqueControlsSettingsDropdown() { + if (this.currentDropdown !== 'technique_control_settings') { + this.currentDropdown = 'technique_control_settings'; + } else { + this.currentDropdown = ''; + } + this.dropdownChange.emit(this.currentDropdown); + } + handleKeyDownTechnique(event) { + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + this.handleTechniqueControlsSettingsDropdown(); + } + } + handleKeyDownSelection(event) { + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + this.handleSelectionControlsSettingsDropdown(); + } + } + handleKeyDownLayer(event) { + if (event.key === 'Enter' || event.key === ' ') { + event.preventDefault(); + this.handleLayerControlsSettingsDropdown(); + } + } + isControlIncluded(control, subfeature) { + for (let i = 0; i < this.includedControls.length; i++) { + if (this.includedControls[i].name == control) { + for (let j = 0; j < this.includedControls[i].subfeatures.length; j++) { + if (this.includedControls[i].subfeatures[j].name == subfeature) { + if (this.includedControls[i].subfeatures[j].enabled) { + return true; + } else { + return false; + } + } + } + } + } + return false; + } + getControlDisplayName(control, subfeature) { + for (let i = 0; i < this.includedControls.length; i++) { + if (this.includedControls[i].name == control) { + for (let j = 0; j < this.includedControls[i].subfeatures.length; j++) { + if (this.includedControls[i].subfeatures[j].name == subfeature) { + return this.includedControls[i].subfeatures[j].display_name; + } + } + } + } + return null; + } + getControl(control, subfeature) { + for (let i = 0; i < this.includedControls.length; i++) { + if (this.includedControls[i].name == control) { + for (let j = 0; j < this.includedControls[i].subfeatures.length; j++) { + if (this.includedControls[i].subfeatures[j].display_name == subfeature) { + return this.includedControls[i].subfeatures[j]; + } + } + } + } + return null; + } + /** + * Save the given blob + * @param blob the blob to download + * @param filename save as filename + */ + saveBlob(blob, filename) { + if ((0,_utils_utils__WEBPACK_IMPORTED_MODULE_2__.isIE)()) { + // internet explorer + const nav = window.navigator; + nav.msSaveOrOpenBlob(blob, filename); + } else { + let svgUrl = URL.createObjectURL(blob); + let downloadLink = document.createElement('a'); + downloadLink.href = svgUrl; + downloadLink.download = filename; + document.body.appendChild(downloadLink); + downloadLink.click(); + document.body.removeChild(downloadLink); + } + } + /** + * Stringifies the current view model into a JSON string, + * stores the string as a blob, and saves the blob as a + * JSON file + */ + saveLayerLocally() { + let json = this.viewModel.serialize(this.downloadAnnotationsOnVisibleTechniques); + let blob = new Blob([json], { + type: 'text/json' + }); + this.saveLayerJson_helper(blob); + } + /** + * Stringifies the current view model with all the layers into a JSON string, + * stores the string as a blob, and saves the blob as a + * JSON file + */ + saveAllLayersLocally() { + let myarr = []; + for (let viewModel of this.viewModelsService.viewModels) { + myarr.push(JSON.parse(viewModel.serialize(this.downloadAnnotationsOnVisibleTechniques))); + } + let blob = new Blob([JSON.stringify(myarr)], { + type: 'text/json' + }); + this.saveLayerJson_helper(blob); + } + /** Helper function for saving layer in JSON format */ + saveLayerJson_helper(blob) { + let filename = this.viewModel.name.toLowerCase().replace(/ /g, '_') + '.json'; + this.saveBlob(blob, filename); + } + /** + * Helper function for exporting to excel to stylize cells + */ + styleCells(cell, technique, tvm) { + cell.value = this.getDisplayName(technique); + // cell format + cell.alignment = { + vertical: 'top', + horizontal: 'left' + }; + if (tvm.enabled) { + if (tvm.color) { + //manually assigned + cell.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { + argb: 'FF' + tvm.color.substring(1) + } + }; + cell.font = { + color: { + argb: 'FF' + tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(tvm.color, ['white', 'black']).toHex() + } + }; + } else if (this.viewModel.layout._showAggregateScores && tvm.aggregateScoreColor) { + cell.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { + argb: 'FF' + tvm.aggregateScoreColor.substring(1) + } + }; + cell.font = { + color: { + argb: 'FF' + tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(tvm.aggregateScoreColor, ['white', 'black']).toHex() + } + }; + } else if (tvm.score) { + //score assigned + cell.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { + argb: 'FF' + tvm.scoreColor.substring(1) + } + }; + cell.font = { + color: { + argb: 'FF' + tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(tvm.scoreColor, ['white', 'black']).toHex() + } + }; + } + if (tvm.comment) { + //comment present on technique + cell.note = tvm.comment; + } + } else { + //disabled + cell.font = { + color: { + argb: 'FFBCBCBC' + } + }; + } + // subtechniques border + if (tvm.showSubtechniques) { + cell.border = { + top: { + style: 'thin' + }, + bottom: { + style: 'thin' + }, + left: { + style: 'thin' + } + }; + } else if (technique.isSubtechnique) { + cell.border = { + top: { + style: 'thin' + }, + bottom: { + style: 'thin' + }, + right: { + style: 'thin' + } + }; + } + } + /** Export single layer to Excel */ + saveLayerLocallyExcel() { + // create new excel workbook + let workbook = new exceljs_dist_exceljs_min_js__WEBPACK_IMPORTED_MODULE_0__.Workbook(); + let domain = this.dataService.getDomain(this.viewModel.domainVersionID); + // create a worksheet for each matrix in the domain + for (let matrix of domain.matrices) { + let worksheet = workbook.addWorksheet(matrix.name + ' (v' + domain.getVersion() + ')'); + this.saveLayerExcel_helper(matrix, worksheet, this.viewModel); + } + // save file + workbook.xlsx.writeBuffer().then(data => { + const blob = new Blob([data], { + type: 'application/octet-stream' + }); + const filename = this.viewModel.name.toLowerCase().replace(/ /g, '_') + '.xlsx'; + this.saveBlob(blob, filename); + }); + } + /** Export all layers to Excel */ + saveAllLayersLocallyExcel() { + // create new excel workbook + let workbook = new exceljs_dist_exceljs_min_js__WEBPACK_IMPORTED_MODULE_0__.Workbook(); + for (let i = 0; i < this.viewModelsService.viewModels.length; i++) { + let domain = this.dataService.getDomain(this.viewModelsService.viewModels[i].domainVersionID); + // create a worksheet for each matrix in the domain + for (let matrix of domain.matrices) { + let worksheet = workbook.addWorksheet(matrix.name + ' v' + domain.getVersion() + ' (' + this.viewModelsService.viewModels[i].name + '-' + i + ')'); + this.saveLayerExcel_helper(matrix, worksheet, this.viewModelsService.viewModels[i]); + } + } + // save file + workbook.xlsx.writeBuffer().then(data => { + const blob = new Blob([data], { + type: 'application/octet-stream' + }); + const filename = this.viewModel.name.toLowerCase().replace(/ /g, '_') + '.xlsx'; + this.saveBlob(blob, filename); + }); + } + /** Helper function for saving layer in Excel format */ + saveLayerExcel_helper(matrix, worksheet, viewModel) { + // create a worksheet for each matrix in the domain + // create tactic columns + let columns = viewModel.filterTactics(matrix.tactics, matrix).map(tactic => { + return { + header: this.getDisplayName(tactic), + key: tactic.name + }; + }); + worksheet.columns = columns; + // create cells + for (let tactic of viewModel.filterTactics(matrix.tactics, matrix)) { + let tacticCol = worksheet.getColumn(tactic.name); + let techniques = viewModel.applyControls(tactic.techniques, tactic, matrix); + let techniqueCells = techniques.map(technique => { + return technique.name; + }); + let subtechniqueList = []; + // create subtechnique cells, if shown + let subtechniqueCells = []; + for (let technique of techniques) { + let techniqueRow = techniqueCells.indexOf(technique.name); + let tvm = viewModel.getTechniqueVM(technique, tactic); + if (!tvm.showSubtechniques) continue; // do not show sub-techniques, skip + // retrieve subtechniques + let subtechniques = viewModel.applyControls(technique.subtechniques, tactic, matrix).map(sub => { + return sub.name; + }); + subtechniqueList = subtechniqueList.concat(technique.subtechniques); + // format technique cells for subtechniques + let excelIndex = this.addSubtechniqueCells(subtechniqueCells, techniqueCells, subtechniques, technique); + // merge technique cells + if (excelIndex > 0) { + worksheet.mergeCells(techniqueRow + 2, tacticCol.number, techniqueRow + excelIndex + 1, tacticCol.number); + } + } + if (subtechniqueCells.length > 0) { + // add subtechniques column + let id = columns.findIndex(col => col.key == tactic.name); + columns.splice(id + 1, 0, { + header: this.getDisplayName(tactic), + key: tactic.name + 'Subtechniques' + }); + worksheet.columns = columns; + // merge subtechniques header + let subtechniqueCol = worksheet.getColumn(tactic.name + 'Subtechniques'); + worksheet.mergeCells(tacticCol.letter + '1:' + subtechniqueCol.letter + '1'); + subtechniqueCol.values = [tactic.name.toString() + 'Subtechniques'].concat(subtechniqueCells); + // style subtechnique cells + this.styleTechniqueCells(subtechniqueCol, subtechniqueList, viewModel, tactic, true); + } + tacticCol.values = [this.getDisplayName(tactic)].concat(techniqueCells); + // style technique cells + this.styleTechniqueCells(tacticCol, techniques, viewModel, tactic); + } + // style tactic headers + this.styleTacticHeaders(worksheet, viewModel); + worksheet.getRow(1).alignment = { + horizontal: 'center' + }; + worksheet.getRow(1).border = { + bottom: { + style: 'thin' + } + }; + worksheet.getRow(1).font = { + bold: true + }; + if (viewModel.showTacticRowBackground) { + worksheet.getRow(1).fill = { + type: 'pattern', + pattern: 'solid', + fgColor: { + argb: 'FF' + viewModel.tacticRowBackground.substring(1) + } + }; + worksheet.getRow(1).font = { + bold: true, + color: { + argb: 'FF' + tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(viewModel.tacticRowBackground, ['white', 'black']).toHex() + } + }; + } + } + /** + * Style technique cells for Excel worksheet + */ + styleTechniqueCells(column, techniqueList, viewModel, tactic, isSubtechnique = false) { + const seen = []; + column.eachCell(cell => { + if (cell.row > 1 && cell.value && cell.value !== undefined) { + let technique = techniqueList.find(t => { + if (isSubtechnique) { + return t.name == cell.value.substring(cell.value.indexOf(':') + 1).trim() && !seen.includes(t.attackID); + } + return t.name == cell.value.substring(cell.value.indexOf(':') + 1).trim() || t.attackID === cell.value; + }); + seen.push(technique.attackID); + let tvm = viewModel.getTechniqueVM(technique, tactic); + this.styleCells(cell, technique, tvm); + } + }); + } + /** + * Style tactic headers for Excel worksheet + */ + styleTacticHeaders(worksheet, viewModel) { + worksheet.columns.forEach(column => { + if (viewModel.layout.showID && !viewModel.layout.showName) { + column.width = column.header.length < 15 ? 15 : column.header.length; + } else if (!viewModel.layout.showID && !viewModel.layout.showName) { + column.width = 10; + } else { + column.width = column.header.length < 30 ? 30 : column.header.length; + } + }); + } + /** + * Format technique cells for sub-technique cells + */ + addSubtechniqueCells(subtechniqueCells, techniqueCells, subtechniques, technique) { + let techniqueRow = techniqueCells.indexOf(technique.name); + let excelIndex = 0; + for (let subtechnique of subtechniques) { + if (excelIndex !== 0) { + techniqueCells.splice(techniqueRow + excelIndex, 0, technique.name); + } + subtechniqueCells[techniqueRow + excelIndex++] = subtechnique; + } + return excelIndex; + } + /** + * Get the display name for technique/tactic as shown in layout + */ + getDisplayName(technique) { + if (this.viewModel.layout.showID && this.viewModel.layout.showName) { + return technique.attackID + ': ' + technique.name; + } else if (this.viewModel.layout.showID) { + return technique.attackID; + } else if (this.viewModel.layout.showName) { + return technique.name; + } else { + return ''; + } + } + /** + * Handle drop down change + */ + handleDescriptionDropdown() { + if (this.currentDropdown !== 'description') { + this.currentDropdown = 'description'; + } else { + this.currentDropdown = ''; + } + this.dropdownChange.emit(this.currentDropdown); + } + toggleShowControlsBar() { + this.showControlsBar = !this.showControlsBar; + } + setCurrentControlSection(controlType) { + this.currentControlSection = controlType; + if (this.previousControlSection === controlType && this.showControlsBar) { + this.showControlsBar = false; + } else { + this.showControlsBar = true; + } + this.previousControlSection = controlType; + } + /** + * Handle export drop down change + */ + handleExportDropdown() { + if (this.currentDropdown !== 'export') { + this.currentDropdown = 'export'; + } else { + this.currentDropdown = ''; + } + this.dropdownChange.emit(this.currentDropdown); + } + /** + * Triggered on left click of technique + */ + onTechniqueSelect() { + if (!this.viewModel.isCurrentlyEditing()) { + if (['comment', 'score', 'colorpicker', 'link', 'metadata'].includes(this.currentDropdown)) { + //remove technique control dropdowns, because everything was deselected + this.currentDropdown = ''; + } + return; + } + if (this.currentDropdown == 'link' || this.currentDropdown == 'metadata') { + this.currentDropdown = ''; + return; + } + //else populate editing controls + this.populateEditFields(); + } + /** + * Show all sub-techniques in layout view + */ + expandSubtechniques(showAnnotatedOnly) { + if (this.viewModel.layout.layout == 'mini') return; // control disabled in mini layout + this.viewModel.layout.expandedSubtechniques = showAnnotatedOnly ? 'annotated' : 'all'; + for (let technique of this.dataService.getDomain(this.viewModel.domainVersionID).techniques) { + if (!technique.subtechniques?.length) continue; // no sub-techniques + for (let id of technique.get_all_technique_tactic_ids()) { + let tvm = this.viewModel.getTechniqueVM_id(id); + if (!showAnnotatedOnly) { + // expand all sub-techniques + tvm.showSubtechniques = true; + continue; + } + if (showAnnotatedOnly) { + // expand all sub-techniques + tvm.showSubtechniques = false; + } + // expand only if sub-techniques have annotations + for (let subtechnique of technique.subtechniques) { + tvm.showSubtechniques = tvm.showSubtechniques || subtechnique.get_all_technique_tactic_ids().some(sid => { + let svm = this.viewModel.getTechniqueVM_id(sid); + return svm.annotated(); + }); + } + } + } + } + /** + * Hide all sub-techniques in layout view + */ + collapseSubtechniques() { + if (this.viewModel.layout.layout == 'mini') return; // control disabled in mini layout + this.viewModel.techniqueVMs.forEach(function (tvm, key) { + tvm.showSubtechniques = false; + }); + this.viewModel.layout.expandedSubtechniques = 'none'; + } + /** + * Expand all, annotated or no subtechniques based on selection + */ + showSubtechniquesTypeAlgorithm() { + switch (this.showSubtechniquesType) { + case 1: + // expand all subtechniques + this.expandSubtechniques(); + console.log(this.showSubtechniquesType); + break; + case 2: + // expand only annotated subtechniques + this.expandSubtechniques(true); + console.log(this.showSubtechniquesType); + break; + case 3: + // collapse all subtechniques + this.collapseSubtechniques(); + console.log(this.showSubtechniquesType); + this.showSubtechniquesType = 0; + break; + case 0: + break; + default: + // expand all subtechniques + this.expandSubtechniques(); + } + } + /** + * Populate edit fields. Gets common values if common values exist for all editing values. + */ + populateEditFields() { + this.commentEditField = this.viewModel.getEditingCommonValue('comment'); + this.scoreEditField = this.viewModel.getEditingCommonValue('score'); + } + /** + * Set the state (enabled/disabled) of the selected features + */ + setSelectedState() { + let currentState = this.viewModel.getEditingCommonValue('enabled'); + if (currentState === '') this.viewModel.editSelectedTechniques('enabled', false);else this.viewModel.editSelectedTechniques('enabled', !currentState); + } + /** + * Sanitize the given css so that it can be displayed without error + */ + sanitize(css) { + return this.sanitizer.bypassSecurityTrustStyle(css); + } + /** + * Is score input valid number + * @param event keypress event just in case we need it + * @return true if valid number + */ + validateScoreInput(event) { + let result = isNaN(Number(this.scoreEditField)); + return result; + } + /** + * Return whether the given dropdown element would overflow the side of the page if aligned to the right of its anchor + * @param dropdown the DOM node of the panel + * @return true if it would overflow + */ + checkalign(dropdown) { + let anchor = dropdown.parentNode; + return anchor.getBoundingClientRect().left + dropdown.getBoundingClientRect().width > document.body.clientWidth; + } + /** + * Open an export layer render tab for the current layer + */ + exportRender() { + this.tabs.openSVGDialog(this.viewModel); + } + /** + * Open search & multiselect sidebar + */ + openSearch() { + if (this.viewModel.sidebarContentType !== 'layerUpgrade') { + this.viewModel.sidebarOpened = this.viewModel.sidebarContentType !== 'search' ? true : !this.viewModel.sidebarOpened; + this.viewModel.sidebarContentType = 'search'; + } + } + /** + * Open layer settings in sidebar + */ + openLayerSettings() { + this.viewModel.sidebarOpened = this.viewModel.sidebarContentType !== 'layerSettings' ? true : !this.viewModel.sidebarOpened; + this.viewModel.sidebarContentType = 'layerSettings'; + } + static #_ = this.ɵfac = function DataTableComponent_Factory(t) { + return new (t || DataTableComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_3__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_tabs_tabs_component__WEBPACK_IMPORTED_MODULE_4__.TabsComponent), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_13__.DomSanitizer), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_5__.ViewModelsService), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_6__.ConfigService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdefineComponent"]({ + type: DataTableComponent, + selectors: [["DataTable"]], + viewQuery: function DataTableComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵviewQuery"](_c0, 5); + } + if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵloadQuery"]()) && (ctx.scrollRef = _t.first); + } + }, + inputs: { + viewModel: "viewModel", + currentDropdown: "currentDropdown" + }, + outputs: { + dropdownChange: "dropdownChange", + onScroll: "onScroll" + }, + decls: 20, + vars: 11, + consts: [["scrollRef", ""], ["loadMatrices", ""], ["dropdown", ""], ["rel", "stylesheet", "href", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtrustConstantResourceUrl"]`https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200`], [1, "controlsContainer"], [1, "control-section-header"], [1, "control-section-tabs"], ["class", "section-label", 3, "active", "click", 4, "ngIf"], ["class", "control-sections", 4, "ngIf"], ["autosize", "", 1, "matrices-content"], [1, "matrices"], ["oncontextmenu", "return false"], ["class", "spinner", 4, "ngIf", "ngIfElse"], ["mode", "side", "position", "end", 3, "disableClose", "opened"], [3, "viewModel"], ["class", "legendBar", 3, "click", 4, "ngIf"], ["class", "legend", 4, "ngIf"], [1, "section-label", 3, "click"], [1, "control-sections"], [3, "label", 4, "ngIf"], [4, "ngIf"], ["class", "control-row-item", 4, "ngIf"], [1, "control-row-item"], ["matTooltipPosition", "below", "matTooltip", "selection control settings", 1, "control-row-button", "dropdown", "noselect", 3, "click", "keydown"], [1, "material-symbols-outlined"], ["class", "dropdown-container select_behavior", 3, "left", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "search & multiselect", 1, "control-row-button", "noselect", 3, "click", "ngClass"], ["class", "control-label", 4, "ngIf"], ["alt", "search", 1, "material-icons"], [1, "control-label"], ["matTooltipPosition", "below", 1, "control-row-button", "noselect", 3, "click", "matTooltip"], ["alt", "deselect all", 1, "material-icons"], [1, "deselectNumber"], ["matTooltipPosition", "below", "matTooltip", "selection behavior", 1, "control-row-button", "dropdown", "noselect", 3, "click"], [1, "material-icons"], [1, "dropdown-container", "select_behavior"], ["id", "select_behavior_tactic", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "select_behavior_tactic", 1, "checkbox-custom-label", "noselect"], ["id", "select_behavior_visible", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "select_behavior_visible", 1, "checkbox-custom-label", "noselect"], ["id", "select_behavior_subtechnique", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "select_behavior_subtechnique", 1, "checkbox-custom-label", "noselect"], ["id", "show_control_label_toggle", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "show_control_label_toggle", 1, "checkbox-custom-label", "noselect"], [4, "ngFor", "ngForOf"], ["type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], [1, "checkbox-custom-label", "noselect"], ["matTooltipPosition", "below", "matTooltip", "layer control settings", 1, "control-row-button", "dropdown", "noselect", 3, "click", "keydown"], ["matTooltipPosition", "below", "matTooltip", "layer settings", 1, "control-row-button", "noselect", 3, "click"], ["alt", "layer information", 1, "material-symbols-outlined"], ["matTooltipPosition", "below", "matTooltip", "export", 1, "control-row-button", "dropdown", "noselect", 3, "click"], ["alt", "export", 1, "material-icons"], [1, "filter-label"], ["id", "select_download_annotations", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "select_download_annotations", 1, "checkbox-custom-label", "noselect"], ["class", "warning", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "download single layer as json", 1, "control-row-button", "noselect", 3, "click"], ["alt", "save layer", 1, "material-icons"], ["matTooltipPosition", "below", "matTooltip", "download all layers as json", 1, "control-row-button", "noselect", 3, "click"], ["class", "material-symbols-outlined", "alt", "save layer", 4, "ngIf"], ["alt", "save layer", 1, "material-symbols-outlined"], ["matTooltipPosition", "below", "matTooltip", "export single layer to excel", 1, "control-row-button", "noselect", 3, "click"], ["matTooltipPosition", "below", "matTooltip", "export all layers to excel", 1, "control-row-button", "noselect", 3, "click"], ["matTooltipPosition", "below", "matTooltip", "render layer to SVG", 1, "control-row-button", "noselect", 3, "click"], ["alt", "export render", 1, "material-icons"], [1, "warning"], ["alt", "warning", 1, "material-icons"], [1, "warning-label"], ["matTooltipPosition", "below", "matTooltip", "filters", 1, "control-row-button", "dropdown", "noselect", 3, "click"], ["class", "dropdown-container filters", 3, "left", 4, "ngIf"], [1, "dropdown-container", "filters"], ["class", "filter", 4, "ngFor", "ngForOf"], [1, "filter"], ["class", "filter-option", 4, "ngFor", "ngForOf"], [1, "filter-option"], ["type", "checkbox", 1, "checkbox-custom", 3, "click", "id", "checked"], [1, "checkbox-custom-label", "noselect", 3, "for"], [3, "ngSwitch"], [4, "ngSwitchCase"], ["svgIcon", "ic_sort_alphabetically_ascending"], ["svgIcon", "ic_sort_alphabetically_descending"], ["svgIcon", "ic_sort_numerically_ascending"], ["svgIcon", "ic_sort_numerically_descending"], ["matTooltipPosition", "below", "matTooltip", "color setup", 1, "control-row-button", "dropdown", "noselect", 3, "click"], ["class", "dropdown-container colorSetup", 3, "left", 4, "ngIf"], [1, "dropdown-container", "colorSetup"], [1, "tacticRowColor"], [1, "gradient-section-label"], [1, "gradient-section-content"], ["id", "showTacticRowBackground", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "showTacticRowBackground", 1, "checkbox-custom-label", "noselect"], ["cpPosition", "bottom", 1, "colorpicker", 3, "colorPickerChange", "ngModelChange", "colorPicker", "ngModel", "cpPresetColors"], [1, "gradient"], [1, "gradient-controls", "gradient-section-content"], [1, "minmax", "top"], [1, "col2"], ["type", "number", 3, "input", "ngModelChange", "ngModel", "max"], [1, "buttons"], [1, "addcolor", 3, "click"], [1, "minmax", "bottom"], ["type", "number", 3, "input", "ngModelChange", "ngModel", "min"], [1, "display-buttons"], [1, "squarebutton", "dropdown", "noselect", 3, "click"], [2, "font-size", "5pt"], ["class", "dropdown-container presetsmenu", 4, "ngIf"], [1, "left"], [3, "click", "disabled"], [1, "right"], ["cpPosition", "bottom", 1, "colorpicker", 3, "colorPickerChange", "cpPresetColorsChange", "cpSliderChange", "cpInputChange", "ngModelChange", "colorPicker", "ngModel", "cpPresetColors"], [1, "dropdown-container", "presetsmenu"], [1, "squarebutton", "noselect", "gradient", 3, "click"], ["class", "material-icons", "alt", "show disabled", 4, "ngIf"], ["class", "material-icons", "alt", "hide disabled", 4, "ngIf"], ["alt", "show disabled", 1, "material-icons"], ["alt", "hide disabled", 1, "material-icons"], ["alt", "expand sub-techniques", 1, "material-icons"], ["svgIcon", "ic_unfold_more_alt"], ["alt", "collapse sub-techniques", 1, "material-icons"], ["matTooltipPosition", "below", "matTooltip", "technique control settings", 1, "control-row-button", "dropdown", "noselect", 3, "click", "keydown"], ["matTooltipPosition", "below", "matTooltip", "toggle state", 1, "control-row-button", "noselect", 3, "click", "ngClass", "matTooltipDisabled"], ["alt", "toggle state", 1, "material-icons"], ["matTooltipPosition", "below", "matTooltip", "background color", 1, "control-row-button", "dropdown", "noselect", 3, "click", "ngClass", "matTooltipDisabled"], ["alt", "edit background color", 1, "material-icons"], ["class", "colorpicker dropdown-container", 3, "left", 4, "ngIf"], [1, "colorpicker", "dropdown-container"], [1, "color-block", "wide", "noselect", "dropdown", 3, "click"], ["class", "color-block square", 3, "background", "click", 4, "ngFor", "ngForOf"], [1, "color-block", "square", 3, "click"], ["matTooltipPosition", "below", "matTooltip", "scoring", 1, "control-row-button", "dropdown", "noselect", 3, "click", "ngClass", "matTooltipDisabled"], ["alt", "score", 1, "material-icons"], ["class", "dropdown-container inputfield", 3, "left", 4, "ngIf"], [1, "dropdown-container", "inputfield"], [1, "hide-subscript"], ["matInput", "", "type", "number", 3, "ngModelChange", "input", "ngModel"], ["style", "color: red", "align", "start", 4, "ngIf"], ["align", "start", 2, "color", "red"], ["matTooltipPosition", "below", "matTooltip", "comment", 1, "control-row-button", "dropdown", "noselect", 3, "click", "ngClass", "matTooltipDisabled"], ["alt", "comment", 1, "material-icons"], ["class", "dropdown-container inputfield left", 3, "left", 4, "ngIf"], [1, "dropdown-container", "inputfield", "left"], ["matInput", "", "matTextareaAutosize", "", 3, "ngModelChange", "input", "ngModel"], ["matTooltipPosition", "below", 1, "control-row-button", "dropdown", "noselect", 3, "click", "ngClass", "matTooltip", "matTooltipDisabled"], ["alt", "add a link", 1, "material-icons"], ["class", "dropdown-container inputfield left list-input", 3, "left", 4, "ngIf"], [1, "dropdown-container", "inputfield", "left", "list-input"], [3, "config"], ["alt", "add metadata", 1, "material-icons"], ["matTooltipPosition", "below", "matTooltip", "clear annotations on selected", 1, "control-row-button", "noselect", 3, "click", "ngClass", "matTooltipDisabled"], ["alt", "remove all annotations", 1, "material-icons"], ["class", "material-symbols-outlined", "alt", "show disabled", 4, "ngIf"], ["alt", "hide disabled", 4, "ngIf"], ["alt", "show disabled", 1, "material-symbols-outlined"], ["alt", "hide disabled"], ["svgIcon", "ic_push_pin_gray"], [1, "spinner"], ["mode", "indeterminate"], [1, "matrices-columns"], ["class", "matrix-column", 4, "ngFor", "ngForOf"], [1, "matrix-column"], ["class", "matrix-name", 4, "ngIf"], [1, "matrix-name"], [3, "matrix", "viewModel"], [1, "legendBar", 3, "click"], [1, "noselect", 2, "padding", "4px", "font-size", "14px", "position", "absolute", "width", "100%", "text-align", "center"], [1, "legend"], [1, "legendBar", 2, "position", "absolute", "top", "0px", "left", "0px", 3, "click"], [1, "noselect", "title"], [1, "itemArea"], [1, "button", 2, "margin-left", "75px", "margin-top", "10px", "margin-bottom", "10px", 3, "click"], [1, "button", 2, "margin-top", "10px", "margin-bottom", "10px", 3, "click"], ["class", "item", 4, "ngFor", "ngForOf"], [1, "item"], [2, "width", "75px", 3, "colorPickerChange", "ngModelChange", "colorPicker", "ngModel", "cpPosition", "cpPresetColors"], [1, "label", "hide-subscript"], ["matInput", "", 3, "ngModelChange", "ngModel"], ["matSuffix", "", "mat-icon-button", "", "aria-label", "remove legend item", 1, "icon-button-scale-down", 3, "click"]], + template: function DataTableComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](0, "link", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](1, "div", 4)(2, "div", 5)(3, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](4, DataTableComponent_div_4_Template, 2, 2, "div", 7)(5, DataTableComponent_div_5_Template, 2, 2, "div", 7)(6, DataTableComponent_div_6_Template, 2, 2, "div", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](7, DataTableComponent_ul_7_Template, 5, 4, "ul", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](8, "mat-drawer-container", 9)(9, "mat-drawer-content")(10, "div", 10, 0)(12, "div", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](13, DataTableComponent_div_13_Template, 2, 0, "div", 12)(14, DataTableComponent_ng_template_14_Template, 2, 1, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](16, "mat-drawer", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](17, "sidebar", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](18, DataTableComponent_div_18_Template, 5, 0, "div", 15)(19, DataTableComponent_div_19_Template, 12, 1, "div", 16); + } + if (rf & 2) { + const loadMatrices_r74 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](15); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.configService.getFeatureGroupCount("selection_controls") >= 2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.configService.getFeatureGroupCount("layer_controls") >= 2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.configService.getFeatureGroupCount("technique_controls") >= 1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.showControlsBar); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", !ctx.dataService.getDomain(ctx.viewModel.domainVersionID) || !ctx.dataService.getDomain(ctx.viewModel.domainVersionID).dataLoaded)("ngIfElse", loadMatrices_r74); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disableClose", true)("opened", ctx.viewModel.sidebarOpened); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("viewModel", ctx.viewModel); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", !ctx.showingLegend && ctx.configService.getFeature("legend")); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.showingLegend && ctx.configService.getFeature("legend")); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_14__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_14__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_14__.NgIf, _angular_common__WEBPACK_IMPORTED_MODULE_14__.NgSwitch, _angular_common__WEBPACK_IMPORTED_MODULE_14__.NgSwitchCase, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_15__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_15__.MatLabel, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_15__.MatHint, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_15__.MatSuffix, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.NumberValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.CheckboxControlValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.MinValidator, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.MaxValidator, _angular_forms__WEBPACK_IMPORTED_MODULE_16__.NgModel, _angular_material_input__WEBPACK_IMPORTED_MODULE_17__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_18__.MatIconButton, _angular_material_icon__WEBPACK_IMPORTED_MODULE_19__.MatIcon, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_20__.MatProgressSpinner, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_21__.MatTooltip, ngx_color_picker__WEBPACK_IMPORTED_MODULE_22__.ColorPickerDirective, _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_23__.MatDrawer, _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_23__.MatDrawerContainer, _angular_material_sidenav__WEBPACK_IMPORTED_MODULE_23__.MatDrawerContent, _matrix_matrix_side_matrix_side_component__WEBPACK_IMPORTED_MODULE_7__.MatrixSideComponent, _matrix_matrix_flat_matrix_flat_component__WEBPACK_IMPORTED_MODULE_8__.MatrixFlatComponent, _matrix_matrix_mini_matrix_mini_component__WEBPACK_IMPORTED_MODULE_9__.MatrixMiniComponent, _sidebar_sidebar_component__WEBPACK_IMPORTED_MODULE_10__.SidebarComponent, _list_input_list_input_component__WEBPACK_IMPORTED_MODULE_11__.ListInputComponent, _angular_common__WEBPACK_IMPORTED_MODULE_14__.TitleCasePipe], + styles: [".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, 0.1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus::before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus::before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}html{--mat-ripple-color:rgba(0, 0, 0, 0.1)}html{--mat-option-selected-state-label-text-color:#3f51b5;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}.mat-accent{--mat-option-selected-state-label-text-color:#ff4081;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}.mat-warn{--mat-option-selected-state-label-text-color:#f44336;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}html{--mat-optgroup-label-text-color:rgba(0, 0, 0, 0.87)}.mat-primary{--mat-full-pseudo-checkbox-selected-icon-color:#3f51b5;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#3f51b5;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}html{--mat-full-pseudo-checkbox-selected-icon-color:#ff4081;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#ff4081;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}.mat-accent{--mat-full-pseudo-checkbox-selected-icon-color:#ff4081;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#ff4081;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}.mat-warn{--mat-full-pseudo-checkbox-selected-icon-color:#f44336;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#f44336;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}html{--mat-app-background-color:#fafafa;--mat-app-text-color:rgba(0, 0, 0, 0.87)}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12)}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12)}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-theme-loaded-marker{display:none}html{--mat-option-label-text-font:Roboto, sans-serif;--mat-option-label-text-line-height:24px;--mat-option-label-text-size:16px;--mat-option-label-text-tracking:0.03125em;--mat-option-label-text-weight:400}html{--mat-optgroup-label-text-font:Roboto, sans-serif;--mat-optgroup-label-text-line-height:24px;--mat-optgroup-label-text-size:16px;--mat-optgroup-label-text-tracking:0.03125em;--mat-optgroup-label-text-weight:400}html{--mdc-elevated-card-container-shape:4px;--mdc-outlined-card-container-shape:4px;--mdc-outlined-card-outline-width:1px}html{--mdc-elevated-card-container-color:white;--mdc-elevated-card-container-elevation:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mdc-outlined-card-container-color:white;--mdc-outlined-card-outline-color:rgba(0, 0, 0, 0.12);--mdc-outlined-card-container-elevation:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mat-card-subtitle-text-color:rgba(0, 0, 0, 0.54)}html{--mat-card-title-text-font:Roboto, sans-serif;--mat-card-title-text-line-height:32px;--mat-card-title-text-size:20px;--mat-card-title-text-tracking:0.0125em;--mat-card-title-text-weight:500;--mat-card-subtitle-text-font:Roboto, sans-serif;--mat-card-subtitle-text-line-height:22px;--mat-card-subtitle-text-size:14px;--mat-card-subtitle-text-tracking:0.0071428571em;--mat-card-subtitle-text-weight:500}html{--mdc-linear-progress-active-indicator-height:4px;--mdc-linear-progress-track-height:4px;--mdc-linear-progress-track-shape:0}.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color:#3f51b5;--mdc-linear-progress-track-color:rgba(63, 81, 181, 0.25)}.mat-mdc-progress-bar.mat-accent{--mdc-linear-progress-active-indicator-color:#ff4081;--mdc-linear-progress-track-color:rgba(255, 64, 129, 0.25)}.mat-mdc-progress-bar.mat-warn{--mdc-linear-progress-active-indicator-color:#f44336;--mdc-linear-progress-track-color:rgba(244, 67, 54, 0.25)}html{--mdc-plain-tooltip-container-shape:4px;--mdc-plain-tooltip-supporting-text-line-height:16px}html{--mdc-plain-tooltip-container-color:#616161;--mdc-plain-tooltip-supporting-text-color:#fff}html{--mdc-plain-tooltip-supporting-text-font:Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size:12px;--mdc-plain-tooltip-supporting-text-weight:400;--mdc-plain-tooltip-supporting-text-tracking:0.0333333333em}html{--mdc-filled-text-field-active-indicator-height:1px;--mdc-filled-text-field-focus-active-indicator-height:2px;--mdc-filled-text-field-container-shape:4px;--mdc-outlined-text-field-outline-width:1px;--mdc-outlined-text-field-focus-outline-width:2px;--mdc-outlined-text-field-container-shape:4px}html{--mdc-filled-text-field-caret-color:#3f51b5;--mdc-filled-text-field-focus-active-indicator-color:#3f51b5;--mdc-filled-text-field-focus-label-text-color:rgba(63, 81, 181, 0.87);--mdc-filled-text-field-container-color:whitesmoke;--mdc-filled-text-field-disabled-container-color:#fafafa;--mdc-filled-text-field-label-text-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-hover-label-text-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-filled-text-field-input-text-color:rgba(0, 0, 0, 0.87);--mdc-filled-text-field-disabled-input-text-color:rgba(0, 0, 0, 0.38);--mdc-filled-text-field-input-text-placeholder-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-error-hover-label-text-color:#f44336;--mdc-filled-text-field-error-focus-label-text-color:#f44336;--mdc-filled-text-field-error-label-text-color:#f44336;--mdc-filled-text-field-error-caret-color:#f44336;--mdc-filled-text-field-active-indicator-color:rgba(0, 0, 0, 0.42);--mdc-filled-text-field-disabled-active-indicator-color:rgba(0, 0, 0, 0.06);--mdc-filled-text-field-hover-active-indicator-color:rgba(0, 0, 0, 0.87);--mdc-filled-text-field-error-active-indicator-color:#f44336;--mdc-filled-text-field-error-focus-active-indicator-color:#f44336;--mdc-filled-text-field-error-hover-active-indicator-color:#f44336;--mdc-outlined-text-field-caret-color:#3f51b5;--mdc-outlined-text-field-focus-outline-color:#3f51b5;--mdc-outlined-text-field-focus-label-text-color:rgba(63, 81, 181, 0.87);--mdc-outlined-text-field-label-text-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-hover-label-text-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-input-text-color:rgba(0, 0, 0, 0.87);--mdc-outlined-text-field-disabled-input-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-input-text-placeholder-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-error-caret-color:#f44336;--mdc-outlined-text-field-error-focus-label-text-color:#f44336;--mdc-outlined-text-field-error-label-text-color:#f44336;--mdc-outlined-text-field-error-hover-label-text-color:#f44336;--mdc-outlined-text-field-outline-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-disabled-outline-color:rgba(0, 0, 0, 0.06);--mdc-outlined-text-field-hover-outline-color:rgba(0, 0, 0, 0.87);--mdc-outlined-text-field-error-focus-outline-color:#f44336;--mdc-outlined-text-field-error-hover-outline-color:#f44336;--mdc-outlined-text-field-error-outline-color:#f44336;--mat-form-field-focus-select-arrow-color:rgba(63, 81, 181, 0.87);--mat-form-field-disabled-input-text-placeholder-color:rgba(0, 0, 0, 0.38);--mat-form-field-state-layer-color:rgba(0, 0, 0, 0.87);--mat-form-field-error-text-color:#f44336;--mat-form-field-select-option-text-color:inherit;--mat-form-field-select-disabled-option-text-color:GrayText;--mat-form-field-leading-icon-color:unset;--mat-form-field-disabled-leading-icon-color:unset;--mat-form-field-trailing-icon-color:unset;--mat-form-field-disabled-trailing-icon-color:unset;--mat-form-field-error-focus-trailing-icon-color:unset;--mat-form-field-error-hover-trailing-icon-color:unset;--mat-form-field-error-trailing-icon-color:unset;--mat-form-field-enabled-select-arrow-color:rgba(0, 0, 0, 0.54);--mat-form-field-disabled-select-arrow-color:rgba(0, 0, 0, 0.38);--mat-form-field-hover-state-layer-opacity:0.04;--mat-form-field-focus-state-layer-opacity:0.08}.mat-mdc-form-field.mat-accent{--mdc-filled-text-field-caret-color:#ff4081;--mdc-filled-text-field-focus-active-indicator-color:#ff4081;--mdc-filled-text-field-focus-label-text-color:rgba(255, 64, 129, 0.87);--mdc-outlined-text-field-caret-color:#ff4081;--mdc-outlined-text-field-focus-outline-color:#ff4081;--mdc-outlined-text-field-focus-label-text-color:rgba(255, 64, 129, 0.87);--mat-form-field-focus-select-arrow-color:rgba(255, 64, 129, 0.87)}.mat-mdc-form-field.mat-warn{--mdc-filled-text-field-caret-color:#f44336;--mdc-filled-text-field-focus-active-indicator-color:#f44336;--mdc-filled-text-field-focus-label-text-color:rgba(244, 67, 54, 0.87);--mdc-outlined-text-field-caret-color:#f44336;--mdc-outlined-text-field-focus-outline-color:#f44336;--mdc-outlined-text-field-focus-label-text-color:rgba(244, 67, 54, 0.87);--mat-form-field-focus-select-arrow-color:rgba(244, 67, 54, 0.87)}html{--mat-form-field-container-height:56px;--mat-form-field-filled-label-display:block;--mat-form-field-container-vertical-padding:16px;--mat-form-field-filled-with-label-container-padding-top:24px;--mat-form-field-filled-with-label-container-padding-bottom:8px}html{--mdc-filled-text-field-label-text-font:Roboto, sans-serif;--mdc-filled-text-field-label-text-size:16px;--mdc-filled-text-field-label-text-tracking:0.03125em;--mdc-filled-text-field-label-text-weight:400;--mdc-outlined-text-field-label-text-font:Roboto, sans-serif;--mdc-outlined-text-field-label-text-size:16px;--mdc-outlined-text-field-label-text-tracking:0.03125em;--mdc-outlined-text-field-label-text-weight:400;--mat-form-field-container-text-font:Roboto, sans-serif;--mat-form-field-container-text-line-height:24px;--mat-form-field-container-text-size:16px;--mat-form-field-container-text-tracking:0.03125em;--mat-form-field-container-text-weight:400;--mat-form-field-outlined-label-text-populated-size:16px;--mat-form-field-subscript-text-font:Roboto, sans-serif;--mat-form-field-subscript-text-line-height:20px;--mat-form-field-subscript-text-size:12px;--mat-form-field-subscript-text-tracking:0.0333333333em;--mat-form-field-subscript-text-weight:400}html{--mat-select-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}html{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(63, 81, 181, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html .mat-mdc-form-field.mat-accent{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(255, 64, 129, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html .mat-mdc-form-field.mat-warn{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(244, 67, 54, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html{--mat-select-arrow-transform:translateY(-8px)}html{--mat-select-trigger-text-font:Roboto, sans-serif;--mat-select-trigger-text-line-height:24px;--mat-select-trigger-text-size:16px;--mat-select-trigger-text-tracking:0.03125em;--mat-select-trigger-text-weight:400}html{--mat-autocomplete-container-shape:4px;--mat-autocomplete-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}html{--mat-autocomplete-background-color:white}html{--mdc-dialog-container-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);--mdc-dialog-container-shadow-color:#000;--mdc-dialog-container-shape:4px;--mat-dialog-container-max-width:80vw;--mat-dialog-container-small-max-width:80vw;--mat-dialog-container-min-width:0;--mat-dialog-actions-alignment:start;--mat-dialog-actions-padding:8px;--mat-dialog-content-padding:20px 24px;--mat-dialog-with-actions-content-padding:20px 24px;--mat-dialog-headline-padding:0 24px 9px}html{--mdc-dialog-container-color:white;--mdc-dialog-subhead-color:rgba(0, 0, 0, 0.87);--mdc-dialog-supporting-text-color:rgba(0, 0, 0, 0.6)}html{--mdc-dialog-subhead-font:Roboto, sans-serif;--mdc-dialog-subhead-line-height:32px;--mdc-dialog-subhead-size:20px;--mdc-dialog-subhead-weight:500;--mdc-dialog-subhead-tracking:0.0125em;--mdc-dialog-supporting-text-font:Roboto, sans-serif;--mdc-dialog-supporting-text-line-height:24px;--mdc-dialog-supporting-text-size:16px;--mdc-dialog-supporting-text-weight:400;--mdc-dialog-supporting-text-tracking:0.03125em}.mat-mdc-standard-chip{--mdc-chip-container-shape-family:rounded;--mdc-chip-container-shape-radius:16px 16px 16px 16px;--mdc-chip-with-avatar-avatar-shape-family:rounded;--mdc-chip-with-avatar-avatar-shape-radius:14px 14px 14px 14px;--mdc-chip-with-avatar-avatar-size:28px;--mdc-chip-with-icon-icon-size:18px;--mdc-chip-outline-width:0;--mdc-chip-outline-color:transparent;--mdc-chip-disabled-outline-color:transparent;--mdc-chip-focus-outline-color:transparent;--mdc-chip-hover-state-layer-opacity:0.04;--mdc-chip-with-avatar-disabled-avatar-opacity:1;--mdc-chip-flat-selected-outline-width:0;--mdc-chip-selected-hover-state-layer-opacity:0.04;--mdc-chip-with-trailing-icon-disabled-trailing-icon-opacity:1;--mdc-chip-with-icon-disabled-icon-opacity:1;--mat-chip-disabled-container-opacity:0.4;--mat-chip-trailing-action-opacity:0.54;--mat-chip-trailing-action-focus-opacity:1;--mat-chip-trailing-action-state-layer-color:transparent;--mat-chip-selected-trailing-action-state-layer-color:transparent;--mat-chip-trailing-action-hover-state-layer-opacity:0;--mat-chip-trailing-action-focus-state-layer-opacity:0}.mat-mdc-standard-chip{--mdc-chip-disabled-label-text-color:#212121;--mdc-chip-elevated-container-color:#e0e0e0;--mdc-chip-elevated-selected-container-color:#e0e0e0;--mdc-chip-elevated-disabled-container-color:#e0e0e0;--mdc-chip-flat-disabled-selected-container-color:#e0e0e0;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:#212121;--mdc-chip-selected-label-text-color:#212121;--mdc-chip-with-icon-icon-color:#212121;--mdc-chip-with-icon-disabled-icon-color:#212121;--mdc-chip-with-icon-selected-icon-color:#212121;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:#212121;--mdc-chip-with-trailing-icon-trailing-icon-color:#212121;--mat-chip-selected-disabled-trailing-icon-color:#212121;--mat-chip-selected-trailing-icon-color:#212121}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-primary,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-primary{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#3f51b5;--mdc-chip-elevated-selected-container-color:#3f51b5;--mdc-chip-elevated-disabled-container-color:#3f51b5;--mdc-chip-flat-disabled-selected-container-color:#3f51b5;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-accent,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-accent{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#ff4081;--mdc-chip-elevated-selected-container-color:#ff4081;--mdc-chip-elevated-disabled-container-color:#ff4081;--mdc-chip-flat-disabled-selected-container-color:#ff4081;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-warn,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-warn{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#f44336;--mdc-chip-elevated-selected-container-color:#f44336;--mdc-chip-elevated-disabled-container-color:#f44336;--mdc-chip-flat-disabled-selected-container-color:#f44336;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height:32px}.mat-mdc-standard-chip{--mdc-chip-label-text-font:Roboto, sans-serif;--mdc-chip-label-text-line-height:20px;--mdc-chip-label-text-size:14px;--mdc-chip-label-text-tracking:0.0178571429em;--mdc-chip-label-text-weight:400}html{--mdc-switch-disabled-selected-icon-opacity:0.38;--mdc-switch-disabled-track-opacity:0.12;--mdc-switch-disabled-unselected-icon-opacity:0.38;--mdc-switch-handle-height:20px;--mdc-switch-handle-shape:10px;--mdc-switch-handle-width:20px;--mdc-switch-selected-icon-size:18px;--mdc-switch-track-height:14px;--mdc-switch-track-shape:7px;--mdc-switch-track-width:36px;--mdc-switch-unselected-icon-size:18px;--mdc-switch-selected-focus-state-layer-opacity:0.12;--mdc-switch-selected-hover-state-layer-opacity:0.04;--mdc-switch-selected-pressed-state-layer-opacity:0.1;--mdc-switch-unselected-focus-state-layer-opacity:0.12;--mdc-switch-unselected-hover-state-layer-opacity:0.04;--mdc-switch-unselected-pressed-state-layer-opacity:0.1;--mat-switch-disabled-selected-handle-opacity:0.38;--mat-switch-disabled-unselected-handle-opacity:0.38;--mat-switch-unselected-handle-size:20px;--mat-switch-selected-handle-size:20px;--mat-switch-pressed-handle-size:20px;--mat-switch-with-icon-handle-size:20px;--mat-switch-selected-handle-horizontal-margin:0;--mat-switch-selected-with-icon-handle-horizontal-margin:0;--mat-switch-selected-pressed-handle-horizontal-margin:0;--mat-switch-unselected-handle-horizontal-margin:0;--mat-switch-unselected-with-icon-handle-horizontal-margin:0;--mat-switch-unselected-pressed-handle-horizontal-margin:0;--mat-switch-visible-track-opacity:1;--mat-switch-hidden-track-opacity:1;--mat-switch-visible-track-transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);--mat-switch-hidden-track-transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);--mat-switch-track-outline-width:1px;--mat-switch-track-outline-color:transparent;--mat-switch-selected-track-outline-width:1px;--mat-switch-disabled-unselected-track-outline-width:1px;--mat-switch-disabled-unselected-track-outline-color:transparent}html{--mdc-switch-selected-focus-state-layer-color:#3949ab;--mdc-switch-selected-handle-color:#3949ab;--mdc-switch-selected-hover-state-layer-color:#3949ab;--mdc-switch-selected-pressed-state-layer-color:#3949ab;--mdc-switch-selected-focus-handle-color:#1a237e;--mdc-switch-selected-hover-handle-color:#1a237e;--mdc-switch-selected-pressed-handle-color:#1a237e;--mdc-switch-selected-focus-track-color:#7986cb;--mdc-switch-selected-hover-track-color:#7986cb;--mdc-switch-selected-pressed-track-color:#7986cb;--mdc-switch-selected-track-color:#7986cb;--mdc-switch-disabled-selected-handle-color:#424242;--mdc-switch-disabled-selected-icon-color:#fff;--mdc-switch-disabled-selected-track-color:#424242;--mdc-switch-disabled-unselected-handle-color:#424242;--mdc-switch-disabled-unselected-icon-color:#fff;--mdc-switch-disabled-unselected-track-color:#424242;--mdc-switch-handle-surface-color:var(--mdc-theme-surface, #fff);--mdc-switch-handle-elevation-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mdc-switch-handle-shadow-color:black;--mdc-switch-disabled-handle-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mdc-switch-selected-icon-color:#fff;--mdc-switch-unselected-focus-handle-color:#212121;--mdc-switch-unselected-focus-state-layer-color:#424242;--mdc-switch-unselected-focus-track-color:#e0e0e0;--mdc-switch-unselected-handle-color:#616161;--mdc-switch-unselected-hover-handle-color:#212121;--mdc-switch-unselected-hover-state-layer-color:#424242;--mdc-switch-unselected-hover-track-color:#e0e0e0;--mdc-switch-unselected-icon-color:#fff;--mdc-switch-unselected-pressed-handle-color:#212121;--mdc-switch-unselected-pressed-state-layer-color:#424242;--mdc-switch-unselected-pressed-track-color:#e0e0e0;--mdc-switch-unselected-track-color:#e0e0e0;--mdc-switch-disabled-label-text-color: rgba(0, 0, 0, 0.38)}html .mat-mdc-slide-toggle{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}html .mat-mdc-slide-toggle.mat-accent{--mdc-switch-selected-focus-state-layer-color:#d81b60;--mdc-switch-selected-handle-color:#d81b60;--mdc-switch-selected-hover-state-layer-color:#d81b60;--mdc-switch-selected-pressed-state-layer-color:#d81b60;--mdc-switch-selected-focus-handle-color:#880e4f;--mdc-switch-selected-hover-handle-color:#880e4f;--mdc-switch-selected-pressed-handle-color:#880e4f;--mdc-switch-selected-focus-track-color:#f06292;--mdc-switch-selected-hover-track-color:#f06292;--mdc-switch-selected-pressed-track-color:#f06292;--mdc-switch-selected-track-color:#f06292}html .mat-mdc-slide-toggle.mat-warn{--mdc-switch-selected-focus-state-layer-color:#e53935;--mdc-switch-selected-handle-color:#e53935;--mdc-switch-selected-hover-state-layer-color:#e53935;--mdc-switch-selected-pressed-state-layer-color:#e53935;--mdc-switch-selected-focus-handle-color:#b71c1c;--mdc-switch-selected-hover-handle-color:#b71c1c;--mdc-switch-selected-pressed-handle-color:#b71c1c;--mdc-switch-selected-focus-track-color:#e57373;--mdc-switch-selected-hover-track-color:#e57373;--mdc-switch-selected-pressed-track-color:#e57373;--mdc-switch-selected-track-color:#e57373}html{--mdc-switch-state-layer-size:40px}html .mat-mdc-slide-toggle{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mdc-radio-disabled-selected-icon-opacity:0.38;--mdc-radio-disabled-unselected-icon-opacity:0.38;--mdc-radio-state-layer-size:40px}.mat-mdc-radio-button{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}.mat-mdc-radio-button.mat-primary{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#3f51b5;--mdc-radio-selected-hover-icon-color:#3f51b5;--mdc-radio-selected-icon-color:#3f51b5;--mdc-radio-selected-pressed-icon-color:#3f51b5;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#3f51b5;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-radio-button.mat-accent{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#ff4081;--mdc-radio-selected-hover-icon-color:#ff4081;--mdc-radio-selected-icon-color:#ff4081;--mdc-radio-selected-pressed-icon-color:#ff4081;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#ff4081;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-radio-button.mat-warn{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#f44336;--mdc-radio-selected-hover-icon-color:#f44336;--mdc-radio-selected-icon-color:#f44336;--mdc-radio-selected-pressed-icon-color:#f44336;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#f44336;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}html{--mdc-radio-state-layer-size:40px;--mat-radio-touch-target-display:block}.mat-mdc-radio-button{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mat-slider-value-indicator-width:auto;--mat-slider-value-indicator-height:32px;--mat-slider-value-indicator-caret-display:block;--mat-slider-value-indicator-border-radius:4px;--mat-slider-value-indicator-padding:0 12px;--mat-slider-value-indicator-text-transform:none;--mat-slider-value-indicator-container-transform:translateX(-50%);--mdc-slider-active-track-height:6px;--mdc-slider-active-track-shape:9999px;--mdc-slider-handle-height:20px;--mdc-slider-handle-shape:50%;--mdc-slider-handle-width:20px;--mdc-slider-inactive-track-height:4px;--mdc-slider-inactive-track-shape:9999px;--mdc-slider-with-overlap-handle-outline-width:1px;--mdc-slider-with-tick-marks-active-container-opacity:0.6;--mdc-slider-with-tick-marks-container-shape:50%;--mdc-slider-with-tick-marks-container-size:2px;--mdc-slider-with-tick-marks-inactive-container-opacity:0.6}html{--mdc-slider-handle-color:#3f51b5;--mdc-slider-focus-handle-color:#3f51b5;--mdc-slider-hover-handle-color:#3f51b5;--mdc-slider-active-track-color:#3f51b5;--mdc-slider-inactive-track-color:#3f51b5;--mdc-slider-with-tick-marks-inactive-container-color:#3f51b5;--mdc-slider-with-tick-marks-active-container-color:white;--mdc-slider-disabled-active-track-color:#000;--mdc-slider-disabled-handle-color:#000;--mdc-slider-disabled-inactive-track-color:#000;--mdc-slider-label-container-color:#000;--mdc-slider-label-label-text-color:#fff;--mdc-slider-with-overlap-handle-outline-color:#fff;--mdc-slider-with-tick-marks-disabled-container-color:#000;--mdc-slider-handle-elevation:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mat-slider-ripple-color:#3f51b5;--mat-slider-hover-state-layer-color:rgba(63, 81, 181, 0.05);--mat-slider-focus-state-layer-color:rgba(63, 81, 181, 0.2);--mat-slider-value-indicator-opacity:0.6}html .mat-accent{--mat-slider-ripple-color:#ff4081;--mat-slider-hover-state-layer-color:rgba(255, 64, 129, 0.05);--mat-slider-focus-state-layer-color:rgba(255, 64, 129, 0.2);--mdc-slider-handle-color:#ff4081;--mdc-slider-focus-handle-color:#ff4081;--mdc-slider-hover-handle-color:#ff4081;--mdc-slider-active-track-color:#ff4081;--mdc-slider-inactive-track-color:#ff4081;--mdc-slider-with-tick-marks-inactive-container-color:#ff4081;--mdc-slider-with-tick-marks-active-container-color:white}html .mat-warn{--mat-slider-ripple-color:#f44336;--mat-slider-hover-state-layer-color:rgba(244, 67, 54, 0.05);--mat-slider-focus-state-layer-color:rgba(244, 67, 54, 0.2);--mdc-slider-handle-color:#f44336;--mdc-slider-focus-handle-color:#f44336;--mdc-slider-hover-handle-color:#f44336;--mdc-slider-active-track-color:#f44336;--mdc-slider-inactive-track-color:#f44336;--mdc-slider-with-tick-marks-inactive-container-color:#f44336;--mdc-slider-with-tick-marks-active-container-color:white}html{--mdc-slider-label-label-text-font:Roboto, sans-serif;--mdc-slider-label-label-text-size:14px;--mdc-slider-label-label-text-line-height:22px;--mdc-slider-label-label-text-tracking:0.0071428571em;--mdc-slider-label-label-text-weight:500}html{--mat-menu-container-shape:4px;--mat-menu-divider-bottom-spacing:0;--mat-menu-divider-top-spacing:0;--mat-menu-item-spacing:16px;--mat-menu-item-icon-size:24px;--mat-menu-item-leading-spacing:16px;--mat-menu-item-trailing-spacing:16px;--mat-menu-item-with-icon-leading-spacing:16px;--mat-menu-item-with-icon-trailing-spacing:16px}html{--mat-menu-item-label-text-color:rgba(0, 0, 0, 0.87);--mat-menu-item-icon-color:rgba(0, 0, 0, 0.87);--mat-menu-item-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-menu-item-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-menu-container-color:white;--mat-menu-divider-color:rgba(0, 0, 0, 0.12)}html{--mat-menu-item-label-text-font:Roboto, sans-serif;--mat-menu-item-label-text-size:16px;--mat-menu-item-label-text-tracking:0.03125em;--mat-menu-item-label-text-line-height:24px;--mat-menu-item-label-text-weight:400}html{--mdc-list-list-item-container-shape:0;--mdc-list-list-item-leading-avatar-shape:50%;--mdc-list-list-item-container-color:transparent;--mdc-list-list-item-selected-container-color:transparent;--mdc-list-list-item-leading-avatar-color:transparent;--mdc-list-list-item-leading-icon-size:24px;--mdc-list-list-item-leading-avatar-size:40px;--mdc-list-list-item-trailing-icon-size:24px;--mdc-list-list-item-disabled-state-layer-color:transparent;--mdc-list-list-item-disabled-state-layer-opacity:0;--mdc-list-list-item-disabled-label-text-opacity:0.38;--mdc-list-list-item-disabled-leading-icon-opacity:0.38;--mdc-list-list-item-disabled-trailing-icon-opacity:0.38;--mat-list-active-indicator-color:transparent;--mat-list-active-indicator-shape:4px}html{--mdc-list-list-item-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-supporting-text-color:rgba(0, 0, 0, 0.54);--mdc-list-list-item-leading-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-trailing-supporting-text-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-selected-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-disabled-label-text-color:black;--mdc-list-list-item-disabled-leading-icon-color:black;--mdc-list-list-item-disabled-trailing-icon-color:black;--mdc-list-list-item-hover-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-hover-leading-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-hover-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-focus-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-hover-state-layer-color:black;--mdc-list-list-item-hover-state-layer-opacity:0.04;--mdc-list-list-item-focus-state-layer-color:black;--mdc-list-list-item-focus-state-layer-opacity:0.12}.mdc-list-item__start,.mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#3f51b5;--mdc-radio-selected-hover-icon-color:#3f51b5;--mdc-radio-selected-icon-color:#3f51b5;--mdc-radio-selected-pressed-icon-color:#3f51b5}.mat-accent .mdc-list-item__start,.mat-accent .mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#ff4081;--mdc-radio-selected-hover-icon-color:#ff4081;--mdc-radio-selected-icon-color:#ff4081;--mdc-radio-selected-pressed-icon-color:#ff4081}.mat-warn .mdc-list-item__start,.mat-warn .mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#f44336;--mdc-radio-selected-hover-icon-color:#f44336;--mdc-radio-selected-icon-color:#f44336;--mdc-radio-selected-pressed-icon-color:#f44336}.mat-mdc-list-option{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#3f51b5;--mdc-checkbox-selected-hover-icon-color:#3f51b5;--mdc-checkbox-selected-icon-color:#3f51b5;--mdc-checkbox-selected-pressed-icon-color:#3f51b5;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#3f51b5;--mdc-checkbox-selected-hover-state-layer-color:#3f51b5;--mdc-checkbox-selected-pressed-state-layer-color:#3f51b5;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-option.mat-accent{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#ff4081;--mdc-checkbox-selected-hover-icon-color:#ff4081;--mdc-checkbox-selected-icon-color:#ff4081;--mdc-checkbox-selected-pressed-icon-color:#ff4081;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#ff4081;--mdc-checkbox-selected-hover-state-layer-color:#ff4081;--mdc-checkbox-selected-pressed-state-layer-color:#ff4081;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-option.mat-warn{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#f44336;--mdc-checkbox-selected-hover-icon-color:#f44336;--mdc-checkbox-selected-icon-color:#f44336;--mdc-checkbox-selected-pressed-icon-color:#f44336;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#f44336;--mdc-checkbox-selected-hover-state-layer-color:#f44336;--mdc-checkbox-selected-pressed-state-layer-color:#f44336;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--selected .mdc-list-item__primary-text,.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--activated .mdc-list-item__primary-text{color:#3f51b5}.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--selected.mdc-list-item--with-leading-icon .mdc-list-item__start,.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--activated.mdc-list-item--with-leading-icon .mdc-list-item__start{color:#3f51b5}.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__content,.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__end{opacity:1}html{--mdc-list-list-item-one-line-container-height:48px;--mdc-list-list-item-two-line-container-height:64px;--mdc-list-list-item-three-line-container-height:88px;--mat-list-list-item-leading-icon-start-space:16px;--mat-list-list-item-leading-icon-end-space:32px}.mdc-list-item__start,.mdc-list-item__end{--mdc-radio-state-layer-size:40px}.mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}html{--mdc-list-list-item-label-text-font:Roboto, sans-serif;--mdc-list-list-item-label-text-line-height:24px;--mdc-list-list-item-label-text-size:16px;--mdc-list-list-item-label-text-tracking:0.03125em;--mdc-list-list-item-label-text-weight:400;--mdc-list-list-item-supporting-text-font:Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height:20px;--mdc-list-list-item-supporting-text-size:14px;--mdc-list-list-item-supporting-text-tracking:0.0178571429em;--mdc-list-list-item-supporting-text-weight:400;--mdc-list-list-item-trailing-supporting-text-font:Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height:20px;--mdc-list-list-item-trailing-supporting-text-size:12px;--mdc-list-list-item-trailing-supporting-text-tracking:0.0333333333em;--mdc-list-list-item-trailing-supporting-text-weight:400}.mdc-list-group__subheader{font:400 16px/28px Roboto, sans-serif;letter-spacing:.009375em}html{--mat-paginator-container-text-color:rgba(0, 0, 0, 0.87);--mat-paginator-container-background-color:white;--mat-paginator-enabled-icon-color:rgba(0, 0, 0, 0.54);--mat-paginator-disabled-icon-color:rgba(0, 0, 0, 0.12)}html{--mat-paginator-container-size:56px;--mat-paginator-form-field-container-height:40px;--mat-paginator-form-field-container-vertical-padding:8px}html{--mat-paginator-container-text-font:Roboto, sans-serif;--mat-paginator-container-text-line-height:20px;--mat-paginator-container-text-size:12px;--mat-paginator-container-text-tracking:0.0333333333em;--mat-paginator-container-text-weight:400;--mat-paginator-select-trigger-text-size:12px}html{--mdc-tab-indicator-active-indicator-height:2px;--mdc-tab-indicator-active-indicator-shape:0;--mdc-secondary-navigation-tab-container-height:48px;--mat-tab-header-divider-color:transparent;--mat-tab-header-divider-height:0}.mat-mdc-tab-group,.mat-mdc-tab-nav-bar{--mdc-tab-indicator-active-indicator-color:#3f51b5;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#3f51b5;--mat-tab-header-active-ripple-color:#3f51b5;--mat-tab-header-inactive-ripple-color:#3f51b5;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#3f51b5;--mat-tab-header-active-hover-label-text-color:#3f51b5;--mat-tab-header-active-focus-indicator-color:#3f51b5;--mat-tab-header-active-hover-indicator-color:#3f51b5}.mat-mdc-tab-group.mat-accent,.mat-mdc-tab-nav-bar.mat-accent{--mdc-tab-indicator-active-indicator-color:#ff4081;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#ff4081;--mat-tab-header-active-ripple-color:#ff4081;--mat-tab-header-inactive-ripple-color:#ff4081;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#ff4081;--mat-tab-header-active-hover-label-text-color:#ff4081;--mat-tab-header-active-focus-indicator-color:#ff4081;--mat-tab-header-active-hover-indicator-color:#ff4081}.mat-mdc-tab-group.mat-warn,.mat-mdc-tab-nav-bar.mat-warn{--mdc-tab-indicator-active-indicator-color:#f44336;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#f44336;--mat-tab-header-active-ripple-color:#f44336;--mat-tab-header-inactive-ripple-color:#f44336;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#f44336;--mat-tab-header-active-hover-label-text-color:#f44336;--mat-tab-header-active-focus-indicator-color:#f44336;--mat-tab-header-active-hover-indicator-color:#f44336}.mat-mdc-tab-group.mat-background-primary,.mat-mdc-tab-nav-bar.mat-background-primary{--mat-tab-header-with-background-background-color:#3f51b5;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-group.mat-background-accent,.mat-mdc-tab-nav-bar.mat-background-accent{--mat-tab-header-with-background-background-color:#ff4081;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-group.mat-background-warn,.mat-mdc-tab-nav-bar.mat-background-warn{--mat-tab-header-with-background-background-color:#f44336;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-header{--mdc-secondary-navigation-tab-container-height:48px}.mat-mdc-tab-header{--mat-tab-header-label-text-font:Roboto, sans-serif;--mat-tab-header-label-text-size:14px;--mat-tab-header-label-text-tracking:0.0892857143em;--mat-tab-header-label-text-line-height:36px;--mat-tab-header-label-text-weight:500}html{--mdc-checkbox-disabled-selected-checkmark-color:#fff;--mdc-checkbox-selected-focus-state-layer-opacity:0.16;--mdc-checkbox-selected-hover-state-layer-opacity:0.04;--mdc-checkbox-selected-pressed-state-layer-opacity:0.16;--mdc-checkbox-unselected-focus-state-layer-opacity:0.16;--mdc-checkbox-unselected-hover-state-layer-opacity:0.04;--mdc-checkbox-unselected-pressed-state-layer-opacity:0.16}html{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#ff4081;--mdc-checkbox-selected-hover-icon-color:#ff4081;--mdc-checkbox-selected-icon-color:#ff4081;--mdc-checkbox-selected-pressed-icon-color:#ff4081;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#ff4081;--mdc-checkbox-selected-hover-state-layer-color:#ff4081;--mdc-checkbox-selected-pressed-state-layer-color:#ff4081;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black;--mat-checkbox-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-checkbox{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}.mat-mdc-checkbox.mat-primary{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#3f51b5;--mdc-checkbox-selected-hover-icon-color:#3f51b5;--mdc-checkbox-selected-icon-color:#3f51b5;--mdc-checkbox-selected-pressed-icon-color:#3f51b5;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#3f51b5;--mdc-checkbox-selected-hover-state-layer-color:#3f51b5;--mdc-checkbox-selected-pressed-state-layer-color:#3f51b5;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-checkbox.mat-warn{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#f44336;--mdc-checkbox-selected-hover-icon-color:#f44336;--mdc-checkbox-selected-icon-color:#f44336;--mdc-checkbox-selected-pressed-icon-color:#f44336;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#f44336;--mdc-checkbox-selected-hover-state-layer-color:#f44336;--mdc-checkbox-selected-pressed-state-layer-color:#f44336;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}html{--mdc-checkbox-state-layer-size:40px;--mat-checkbox-touch-target-display:block}.mat-mdc-checkbox{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mdc-text-button-container-shape:4px;--mdc-text-button-keep-touch-target:false;--mdc-filled-button-container-shape:4px;--mdc-filled-button-keep-touch-target:false;--mdc-protected-button-container-shape:4px;--mdc-protected-button-keep-touch-target:false;--mdc-outlined-button-keep-touch-target:false;--mdc-outlined-button-outline-width:1px;--mdc-outlined-button-container-shape:4px;--mat-text-button-horizontal-padding:8px;--mat-text-button-with-icon-horizontal-padding:8px;--mat-text-button-icon-spacing:8px;--mat-text-button-icon-offset:0;--mat-filled-button-horizontal-padding:16px;--mat-filled-button-icon-spacing:8px;--mat-filled-button-icon-offset:-4px;--mat-protected-button-horizontal-padding:16px;--mat-protected-button-icon-spacing:8px;--mat-protected-button-icon-offset:-4px;--mat-outlined-button-horizontal-padding:15px;--mat-outlined-button-icon-spacing:8px;--mat-outlined-button-icon-offset:-4px}html{--mdc-text-button-label-text-color:black;--mdc-text-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mat-text-button-state-layer-color:black;--mat-text-button-disabled-state-layer-color:black;--mat-text-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-text-button-hover-state-layer-opacity:0.04;--mat-text-button-focus-state-layer-opacity:0.12;--mat-text-button-pressed-state-layer-opacity:0.12;--mdc-filled-button-container-color:white;--mdc-filled-button-label-text-color:black;--mdc-filled-button-disabled-container-color:rgba(0, 0, 0, 0.12);--mdc-filled-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mat-filled-button-state-layer-color:black;--mat-filled-button-disabled-state-layer-color:black;--mat-filled-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-filled-button-hover-state-layer-opacity:0.04;--mat-filled-button-focus-state-layer-opacity:0.12;--mat-filled-button-pressed-state-layer-opacity:0.12;--mdc-protected-button-container-color:white;--mdc-protected-button-label-text-color:black;--mdc-protected-button-disabled-container-color:rgba(0, 0, 0, 0.12);--mdc-protected-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-protected-button-container-elevation-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-disabled-container-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-focus-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-hover-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-pressed-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-protected-button-container-shadow-color:#000;--mat-protected-button-state-layer-color:black;--mat-protected-button-disabled-state-layer-color:black;--mat-protected-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-protected-button-hover-state-layer-opacity:0.04;--mat-protected-button-focus-state-layer-opacity:0.12;--mat-protected-button-pressed-state-layer-opacity:0.12;--mdc-outlined-button-disabled-outline-color:rgba(0, 0, 0, 0.12);--mdc-outlined-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-button-label-text-color:black;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:black;--mat-outlined-button-disabled-state-layer-color:black;--mat-outlined-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-outlined-button-hover-state-layer-opacity:0.04;--mat-outlined-button-focus-state-layer-opacity:0.12;--mat-outlined-button-pressed-state-layer-opacity:0.12}.mat-mdc-button.mat-primary{--mdc-text-button-label-text-color:#3f51b5;--mat-text-button-state-layer-color:#3f51b5;--mat-text-button-ripple-color:rgba(63, 81, 181, 0.1)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color:#ff4081;--mat-text-button-state-layer-color:#ff4081;--mat-text-button-ripple-color:rgba(255, 64, 129, 0.1)}.mat-mdc-button.mat-warn{--mdc-text-button-label-text-color:#f44336;--mat-text-button-state-layer-color:#f44336;--mat-text-button-ripple-color:rgba(244, 67, 54, 0.1)}.mat-mdc-unelevated-button.mat-primary{--mdc-filled-button-container-color:#3f51b5;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-unelevated-button.mat-accent{--mdc-filled-button-container-color:#ff4081;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-unelevated-button.mat-warn{--mdc-filled-button-container-color:#f44336;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-primary{--mdc-protected-button-container-color:#3f51b5;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-accent{--mdc-protected-button-container-color:#ff4081;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-warn{--mdc-protected-button-container-color:#f44336;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-outlined-button.mat-primary{--mdc-outlined-button-label-text-color:#3f51b5;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#3f51b5;--mat-outlined-button-ripple-color:rgba(63, 81, 181, 0.1)}.mat-mdc-outlined-button.mat-accent{--mdc-outlined-button-label-text-color:#ff4081;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#ff4081;--mat-outlined-button-ripple-color:rgba(255, 64, 129, 0.1)}.mat-mdc-outlined-button.mat-warn{--mdc-outlined-button-label-text-color:#f44336;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#f44336;--mat-outlined-button-ripple-color:rgba(244, 67, 54, 0.1)}html{--mdc-text-button-container-height:36px;--mdc-filled-button-container-height:36px;--mdc-outlined-button-container-height:36px;--mdc-protected-button-container-height:36px;--mat-text-button-touch-target-display:block;--mat-filled-button-touch-target-display:block;--mat-protected-button-touch-target-display:block;--mat-outlined-button-touch-target-display:block}html{--mdc-text-button-label-text-font:Roboto, sans-serif;--mdc-text-button-label-text-size:14px;--mdc-text-button-label-text-tracking:0.0892857143em;--mdc-text-button-label-text-weight:500;--mdc-text-button-label-text-transform:none;--mdc-filled-button-label-text-font:Roboto, sans-serif;--mdc-filled-button-label-text-size:14px;--mdc-filled-button-label-text-tracking:0.0892857143em;--mdc-filled-button-label-text-weight:500;--mdc-filled-button-label-text-transform:none;--mdc-outlined-button-label-text-font:Roboto, sans-serif;--mdc-outlined-button-label-text-size:14px;--mdc-outlined-button-label-text-tracking:0.0892857143em;--mdc-outlined-button-label-text-weight:500;--mdc-outlined-button-label-text-transform:none;--mdc-protected-button-label-text-font:Roboto, sans-serif;--mdc-protected-button-label-text-size:14px;--mdc-protected-button-label-text-tracking:0.0892857143em;--mdc-protected-button-label-text-weight:500;--mdc-protected-button-label-text-transform:none}html{--mdc-icon-button-icon-size:24px}html{--mdc-icon-button-icon-color:inherit;--mdc-icon-button-disabled-icon-color:rgba(0, 0, 0, 0.38);--mat-icon-button-state-layer-color:black;--mat-icon-button-disabled-state-layer-color:black;--mat-icon-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-icon-button-hover-state-layer-opacity:0.04;--mat-icon-button-focus-state-layer-opacity:0.12;--mat-icon-button-pressed-state-layer-opacity:0.12}html .mat-mdc-icon-button.mat-primary{--mdc-icon-button-icon-color:#3f51b5;--mat-icon-button-state-layer-color:#3f51b5;--mat-icon-button-ripple-color:rgba(63, 81, 181, 0.1)}html .mat-mdc-icon-button.mat-accent{--mdc-icon-button-icon-color:#ff4081;--mat-icon-button-state-layer-color:#ff4081;--mat-icon-button-ripple-color:rgba(255, 64, 129, 0.1)}html .mat-mdc-icon-button.mat-warn{--mdc-icon-button-icon-color:#f44336;--mat-icon-button-state-layer-color:#f44336;--mat-icon-button-ripple-color:rgba(244, 67, 54, 0.1)}html{--mat-icon-button-touch-target-display:block}.mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size:48px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:12px}html{--mdc-fab-container-shape:50%;--mdc-fab-icon-size:24px;--mdc-fab-small-container-shape:50%;--mdc-fab-small-icon-size:24px;--mdc-extended-fab-container-height:48px;--mdc-extended-fab-container-shape:24px}html{--mdc-fab-container-color:white;--mdc-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-fab-container-shadow-color:#000;--mat-fab-foreground-color:black;--mat-fab-state-layer-color:black;--mat-fab-disabled-state-layer-color:black;--mat-fab-ripple-color:rgba(0, 0, 0, 0.1);--mat-fab-hover-state-layer-opacity:0.04;--mat-fab-focus-state-layer-opacity:0.12;--mat-fab-pressed-state-layer-opacity:0.12;--mat-fab-disabled-state-container-color:rgba(0, 0, 0, 0.12);--mat-fab-disabled-state-foreground-color:rgba(0, 0, 0, 0.38);--mdc-fab-small-container-color:white;--mdc-fab-small-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-fab-small-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-small-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-small-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-fab-small-container-shadow-color:#000;--mat-fab-small-foreground-color:black;--mat-fab-small-state-layer-color:black;--mat-fab-small-disabled-state-layer-color:black;--mat-fab-small-ripple-color:rgba(0, 0, 0, 0.1);--mat-fab-small-hover-state-layer-opacity:0.04;--mat-fab-small-focus-state-layer-opacity:0.12;--mat-fab-small-pressed-state-layer-opacity:0.12;--mat-fab-small-disabled-state-container-color:rgba(0, 0, 0, 0.12);--mat-fab-small-disabled-state-foreground-color:rgba(0, 0, 0, 0.38);--mdc-extended-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-extended-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-extended-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-extended-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-extended-fab-container-shadow-color:#000}html .mat-mdc-fab.mat-primary{--mdc-fab-container-color:#3f51b5;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-fab.mat-accent{--mdc-fab-container-color:#ff4081;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-fab.mat-warn{--mdc-fab-container-color:#f44336;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-primary{--mdc-fab-small-container-color:#3f51b5;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-accent{--mdc-fab-small-container-color:#ff4081;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-warn{--mdc-fab-small-container-color:#f44336;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html{--mat-fab-touch-target-display:block;--mat-fab-small-touch-target-display:block}html{--mdc-extended-fab-label-text-font:Roboto, sans-serif;--mdc-extended-fab-label-text-size:14px;--mdc-extended-fab-label-text-tracking:0.0892857143em;--mdc-extended-fab-label-text-weight:500}html{--mdc-snackbar-container-shape:4px}html{--mdc-snackbar-container-color:#333333;--mdc-snackbar-supporting-text-color:rgba(255, 255, 255, 0.87);--mat-snack-bar-button-color:#ff4081}html{--mdc-snackbar-supporting-text-font:Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height:20px;--mdc-snackbar-supporting-text-size:14px;--mdc-snackbar-supporting-text-weight:400}html{--mat-table-row-item-outline-width:1px}html{--mat-table-background-color:white;--mat-table-header-headline-color:rgba(0, 0, 0, 0.87);--mat-table-row-item-label-text-color:rgba(0, 0, 0, 0.87);--mat-table-row-item-outline-color:rgba(0, 0, 0, 0.12)}html{--mat-table-header-container-height:56px;--mat-table-footer-container-height:52px;--mat-table-row-item-container-height:52px}html{--mat-table-header-headline-font:Roboto, sans-serif;--mat-table-header-headline-line-height:22px;--mat-table-header-headline-size:14px;--mat-table-header-headline-weight:500;--mat-table-header-headline-tracking:0.0071428571em;--mat-table-row-item-label-text-font:Roboto, sans-serif;--mat-table-row-item-label-text-line-height:20px;--mat-table-row-item-label-text-size:14px;--mat-table-row-item-label-text-weight:400;--mat-table-row-item-label-text-tracking:0.0178571429em;--mat-table-footer-supporting-text-font:Roboto, sans-serif;--mat-table-footer-supporting-text-line-height:20px;--mat-table-footer-supporting-text-size:14px;--mat-table-footer-supporting-text-weight:400;--mat-table-footer-supporting-text-tracking:0.0178571429em}html{--mdc-circular-progress-active-indicator-width:4px;--mdc-circular-progress-size:48px}html{--mdc-circular-progress-active-indicator-color:#3f51b5}html .mat-accent{--mdc-circular-progress-active-indicator-color:#ff4081}html .mat-warn{--mdc-circular-progress-active-indicator-color:#f44336}html{--mat-badge-container-shape:50%;--mat-badge-container-size:unset;--mat-badge-small-size-container-size:unset;--mat-badge-large-size-container-size:unset;--mat-badge-legacy-container-size:22px;--mat-badge-legacy-small-size-container-size:16px;--mat-badge-legacy-large-size-container-size:28px;--mat-badge-container-offset:-11px 0;--mat-badge-small-size-container-offset:-8px 0;--mat-badge-large-size-container-offset:-14px 0;--mat-badge-container-overlap-offset:-11px;--mat-badge-small-size-container-overlap-offset:-8px;--mat-badge-large-size-container-overlap-offset:-14px;--mat-badge-container-padding:0;--mat-badge-small-size-container-padding:0;--mat-badge-large-size-container-padding:0}html{--mat-badge-background-color:#3f51b5;--mat-badge-text-color:white;--mat-badge-disabled-state-background-color:#b9b9b9;--mat-badge-disabled-state-text-color:rgba(0, 0, 0, 0.38)}.mat-badge-accent{--mat-badge-background-color:#ff4081;--mat-badge-text-color:white}.mat-badge-warn{--mat-badge-background-color:#f44336;--mat-badge-text-color:white}html{--mat-badge-text-font:Roboto, sans-serif;--mat-badge-text-size:12px;--mat-badge-text-weight:600;--mat-badge-small-size-text-size:9px;--mat-badge-large-size-text-size:24px}html{--mat-bottom-sheet-container-shape:4px}html{--mat-bottom-sheet-container-text-color:rgba(0, 0, 0, 0.87);--mat-bottom-sheet-container-background-color:white}html{--mat-bottom-sheet-container-text-font:Roboto, sans-serif;--mat-bottom-sheet-container-text-line-height:20px;--mat-bottom-sheet-container-text-size:14px;--mat-bottom-sheet-container-text-tracking:0.0178571429em;--mat-bottom-sheet-container-text-weight:400}html{--mat-legacy-button-toggle-height:36px;--mat-legacy-button-toggle-shape:2px;--mat-legacy-button-toggle-focus-state-layer-opacity:1;--mat-standard-button-toggle-shape:4px;--mat-standard-button-toggle-hover-state-layer-opacity:0.04;--mat-standard-button-toggle-focus-state-layer-opacity:0.12}html{--mat-legacy-button-toggle-text-color:rgba(0, 0, 0, 0.38);--mat-legacy-button-toggle-state-layer-color:rgba(0, 0, 0, 0.12);--mat-legacy-button-toggle-selected-state-text-color:rgba(0, 0, 0, 0.54);--mat-legacy-button-toggle-selected-state-background-color:#e0e0e0;--mat-legacy-button-toggle-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-legacy-button-toggle-disabled-state-background-color:#eeeeee;--mat-legacy-button-toggle-disabled-selected-state-background-color:#bdbdbd;--mat-standard-button-toggle-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-background-color:white;--mat-standard-button-toggle-state-layer-color:black;--mat-standard-button-toggle-selected-state-background-color:#e0e0e0;--mat-standard-button-toggle-selected-state-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-standard-button-toggle-disabled-state-background-color:white;--mat-standard-button-toggle-disabled-selected-state-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-disabled-selected-state-background-color:#bdbdbd;--mat-standard-button-toggle-divider-color:#e0e0e0}html{--mat-standard-button-toggle-height:48px}html{--mat-legacy-button-toggle-label-text-font:Roboto, sans-serif;--mat-legacy-button-toggle-label-text-line-height:24px;--mat-legacy-button-toggle-label-text-size:16px;--mat-legacy-button-toggle-label-text-tracking:0.03125em;--mat-legacy-button-toggle-label-text-weight:400;--mat-standard-button-toggle-label-text-font:Roboto, sans-serif;--mat-standard-button-toggle-label-text-line-height:24px;--mat-standard-button-toggle-label-text-size:16px;--mat-standard-button-toggle-label-text-tracking:0.03125em;--mat-standard-button-toggle-label-text-weight:400}html{--mat-datepicker-calendar-container-shape:4px;--mat-datepicker-calendar-container-touch-shape:4px;--mat-datepicker-calendar-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mat-datepicker-calendar-container-touch-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12)}html{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#3f51b5;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(63, 81, 181, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(63, 81, 181, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(63, 81, 181, 0.3);--mat-datepicker-toggle-active-state-icon-color:#3f51b5;--mat-datepicker-calendar-date-in-range-state-background-color:rgba(63, 81, 181, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e;--mat-datepicker-toggle-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-body-label-text-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-period-button-text-color:black;--mat-datepicker-calendar-period-button-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-navigation-button-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-header-divider-color:rgba(0, 0, 0, 0.12);--mat-datepicker-calendar-header-text-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-date-today-outline-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-date-today-disabled-state-outline-color:rgba(0, 0, 0, 0.18);--mat-datepicker-calendar-date-text-color:rgba(0, 0, 0, 0.87);--mat-datepicker-calendar-date-outline-color:transparent;--mat-datepicker-calendar-date-disabled-state-text-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-date-preview-state-outline-color:rgba(0, 0, 0, 0.24);--mat-datepicker-range-input-separator-color:rgba(0, 0, 0, 0.87);--mat-datepicker-range-input-disabled-state-separator-color:rgba(0, 0, 0, 0.38);--mat-datepicker-range-input-disabled-state-text-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-container-background-color:white;--mat-datepicker-calendar-container-text-color:rgba(0, 0, 0, 0.87)}.mat-datepicker-content.mat-accent{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#ff4081;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(255, 64, 129, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(255, 64, 129, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(255, 64, 129, 0.3);--mat-datepicker-calendar-date-in-range-state-background-color:rgba(255, 64, 129, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e}.mat-datepicker-content.mat-warn{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#f44336;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(244, 67, 54, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(244, 67, 54, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(244, 67, 54, 0.3);--mat-datepicker-calendar-date-in-range-state-background-color:rgba(244, 67, 54, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e}.mat-datepicker-toggle-active.mat-accent{--mat-datepicker-toggle-active-state-icon-color:#ff4081}.mat-datepicker-toggle-active.mat-warn{--mat-datepicker-toggle-active-state-icon-color:#f44336}.mat-calendar-controls{--mat-icon-button-touch-target-display:none}.mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size:40px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:8px}html{--mat-datepicker-calendar-text-font:Roboto, sans-serif;--mat-datepicker-calendar-text-size:13px;--mat-datepicker-calendar-body-label-text-size:14px;--mat-datepicker-calendar-body-label-text-weight:500;--mat-datepicker-calendar-period-button-text-size:14px;--mat-datepicker-calendar-period-button-text-weight:500;--mat-datepicker-calendar-header-text-size:11px;--mat-datepicker-calendar-header-text-weight:400}html{--mat-divider-width:1px}html{--mat-divider-color:rgba(0, 0, 0, 0.12)}html{--mat-expansion-container-shape:4px;--mat-expansion-legacy-header-indicator-display:inline-block;--mat-expansion-header-indicator-display:none}html{--mat-expansion-container-background-color:white;--mat-expansion-container-text-color:rgba(0, 0, 0, 0.87);--mat-expansion-actions-divider-color:rgba(0, 0, 0, 0.12);--mat-expansion-header-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-expansion-header-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-expansion-header-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-expansion-header-text-color:rgba(0, 0, 0, 0.87);--mat-expansion-header-description-color:rgba(0, 0, 0, 0.54);--mat-expansion-header-indicator-color:rgba(0, 0, 0, 0.54)}html{--mat-expansion-header-collapsed-state-height:48px;--mat-expansion-header-expanded-state-height:64px}html{--mat-expansion-header-text-font:Roboto, sans-serif;--mat-expansion-header-text-size:14px;--mat-expansion-header-text-weight:500;--mat-expansion-header-text-line-height:inherit;--mat-expansion-header-text-tracking:inherit;--mat-expansion-container-text-font:Roboto, sans-serif;--mat-expansion-container-text-line-height:20px;--mat-expansion-container-text-size:14px;--mat-expansion-container-text-tracking:0.0178571429em;--mat-expansion-container-text-weight:400}html{--mat-grid-list-tile-header-primary-text-size:14px;--mat-grid-list-tile-header-secondary-text-size:12px;--mat-grid-list-tile-footer-primary-text-size:14px;--mat-grid-list-tile-footer-secondary-text-size:12px}html{--mat-icon-color:inherit}.mat-icon.mat-primary{--mat-icon-color:#3f51b5}.mat-icon.mat-accent{--mat-icon-color:#ff4081}.mat-icon.mat-warn{--mat-icon-color:#f44336}html{--mat-sidenav-container-shape:0;--mat-sidenav-container-elevation-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);--mat-sidenav-container-width:auto}html{--mat-sidenav-container-divider-color:rgba(0, 0, 0, 0.12);--mat-sidenav-container-background-color:white;--mat-sidenav-container-text-color:rgba(0, 0, 0, 0.87);--mat-sidenav-content-background-color:#fafafa;--mat-sidenav-content-text-color:rgba(0, 0, 0, 0.87);--mat-sidenav-scrim-color:rgba(0, 0, 0, 0.6)}html{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#3f51b5;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#3f51b5;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#3f51b5;--mat-stepper-header-edit-state-icon-foreground-color:white;--mat-stepper-container-color:white;--mat-stepper-line-color:rgba(0, 0, 0, 0.12);--mat-stepper-header-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-stepper-header-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-stepper-header-label-text-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-optional-label-text-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-selected-state-label-text-color:rgba(0, 0, 0, 0.87);--mat-stepper-header-error-state-label-text-color:#f44336;--mat-stepper-header-icon-background-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-error-state-icon-foreground-color:#f44336;--mat-stepper-header-error-state-icon-background-color:transparent}html .mat-step-header.mat-accent{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#ff4081;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#ff4081;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#ff4081;--mat-stepper-header-edit-state-icon-foreground-color:white}html .mat-step-header.mat-warn{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#f44336;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#f44336;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#f44336;--mat-stepper-header-edit-state-icon-foreground-color:white}html{--mat-stepper-header-height:72px}html{--mat-stepper-container-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-size:14px;--mat-stepper-header-label-text-weight:400;--mat-stepper-header-error-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-weight:400}html{--mat-sort-arrow-color:#757575}html{--mat-toolbar-container-background-color:whitesmoke;--mat-toolbar-container-text-color:rgba(0, 0, 0, 0.87)}.mat-toolbar.mat-primary{--mat-toolbar-container-background-color:#3f51b5;--mat-toolbar-container-text-color:white}.mat-toolbar.mat-accent{--mat-toolbar-container-background-color:#ff4081;--mat-toolbar-container-text-color:white}.mat-toolbar.mat-warn{--mat-toolbar-container-background-color:#f44336;--mat-toolbar-container-text-color:white}html{--mat-toolbar-standard-height:64px;--mat-toolbar-mobile-height:56px}html{--mat-toolbar-title-text-font:Roboto, sans-serif;--mat-toolbar-title-text-line-height:32px;--mat-toolbar-title-text-size:20px;--mat-toolbar-title-text-tracking:0.0125em;--mat-toolbar-title-text-weight:500}html{--mat-tree-container-background-color:white;--mat-tree-node-text-color:rgba(0, 0, 0, 0.87)}html{--mat-tree-node-min-height:48px}html{--mat-tree-node-text-font:Roboto, sans-serif;--mat-tree-node-text-size:14px;--mat-tree-node-text-weight:400}.mat-h1,.mat-headline-5,.mat-typography .mat-h1,.mat-typography .mat-headline-5,.mat-typography h1{font:400 24px/32px Roboto, sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-headline-6,.mat-typography .mat-h2,.mat-typography .mat-headline-6,.mat-typography h2{font:500 20px/32px Roboto, sans-serif;letter-spacing:.0125em;margin:0 0 16px}.mat-h3,.mat-subtitle-1,.mat-typography .mat-h3,.mat-typography .mat-subtitle-1,.mat-typography h3{font:400 16px/28px Roboto, sans-serif;letter-spacing:.009375em;margin:0 0 16px}.mat-h4,.mat-body-1,.mat-typography .mat-h4,.mat-typography .mat-body-1,.mat-typography h4{font:400 16px/24px Roboto, sans-serif;letter-spacing:.03125em;margin:0 0 16px}.mat-h5,.mat-typography .mat-h5,.mat-typography h5{font:400 calc(14px*.83)/20px Roboto, sans-serif;margin:0 0 12px}.mat-h6,.mat-typography .mat-h6,.mat-typography h6{font:400 calc(14px*.67)/20px Roboto, sans-serif;margin:0 0 12px}.mat-body-strong,.mat-subtitle-2,.mat-typography .mat-body-strong,.mat-typography .mat-subtitle-2{font:500 14px/22px Roboto, sans-serif;letter-spacing:.0071428571em}.mat-body,.mat-body-2,.mat-typography .mat-body,.mat-typography .mat-body-2,.mat-typography{font:400 14px/20px Roboto, sans-serif;letter-spacing:.0178571429em}.mat-body p,.mat-body-2 p,.mat-typography .mat-body p,.mat-typography .mat-body-2 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption,.mat-typography .mat-small,.mat-typography .mat-caption{font:400 12px/20px Roboto, sans-serif;letter-spacing:.0333333333em}.mat-headline-1,.mat-typography .mat-headline-1{font:300 96px/96px Roboto, sans-serif;letter-spacing:-0.015625em;margin:0 0 56px}.mat-headline-2,.mat-typography .mat-headline-2{font:300 60px/60px Roboto, sans-serif;letter-spacing:-.0083333333em;margin:0 0 64px}.mat-headline-3,.mat-typography .mat-headline-3{font:400 48px/50px Roboto, sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-headline-4,.mat-typography .mat-headline-4{font:400 34px/40px Roboto, sans-serif;letter-spacing:.0073529412em;margin:0 0 64px}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9AYW5ndWxhci9tYXRlcmlhbC9wcmVidWlsdC10aGVtZXMvaW5kaWdvLXBpbmsuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksZUFBZSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3Qix1QkFBdUIsQ0FBQyxpQ0FBaUMsZ0JBQWdCLENBQUMsb0JBQW9CLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLDJEQUEyRCxDQUFDLDBCQUEwQixDQUFDLDREQUE0RCxDQUFDLDhDQUE4QyxZQUFZLENBQUMscUJBQXFCLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsK0JBQStCLFNBQVMsQ0FBQyxPQUFPLENBQUMsbURBQW1ELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsY0FBYyxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsWUFBWSxDQUFDLDRCQUE0QixZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLGtCQUFrQixpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMseUNBQXlDLENBQUMseURBQXlELENBQUMsU0FBUyxDQUFDLG1EQUFtRCxTQUFTLENBQUMsNkVBQTZFLFVBQVUsQ0FBQywyQkFBMkIsMEJBQTBCLENBQUMsa0NBQWtDLG1EQUFtRCxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQywrREFBK0QsU0FBUyxDQUFDLGtCQUFrQixDQUFDLHFDQUFxQyxlQUFlLENBQUMsNkNBQTZDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQywrQkFBK0IsV0FBVyxDQUFDLHlDQUF5Qyx3QkFBd0IsQ0FBQyxpQ0FBaUMsQ0FBQyxzQkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxpREFBaUQsd0JBQXdCLENBQUMsaUNBQWlDLENBQUMsbUJBQW1CLENBQUMseUNBQXlDLElBQUksQ0FBQyxDQUFDLHVDQUF1QyxJQUFJLENBQUMsQ0FBQyxvREFBb0QsOENBQThDLENBQUMsMERBQTBELDRDQUE0QyxDQUFDLHFCQUFxQixpQkFBaUIsQ0FBQyw2QkFBNkIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLGdEQUFnRCxDQUFDLHVKQUF1SixDQUFDLDJEQUEyRCxDQUFDLG1DQUFtQyxVQUFVLENBQUMsMEJBQTBCLG9DQUFvQyxDQUFDLHlCQUF5QixpQkFBaUIsQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLG9EQUFvRCxDQUFDLG1LQUFtSyxDQUFDLCtEQUErRCxDQUFDLHVDQUF1QyxVQUFVLENBQUMsMEJBQTBCLHdDQUF3QyxDQUFDLG9CQUFvQiw2REFBNkQsQ0FBQyx3Q0FBd0MsQ0FBQyxLQUFLLHFDQUFxQyxDQUFDLEtBQUssb0RBQW9ELENBQUMsaURBQWlELENBQUMsd0RBQXdELENBQUMsd0RBQXdELENBQUMsMkRBQTJELENBQUMsWUFBWSxvREFBb0QsQ0FBQyxpREFBaUQsQ0FBQyx3REFBd0QsQ0FBQyx3REFBd0QsQ0FBQywyREFBMkQsQ0FBQyxVQUFVLG9EQUFvRCxDQUFDLGlEQUFpRCxDQUFDLHdEQUF3RCxDQUFDLHdEQUF3RCxDQUFDLDJEQUEyRCxDQUFDLEtBQUssbURBQW1ELENBQUMsYUFBYSxzREFBc0QsQ0FBQywyREFBMkQsQ0FBQyxvRUFBb0UsQ0FBQyxvRUFBb0UsQ0FBQyxpRUFBaUUsQ0FBQywrREFBK0QsQ0FBQyw4REFBOEQsQ0FBQyx1RUFBdUUsQ0FBQyxLQUFLLHNEQUFzRCxDQUFDLDJEQUEyRCxDQUFDLG9FQUFvRSxDQUFDLG9FQUFvRSxDQUFDLGlFQUFpRSxDQUFDLCtEQUErRCxDQUFDLDhEQUE4RCxDQUFDLHVFQUF1RSxDQUFDLFlBQVksc0RBQXNELENBQUMsMkRBQTJELENBQUMsb0VBQW9FLENBQUMsb0VBQW9FLENBQUMsaUVBQWlFLENBQUMsK0RBQStELENBQUMsOERBQThELENBQUMsdUVBQXVFLENBQUMsVUFBVSxzREFBc0QsQ0FBQywyREFBMkQsQ0FBQyxvRUFBb0UsQ0FBQyxvRUFBb0UsQ0FBQyxpRUFBaUUsQ0FBQywrREFBK0QsQ0FBQyw4REFBOEQsQ0FBQyx1RUFBdUUsQ0FBQyxLQUFLLGtDQUFrQyxDQUFDLHdDQUF3QyxDQUFDLCtEQUErRCx1SEFBdUgsQ0FBQywrREFBK0Qsd0hBQXdILENBQUMsK0RBQStELHdIQUF3SCxDQUFDLCtEQUErRCx3SEFBd0gsQ0FBQywrREFBK0QseUhBQXlILENBQUMsK0RBQStELHlIQUF5SCxDQUFDLCtEQUErRCwwSEFBMEgsQ0FBQywrREFBK0QsMEhBQTBILENBQUMsK0RBQStELDBIQUEwSCxDQUFDLCtEQUErRCwwSEFBMEgsQ0FBQyxpRUFBaUUsMkhBQTJILENBQUMsaUVBQWlFLDJIQUEySCxDQUFDLGlFQUFpRSwySEFBMkgsQ0FBQyxpRUFBaUUsMkhBQTJILENBQUMsaUVBQWlFLDJIQUEySCxDQUFDLGlFQUFpRSwySEFBMkgsQ0FBQyxpRUFBaUUsNEhBQTRILENBQUMsaUVBQWlFLDRIQUE0SCxDQUFDLGlFQUFpRSw0SEFBNEgsQ0FBQyxpRUFBaUUsNEhBQTRILENBQUMsaUVBQWlFLDZIQUE2SCxDQUFDLGlFQUFpRSw2SEFBNkgsQ0FBQyxpRUFBaUUsNkhBQTZILENBQUMsaUVBQWlFLDZIQUE2SCxDQUFDLGlFQUFpRSw2SEFBNkgsQ0FBQyx5QkFBeUIsWUFBWSxDQUFDLEtBQUssK0NBQStDLENBQUMsd0NBQXdDLENBQUMsaUNBQWlDLENBQUMsMENBQTBDLENBQUMsa0NBQWtDLENBQUMsS0FBSyxpREFBaUQsQ0FBQywwQ0FBMEMsQ0FBQyxtQ0FBbUMsQ0FBQyw0Q0FBNEMsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLHVDQUF1QyxDQUFDLHVDQUF1QyxDQUFDLHFDQUFxQyxDQUFDLEtBQUsseUNBQXlDLENBQUMscUpBQXFKLENBQUMseUNBQXlDLENBQUMscURBQXFELENBQUMsb0pBQW9KLENBQUMsa0RBQWtELENBQUMsS0FBSyw2Q0FBNkMsQ0FBQyxzQ0FBc0MsQ0FBQywrQkFBK0IsQ0FBQyx1Q0FBdUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxnREFBZ0QsQ0FBQyx5Q0FBeUMsQ0FBQyxrQ0FBa0MsQ0FBQyxnREFBZ0QsQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLGlEQUFpRCxDQUFDLHNDQUFzQyxDQUFDLG1DQUFtQyxDQUFDLHNCQUFzQixvREFBb0QsQ0FBQyx5REFBeUQsQ0FBQyxpQ0FBaUMsb0RBQW9ELENBQUMsMERBQTBELENBQUMsK0JBQStCLG9EQUFvRCxDQUFDLHlEQUF5RCxDQUFDLEtBQUssdUNBQXVDLENBQUMsb0RBQW9ELENBQUMsS0FBSywyQ0FBMkMsQ0FBQyw4Q0FBOEMsQ0FBQyxLQUFLLDJEQUEyRCxDQUFDLDZDQUE2QyxDQUFDLDhDQUE4QyxDQUFDLDJEQUEyRCxDQUFDLEtBQUssbURBQW1ELENBQUMseURBQXlELENBQUMsMkNBQTJDLENBQUMsMkNBQTJDLENBQUMsaURBQWlELENBQUMsNkNBQTZDLENBQUMsS0FBSywyQ0FBMkMsQ0FBQyw0REFBNEQsQ0FBQyxzRUFBc0UsQ0FBQyxrREFBa0QsQ0FBQyx3REFBd0QsQ0FBQywyREFBMkQsQ0FBQyxpRUFBaUUsQ0FBQyxxRUFBcUUsQ0FBQyw0REFBNEQsQ0FBQyxxRUFBcUUsQ0FBQyx1RUFBdUUsQ0FBQyw0REFBNEQsQ0FBQyw0REFBNEQsQ0FBQyxzREFBc0QsQ0FBQyxpREFBaUQsQ0FBQyxrRUFBa0UsQ0FBQywyRUFBMkUsQ0FBQyx3RUFBd0UsQ0FBQyw0REFBNEQsQ0FBQyxrRUFBa0UsQ0FBQyxrRUFBa0UsQ0FBQyw2Q0FBNkMsQ0FBQyxxREFBcUQsQ0FBQyx3RUFBd0UsQ0FBQyw2REFBNkQsQ0FBQyxtRUFBbUUsQ0FBQyx1RUFBdUUsQ0FBQyw4REFBOEQsQ0FBQyx1RUFBdUUsQ0FBQyx5RUFBeUUsQ0FBQyxtREFBbUQsQ0FBQyw4REFBOEQsQ0FBQyx3REFBd0QsQ0FBQyw4REFBOEQsQ0FBQywyREFBMkQsQ0FBQyxvRUFBb0UsQ0FBQyxpRUFBaUUsQ0FBQywyREFBMkQsQ0FBQywyREFBMkQsQ0FBQyxxREFBcUQsQ0FBQyxpRUFBaUUsQ0FBQywwRUFBMEUsQ0FBQyxzREFBc0QsQ0FBQyx5Q0FBeUMsQ0FBQyxpREFBaUQsQ0FBQywyREFBMkQsQ0FBQyx5Q0FBeUMsQ0FBQyxrREFBa0QsQ0FBQywwQ0FBMEMsQ0FBQyxtREFBbUQsQ0FBQyxzREFBc0QsQ0FBQyxzREFBc0QsQ0FBQyxnREFBZ0QsQ0FBQywrREFBK0QsQ0FBQyxnRUFBZ0UsQ0FBQywrQ0FBK0MsQ0FBQywrQ0FBK0MsQ0FBQywrQkFBK0IsMkNBQTJDLENBQUMsNERBQTRELENBQUMsdUVBQXVFLENBQUMsNkNBQTZDLENBQUMscURBQXFELENBQUMseUVBQXlFLENBQUMsa0VBQWtFLENBQUMsNkJBQTZCLDJDQUEyQyxDQUFDLDREQUE0RCxDQUFDLHNFQUFzRSxDQUFDLDZDQUE2QyxDQUFDLHFEQUFxRCxDQUFDLHdFQUF3RSxDQUFDLGlFQUFpRSxDQUFDLEtBQUssc0NBQXNDLENBQUMsMkNBQTJDLENBQUMsZ0RBQWdELENBQUMsNkRBQTZELENBQUMsK0RBQStELENBQUMsS0FBSywwREFBMEQsQ0FBQyw0Q0FBNEMsQ0FBQyxxREFBcUQsQ0FBQyw2Q0FBNkMsQ0FBQyw0REFBNEQsQ0FBQyw4Q0FBOEMsQ0FBQyx1REFBdUQsQ0FBQywrQ0FBK0MsQ0FBQyx1REFBdUQsQ0FBQyxnREFBZ0QsQ0FBQyx5Q0FBeUMsQ0FBQyxrREFBa0QsQ0FBQywwQ0FBMEMsQ0FBQyx3REFBd0QsQ0FBQyx1REFBdUQsQ0FBQyxnREFBZ0QsQ0FBQyx5Q0FBeUMsQ0FBQyx1REFBdUQsQ0FBQywwQ0FBMEMsQ0FBQyxLQUFLLHVKQUF1SixDQUFDLEtBQUsseUNBQXlDLENBQUMsMkRBQTJELENBQUMsNERBQTRELENBQUMsc0RBQXNELENBQUMsb0RBQW9ELENBQUMscURBQXFELENBQUMsd0RBQXdELENBQUMsd0RBQXdELENBQUMsb0NBQW9DLHlDQUF5QyxDQUFDLDJEQUEyRCxDQUFDLDREQUE0RCxDQUFDLHNEQUFzRCxDQUFDLG9EQUFvRCxDQUFDLHFEQUFxRCxDQUFDLHlEQUF5RCxDQUFDLHdEQUF3RCxDQUFDLGtDQUFrQyx5Q0FBeUMsQ0FBQywyREFBMkQsQ0FBQyw0REFBNEQsQ0FBQyxzREFBc0QsQ0FBQyxvREFBb0QsQ0FBQyxxREFBcUQsQ0FBQyx3REFBd0QsQ0FBQyx3REFBd0QsQ0FBQyxLQUFLLDZDQUE2QyxDQUFDLEtBQUssaURBQWlELENBQUMsMENBQTBDLENBQUMsbUNBQW1DLENBQUMsNENBQTRDLENBQUMsb0NBQW9DLENBQUMsS0FBSyxzQ0FBc0MsQ0FBQyw2SkFBNkosQ0FBQyxLQUFLLHlDQUF5QyxDQUFDLEtBQUssMEpBQTBKLENBQUMsd0NBQXdDLENBQUMsZ0NBQWdDLENBQUMscUNBQXFDLENBQUMsMkNBQTJDLENBQUMsa0NBQWtDLENBQUMsb0NBQW9DLENBQUMsZ0NBQWdDLENBQUMsc0NBQXNDLENBQUMsbURBQW1ELENBQUMsd0NBQXdDLENBQUMsS0FBSyxrQ0FBa0MsQ0FBQyw4Q0FBOEMsQ0FBQyxxREFBcUQsQ0FBQyxLQUFLLDRDQUE0QyxDQUFDLHFDQUFxQyxDQUFDLDhCQUE4QixDQUFDLCtCQUErQixDQUFDLHNDQUFzQyxDQUFDLG9EQUFvRCxDQUFDLDZDQUE2QyxDQUFDLHNDQUFzQyxDQUFDLHVDQUF1QyxDQUFDLCtDQUErQyxDQUFDLHVCQUF1Qix5Q0FBeUMsQ0FBQyxxREFBcUQsQ0FBQyxrREFBa0QsQ0FBQyw4REFBOEQsQ0FBQyx1Q0FBdUMsQ0FBQyxtQ0FBbUMsQ0FBQywwQkFBMEIsQ0FBQyxvQ0FBb0MsQ0FBQyw2Q0FBNkMsQ0FBQywwQ0FBMEMsQ0FBQyx5Q0FBeUMsQ0FBQyxnREFBZ0QsQ0FBQyx3Q0FBd0MsQ0FBQyxrREFBa0QsQ0FBQyw4REFBOEQsQ0FBQyw0Q0FBNEMsQ0FBQyx5Q0FBeUMsQ0FBQyx1Q0FBdUMsQ0FBQywwQ0FBMEMsQ0FBQyx3REFBd0QsQ0FBQyxpRUFBaUUsQ0FBQyxzREFBc0QsQ0FBQyxzREFBc0QsQ0FBQyx1QkFBdUIsNENBQTRDLENBQUMsMkNBQTJDLENBQUMsb0RBQW9ELENBQUMsb0RBQW9ELENBQUMseURBQXlELENBQUMsd0NBQXdDLENBQUMsd0NBQXdDLENBQUMsaURBQWlELENBQUMseUNBQXlDLENBQUMsaURBQWlELENBQUMsa0RBQWtELENBQUMsbUNBQW1DLENBQUMsNENBQTRDLENBQUMsdUNBQXVDLENBQUMsZ0RBQWdELENBQUMsZ0RBQWdELENBQUMsa0VBQWtFLENBQUMseURBQXlELENBQUMsd0RBQXdELENBQUMsK0NBQStDLENBQUMscUhBQXFILDBDQUEwQyxDQUFDLDJDQUEyQyxDQUFDLG9EQUFvRCxDQUFDLG9EQUFvRCxDQUFDLHlEQUF5RCxDQUFDLHdDQUF3QyxDQUFDLHdDQUF3QyxDQUFDLGlEQUFpRCxDQUFDLHlDQUF5QyxDQUFDLGlEQUFpRCxDQUFDLGtEQUFrRCxDQUFDLGlDQUFpQyxDQUFDLDBDQUEwQyxDQUFDLHFDQUFxQyxDQUFDLDhDQUE4QyxDQUFDLDhDQUE4QyxDQUFDLGdFQUFnRSxDQUFDLHVEQUF1RCxDQUFDLHNEQUFzRCxDQUFDLDZDQUE2QyxDQUFDLG1IQUFtSCwwQ0FBMEMsQ0FBQywyQ0FBMkMsQ0FBQyxvREFBb0QsQ0FBQyxvREFBb0QsQ0FBQyx5REFBeUQsQ0FBQyx3Q0FBd0MsQ0FBQyx3Q0FBd0MsQ0FBQyxpREFBaUQsQ0FBQyx5Q0FBeUMsQ0FBQyxpREFBaUQsQ0FBQyxrREFBa0QsQ0FBQyxpQ0FBaUMsQ0FBQywwQ0FBMEMsQ0FBQyxxQ0FBcUMsQ0FBQyw4Q0FBOEMsQ0FBQyw4Q0FBOEMsQ0FBQyxnRUFBZ0UsQ0FBQyx1REFBdUQsQ0FBQyxzREFBc0QsQ0FBQyw2Q0FBNkMsQ0FBQywrR0FBK0csMENBQTBDLENBQUMsMkNBQTJDLENBQUMsb0RBQW9ELENBQUMsb0RBQW9ELENBQUMseURBQXlELENBQUMsd0NBQXdDLENBQUMsd0NBQXdDLENBQUMsaURBQWlELENBQUMseUNBQXlDLENBQUMsaURBQWlELENBQUMsa0RBQWtELENBQUMsaUNBQWlDLENBQUMsMENBQTBDLENBQUMscUNBQXFDLENBQUMsOENBQThDLENBQUMsOENBQThDLENBQUMsZ0VBQWdFLENBQUMsdURBQXVELENBQUMsc0RBQXNELENBQUMsNkNBQTZDLENBQUMsb0NBQW9DLGdDQUFnQyxDQUFDLHVCQUF1Qiw2Q0FBNkMsQ0FBQyxzQ0FBc0MsQ0FBQywrQkFBK0IsQ0FBQyw2Q0FBNkMsQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLGdEQUFnRCxDQUFDLHdDQUF3QyxDQUFDLGtEQUFrRCxDQUFDLCtCQUErQixDQUFDLDhCQUE4QixDQUFDLDhCQUE4QixDQUFDLG9DQUFvQyxDQUFDLDhCQUE4QixDQUFDLDRCQUE0QixDQUFDLDZCQUE2QixDQUFDLHNDQUFzQyxDQUFDLG9EQUFvRCxDQUFDLG9EQUFvRCxDQUFDLHFEQUFxRCxDQUFDLHNEQUFzRCxDQUFDLHNEQUFzRCxDQUFDLHVEQUF1RCxDQUFDLGtEQUFrRCxDQUFDLG9EQUFvRCxDQUFDLHdDQUF3QyxDQUFDLHNDQUFzQyxDQUFDLHFDQUFxQyxDQUFDLHVDQUF1QyxDQUFDLGdEQUFnRCxDQUFDLDBEQUEwRCxDQUFDLHdEQUF3RCxDQUFDLGtEQUFrRCxDQUFDLDREQUE0RCxDQUFDLDBEQUEwRCxDQUFDLG9DQUFvQyxDQUFDLG1DQUFtQyxDQUFDLG1GQUFtRixDQUFDLG9GQUFvRixDQUFDLG9DQUFvQyxDQUFDLDRDQUE0QyxDQUFDLDZDQUE2QyxDQUFDLHdEQUF3RCxDQUFDLGdFQUFnRSxDQUFDLEtBQUsscURBQXFELENBQUMsMENBQTBDLENBQUMscURBQXFELENBQUMsdURBQXVELENBQUMsZ0RBQWdELENBQUMsZ0RBQWdELENBQUMsa0RBQWtELENBQUMsK0NBQStDLENBQUMsK0NBQStDLENBQUMsaURBQWlELENBQUMseUNBQXlDLENBQUMsbURBQW1ELENBQUMsOENBQThDLENBQUMsa0RBQWtELENBQUMscURBQXFELENBQUMsZ0RBQWdELENBQUMsb0RBQW9ELENBQUMsZ0VBQWdFLENBQUMsa0pBQWtKLENBQUMsc0NBQXNDLENBQUMsMEpBQTBKLENBQUMscUNBQXFDLENBQUMsa0RBQWtELENBQUMsdURBQXVELENBQUMsaURBQWlELENBQUMsNENBQTRDLENBQUMsa0RBQWtELENBQUMsdURBQXVELENBQUMsaURBQWlELENBQUMsdUNBQXVDLENBQUMsb0RBQW9ELENBQUMseURBQXlELENBQUMsbURBQW1ELENBQUMsMkNBQTJDLENBQUMsMkRBQTJELENBQUMsMkJBQTJCLHFEQUFxRCxDQUFDLHNDQUFzQyxxREFBcUQsQ0FBQywwQ0FBMEMsQ0FBQyxxREFBcUQsQ0FBQyx1REFBdUQsQ0FBQyxnREFBZ0QsQ0FBQyxnREFBZ0QsQ0FBQyxrREFBa0QsQ0FBQywrQ0FBK0MsQ0FBQywrQ0FBK0MsQ0FBQyxpREFBaUQsQ0FBQyx5Q0FBeUMsQ0FBQyxvQ0FBb0MscURBQXFELENBQUMsMENBQTBDLENBQUMscURBQXFELENBQUMsdURBQXVELENBQUMsZ0RBQWdELENBQUMsZ0RBQWdELENBQUMsa0RBQWtELENBQUMsK0NBQStDLENBQUMsK0NBQStDLENBQUMsaURBQWlELENBQUMseUNBQXlDLENBQUMsS0FBSyxrQ0FBa0MsQ0FBQywyQkFBMkIsbURBQW1ELENBQUMsNENBQTRDLENBQUMscUNBQXFDLENBQUMsbURBQW1ELENBQUMsc0NBQXNDLENBQUMsS0FBSywrQ0FBK0MsQ0FBQyxpREFBaUQsQ0FBQyxpQ0FBaUMsQ0FBQyxzQkFBc0IscURBQXFELENBQUMsa0NBQWtDLDhDQUE4QyxDQUFDLGdEQUFnRCxDQUFDLCtDQUErQyxDQUFDLHFEQUFxRCxDQUFDLDZEQUE2RCxDQUFDLDZDQUE2QyxDQUFDLDZDQUE2QyxDQUFDLHVDQUF1QyxDQUFDLCtDQUErQyxDQUFDLDhCQUE4QixDQUFDLHdDQUF3QyxDQUFDLG9EQUFvRCxDQUFDLGlDQUFpQyw4Q0FBOEMsQ0FBQyxnREFBZ0QsQ0FBQywrQ0FBK0MsQ0FBQyxxREFBcUQsQ0FBQyw2REFBNkQsQ0FBQyw2Q0FBNkMsQ0FBQyw2Q0FBNkMsQ0FBQyx1Q0FBdUMsQ0FBQywrQ0FBK0MsQ0FBQyw4QkFBOEIsQ0FBQyx3Q0FBd0MsQ0FBQyxvREFBb0QsQ0FBQywrQkFBK0IsOENBQThDLENBQUMsZ0RBQWdELENBQUMsK0NBQStDLENBQUMscURBQXFELENBQUMsNkRBQTZELENBQUMsNkNBQTZDLENBQUMsNkNBQTZDLENBQUMsdUNBQXVDLENBQUMsK0NBQStDLENBQUMsOEJBQThCLENBQUMsd0NBQXdDLENBQUMsb0RBQW9ELENBQUMsS0FBSyxpQ0FBaUMsQ0FBQyxzQ0FBc0MsQ0FBQyxzQkFBc0IsbURBQW1ELENBQUMsNENBQTRDLENBQUMscUNBQXFDLENBQUMsbURBQW1ELENBQUMsc0NBQXNDLENBQUMsS0FBSyx1Q0FBdUMsQ0FBQyx3Q0FBd0MsQ0FBQyxnREFBZ0QsQ0FBQyw4Q0FBOEMsQ0FBQywyQ0FBMkMsQ0FBQyxnREFBZ0QsQ0FBQyxpRUFBaUUsQ0FBQyxvQ0FBb0MsQ0FBQyxzQ0FBc0MsQ0FBQywrQkFBK0IsQ0FBQyw2QkFBNkIsQ0FBQyw4QkFBOEIsQ0FBQyxzQ0FBc0MsQ0FBQyx3Q0FBd0MsQ0FBQyxrREFBa0QsQ0FBQyx5REFBeUQsQ0FBQyxnREFBZ0QsQ0FBQywrQ0FBK0MsQ0FBQywyREFBMkQsQ0FBQyxLQUFLLGlDQUFpQyxDQUFDLHVDQUF1QyxDQUFDLHVDQUF1QyxDQUFDLHVDQUF1QyxDQUFDLHlDQUF5QyxDQUFDLDZEQUE2RCxDQUFDLHlEQUF5RCxDQUFDLDZDQUE2QyxDQUFDLHVDQUF1QyxDQUFDLCtDQUErQyxDQUFDLHVDQUF1QyxDQUFDLHdDQUF3QyxDQUFDLG1EQUFtRCxDQUFDLDBEQUEwRCxDQUFDLDJJQUEySSxDQUFDLGlDQUFpQyxDQUFDLDREQUE0RCxDQUFDLDJEQUEyRCxDQUFDLHdDQUF3QyxDQUFDLGlCQUFpQixpQ0FBaUMsQ0FBQyw2REFBNkQsQ0FBQyw0REFBNEQsQ0FBQyxpQ0FBaUMsQ0FBQyx1Q0FBdUMsQ0FBQyx1Q0FBdUMsQ0FBQyx1Q0FBdUMsQ0FBQyx5Q0FBeUMsQ0FBQyw2REFBNkQsQ0FBQyx5REFBeUQsQ0FBQyxlQUFlLGlDQUFpQyxDQUFDLDREQUE0RCxDQUFDLDJEQUEyRCxDQUFDLGlDQUFpQyxDQUFDLHVDQUF1QyxDQUFDLHVDQUF1QyxDQUFDLHVDQUF1QyxDQUFDLHlDQUF5QyxDQUFDLDZEQUE2RCxDQUFDLHlEQUF5RCxDQUFDLEtBQUsscURBQXFELENBQUMsdUNBQXVDLENBQUMsOENBQThDLENBQUMscURBQXFELENBQUMsd0NBQXdDLENBQUMsS0FBSyw4QkFBOEIsQ0FBQyxtQ0FBbUMsQ0FBQyxnQ0FBZ0MsQ0FBQyw0QkFBNEIsQ0FBQyw4QkFBOEIsQ0FBQyxvQ0FBb0MsQ0FBQyxxQ0FBcUMsQ0FBQyw4Q0FBOEMsQ0FBQywrQ0FBK0MsQ0FBQyxLQUFLLG9EQUFvRCxDQUFDLDhDQUE4QyxDQUFDLDJEQUEyRCxDQUFDLDJEQUEyRCxDQUFDLGdDQUFnQyxDQUFDLDRDQUE0QyxDQUFDLEtBQUssa0RBQWtELENBQUMsb0NBQW9DLENBQUMsNkNBQTZDLENBQUMsMkNBQTJDLENBQUMscUNBQXFDLENBQUMsS0FBSyxzQ0FBc0MsQ0FBQyw2Q0FBNkMsQ0FBQyxnREFBZ0QsQ0FBQyx5REFBeUQsQ0FBQyxxREFBcUQsQ0FBQywyQ0FBMkMsQ0FBQyw2Q0FBNkMsQ0FBQyw0Q0FBNEMsQ0FBQywyREFBMkQsQ0FBQyxtREFBbUQsQ0FBQyxxREFBcUQsQ0FBQyx1REFBdUQsQ0FBQyx3REFBd0QsQ0FBQyw2Q0FBNkMsQ0FBQyxxQ0FBcUMsQ0FBQyxLQUFLLHlEQUF5RCxDQUFDLDhEQUE4RCxDQUFDLDJEQUEyRCxDQUFDLHVFQUF1RSxDQUFDLDREQUE0RCxDQUFDLHFFQUFxRSxDQUFDLG9EQUFvRCxDQUFDLHNEQUFzRCxDQUFDLHVEQUF1RCxDQUFDLCtEQUErRCxDQUFDLGlFQUFpRSxDQUFDLGtFQUFrRSxDQUFDLCtEQUErRCxDQUFDLGtEQUFrRCxDQUFDLG1EQUFtRCxDQUFDLGtEQUFrRCxDQUFDLG1EQUFtRCxDQUFDLDBDQUEwQyw4Q0FBOEMsQ0FBQyxnREFBZ0QsQ0FBQywrQ0FBK0MsQ0FBQyxxREFBcUQsQ0FBQyw2REFBNkQsQ0FBQyw2Q0FBNkMsQ0FBQyw2Q0FBNkMsQ0FBQyx1Q0FBdUMsQ0FBQywrQ0FBK0MsQ0FBQyxrRUFBa0UsOENBQThDLENBQUMsZ0RBQWdELENBQUMsK0NBQStDLENBQUMscURBQXFELENBQUMsNkRBQTZELENBQUMsNkNBQTZDLENBQUMsNkNBQTZDLENBQUMsdUNBQXVDLENBQUMsK0NBQStDLENBQUMsOERBQThELDhDQUE4QyxDQUFDLGdEQUFnRCxDQUFDLCtDQUErQyxDQUFDLHFEQUFxRCxDQUFDLDZEQUE2RCxDQUFDLDZDQUE2QyxDQUFDLDZDQUE2QyxDQUFDLHVDQUF1QyxDQUFDLCtDQUErQyxDQUFDLHFCQUFxQiwrREFBK0QsQ0FBQyxpRUFBaUUsQ0FBQyw2Q0FBNkMsQ0FBQyxnREFBZ0QsQ0FBQyxnREFBZ0QsQ0FBQywwQ0FBMEMsQ0FBQyxrREFBa0QsQ0FBQyxrREFBa0QsQ0FBQyxrREFBa0QsQ0FBQyx3REFBd0QsQ0FBQyxnRUFBZ0UsQ0FBQyx1REFBdUQsQ0FBQyx1REFBdUQsQ0FBQyx5REFBeUQsQ0FBQyx1REFBdUQsQ0FBQyx1REFBdUQsQ0FBQyx5REFBeUQsQ0FBQyxnQ0FBZ0MsK0RBQStELENBQUMsaUVBQWlFLENBQUMsNkNBQTZDLENBQUMsZ0RBQWdELENBQUMsZ0RBQWdELENBQUMsMENBQTBDLENBQUMsa0RBQWtELENBQUMsa0RBQWtELENBQUMsa0RBQWtELENBQUMsd0RBQXdELENBQUMsZ0VBQWdFLENBQUMsdURBQXVELENBQUMsdURBQXVELENBQUMseURBQXlELENBQUMsdURBQXVELENBQUMsdURBQXVELENBQUMseURBQXlELENBQUMsOEJBQThCLCtEQUErRCxDQUFDLGlFQUFpRSxDQUFDLDZDQUE2QyxDQUFDLGdEQUFnRCxDQUFDLGdEQUFnRCxDQUFDLDBDQUEwQyxDQUFDLGtEQUFrRCxDQUFDLGtEQUFrRCxDQUFDLGtEQUFrRCxDQUFDLHdEQUF3RCxDQUFDLGdFQUFnRSxDQUFDLHVEQUF1RCxDQUFDLHVEQUF1RCxDQUFDLHlEQUF5RCxDQUFDLHVEQUF1RCxDQUFDLHVEQUF1RCxDQUFDLHlEQUF5RCxDQUFDLHVMQUF1TCxhQUFhLENBQUMsMk9BQTJPLGFBQWEsQ0FBQyxzTUFBc00sU0FBUyxDQUFDLEtBQUssbURBQW1ELENBQUMsbURBQW1ELENBQUMscURBQXFELENBQUMsa0RBQWtELENBQUMsZ0RBQWdELENBQUMsMENBQTBDLGlDQUFpQyxDQUFDLHlQQUF5UCxXQUFXLENBQUMsNFBBQTRQLFdBQVcsQ0FBQyxLQUFLLHVEQUF1RCxDQUFDLGdEQUFnRCxDQUFDLHlDQUF5QyxDQUFDLGtEQUFrRCxDQUFDLDBDQUEwQyxDQUFDLDREQUE0RCxDQUFDLHFEQUFxRCxDQUFDLDhDQUE4QyxDQUFDLDREQUE0RCxDQUFDLCtDQUErQyxDQUFDLHFFQUFxRSxDQUFDLDhEQUE4RCxDQUFDLHVEQUF1RCxDQUFDLHFFQUFxRSxDQUFDLHdEQUF3RCxDQUFDLDJCQUEyQixxQ0FBcUMsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLHdEQUF3RCxDQUFDLGdEQUFnRCxDQUFDLHNEQUFzRCxDQUFDLHVEQUF1RCxDQUFDLEtBQUssbUNBQW1DLENBQUMsZ0RBQWdELENBQUMseURBQXlELENBQUMsS0FBSyxzREFBc0QsQ0FBQywrQ0FBK0MsQ0FBQyx3Q0FBd0MsQ0FBQyxzREFBc0QsQ0FBQyx5Q0FBeUMsQ0FBQyw2Q0FBNkMsQ0FBQyxLQUFLLCtDQUErQyxDQUFDLDRDQUE0QyxDQUFDLG9EQUFvRCxDQUFDLDBDQUEwQyxDQUFDLGlDQUFpQyxDQUFDLHdDQUF3QyxrREFBa0QsQ0FBQywwREFBMEQsQ0FBQyw0Q0FBNEMsQ0FBQyw2REFBNkQsQ0FBQyxnREFBZ0QsQ0FBQyw0Q0FBNEMsQ0FBQyw4Q0FBOEMsQ0FBQyxtRUFBbUUsQ0FBQyxtRUFBbUUsQ0FBQyxzREFBc0QsQ0FBQyxzREFBc0QsQ0FBQyxxREFBcUQsQ0FBQyxxREFBcUQsQ0FBQyw4REFBOEQsa0RBQWtELENBQUMsMERBQTBELENBQUMsNENBQTRDLENBQUMsNkRBQTZELENBQUMsZ0RBQWdELENBQUMsNENBQTRDLENBQUMsOENBQThDLENBQUMsbUVBQW1FLENBQUMsbUVBQW1FLENBQUMsc0RBQXNELENBQUMsc0RBQXNELENBQUMscURBQXFELENBQUMscURBQXFELENBQUMsMERBQTBELGtEQUFrRCxDQUFDLDBEQUEwRCxDQUFDLDRDQUE0QyxDQUFDLDZEQUE2RCxDQUFDLGdEQUFnRCxDQUFDLDRDQUE0QyxDQUFDLDhDQUE4QyxDQUFDLG1FQUFtRSxDQUFDLG1FQUFtRSxDQUFDLHNEQUFzRCxDQUFDLHNEQUFzRCxDQUFDLHFEQUFxRCxDQUFDLHFEQUFxRCxDQUFDLHNGQUFzRix5REFBeUQsQ0FBQyx1REFBdUQsQ0FBQyxvRkFBb0YseURBQXlELENBQUMsdURBQXVELENBQUMsZ0ZBQWdGLHlEQUF5RCxDQUFDLHVEQUF1RCxDQUFDLG9CQUFvQixvREFBb0QsQ0FBQyxvQkFBb0IsbURBQW1ELENBQUMscUNBQXFDLENBQUMsbURBQW1ELENBQUMsNENBQTRDLENBQUMsc0NBQXNDLENBQUMsS0FBSyxxREFBcUQsQ0FBQyxzREFBc0QsQ0FBQyxzREFBc0QsQ0FBQyx3REFBd0QsQ0FBQyx3REFBd0QsQ0FBQyx3REFBd0QsQ0FBQywwREFBMEQsQ0FBQyxLQUFLLCtEQUErRCxDQUFDLGlFQUFpRSxDQUFDLDZDQUE2QyxDQUFDLGdEQUFnRCxDQUFDLGdEQUFnRCxDQUFDLDBDQUEwQyxDQUFDLGtEQUFrRCxDQUFDLGtEQUFrRCxDQUFDLGtEQUFrRCxDQUFDLHdEQUF3RCxDQUFDLGdFQUFnRSxDQUFDLHVEQUF1RCxDQUFDLHVEQUF1RCxDQUFDLHlEQUF5RCxDQUFDLHVEQUF1RCxDQUFDLHVEQUF1RCxDQUFDLHlEQUF5RCxDQUFDLHVEQUF1RCxDQUFDLGtCQUFrQixxREFBcUQsQ0FBQyw4QkFBOEIsK0RBQStELENBQUMsaUVBQWlFLENBQUMsNkNBQTZDLENBQUMsZ0RBQWdELENBQUMsZ0RBQWdELENBQUMsMENBQTBDLENBQUMsa0RBQWtELENBQUMsa0RBQWtELENBQUMsa0RBQWtELENBQUMsd0RBQXdELENBQUMsZ0VBQWdFLENBQUMsdURBQXVELENBQUMsdURBQXVELENBQUMseURBQXlELENBQUMsdURBQXVELENBQUMsdURBQXVELENBQUMseURBQXlELENBQUMsMkJBQTJCLCtEQUErRCxDQUFDLGlFQUFpRSxDQUFDLDZDQUE2QyxDQUFDLGdEQUFnRCxDQUFDLGdEQUFnRCxDQUFDLDBDQUEwQyxDQUFDLGtEQUFrRCxDQUFDLGtEQUFrRCxDQUFDLGtEQUFrRCxDQUFDLHdEQUF3RCxDQUFDLGdFQUFnRSxDQUFDLHVEQUF1RCxDQUFDLHVEQUF1RCxDQUFDLHlEQUF5RCxDQUFDLHVEQUF1RCxDQUFDLHVEQUF1RCxDQUFDLHlEQUF5RCxDQUFDLEtBQUssb0NBQW9DLENBQUMseUNBQXlDLENBQUMsa0JBQWtCLG1EQUFtRCxDQUFDLDRDQUE0QyxDQUFDLHFDQUFxQyxDQUFDLG1EQUFtRCxDQUFDLHNDQUFzQyxDQUFDLEtBQUsscUNBQXFDLENBQUMseUNBQXlDLENBQUMsdUNBQXVDLENBQUMsMkNBQTJDLENBQUMsMENBQTBDLENBQUMsOENBQThDLENBQUMsNkNBQTZDLENBQUMsdUNBQXVDLENBQUMseUNBQXlDLENBQUMsd0NBQXdDLENBQUMsa0RBQWtELENBQUMsa0NBQWtDLENBQUMsK0JBQStCLENBQUMsMkNBQTJDLENBQUMsb0NBQW9DLENBQUMsb0NBQW9DLENBQUMsOENBQThDLENBQUMsdUNBQXVDLENBQUMsdUNBQXVDLENBQUMsNkNBQTZDLENBQUMsc0NBQXNDLENBQUMsc0NBQXNDLENBQUMsS0FBSyx3Q0FBd0MsQ0FBQywrREFBK0QsQ0FBQyx5Q0FBeUMsQ0FBQyxrREFBa0QsQ0FBQyxpREFBaUQsQ0FBQyxnREFBZ0QsQ0FBQyxnREFBZ0QsQ0FBQyxrREFBa0QsQ0FBQyx5Q0FBeUMsQ0FBQywwQ0FBMEMsQ0FBQyxnRUFBZ0UsQ0FBQyxpRUFBaUUsQ0FBQywyQ0FBMkMsQ0FBQyxvREFBb0QsQ0FBQyxtREFBbUQsQ0FBQyxrREFBa0QsQ0FBQyxrREFBa0QsQ0FBQyxvREFBb0QsQ0FBQyw0Q0FBNEMsQ0FBQyw2Q0FBNkMsQ0FBQyxtRUFBbUUsQ0FBQyxvRUFBb0UsQ0FBQywrSkFBK0osQ0FBQyx1S0FBdUssQ0FBQyxzS0FBc0ssQ0FBQyxzS0FBc0ssQ0FBQyx5S0FBeUssQ0FBQyxrREFBa0QsQ0FBQyw4Q0FBOEMsQ0FBQyx1REFBdUQsQ0FBQyxzREFBc0QsQ0FBQyxxREFBcUQsQ0FBQyxxREFBcUQsQ0FBQyx1REFBdUQsQ0FBQyxnRUFBZ0UsQ0FBQyxtRUFBbUUsQ0FBQyw0Q0FBNEMsQ0FBQyx1REFBdUQsQ0FBQyw2Q0FBNkMsQ0FBQyxzREFBc0QsQ0FBQyxxREFBcUQsQ0FBQyxvREFBb0QsQ0FBQyxvREFBb0QsQ0FBQyxzREFBc0QsQ0FBQyw0QkFBNEIsMENBQTBDLENBQUMsMkNBQTJDLENBQUMscURBQXFELENBQUMsMkJBQTJCLDBDQUEwQyxDQUFDLDJDQUEyQyxDQUFDLHNEQUFzRCxDQUFDLHlCQUF5QiwwQ0FBMEMsQ0FBQywyQ0FBMkMsQ0FBQyxxREFBcUQsQ0FBQyx1Q0FBdUMsMkNBQTJDLENBQUMsMENBQTBDLENBQUMsMkNBQTJDLENBQUMseURBQXlELENBQUMsc0NBQXNDLDJDQUEyQyxDQUFDLDBDQUEwQyxDQUFDLDJDQUEyQyxDQUFDLHlEQUF5RCxDQUFDLG9DQUFvQywyQ0FBMkMsQ0FBQywwQ0FBMEMsQ0FBQywyQ0FBMkMsQ0FBQyx5REFBeUQsQ0FBQyxtQ0FBbUMsOENBQThDLENBQUMsNkNBQTZDLENBQUMsOENBQThDLENBQUMsNERBQTRELENBQUMsa0NBQWtDLDhDQUE4QyxDQUFDLDZDQUE2QyxDQUFDLDhDQUE4QyxDQUFDLDREQUE0RCxDQUFDLGdDQUFnQyw4Q0FBOEMsQ0FBQyw2Q0FBNkMsQ0FBQyw4Q0FBOEMsQ0FBQyw0REFBNEQsQ0FBQyxxQ0FBcUMsOENBQThDLENBQUMsdURBQXVELENBQUMsK0NBQStDLENBQUMseURBQXlELENBQUMsb0NBQW9DLDhDQUE4QyxDQUFDLHVEQUF1RCxDQUFDLCtDQUErQyxDQUFDLDBEQUEwRCxDQUFDLGtDQUFrQyw4Q0FBOEMsQ0FBQyx1REFBdUQsQ0FBQywrQ0FBK0MsQ0FBQyx5REFBeUQsQ0FBQyxLQUFLLHVDQUF1QyxDQUFDLHlDQUF5QyxDQUFDLDJDQUEyQyxDQUFDLDRDQUE0QyxDQUFDLDRDQUE0QyxDQUFDLDhDQUE4QyxDQUFDLGlEQUFpRCxDQUFDLGdEQUFnRCxDQUFDLEtBQUssb0RBQW9ELENBQUMsc0NBQXNDLENBQUMsb0RBQW9ELENBQUMsdUNBQXVDLENBQUMsMkNBQTJDLENBQUMsc0RBQXNELENBQUMsd0NBQXdDLENBQUMsc0RBQXNELENBQUMseUNBQXlDLENBQUMsNkNBQTZDLENBQUMsd0RBQXdELENBQUMsMENBQTBDLENBQUMsd0RBQXdELENBQUMsMkNBQTJDLENBQUMsK0NBQStDLENBQUMseURBQXlELENBQUMsMkNBQTJDLENBQUMseURBQXlELENBQUMsNENBQTRDLENBQUMsZ0RBQWdELENBQUMsS0FBSyxnQ0FBZ0MsQ0FBQyxLQUFLLG9DQUFvQyxDQUFDLHlEQUF5RCxDQUFDLHlDQUF5QyxDQUFDLGtEQUFrRCxDQUFDLGlEQUFpRCxDQUFDLGdEQUFnRCxDQUFDLGdEQUFnRCxDQUFDLGtEQUFrRCxDQUFDLHNDQUFzQyxvQ0FBb0MsQ0FBQywyQ0FBMkMsQ0FBQyxxREFBcUQsQ0FBQyxxQ0FBcUMsb0NBQW9DLENBQUMsMkNBQTJDLENBQUMsc0RBQXNELENBQUMsbUNBQW1DLG9DQUFvQyxDQUFDLDJDQUEyQyxDQUFDLHFEQUFxRCxDQUFDLEtBQUssNENBQTRDLENBQUMseUNBQXlDLHVDQUF1QyxDQUFDLDZDQUE2QyxDQUFDLDhDQUE4QyxDQUFDLFlBQVksQ0FBQyxLQUFLLDZCQUE2QixDQUFDLHdCQUF3QixDQUFDLG1DQUFtQyxDQUFDLDhCQUE4QixDQUFDLHdDQUF3QyxDQUFDLHVDQUF1QyxDQUFDLEtBQUssK0JBQStCLENBQUMsb0pBQW9KLENBQUMsMEpBQTBKLENBQUMsMEpBQTBKLENBQUMsNkpBQTZKLENBQUMscUNBQXFDLENBQUMsZ0NBQWdDLENBQUMsaUNBQWlDLENBQUMsMENBQTBDLENBQUMseUNBQXlDLENBQUMsd0NBQXdDLENBQUMsd0NBQXdDLENBQUMsMENBQTBDLENBQUMsNERBQTRELENBQUMsNkRBQTZELENBQUMscUNBQXFDLENBQUMsMEpBQTBKLENBQUMsZ0tBQWdLLENBQUMsZ0tBQWdLLENBQUMsbUtBQW1LLENBQUMsMkNBQTJDLENBQUMsc0NBQXNDLENBQUMsdUNBQXVDLENBQUMsZ0RBQWdELENBQUMsK0NBQStDLENBQUMsOENBQThDLENBQUMsOENBQThDLENBQUMsZ0RBQWdELENBQUMsa0VBQWtFLENBQUMsbUVBQW1FLENBQUMsNkpBQTZKLENBQUMsbUtBQW1LLENBQUMsbUtBQW1LLENBQUMsc0tBQXNLLENBQUMsOENBQThDLENBQUMsOEJBQThCLGlDQUFpQyxDQUFDLGdDQUFnQyxDQUFDLGlDQUFpQyxDQUFDLCtDQUErQyxDQUFDLDZCQUE2QixpQ0FBaUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxpQ0FBaUMsQ0FBQywrQ0FBK0MsQ0FBQywyQkFBMkIsaUNBQWlDLENBQUMsZ0NBQWdDLENBQUMsaUNBQWlDLENBQUMsK0NBQStDLENBQUMsbUNBQW1DLHVDQUF1QyxDQUFDLHNDQUFzQyxDQUFDLHVDQUF1QyxDQUFDLHFEQUFxRCxDQUFDLGtDQUFrQyx1Q0FBdUMsQ0FBQyxzQ0FBc0MsQ0FBQyx1Q0FBdUMsQ0FBQyxxREFBcUQsQ0FBQyxnQ0FBZ0MsdUNBQXVDLENBQUMsc0NBQXNDLENBQUMsdUNBQXVDLENBQUMscURBQXFELENBQUMsS0FBSyxvQ0FBb0MsQ0FBQywwQ0FBMEMsQ0FBQyxLQUFLLHFEQUFxRCxDQUFDLHVDQUF1QyxDQUFDLHFEQUFxRCxDQUFDLHdDQUF3QyxDQUFDLEtBQUssa0NBQWtDLENBQUMsS0FBSyxzQ0FBc0MsQ0FBQyw4REFBOEQsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLHNEQUFzRCxDQUFDLCtDQUErQyxDQUFDLHdDQUF3QyxDQUFDLHlDQUF5QyxDQUFDLEtBQUssc0NBQXNDLENBQUMsS0FBSyxrQ0FBa0MsQ0FBQyxxREFBcUQsQ0FBQyx5REFBeUQsQ0FBQyxzREFBc0QsQ0FBQyxLQUFLLHdDQUF3QyxDQUFDLHdDQUF3QyxDQUFDLDBDQUEwQyxDQUFDLEtBQUssbURBQW1ELENBQUMsNENBQTRDLENBQUMscUNBQXFDLENBQUMsc0NBQXNDLENBQUMsbURBQW1ELENBQUMsdURBQXVELENBQUMsZ0RBQWdELENBQUMseUNBQXlDLENBQUMsMENBQTBDLENBQUMsdURBQXVELENBQUMsMERBQTBELENBQUMsbURBQW1ELENBQUMsNENBQTRDLENBQUMsNkNBQTZDLENBQUMsMERBQTBELENBQUMsS0FBSyxrREFBa0QsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLHNEQUFzRCxDQUFDLGlCQUFpQixzREFBc0QsQ0FBQyxlQUFlLHNEQUFzRCxDQUFDLEtBQUssK0JBQStCLENBQUMsZ0NBQWdDLENBQUMsMkNBQTJDLENBQUMsMkNBQTJDLENBQUMsc0NBQXNDLENBQUMsaURBQWlELENBQUMsaURBQWlELENBQUMsb0NBQW9DLENBQUMsOENBQThDLENBQUMsK0NBQStDLENBQUMsMENBQTBDLENBQUMsb0RBQW9ELENBQUMscURBQXFELENBQUMsK0JBQStCLENBQUMsMENBQTBDLENBQUMsMENBQTBDLENBQUMsS0FBSyxvQ0FBb0MsQ0FBQyw0QkFBNEIsQ0FBQyxtREFBbUQsQ0FBQyx5REFBeUQsQ0FBQyxrQkFBa0Isb0NBQW9DLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLG9DQUFvQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssd0NBQXdDLENBQUMsMEJBQTBCLENBQUMsMkJBQTJCLENBQUMsb0NBQW9DLENBQUMscUNBQXFDLENBQUMsS0FBSyxzQ0FBc0MsQ0FBQyxLQUFLLDJEQUEyRCxDQUFDLG1EQUFtRCxDQUFDLEtBQUsseURBQXlELENBQUMsa0RBQWtELENBQUMsMkNBQTJDLENBQUMseURBQXlELENBQUMsNENBQTRDLENBQUMsS0FBSyxzQ0FBc0MsQ0FBQyxvQ0FBb0MsQ0FBQyxzREFBc0QsQ0FBQyxzQ0FBc0MsQ0FBQywyREFBMkQsQ0FBQywyREFBMkQsQ0FBQyxLQUFLLHlEQUF5RCxDQUFDLGdFQUFnRSxDQUFDLHdFQUF3RSxDQUFDLGtFQUFrRSxDQUFDLHdFQUF3RSxDQUFDLGtFQUFrRSxDQUFDLDJFQUEyRSxDQUFDLDJEQUEyRCxDQUFDLG1EQUFtRCxDQUFDLG9EQUFvRCxDQUFDLG9FQUFvRSxDQUFDLDBFQUEwRSxDQUFDLDBFQUEwRSxDQUFDLGtFQUFrRSxDQUFDLG1GQUFtRixDQUFDLDZFQUE2RSxDQUFDLGtEQUFrRCxDQUFDLEtBQUssd0NBQXdDLENBQUMsS0FBSyw2REFBNkQsQ0FBQyxzREFBc0QsQ0FBQywrQ0FBK0MsQ0FBQyx3REFBd0QsQ0FBQyxnREFBZ0QsQ0FBQywrREFBK0QsQ0FBQyx3REFBd0QsQ0FBQyxpREFBaUQsQ0FBQywwREFBMEQsQ0FBQyxrREFBa0QsQ0FBQyxLQUFLLDZDQUE2QyxDQUFDLG1EQUFtRCxDQUFDLG1LQUFtSyxDQUFDLDZLQUE2SyxDQUFDLEtBQUssOERBQThELENBQUMsc0VBQXNFLENBQUMsOEZBQThGLENBQUMsdUVBQXVFLENBQUMsa0ZBQWtGLENBQUMsa0ZBQWtGLENBQUMsdURBQXVELENBQUMscUZBQXFGLENBQUMsZ0dBQWdHLENBQUMsOEVBQThFLENBQUMsdUZBQXVGLENBQUMsc0RBQXNELENBQUMsbUVBQW1FLENBQUMsd0RBQXdELENBQUMsc0VBQXNFLENBQUMsMEVBQTBFLENBQUMsa0VBQWtFLENBQUMsK0RBQStELENBQUMsc0VBQXNFLENBQUMscUZBQXFGLENBQUMsNkRBQTZELENBQUMsd0RBQXdELENBQUMsNEVBQTRFLENBQUMsOEVBQThFLENBQUMsZ0VBQWdFLENBQUMsK0VBQStFLENBQUMsMEVBQTBFLENBQUMsMERBQTBELENBQUMsa0VBQWtFLENBQUMsbUNBQW1DLDhEQUE4RCxDQUFDLHNFQUFzRSxDQUFDLCtGQUErRixDQUFDLHVFQUF1RSxDQUFDLG1GQUFtRixDQUFDLG1GQUFtRixDQUFDLHNGQUFzRixDQUFDLGdHQUFnRyxDQUFDLDhFQUE4RSxDQUFDLHVGQUF1RixDQUFDLGlDQUFpQyw4REFBOEQsQ0FBQyxzRUFBc0UsQ0FBQyw4RkFBOEYsQ0FBQyx1RUFBdUUsQ0FBQyxrRkFBa0YsQ0FBQyxrRkFBa0YsQ0FBQyxxRkFBcUYsQ0FBQyxnR0FBZ0csQ0FBQyw4RUFBOEUsQ0FBQyx1RkFBdUYsQ0FBQyx5Q0FBeUMsdURBQXVELENBQUMsdUNBQXVDLHVEQUF1RCxDQUFDLHVCQUF1QiwyQ0FBMkMsQ0FBQyxnRUFBZ0UsdUNBQXVDLENBQUMsNkNBQTZDLENBQUMsOENBQThDLENBQUMsV0FBVyxDQUFDLEtBQUssc0RBQXNELENBQUMsd0NBQXdDLENBQUMsbURBQW1ELENBQUMsb0RBQW9ELENBQUMsc0RBQXNELENBQUMsdURBQXVELENBQUMsK0NBQStDLENBQUMsZ0RBQWdELENBQUMsS0FBSyx1QkFBdUIsQ0FBQyxLQUFLLHVDQUF1QyxDQUFDLEtBQUssbUNBQW1DLENBQUMsNERBQTRELENBQUMsNkNBQTZDLENBQUMsS0FBSyxnREFBZ0QsQ0FBQyx3REFBd0QsQ0FBQyx5REFBeUQsQ0FBQyxrRUFBa0UsQ0FBQyxrRUFBa0UsQ0FBQyxvRUFBb0UsQ0FBQyxxREFBcUQsQ0FBQyw0REFBNEQsQ0FBQywwREFBMEQsQ0FBQyxLQUFLLGtEQUFrRCxDQUFDLGlEQUFpRCxDQUFDLEtBQUssbURBQW1ELENBQUMscUNBQXFDLENBQUMsc0NBQXNDLENBQUMsK0NBQStDLENBQUMsNENBQTRDLENBQUMsc0RBQXNELENBQUMsK0NBQStDLENBQUMsd0NBQXdDLENBQUMsc0RBQXNELENBQUMseUNBQXlDLENBQUMsS0FBSyxrREFBa0QsQ0FBQyxvREFBb0QsQ0FBQyxrREFBa0QsQ0FBQyxvREFBb0QsQ0FBQyxLQUFLLHdCQUF3QixDQUFDLHNCQUFzQix3QkFBd0IsQ0FBQyxxQkFBcUIsd0JBQXdCLENBQUMsbUJBQW1CLHdCQUF3QixDQUFDLEtBQUssK0JBQStCLENBQUMsMEpBQTBKLENBQUMsa0NBQWtDLENBQUMsS0FBSyx5REFBeUQsQ0FBQyw4Q0FBOEMsQ0FBQyxzREFBc0QsQ0FBQyw4Q0FBOEMsQ0FBQyxvREFBb0QsQ0FBQyw0Q0FBNEMsQ0FBQyxLQUFLLGdEQUFnRCxDQUFDLGlFQUFpRSxDQUFDLCtEQUErRCxDQUFDLDZEQUE2RCxDQUFDLDJEQUEyRCxDQUFDLDZEQUE2RCxDQUFDLDJEQUEyRCxDQUFDLG1DQUFtQyxDQUFDLDRDQUE0QyxDQUFDLGdFQUFnRSxDQUFDLGdFQUFnRSxDQUFDLHlEQUF5RCxDQUFDLGtFQUFrRSxDQUFDLHdFQUF3RSxDQUFDLHlEQUF5RCxDQUFDLDhEQUE4RCxDQUFDLDhEQUE4RCxDQUFDLGtFQUFrRSxDQUFDLGlDQUFpQyxnREFBZ0QsQ0FBQyxpRUFBaUUsQ0FBQywrREFBK0QsQ0FBQyw2REFBNkQsQ0FBQywyREFBMkQsQ0FBQyw2REFBNkQsQ0FBQywyREFBMkQsQ0FBQywrQkFBK0IsZ0RBQWdELENBQUMsaUVBQWlFLENBQUMsK0RBQStELENBQUMsNkRBQTZELENBQUMsMkRBQTJELENBQUMsNkRBQTZELENBQUMsMkRBQTJELENBQUMsS0FBSyxnQ0FBZ0MsQ0FBQyxLQUFLLG9EQUFvRCxDQUFDLHVEQUF1RCxDQUFDLHlDQUF5QyxDQUFDLDBDQUEwQyxDQUFDLHFEQUFxRCxDQUFDLHdEQUF3RCxDQUFDLHlEQUF5RCxDQUFDLEtBQUssOEJBQThCLENBQUMsS0FBSyxtREFBbUQsQ0FBQyxzREFBc0QsQ0FBQyx5QkFBeUIsZ0RBQWdELENBQUMsd0NBQXdDLENBQUMsd0JBQXdCLGdEQUFnRCxDQUFDLHdDQUF3QyxDQUFDLHNCQUFzQixnREFBZ0QsQ0FBQyx3Q0FBd0MsQ0FBQyxLQUFLLGtDQUFrQyxDQUFDLGdDQUFnQyxDQUFDLEtBQUssZ0RBQWdELENBQUMseUNBQXlDLENBQUMsa0NBQWtDLENBQUMsMENBQTBDLENBQUMsbUNBQW1DLENBQUMsS0FBSywyQ0FBMkMsQ0FBQyw4Q0FBOEMsQ0FBQyxLQUFLLCtCQUErQixDQUFDLEtBQUssNENBQTRDLENBQUMsOEJBQThCLENBQUMsK0JBQStCLENBQUMsbUdBQW1HLHFDQUFxQyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxtR0FBbUcscUNBQXFDLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLG1HQUFtRyxxQ0FBcUMsQ0FBQyx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsMkZBQTJGLHFDQUFxQyxDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxtREFBbUQsK0NBQStDLENBQUMsZUFBZSxDQUFDLG1EQUFtRCwrQ0FBK0MsQ0FBQyxlQUFlLENBQUMsa0dBQWtHLHFDQUFxQyxDQUFDLDRCQUE0QixDQUFDLDRGQUE0RixxQ0FBcUMsQ0FBQyw0QkFBNEIsQ0FBQyxzR0FBc0csZUFBZSxDQUFDLGdGQUFnRixxQ0FBcUMsQ0FBQyw0QkFBNEIsQ0FBQyxnREFBZ0QscUNBQXFDLENBQUMsMEJBQTBCLENBQUMsZUFBZSxDQUFDLGdEQUFnRCxxQ0FBcUMsQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsZ0RBQWdELHFDQUFxQyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxnREFBZ0QscUNBQXFDLENBQUMsNEJBQTRCLENBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbIi5tYXQtcmlwcGxle292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LXJpcHBsZS5tYXQtcmlwcGxlLXVuYm91bmRlZHtvdmVyZmxvdzp2aXNpYmxlfS5tYXQtcmlwcGxlLWVsZW1lbnR7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czo1MCU7cG9pbnRlci1ldmVudHM6bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHksdHJhbnNmb3JtIDBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTt0cmFuc2Zvcm06c2NhbGUzZCgwLCAwLCAwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1hdC1yaXBwbGUtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJpcHBsZS1lbGVtZW50e2Rpc3BsYXk6bm9uZX0uY2RrLXZpc3VhbGx5LWhpZGRlbntib3JkZXI6MDtjbGlwOnJlY3QoMCAwIDAgMCk7aGVpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2xlZnQ6MH1bZGlyPXJ0bF0gLmNkay12aXN1YWxseS1oaWRkZW57bGVmdDphdXRvO3JpZ2h0OjB9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO29wYWNpdHk6MH0uY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjF9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAuY2RrLW92ZXJsYXktYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5Oi42fS5jZGstb3ZlcmxheS1kYXJrLWJhY2tkcm9we2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMzIpfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcHt0cmFuc2l0aW9uOnZpc2liaWxpdHkgMW1zIGxpbmVhcixvcGFjaXR5IDFtcyBsaW5lYXI7dmlzaWJpbGl0eTpoaWRkZW47b3BhY2l0eToxfS5jZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcC5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5ne29wYWNpdHk6MDt2aXNpYmlsaXR5OnZpc2libGV9LmNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9ue3RyYW5zaXRpb246bm9uZX0uY2RrLW92ZXJsYXktY29ubmVjdGVkLXBvc2l0aW9uLWJvdW5kaW5nLWJveHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6MXB4O21pbi1oZWlnaHQ6MXB4fS5jZGstZ2xvYmFsLXNjcm9sbGJsb2Nre3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7b3ZlcmZsb3cteTpzY3JvbGx9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXple3Jlc2l6ZTpub25lfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmd7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6YXV0byAhaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50fXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZS1tZWFzdXJpbmctZmlyZWZveHtwYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDowICFpbXBvcnRhbnR9QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydHsvKiEqL31Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZHsvKiEqL30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOi13ZWJraXQtYXV0b2ZpbGx7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0IDBzIDFtc30uY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkOm5vdCg6LXdlYmtpdC1hdXRvZmlsbCl7YW5pbWF0aW9uOmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLWVuZCAwcyAxbXN9Lm1hdC1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItZGlzcGxheSwgbm9uZSk7Ym9yZGVyOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItcmFkaXVzOnZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6XCJcIn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZley0tbWF0LWZvY3VzLWluZGljYXRvci1kaXNwbGF5OiBibG9ja30ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTp2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1kaXNwbGF5LCBub25lKTtib3JkZXI6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpIHZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1zdHlsZSwgc29saWQpIHZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXJhZGl1cywgNHB4KX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6Zm9jdXM6OmJlZm9yZXtjb250ZW50OlwiXCJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXk6IGJsb2NrfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tYXQtYXBwLWJhY2tncm91bmQtY29sb3IsIHRyYW5zcGFyZW50KTtjb2xvcjp2YXIoLS1tYXQtYXBwLXRleHQtY29sb3IsIGluaGVyaXQpfWh0bWx7LS1tYXQtcmlwcGxlLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xKX1odG1sey0tbWF0LW9wdGlvbi1zZWxlY3RlZC1zdGF0ZS1sYWJlbC10ZXh0LWNvbG9yOiMzZjUxYjU7LS1tYXQtb3B0aW9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1vcHRpb24taG92ZXItc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KTstLW1hdC1vcHRpb24tZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KTstLW1hdC1vcHRpb24tc2VsZWN0ZWQtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KX0ubWF0LWFjY2VudHstLW1hdC1vcHRpb24tc2VsZWN0ZWQtc3RhdGUtbGFiZWwtdGV4dC1jb2xvcjojZmY0MDgxOy0tbWF0LW9wdGlvbi1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tYXQtb3B0aW9uLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCk7LS1tYXQtb3B0aW9uLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCk7LS1tYXQtb3B0aW9uLXNlbGVjdGVkLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCl9Lm1hdC13YXJuey0tbWF0LW9wdGlvbi1zZWxlY3RlZC1zdGF0ZS1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tYXQtb3B0aW9uLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1vcHRpb24taG92ZXItc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KTstLW1hdC1vcHRpb24tZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KTstLW1hdC1vcHRpb24tc2VsZWN0ZWQtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KX1odG1sey0tbWF0LW9wdGdyb3VwLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWF0LXByaW1hcnl7LS1tYXQtZnVsbC1wc2V1ZG8tY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojM2Y1MWI1Oy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmFmYWZhOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmFmYWZhOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojYjBiMGIwOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2IwYjBiMDstLW1hdC1taW5pbWFsLXBzZXVkby1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6IzNmNTFiNTstLW1hdC1taW5pbWFsLXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2IwYjBiMH1odG1sey0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmNDA4MTstLW1hdC1mdWxsLXBzZXVkby1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZhZmFmYTstLW1hdC1mdWxsLXBzZXVkby1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1hdC1mdWxsLXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZhZmFmYTstLW1hdC1mdWxsLXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6I2IwYjBiMDstLW1hdC1mdWxsLXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOiNiMGIwYjA7LS1tYXQtbWluaW1hbC1wc2V1ZG8tY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZjQwODE7LS1tYXQtbWluaW1hbC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNiMGIwYjB9Lm1hdC1hY2NlbnR7LS1tYXQtZnVsbC1wc2V1ZG8tY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY0MDgxOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmFmYWZhOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmFmYWZhOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojYjBiMGIwOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2IwYjBiMDstLW1hdC1taW5pbWFsLXBzZXVkby1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2ZmNDA4MTstLW1hdC1taW5pbWFsLXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2IwYjBiMH0ubWF0LXdhcm57LS1tYXQtZnVsbC1wc2V1ZG8tY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmFmYWZhOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjojZmFmYWZhOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjojYjBiMGIwOy0tbWF0LWZ1bGwtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2IwYjBiMDstLW1hdC1taW5pbWFsLXBzZXVkby1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2Y0NDMzNjstLW1hdC1taW5pbWFsLXBzZXVkby1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6I2IwYjBiMH1odG1sey0tbWF0LWFwcC1iYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7LS1tYXQtYXBwLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWF0LWVsZXZhdGlvbi16MCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MSwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXozLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16NCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejYsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejcsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejksLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEwLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejExLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEyLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejEzLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE1LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE2LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTgsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE5LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMCwubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIxLC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjIsLm1hdC1tZGMtZWxldmF0aW9uLXNwZWNpZmljLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMywubWF0LW1kYy1lbGV2YXRpb24tc3BlY2lmaWMubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejI0LC5tYXQtbWRjLWVsZXZhdGlvbi1zcGVjaWZpYy5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWh0bWx7LS1tYXQtb3B0aW9uLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtb3B0aW9uLWxhYmVsLXRleHQtbGluZS1oZWlnaHQ6MjRweDstLW1hdC1vcHRpb24tbGFiZWwtdGV4dC1zaXplOjE2cHg7LS1tYXQtb3B0aW9uLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtOy0tbWF0LW9wdGlvbi1sYWJlbC10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1hdC1vcHRncm91cC1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LW9wdGdyb3VwLWxhYmVsLXRleHQtbGluZS1oZWlnaHQ6MjRweDstLW1hdC1vcHRncm91cC1sYWJlbC10ZXh0LXNpemU6MTZweDstLW1hdC1vcHRncm91cC1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDMxMjVlbTstLW1hdC1vcHRncm91cC1sYWJlbC10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1kYy1lbGV2YXRlZC1jYXJkLWNvbnRhaW5lci1zaGFwZTo0cHg7LS1tZGMtb3V0bGluZWQtY2FyZC1jb250YWluZXItc2hhcGU6NHB4Oy0tbWRjLW91dGxpbmVkLWNhcmQtb3V0bGluZS13aWR0aDoxcHh9aHRtbHstLW1kYy1lbGV2YXRlZC1jYXJkLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1lbGV2YXRlZC1jYXJkLWNvbnRhaW5lci1lbGV2YXRpb246MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1vdXRsaW5lZC1jYXJkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1jYXJkLWNvbnRhaW5lci1lbGV2YXRpb246MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LWNhcmQtc3VidGl0bGUtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpfWh0bWx7LS1tYXQtY2FyZC10aXRsZS10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LWNhcmQtdGl0bGUtdGV4dC1saW5lLWhlaWdodDozMnB4Oy0tbWF0LWNhcmQtdGl0bGUtdGV4dC1zaXplOjIwcHg7LS1tYXQtY2FyZC10aXRsZS10ZXh0LXRyYWNraW5nOjAuMDEyNWVtOy0tbWF0LWNhcmQtdGl0bGUtdGV4dC13ZWlnaHQ6NTAwOy0tbWF0LWNhcmQtc3VidGl0bGUtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC1jYXJkLXN1YnRpdGxlLXRleHQtbGluZS1oZWlnaHQ6MjJweDstLW1hdC1jYXJkLXN1YnRpdGxlLXRleHQtc2l6ZToxNHB4Oy0tbWF0LWNhcmQtc3VidGl0bGUtdGV4dC10cmFja2luZzowLjAwNzE0Mjg1NzFlbTstLW1hdC1jYXJkLXN1YnRpdGxlLXRleHQtd2VpZ2h0OjUwMH1odG1sey0tbWRjLWxpbmVhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWhlaWdodDo0cHg7LS1tZGMtbGluZWFyLXByb2dyZXNzLXRyYWNrLWhlaWdodDo0cHg7LS1tZGMtbGluZWFyLXByb2dyZXNzLXRyYWNrLXNoYXBlOjB9Lm1hdC1tZGMtcHJvZ3Jlc3MtYmFyey0tbWRjLWxpbmVhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiMzZjUxYjU7LS1tZGMtbGluZWFyLXByb2dyZXNzLXRyYWNrLWNvbG9yOnJnYmEoNjMsIDgxLCAxODEsIDAuMjUpfS5tYXQtbWRjLXByb2dyZXNzLWJhci5tYXQtYWNjZW50ey0tbWRjLWxpbmVhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmZjQwODE7LS1tZGMtbGluZWFyLXByb2dyZXNzLXRyYWNrLWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjI1KX0ubWF0LW1kYy1wcm9ncmVzcy1iYXIubWF0LXdhcm57LS1tZGMtbGluZWFyLXByb2dyZXNzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNjstLW1kYy1saW5lYXItcHJvZ3Jlc3MtdHJhY2stY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4yNSl9aHRtbHstLW1kYy1wbGFpbi10b29sdGlwLWNvbnRhaW5lci1zaGFwZTo0cHg7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MTZweH1odG1sey0tbWRjLXBsYWluLXRvb2x0aXAtY29udGFpbmVyLWNvbG9yOiM2MTYxNjE7LS1tZGMtcGxhaW4tdG9vbHRpcC1zdXBwb3J0aW5nLXRleHQtY29sb3I6I2ZmZn1odG1sey0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXNpemU6MTJweDstLW1kYy1wbGFpbi10b29sdGlwLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLXBsYWluLXRvb2x0aXAtc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nOjAuMDMzMzMzMzMzM2VtfWh0bWx7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtYWN0aXZlLWluZGljYXRvci1oZWlnaHQ6MXB4Oy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWZvY3VzLWFjdGl2ZS1pbmRpY2F0b3ItaGVpZ2h0OjJweDstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1jb250YWluZXItc2hhcGU6NHB4Oy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtb3V0bGluZS13aWR0aDoxcHg7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1mb2N1cy1vdXRsaW5lLXdpZHRoOjJweDstLW1kYy1vdXRsaW5lZC10ZXh0LWZpZWxkLWNvbnRhaW5lci1zaGFwZTo0cHh9aHRtbHstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1jYXJldC1jb2xvcjojM2Y1MWI1Oy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWZvY3VzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6IzNmNTFiNTstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoNjMsIDgxLCAxODEsIDAuODcpOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWNvbnRhaW5lci1jb2xvcjp3aGl0ZXNtb2tlOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZmFmYWZhOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1pbnB1dC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtZGlzYWJsZWQtaW5wdXQtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWlucHV0LXRleHQtcGxhY2Vob2xkZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWVycm9yLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNjstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1lcnJvci1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtZXJyb3ItbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWVycm9yLWNhcmV0LWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtYWN0aXZlLWluZGljYXRvci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNDIpOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWRpc2FibGVkLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA2KTstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1ob3Zlci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtZXJyb3ItYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWVycm9yLWZvY3VzLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNjstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1lcnJvci1ob3Zlci1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1jYXJldC1jb2xvcjojM2Y1MWI1Oy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtZm9jdXMtb3V0bGluZS1jb2xvcjojM2Y1MWI1Oy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtZm9jdXMtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDYzLCA4MSwgMTgxLCAwLjg3KTstLW1kYy1vdXRsaW5lZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtaG92ZXItbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNik7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1pbnB1dC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1kaXNhYmxlZC1pbnB1dC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1pbnB1dC10ZXh0LXBsYWNlaG9sZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KTstLW1kYy1vdXRsaW5lZC10ZXh0LWZpZWxkLWVycm9yLWNhcmV0LWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1lcnJvci1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1lcnJvci1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1lcnJvci1ob3Zlci1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1kaXNhYmxlZC1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNik7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1ob3Zlci1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1lcnJvci1mb2N1cy1vdXRsaW5lLWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1lcnJvci1ob3Zlci1vdXRsaW5lLWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1lcnJvci1vdXRsaW5lLWNvbG9yOiNmNDQzMzY7LS1tYXQtZm9ybS1maWVsZC1mb2N1cy1zZWxlY3QtYXJyb3ctY29sb3I6cmdiYSg2MywgODEsIDE4MSwgMC44Nyk7LS1tYXQtZm9ybS1maWVsZC1kaXNhYmxlZC1pbnB1dC10ZXh0LXBsYWNlaG9sZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtZm9ybS1maWVsZC1zdGF0ZS1sYXllci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LWZvcm0tZmllbGQtZXJyb3ItdGV4dC1jb2xvcjojZjQ0MzM2Oy0tbWF0LWZvcm0tZmllbGQtc2VsZWN0LW9wdGlvbi10ZXh0LWNvbG9yOmluaGVyaXQ7LS1tYXQtZm9ybS1maWVsZC1zZWxlY3QtZGlzYWJsZWQtb3B0aW9uLXRleHQtY29sb3I6R3JheVRleHQ7LS1tYXQtZm9ybS1maWVsZC1sZWFkaW5nLWljb24tY29sb3I6dW5zZXQ7LS1tYXQtZm9ybS1maWVsZC1kaXNhYmxlZC1sZWFkaW5nLWljb24tY29sb3I6dW5zZXQ7LS1tYXQtZm9ybS1maWVsZC10cmFpbGluZy1pY29uLWNvbG9yOnVuc2V0Oy0tbWF0LWZvcm0tZmllbGQtZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp1bnNldDstLW1hdC1mb3JtLWZpZWxkLWVycm9yLWZvY3VzLXRyYWlsaW5nLWljb24tY29sb3I6dW5zZXQ7LS1tYXQtZm9ybS1maWVsZC1lcnJvci1ob3Zlci10cmFpbGluZy1pY29uLWNvbG9yOnVuc2V0Oy0tbWF0LWZvcm0tZmllbGQtZXJyb3ItdHJhaWxpbmctaWNvbi1jb2xvcjp1bnNldDstLW1hdC1mb3JtLWZpZWxkLWVuYWJsZWQtc2VsZWN0LWFycm93LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtZm9ybS1maWVsZC1kaXNhYmxlZC1zZWxlY3QtYXJyb3ctY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1hdC1mb3JtLWZpZWxkLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wNDstLW1hdC1mb3JtLWZpZWxkLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wOH0ubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtY2FyZXQtY29sb3I6I2ZmNDA4MTstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1mb2N1cy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmZjQwODE7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtZm9jdXMtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgNjQsIDEyOSwgMC44Nyk7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1jYXJldC1jb2xvcjojZmY0MDgxOy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtZm9jdXMtb3V0bGluZS1jb2xvcjojZmY0MDgxOy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtZm9jdXMtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI1NSwgNjQsIDEyOSwgMC44Nyk7LS1tYXQtZm9ybS1maWVsZC1mb2N1cy1zZWxlY3QtYXJyb3ctY29sb3I6cmdiYSgyNTUsIDY0LCAxMjksIDAuODcpfS5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm57LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtY2FyZXQtY29sb3I6I2Y0NDMzNjstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1mb2N1cy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmNDQzMzY7LS1tZGMtZmlsbGVkLXRleHQtZmllbGQtZm9jdXMtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjg3KTstLW1kYy1vdXRsaW5lZC10ZXh0LWZpZWxkLWNhcmV0LWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1mb2N1cy1vdXRsaW5lLWNvbG9yOiNmNDQzMzY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpOy0tbWF0LWZvcm0tZmllbGQtZm9jdXMtc2VsZWN0LWFycm93LWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpfWh0bWx7LS1tYXQtZm9ybS1maWVsZC1jb250YWluZXItaGVpZ2h0OjU2cHg7LS1tYXQtZm9ybS1maWVsZC1maWxsZWQtbGFiZWwtZGlzcGxheTpibG9jazstLW1hdC1mb3JtLWZpZWxkLWNvbnRhaW5lci12ZXJ0aWNhbC1wYWRkaW5nOjE2cHg7LS1tYXQtZm9ybS1maWVsZC1maWxsZWQtd2l0aC1sYWJlbC1jb250YWluZXItcGFkZGluZy10b3A6MjRweDstLW1hdC1mb3JtLWZpZWxkLWZpbGxlZC13aXRoLWxhYmVsLWNvbnRhaW5lci1wYWRkaW5nLWJvdHRvbTo4cHh9aHRtbHstLW1kYy1maWxsZWQtdGV4dC1maWVsZC1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtc2l6ZToxNnB4Oy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtOy0tbWRjLWZpbGxlZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtd2VpZ2h0OjQwMDstLW1kYy1vdXRsaW5lZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtb3V0bGluZWQtdGV4dC1maWVsZC1sYWJlbC10ZXh0LXNpemU6MTZweDstLW1kYy1vdXRsaW5lZC10ZXh0LWZpZWxkLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtOy0tbWRjLW91dGxpbmVkLXRleHQtZmllbGQtbGFiZWwtdGV4dC13ZWlnaHQ6NDAwOy0tbWF0LWZvcm0tZmllbGQtY29udGFpbmVyLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtZm9ybS1maWVsZC1jb250YWluZXItdGV4dC1saW5lLWhlaWdodDoyNHB4Oy0tbWF0LWZvcm0tZmllbGQtY29udGFpbmVyLXRleHQtc2l6ZToxNnB4Oy0tbWF0LWZvcm0tZmllbGQtY29udGFpbmVyLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtOy0tbWF0LWZvcm0tZmllbGQtY29udGFpbmVyLXRleHQtd2VpZ2h0OjQwMDstLW1hdC1mb3JtLWZpZWxkLW91dGxpbmVkLWxhYmVsLXRleHQtcG9wdWxhdGVkLXNpemU6MTZweDstLW1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC10ZXh0LXNpemU6MTJweDstLW1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC10ZXh0LXRyYWNraW5nOjAuMDMzMzMzMzMzM2VtOy0tbWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXRleHQtd2VpZ2h0OjQwMH1odG1sey0tbWF0LXNlbGVjdC1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9aHRtbHstLW1hdC1zZWxlY3QtcGFuZWwtYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zZWxlY3QtZW5hYmxlZC10cmlnZ2VyLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1zZWxlY3QtZGlzYWJsZWQtdHJpZ2dlci10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtc2VsZWN0LXBsYWNlaG9sZGVyLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWF0LXNlbGVjdC1lbmFibGVkLWFycm93LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtc2VsZWN0LWRpc2FibGVkLWFycm93LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtc2VsZWN0LWZvY3VzZWQtYXJyb3ctY29sb3I6cmdiYSg2MywgODEsIDE4MSwgMC44Nyk7LS1tYXQtc2VsZWN0LWludmFsaWQtYXJyb3ctY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC44Nyl9aHRtbCAubWF0LW1kYy1mb3JtLWZpZWxkLm1hdC1hY2NlbnR7LS1tYXQtc2VsZWN0LXBhbmVsLWJhY2tncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc2VsZWN0LWVuYWJsZWQtdHJpZ2dlci10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tYXQtc2VsZWN0LWRpc2FibGVkLXRyaWdnZXItdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LXNlbGVjdC1wbGFjZWhvbGRlci10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KTstLW1hdC1zZWxlY3QtZW5hYmxlZC1hcnJvdy1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LXNlbGVjdC1kaXNhYmxlZC1hcnJvdy1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LXNlbGVjdC1mb2N1c2VkLWFycm93LWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjg3KTstLW1hdC1zZWxlY3QtaW52YWxpZC1hcnJvdy1jb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjg3KX1odG1sIC5tYXQtbWRjLWZvcm0tZmllbGQubWF0LXdhcm57LS1tYXQtc2VsZWN0LXBhbmVsLWJhY2tncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc2VsZWN0LWVuYWJsZWQtdHJpZ2dlci10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tYXQtc2VsZWN0LWRpc2FibGVkLXRyaWdnZXItdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LXNlbGVjdC1wbGFjZWhvbGRlci10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KTstLW1hdC1zZWxlY3QtZW5hYmxlZC1hcnJvdy1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LXNlbGVjdC1kaXNhYmxlZC1hcnJvdy1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LXNlbGVjdC1mb2N1c2VkLWFycm93LWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpOy0tbWF0LXNlbGVjdC1pbnZhbGlkLWFycm93LWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuODcpfWh0bWx7LS1tYXQtc2VsZWN0LWFycm93LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC04cHgpfWh0bWx7LS1tYXQtc2VsZWN0LXRyaWdnZXItdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC1zZWxlY3QtdHJpZ2dlci10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tYXQtc2VsZWN0LXRyaWdnZXItdGV4dC1zaXplOjE2cHg7LS1tYXQtc2VsZWN0LXRyaWdnZXItdGV4dC10cmFja2luZzowLjAzMTI1ZW07LS1tYXQtc2VsZWN0LXRyaWdnZXItdGV4dC13ZWlnaHQ6NDAwfWh0bWx7LS1tYXQtYXV0b2NvbXBsZXRlLWNvbnRhaW5lci1zaGFwZTo0cHg7LS1tYXQtYXV0b2NvbXBsZXRlLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1odG1sey0tbWF0LWF1dG9jb21wbGV0ZS1iYWNrZ3JvdW5kLWNvbG9yOndoaXRlfWh0bWx7LS1tZGMtZGlhbG9nLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1kaWFsb2ctY29udGFpbmVyLXNoYWRvdy1jb2xvcjojMDAwOy0tbWRjLWRpYWxvZy1jb250YWluZXItc2hhcGU6NHB4Oy0tbWF0LWRpYWxvZy1jb250YWluZXItbWF4LXdpZHRoOjgwdnc7LS1tYXQtZGlhbG9nLWNvbnRhaW5lci1zbWFsbC1tYXgtd2lkdGg6ODB2dzstLW1hdC1kaWFsb2ctY29udGFpbmVyLW1pbi13aWR0aDowOy0tbWF0LWRpYWxvZy1hY3Rpb25zLWFsaWdubWVudDpzdGFydDstLW1hdC1kaWFsb2ctYWN0aW9ucy1wYWRkaW5nOjhweDstLW1hdC1kaWFsb2ctY29udGVudC1wYWRkaW5nOjIwcHggMjRweDstLW1hdC1kaWFsb2ctd2l0aC1hY3Rpb25zLWNvbnRlbnQtcGFkZGluZzoyMHB4IDI0cHg7LS1tYXQtZGlhbG9nLWhlYWRsaW5lLXBhZGRpbmc6MCAyNHB4IDlweH1odG1sey0tbWRjLWRpYWxvZy1jb250YWluZXItY29sb3I6d2hpdGU7LS1tZGMtZGlhbG9nLXN1YmhlYWQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX1odG1sey0tbWRjLWRpYWxvZy1zdWJoZWFkLWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWRpYWxvZy1zdWJoZWFkLWxpbmUtaGVpZ2h0OjMycHg7LS1tZGMtZGlhbG9nLXN1YmhlYWQtc2l6ZToyMHB4Oy0tbWRjLWRpYWxvZy1zdWJoZWFkLXdlaWdodDo1MDA7LS1tZGMtZGlhbG9nLXN1YmhlYWQtdHJhY2tpbmc6MC4wMTI1ZW07LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1kaWFsb2ctc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjI0cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC1zaXplOjE2cHg7LS1tZGMtZGlhbG9nLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWRpYWxvZy1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMzEyNWVtfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1jb250YWluZXItc2hhcGUtZmFtaWx5OnJvdW5kZWQ7LS1tZGMtY2hpcC1jb250YWluZXItc2hhcGUtcmFkaXVzOjE2cHggMTZweCAxNnB4IDE2cHg7LS1tZGMtY2hpcC13aXRoLWF2YXRhci1hdmF0YXItc2hhcGUtZmFtaWx5OnJvdW5kZWQ7LS1tZGMtY2hpcC13aXRoLWF2YXRhci1hdmF0YXItc2hhcGUtcmFkaXVzOjE0cHggMTRweCAxNHB4IDE0cHg7LS1tZGMtY2hpcC13aXRoLWF2YXRhci1hdmF0YXItc2l6ZToyOHB4Oy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tc2l6ZToxOHB4Oy0tbWRjLWNoaXAtb3V0bGluZS13aWR0aDowOy0tbWRjLWNoaXAtb3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudDstLW1kYy1jaGlwLWRpc2FibGVkLW91dGxpbmUtY29sb3I6dHJhbnNwYXJlbnQ7LS1tZGMtY2hpcC1mb2N1cy1vdXRsaW5lLWNvbG9yOnRyYW5zcGFyZW50Oy0tbWRjLWNoaXAtaG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWRjLWNoaXAtd2l0aC1hdmF0YXItZGlzYWJsZWQtYXZhdGFyLW9wYWNpdHk6MTstLW1kYy1jaGlwLWZsYXQtc2VsZWN0ZWQtb3V0bGluZS13aWR0aDowOy0tbWRjLWNoaXAtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tb3BhY2l0eToxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWRpc2FibGVkLWljb24tb3BhY2l0eToxOy0tbWF0LWNoaXAtZGlzYWJsZWQtY29udGFpbmVyLW9wYWNpdHk6MC40Oy0tbWF0LWNoaXAtdHJhaWxpbmctYWN0aW9uLW9wYWNpdHk6MC41NDstLW1hdC1jaGlwLXRyYWlsaW5nLWFjdGlvbi1mb2N1cy1vcGFjaXR5OjE7LS1tYXQtY2hpcC10cmFpbGluZy1hY3Rpb24tc3RhdGUtbGF5ZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1tYXQtY2hpcC1zZWxlY3RlZC10cmFpbGluZy1hY3Rpb24tc3RhdGUtbGF5ZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1tYXQtY2hpcC10cmFpbGluZy1hY3Rpb24taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowOy0tbWF0LWNoaXAtdHJhaWxpbmctYWN0aW9uLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MH0ubWF0LW1kYy1zdGFuZGFyZC1jaGlwey0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtZWxldmF0ZWQtY29udGFpbmVyLWNvbG9yOiNlMGUwZTA7LS1tZGMtY2hpcC1lbGV2YXRlZC1zZWxlY3RlZC1jb250YWluZXItY29sb3I6I2UwZTBlMDstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojZTBlMGUwOy0tbWRjLWNoaXAtZmxhdC1kaXNhYmxlZC1zZWxlY3RlZC1jb250YWluZXItY29sb3I6I2UwZTBlMDstLW1kYy1jaGlwLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoaXAtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hpcC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGlwLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1kYy1jaGlwLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoaXAtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtc2VsZWN0ZWQtbGFiZWwtdGV4dC1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hpcC13aXRoLWljb24tc2VsZWN0ZWQtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tYXQtY2hpcC1zZWxlY3RlZC1kaXNhYmxlZC10cmFpbGluZy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tYXQtY2hpcC1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOiMyMTIxMjF9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnksLm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtbWRjLWNoaXAtaGlnaGxpZ2h0ZWQubWF0LXByaW1hcnl7LS1tZGMtY2hpcC1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtZWxldmF0ZWQtY29udGFpbmVyLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hpcC1lbGV2YXRlZC1zZWxlY3RlZC1jb250YWluZXItY29sb3I6IzNmNTFiNTstLW1kYy1jaGlwLWVsZXZhdGVkLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoaXAtZmxhdC1kaXNhYmxlZC1zZWxlY3RlZC1jb250YWluZXItY29sb3I6IzNmNTFiNTstLW1kYy1jaGlwLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoaXAtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hpcC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGlwLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1kYy1jaGlwLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoaXAtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXNlbGVjdGVkLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24taWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1kaXNhYmxlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLXNlbGVjdGVkLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlOy0tbWF0LWNoaXAtc2VsZWN0ZWQtZGlzYWJsZWQtdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1hdC1jaGlwLXNlbGVjdGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGV9Lm1hdC1tZGMtc3RhbmRhcmQtY2hpcC5tYXQtbWRjLWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCwubWF0LW1kYy1zdGFuZGFyZC1jaGlwLm1hdC1tZGMtY2hpcC1oaWdobGlnaHRlZC5tYXQtYWNjZW50ey0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZmY0MDgxOy0tbWRjLWNoaXAtZWxldmF0ZWQtc2VsZWN0ZWQtY29udGFpbmVyLWNvbG9yOiNmZjQwODE7LS1tZGMtY2hpcC1lbGV2YXRlZC1kaXNhYmxlZC1jb250YWluZXItY29sb3I6I2ZmNDA4MTstLW1kYy1jaGlwLWZsYXQtZGlzYWJsZWQtc2VsZWN0ZWQtY29udGFpbmVyLWNvbG9yOiNmZjQwODE7LS1tZGMtY2hpcC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGlwLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoaXAtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hpcC1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tZGMtY2hpcC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGlwLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1kYy1jaGlwLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC1zZWxlY3RlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1hdC1jaGlwLXNlbGVjdGVkLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tYXQtY2hpcC1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LW1kYy1jaGlwLXNlbGVjdGVkLm1hdC13YXJuLC5tYXQtbWRjLXN0YW5kYXJkLWNoaXAubWF0LW1kYy1jaGlwLWhpZ2hsaWdodGVkLm1hdC13YXJuey0tbWRjLWNoaXAtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLWVsZXZhdGVkLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoaXAtZWxldmF0ZWQtc2VsZWN0ZWQtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hpcC1lbGV2YXRlZC1kaXNhYmxlZC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGlwLWZsYXQtZGlzYWJsZWQtc2VsZWN0ZWQtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hpcC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGlwLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoaXAtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hpcC1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tZGMtY2hpcC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGlwLXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1kYy1jaGlwLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tZGMtY2hpcC1zZWxlY3RlZC1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC1pY29uLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLWljb24tZGlzYWJsZWQtaWNvbi1jb2xvcjp3aGl0ZTstLW1kYy1jaGlwLXdpdGgtaWNvbi1zZWxlY3RlZC1pY29uLWNvbG9yOndoaXRlOy0tbWRjLWNoaXAtd2l0aC10cmFpbGluZy1pY29uLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tZGMtY2hpcC13aXRoLXRyYWlsaW5nLWljb24tdHJhaWxpbmctaWNvbi1jb2xvcjp3aGl0ZTstLW1hdC1jaGlwLXNlbGVjdGVkLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6d2hpdGU7LS1tYXQtY2hpcC1zZWxlY3RlZC10cmFpbGluZy1pY29uLWNvbG9yOndoaXRlfS5tYXQtbWRjLWNoaXAubWF0LW1kYy1zdGFuZGFyZC1jaGlwey0tbWRjLWNoaXAtY29udGFpbmVyLWhlaWdodDozMnB4fS5tYXQtbWRjLXN0YW5kYXJkLWNoaXB7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1saW5lLWhlaWdodDoyMHB4Oy0tbWRjLWNoaXAtbGFiZWwtdGV4dC1zaXplOjE0cHg7LS1tZGMtY2hpcC1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDE3ODU3MTQyOWVtOy0tbWRjLWNoaXAtbGFiZWwtdGV4dC13ZWlnaHQ6NDAwfWh0bWx7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tb3BhY2l0eTowLjM4Oy0tbWRjLXN3aXRjaC1kaXNhYmxlZC10cmFjay1vcGFjaXR5OjAuMTI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1vcGFjaXR5OjAuMzg7LS1tZGMtc3dpdGNoLWhhbmRsZS1oZWlnaHQ6MjBweDstLW1kYy1zd2l0Y2gtaGFuZGxlLXNoYXBlOjEwcHg7LS1tZGMtc3dpdGNoLWhhbmRsZS13aWR0aDoyMHB4Oy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1pY29uLXNpemU6MThweDstLW1kYy1zd2l0Y2gtdHJhY2staGVpZ2h0OjE0cHg7LS1tZGMtc3dpdGNoLXRyYWNrLXNoYXBlOjdweDstLW1kYy1zd2l0Y2gtdHJhY2std2lkdGg6MzZweDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1pY29uLXNpemU6MThweDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMDQ7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wNDstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xOy0tbWF0LXN3aXRjaC1kaXNhYmxlZC1zZWxlY3RlZC1oYW5kbGUtb3BhY2l0eTowLjM4Oy0tbWF0LXN3aXRjaC1kaXNhYmxlZC11bnNlbGVjdGVkLWhhbmRsZS1vcGFjaXR5OjAuMzg7LS1tYXQtc3dpdGNoLXVuc2VsZWN0ZWQtaGFuZGxlLXNpemU6MjBweDstLW1hdC1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLXNpemU6MjBweDstLW1hdC1zd2l0Y2gtcHJlc3NlZC1oYW5kbGUtc2l6ZToyMHB4Oy0tbWF0LXN3aXRjaC13aXRoLWljb24taGFuZGxlLXNpemU6MjBweDstLW1hdC1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWhvcml6b250YWwtbWFyZ2luOjA7LS1tYXQtc3dpdGNoLXNlbGVjdGVkLXdpdGgtaWNvbi1oYW5kbGUtaG9yaXpvbnRhbC1tYXJnaW46MDstLW1hdC1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtaG9yaXpvbnRhbC1tYXJnaW46MDstLW1hdC1zd2l0Y2gtdW5zZWxlY3RlZC1oYW5kbGUtaG9yaXpvbnRhbC1tYXJnaW46MDstLW1hdC1zd2l0Y2gtdW5zZWxlY3RlZC13aXRoLWljb24taGFuZGxlLWhvcml6b250YWwtbWFyZ2luOjA7LS1tYXQtc3dpdGNoLXVuc2VsZWN0ZWQtcHJlc3NlZC1oYW5kbGUtaG9yaXpvbnRhbC1tYXJnaW46MDstLW1hdC1zd2l0Y2gtdmlzaWJsZS10cmFjay1vcGFjaXR5OjE7LS1tYXQtc3dpdGNoLWhpZGRlbi10cmFjay1vcGFjaXR5OjE7LS1tYXQtc3dpdGNoLXZpc2libGUtdHJhY2stdHJhbnNpdGlvbjp0cmFuc2Zvcm0gNzVtcyAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSk7LS1tYXQtc3dpdGNoLWhpZGRlbi10cmFjay10cmFuc2l0aW9uOnRyYW5zZm9ybSA3NW1zIDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpOy0tbWF0LXN3aXRjaC10cmFjay1vdXRsaW5lLXdpZHRoOjFweDstLW1hdC1zd2l0Y2gtdHJhY2stb3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudDstLW1hdC1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stb3V0bGluZS13aWR0aDoxcHg7LS1tYXQtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtdHJhY2stb3V0bGluZS13aWR0aDoxcHg7LS1tYXQtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtdHJhY2stb3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudH1odG1sey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojMzk0OWFiOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6IzM5NDlhYjstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6IzM5NDlhYjstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojMzk0OWFiOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6IzFhMjM3ZTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiMxYTIzN2U7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiMxYTIzN2U7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiM3OTg2Y2I7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiM3OTg2Y2I7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6Izc5ODZjYjstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6Izc5ODZjYjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM0MjQyNDI7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtc2VsZWN0ZWQtdHJhY2stY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1oYW5kbGUtY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOiNmZmY7LS1tZGMtc3dpdGNoLWRpc2FibGVkLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtaGFuZGxlLXN1cmZhY2UtY29sb3I6dmFyKC0tbWRjLXRoZW1lLXN1cmZhY2UsICNmZmYpOy0tbWRjLXN3aXRjaC1oYW5kbGUtZWxldmF0aW9uLXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXN3aXRjaC1oYW5kbGUtc2hhZG93LWNvbG9yOmJsYWNrOy0tbWRjLXN3aXRjaC1kaXNhYmxlZC1oYW5kbGUtZWxldmF0aW9uLXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6IzIxMjEyMTstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojNDI0MjQyOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiM2MTYxNjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiMyMTIxMjE7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZTBlMGUwOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLWljb24tY29sb3I6I2ZmZjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojMjEyMTIxOy0tbWRjLXN3aXRjaC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6IzQyNDI0MjstLW1kYy1zd2l0Y2gtdW5zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlMGUwZTA7LS1tZGMtc3dpdGNoLXVuc2VsZWN0ZWQtdHJhY2stY29sb3I6I2UwZTBlMDstLW1kYy1zd2l0Y2gtZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjM4KX1odG1sIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZXstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX1odG1sIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtYWNjZW50ey0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZDgxYjYwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1oYW5kbGUtY29sb3I6I2Q4MWI2MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2Q4MWI2MDstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZDgxYjYwOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy1oYW5kbGUtY29sb3I6Izg4MGU0ZjstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaG92ZXItaGFuZGxlLWNvbG9yOiM4ODBlNGY7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtaGFuZGxlLWNvbG9yOiM4ODBlNGY7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWZvY3VzLXRyYWNrLWNvbG9yOiNmMDYyOTI7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXRyYWNrLWNvbG9yOiNmMDYyOTI7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtdHJhY2stY29sb3I6I2YwNjI5MjstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtdHJhY2stY29sb3I6I2YwNjI5Mn1odG1sIC5tYXQtbWRjLXNsaWRlLXRvZ2dsZS5tYXQtd2FybnstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtaGFuZGxlLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNlNTM5MzU7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2U1MzkzNTstLW1kYy1zd2l0Y2gtc2VsZWN0ZWQtZm9jdXMtaGFuZGxlLWNvbG9yOiNiNzFjMWM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLWhvdmVyLWhhbmRsZS1jb2xvcjojYjcxYzFjOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLWhhbmRsZS1jb2xvcjojYjcxYzFjOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1mb2N1cy10cmFjay1jb2xvcjojZTU3MzczOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1ob3Zlci10cmFjay1jb2xvcjojZTU3MzczOy0tbWRjLXN3aXRjaC1zZWxlY3RlZC1wcmVzc2VkLXRyYWNrLWNvbG9yOiNlNTczNzM7LS1tZGMtc3dpdGNoLXNlbGVjdGVkLXRyYWNrLWNvbG9yOiNlNTczNzN9aHRtbHstLW1kYy1zd2l0Y2gtc3RhdGUtbGF5ZXItc2l6ZTo0MHB4fWh0bWwgLm1hdC1tZGMtc2xpZGUtdG9nZ2xley0tbWRjLWZvcm0tZmllbGQtbGFiZWwtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLWZvcm0tZmllbGQtbGFiZWwtdGV4dC10cmFja2luZzowLjAxNzg1NzE0MjllbTstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtd2VpZ2h0OjQwMH1odG1sey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tb3BhY2l0eTowLjM4Oy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1vcGFjaXR5OjAuMzg7LS1tZGMtcmFkaW8tc3RhdGUtbGF5ZXItc2l6ZTo0MHB4fS5tYXQtbWRjLXJhZGlvLWJ1dHRvbnstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpibGFjazstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6YmxhY2s7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMzZjUxYjU7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojM2Y1MWI1Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6IzNmNTFiNTstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6IzNmNTFiNTstLW1hdC1yYWRpby1yaXBwbGUtY29sb3I6YmxhY2s7LS1tYXQtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6IzNmNTFiNTstLW1hdC1yYWRpby1kaXNhYmxlZC1sYWJlbC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50ey0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6YmxhY2s7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY0MDgxOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmNDA4MTstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjQwODE7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjQwODE7LS1tYXQtcmFkaW8tcmlwcGxlLWNvbG9yOmJsYWNrOy0tbWF0LXJhZGlvLWNoZWNrZWQtcmlwcGxlLWNvbG9yOiNmZjQwODE7LS1tYXQtcmFkaW8tZGlzYWJsZWQtbGFiZWwtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KX0ubWF0LW1kYy1yYWRpby1idXR0b24ubWF0LXdhcm57LS1tZGMtcmFkaW8tZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpibGFjazstLW1kYy1yYWRpby1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6YmxhY2s7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1hdC1yYWRpby1yaXBwbGUtY29sb3I6YmxhY2s7LS1tYXQtcmFkaW8tY2hlY2tlZC1yaXBwbGUtY29sb3I6I2Y0NDMzNjstLW1hdC1yYWRpby1kaXNhYmxlZC1sYWJlbC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfWh0bWx7LS1tZGMtcmFkaW8tc3RhdGUtbGF5ZXItc2l6ZTo0MHB4Oy0tbWF0LXJhZGlvLXRvdWNoLXRhcmdldC1kaXNwbGF5OmJsb2NrfS5tYXQtbWRjLXJhZGlvLWJ1dHRvbnstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtZm9ybS1maWVsZC1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tZGMtZm9ybS1maWVsZC1sYWJlbC10ZXh0LXNpemU6MTRweDstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMTc4NTcxNDI5ZW07LS1tZGMtZm9ybS1maWVsZC1sYWJlbC10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1hdC1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLXdpZHRoOmF1dG87LS1tYXQtc2xpZGVyLXZhbHVlLWluZGljYXRvci1oZWlnaHQ6MzJweDstLW1hdC1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLWNhcmV0LWRpc3BsYXk6YmxvY2s7LS1tYXQtc2xpZGVyLXZhbHVlLWluZGljYXRvci1ib3JkZXItcmFkaXVzOjRweDstLW1hdC1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLXBhZGRpbmc6MCAxMnB4Oy0tbWF0LXNsaWRlci12YWx1ZS1pbmRpY2F0b3ItdGV4dC10cmFuc2Zvcm06bm9uZTstLW1hdC1zbGlkZXItdmFsdWUtaW5kaWNhdG9yLWNvbnRhaW5lci10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTstLW1kYy1zbGlkZXItYWN0aXZlLXRyYWNrLWhlaWdodDo2cHg7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1zaGFwZTo5OTk5cHg7LS1tZGMtc2xpZGVyLWhhbmRsZS1oZWlnaHQ6MjBweDstLW1kYy1zbGlkZXItaGFuZGxlLXNoYXBlOjUwJTstLW1kYy1zbGlkZXItaGFuZGxlLXdpZHRoOjIwcHg7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLWhlaWdodDo0cHg7LS1tZGMtc2xpZGVyLWluYWN0aXZlLXRyYWNrLXNoYXBlOjk5OTlweDstLW1kYy1zbGlkZXItd2l0aC1vdmVybGFwLWhhbmRsZS1vdXRsaW5lLXdpZHRoOjFweDstLW1kYy1zbGlkZXItd2l0aC10aWNrLW1hcmtzLWFjdGl2ZS1jb250YWluZXItb3BhY2l0eTowLjY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1jb250YWluZXItc2hhcGU6NTAlOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtY29udGFpbmVyLXNpemU6MnB4Oy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLW9wYWNpdHk6MC42fWh0bWx7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojM2Y1MWI1Oy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6IzNmNTFiNTstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiMzZjUxYjU7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojM2Y1MWI1Oy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojM2Y1MWI1Oy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiMzZjUxYjU7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWRjLXNsaWRlci1kaXNhYmxlZC1hY3RpdmUtdHJhY2stY29sb3I6IzAwMDstLW1kYy1zbGlkZXItZGlzYWJsZWQtaGFuZGxlLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLWRpc2FibGVkLWluYWN0aXZlLXRyYWNrLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLWxhYmVsLWNvbnRhaW5lci1jb2xvcjojMDAwOy0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LWNvbG9yOiNmZmY7LS1tZGMtc2xpZGVyLXdpdGgtb3ZlcmxhcC1oYW5kbGUtb3V0bGluZS1jb2xvcjojZmZmOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOiMwMDA7LS1tZGMtc2xpZGVyLWhhbmRsZS1lbGV2YXRpb246MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1hdC1zbGlkZXItcmlwcGxlLWNvbG9yOiMzZjUxYjU7LS1tYXQtc2xpZGVyLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoNjMsIDgxLCAxODEsIDAuMDUpOy0tbWF0LXNsaWRlci1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpyZ2JhKDYzLCA4MSwgMTgxLCAwLjIpOy0tbWF0LXNsaWRlci12YWx1ZS1pbmRpY2F0b3Itb3BhY2l0eTowLjZ9aHRtbCAubWF0LWFjY2VudHstLW1hdC1zbGlkZXItcmlwcGxlLWNvbG9yOiNmZjQwODE7LS1tYXQtc2xpZGVyLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjA1KTstLW1hdC1zbGlkZXItZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgyNTUsIDY0LCAxMjksIDAuMik7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZmY0MDgxOy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2ZmNDA4MTstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmZjQwODE7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZmY0MDgxOy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZmY0MDgxOy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmZjQwODE7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOndoaXRlfWh0bWwgLm1hdC13YXJuey0tbWF0LXNsaWRlci1yaXBwbGUtY29sb3I6I2Y0NDMzNjstLW1hdC1zbGlkZXItaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4wNSk7LS1tYXQtc2xpZGVyLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMik7LS1tZGMtc2xpZGVyLWhhbmRsZS1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1mb2N1cy1oYW5kbGUtY29sb3I6I2Y0NDMzNjstLW1kYy1zbGlkZXItaG92ZXItaGFuZGxlLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLWFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci1pbmFjdGl2ZS10cmFjay1jb2xvcjojZjQ0MzM2Oy0tbWRjLXNsaWRlci13aXRoLXRpY2stbWFya3MtaW5hY3RpdmUtY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtc2xpZGVyLXdpdGgtdGljay1tYXJrcy1hY3RpdmUtY29udGFpbmVyLWNvbG9yOndoaXRlfWh0bWx7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXNsaWRlci1sYWJlbC1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIycHg7LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMDcxNDI4NTcxZW07LS1tZGMtc2xpZGVyLWxhYmVsLWxhYmVsLXRleHQtd2VpZ2h0OjUwMH1odG1sey0tbWF0LW1lbnUtY29udGFpbmVyLXNoYXBlOjRweDstLW1hdC1tZW51LWRpdmlkZXItYm90dG9tLXNwYWNpbmc6MDstLW1hdC1tZW51LWRpdmlkZXItdG9wLXNwYWNpbmc6MDstLW1hdC1tZW51LWl0ZW0tc3BhY2luZzoxNnB4Oy0tbWF0LW1lbnUtaXRlbS1pY29uLXNpemU6MjRweDstLW1hdC1tZW51LWl0ZW0tbGVhZGluZy1zcGFjaW5nOjE2cHg7LS1tYXQtbWVudS1pdGVtLXRyYWlsaW5nLXNwYWNpbmc6MTZweDstLW1hdC1tZW51LWl0ZW0td2l0aC1pY29uLWxlYWRpbmctc3BhY2luZzoxNnB4Oy0tbWF0LW1lbnUtaXRlbS13aXRoLWljb24tdHJhaWxpbmctc3BhY2luZzoxNnB4fWh0bWx7LS1tYXQtbWVudS1pdGVtLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1tZW51LWl0ZW0taWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LW1lbnUtaXRlbS1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDQpOy0tbWF0LW1lbnUtaXRlbS1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDQpOy0tbWF0LW1lbnUtY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWF0LW1lbnUtZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfWh0bWx7LS1tYXQtbWVudS1pdGVtLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtbWVudS1pdGVtLWxhYmVsLXRleHQtc2l6ZToxNnB4Oy0tbWF0LW1lbnUtaXRlbS1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDMxMjVlbTstLW1hdC1tZW51LWl0ZW0tbGFiZWwtdGV4dC1saW5lLWhlaWdodDoyNHB4Oy0tbWF0LW1lbnUtaXRlbS1sYWJlbC10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1kYy1saXN0LWxpc3QtaXRlbS1jb250YWluZXItc2hhcGU6MDstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWF2YXRhci1zaGFwZTo1MCU7LS1tZGMtbGlzdC1saXN0LWl0ZW0tY29udGFpbmVyLWNvbG9yOnRyYW5zcGFyZW50Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXNlbGVjdGVkLWNvbnRhaW5lci1jb2xvcjp0cmFuc3BhcmVudDstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWF2YXRhci1jb2xvcjp0cmFuc3BhcmVudDstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWljb24tc2l6ZToyNHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctYXZhdGFyLXNpemU6NDBweDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLXNpemU6MjRweDstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1zdGF0ZS1sYXllci1jb2xvcjp0cmFuc3BhcmVudDstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC1zdGF0ZS1sYXllci1vcGFjaXR5OjA7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGFiZWwtdGV4dC1vcGFjaXR5OjAuMzg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGVhZGluZy1pY29uLW9wYWNpdHk6MC4zODstLW1kYy1saXN0LWxpc3QtaXRlbS1kaXNhYmxlZC10cmFpbGluZy1pY29uLW9wYWNpdHk6MC4zODstLW1hdC1saXN0LWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6dHJhbnNwYXJlbnQ7LS1tYXQtbGlzdC1hY3RpdmUtaW5kaWNhdG9yLXNoYXBlOjRweH1odG1sey0tbWRjLWxpc3QtbGlzdC1pdGVtLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1kYy1saXN0LWxpc3QtaXRlbS1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1saXN0LWxpc3QtaXRlbS1sZWFkaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtbGlzdC1saXN0LWl0ZW0tc2VsZWN0ZWQtdHJhaWxpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0tZGlzYWJsZWQtbGVhZGluZy1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWRpc2FibGVkLXRyYWlsaW5nLWljb24tY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLWxlYWRpbmctaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWhvdmVyLXRyYWlsaW5nLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1saXN0LWxpc3QtaXRlbS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtbGlzdC1saXN0LWl0ZW0taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMn0ubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpibGFjazstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzNmNTFiNTstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMzZjUxYjU7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojM2Y1MWI1Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojM2Y1MWI1fS5tYXQtYWNjZW50IC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LWFjY2VudCAubWRjLWxpc3QtaXRlbV9fZW5key0tbWRjLXJhZGlvLWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6YmxhY2s7LS1tZGMtcmFkaW8tZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZmY0MDgxOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2ZmNDA4MTstLW1kYy1yYWRpby1zZWxlY3RlZC1pY29uLWNvbG9yOiNmZjQwODE7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmZjQwODF9Lm1hdC13YXJuIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LXdhcm4gLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOmJsYWNrOy0tbWRjLXJhZGlvLWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpibGFjazstLW1kYy1yYWRpby11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1yYWRpby11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1yYWRpby11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLXJhZGlvLXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1yYWRpby1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtcmFkaW8tc2VsZWN0ZWQtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLXJhZGlvLXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZjQ0MzM2fS5tYXQtbWRjLWxpc3Qtb3B0aW9uey0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6d2hpdGU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzNmNTFiNTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2t9Lm1hdC1tZGMtbGlzdC1vcHRpb24ubWF0LWFjY2VudHstLW1kYy1jaGVja2JveC1kaXNhYmxlZC1zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOndoaXRlOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6I2ZmNDA4MTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiNmZjQwODE7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaWNvbi1jb2xvcjojZmY0MDgxOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjojZmY0MDgxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojMjEyMTIxOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6I2ZmNDA4MTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjojZmY0MDgxOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6I2ZmNDA4MTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrfS5tYXQtbWRjLWxpc3Qtb3B0aW9uLm1hdC13YXJuey0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6d2hpdGU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2t9Lm1hdC1tZGMtbGlzdC1iYXNlLm1hdC1tZGMtbGlzdC1iYXNlIC5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0LC5tYXQtbWRjLWxpc3QtYmFzZS5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tYWN0aXZhdGVkIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHR7Y29sb3I6IzNmNTFiNX0ubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LWJhc2UubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWFjdGl2YXRlZC5tZGMtbGlzdC1pdGVtLS13aXRoLWxlYWRpbmctaWNvbiAubWRjLWxpc3QtaXRlbV9fc3RhcnR7Y29sb3I6IzNmNTFiNX0ubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19zdGFydCwubWF0LW1kYy1saXN0LWJhc2UgLm1kYy1saXN0LWl0ZW0tLWRpc2FibGVkIC5tZGMtbGlzdC1pdGVtX19jb250ZW50LC5tYXQtbWRjLWxpc3QtYmFzZSAubWRjLWxpc3QtaXRlbS0tZGlzYWJsZWQgLm1kYy1saXN0LWl0ZW1fX2VuZHtvcGFjaXR5OjF9aHRtbHstLW1kYy1saXN0LWxpc3QtaXRlbS1vbmUtbGluZS1jb250YWluZXItaGVpZ2h0OjQ4cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tdHdvLWxpbmUtY29udGFpbmVyLWhlaWdodDo2NHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRocmVlLWxpbmUtY29udGFpbmVyLWhlaWdodDo4OHB4Oy0tbWF0LWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1zdGFydC1zcGFjZToxNnB4Oy0tbWF0LWxpc3QtbGlzdC1pdGVtLWxlYWRpbmctaWNvbi1lbmQtc3BhY2U6MzJweH0ubWRjLWxpc3QtaXRlbV9fc3RhcnQsLm1kYy1saXN0LWl0ZW1fX2VuZHstLW1kYy1yYWRpby1zdGF0ZS1sYXllci1zaXplOjQwcHh9Lm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC1vbmUtbGluZSwubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWNoZWNrYm94Lm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmUsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1pY29uLm1kYy1saXN0LWl0ZW0tLXdpdGgtb25lLWxpbmV7aGVpZ2h0OjU2cHh9Lm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1hdmF0YXIubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXMsLm1hdC1tZGMtbGlzdC1pdGVtLm1kYy1saXN0LWl0ZW0tLXdpdGgtbGVhZGluZy1jaGVja2JveC5tZGMtbGlzdC1pdGVtLS13aXRoLXR3by1saW5lcywubWF0LW1kYy1saXN0LWl0ZW0ubWRjLWxpc3QtaXRlbS0td2l0aC1sZWFkaW5nLWljb24ubWRjLWxpc3QtaXRlbS0td2l0aC10d28tbGluZXN7aGVpZ2h0OjcycHh9aHRtbHstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWxpc3QtbGlzdC1pdGVtLWxhYmVsLXRleHQtbGluZS1oZWlnaHQ6MjRweDstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LXNpemU6MTZweDstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDMxMjVlbTstLW1kYy1saXN0LWxpc3QtaXRlbS1sYWJlbC10ZXh0LXdlaWdodDo0MDA7LS1tZGMtbGlzdC1saXN0LWl0ZW0tc3VwcG9ydGluZy10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1saW5lLWhlaWdodDoyMHB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC1zaXplOjE0cHg7LS1tZGMtbGlzdC1saXN0LWl0ZW0tc3VwcG9ydGluZy10ZXh0LXRyYWNraW5nOjAuMDE3ODU3MTQyOWVtOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtc2l6ZToxMnB4Oy0tbWRjLWxpc3QtbGlzdC1pdGVtLXRyYWlsaW5nLXN1cHBvcnRpbmctdGV4dC10cmFja2luZzowLjAzMzMzMzMzMzNlbTstLW1kYy1saXN0LWxpc3QtaXRlbS10cmFpbGluZy1zdXBwb3J0aW5nLXRleHQtd2VpZ2h0OjQwMH0ubWRjLWxpc3QtZ3JvdXBfX3N1YmhlYWRlcntmb250OjQwMCAxNnB4LzI4cHggUm9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMDkzNzVlbX1odG1sey0tbWF0LXBhZ2luYXRvci1jb250YWluZXItdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LXBhZ2luYXRvci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1wYWdpbmF0b3ItZW5hYmxlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtcGFnaW5hdG9yLWRpc2FibGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX1odG1sey0tbWF0LXBhZ2luYXRvci1jb250YWluZXItc2l6ZTo1NnB4Oy0tbWF0LXBhZ2luYXRvci1mb3JtLWZpZWxkLWNvbnRhaW5lci1oZWlnaHQ6NDBweDstLW1hdC1wYWdpbmF0b3ItZm9ybS1maWVsZC1jb250YWluZXItdmVydGljYWwtcGFkZGluZzo4cHh9aHRtbHstLW1hdC1wYWdpbmF0b3ItY29udGFpbmVyLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtcGFnaW5hdG9yLWNvbnRhaW5lci10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tYXQtcGFnaW5hdG9yLWNvbnRhaW5lci10ZXh0LXNpemU6MTJweDstLW1hdC1wYWdpbmF0b3ItY29udGFpbmVyLXRleHQtdHJhY2tpbmc6MC4wMzMzMzMzMzMzZW07LS1tYXQtcGFnaW5hdG9yLWNvbnRhaW5lci10ZXh0LXdlaWdodDo0MDA7LS1tYXQtcGFnaW5hdG9yLXNlbGVjdC10cmlnZ2VyLXRleHQtc2l6ZToxMnB4fWh0bWx7LS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLWhlaWdodDoycHg7LS1tZGMtdGFiLWluZGljYXRvci1hY3RpdmUtaW5kaWNhdG9yLXNoYXBlOjA7LS1tZGMtc2Vjb25kYXJ5LW5hdmlnYXRpb24tdGFiLWNvbnRhaW5lci1oZWlnaHQ6NDhweDstLW1hdC10YWItaGVhZGVyLWRpdmlkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1tYXQtdGFiLWhlYWRlci1kaXZpZGVyLWhlaWdodDowfS5tYXQtbWRjLXRhYi1ncm91cCwubWF0LW1kYy10YWItbmF2LWJhcnstLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6IzNmNTFiNTstLW1hdC10YWItaGVhZGVyLWRpc2FibGVkLXJpcHBsZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1pY29uLWNvbG9yOmJsYWNrOy0tbWF0LXRhYi1oZWFkZXItaW5hY3RpdmUtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNik7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtbGFiZWwtdGV4dC1jb2xvcjojM2Y1MWI1Oy0tbWF0LXRhYi1oZWFkZXItYWN0aXZlLXJpcHBsZS1jb2xvcjojM2Y1MWI1Oy0tbWF0LXRhYi1oZWFkZXItaW5hY3RpdmUtcmlwcGxlLWNvbG9yOiMzZjUxYjU7LS1tYXQtdGFiLWhlYWRlci1pbmFjdGl2ZS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KTstLW1hdC10YWItaGVhZGVyLWluYWN0aXZlLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWF0LXRhYi1oZWFkZXItYWN0aXZlLWZvY3VzLWxhYmVsLXRleHQtY29sb3I6IzNmNTFiNTstLW1hdC10YWItaGVhZGVyLWFjdGl2ZS1ob3Zlci1sYWJlbC10ZXh0LWNvbG9yOiMzZjUxYjU7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtZm9jdXMtaW5kaWNhdG9yLWNvbG9yOiMzZjUxYjU7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtaG92ZXItaW5kaWNhdG9yLWNvbG9yOiMzZjUxYjV9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC1hY2NlbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWFjY2VudHstLW1kYy10YWItaW5kaWNhdG9yLWFjdGl2ZS1pbmRpY2F0b3ItY29sb3I6I2ZmNDA4MTstLW1hdC10YWItaGVhZGVyLWRpc2FibGVkLXJpcHBsZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1pY29uLWNvbG9yOmJsYWNrOy0tbWF0LXRhYi1oZWFkZXItaW5hY3RpdmUtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNik7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtbGFiZWwtdGV4dC1jb2xvcjojZmY0MDgxOy0tbWF0LXRhYi1oZWFkZXItYWN0aXZlLXJpcHBsZS1jb2xvcjojZmY0MDgxOy0tbWF0LXRhYi1oZWFkZXItaW5hY3RpdmUtcmlwcGxlLWNvbG9yOiNmZjQwODE7LS1tYXQtdGFiLWhlYWRlci1pbmFjdGl2ZS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KTstLW1hdC10YWItaGVhZGVyLWluYWN0aXZlLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWF0LXRhYi1oZWFkZXItYWN0aXZlLWZvY3VzLWxhYmVsLXRleHQtY29sb3I6I2ZmNDA4MTstLW1hdC10YWItaGVhZGVyLWFjdGl2ZS1ob3Zlci1sYWJlbC10ZXh0LWNvbG9yOiNmZjQwODE7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtZm9jdXMtaW5kaWNhdG9yLWNvbG9yOiNmZjQwODE7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtaG92ZXItaW5kaWNhdG9yLWNvbG9yOiNmZjQwODF9Lm1hdC1tZGMtdGFiLWdyb3VwLm1hdC13YXJuLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC13YXJuey0tbWRjLXRhYi1pbmRpY2F0b3ItYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2Oy0tbWF0LXRhYi1oZWFkZXItZGlzYWJsZWQtcmlwcGxlLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWljb24tY29sb3I6YmxhY2s7LS1tYXQtdGFiLWhlYWRlci1pbmFjdGl2ZS1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KTstLW1hdC10YWItaGVhZGVyLWFjdGl2ZS1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtcmlwcGxlLWNvbG9yOiNmNDQzMzY7LS1tYXQtdGFiLWhlYWRlci1pbmFjdGl2ZS1yaXBwbGUtY29sb3I6I2Y0NDMzNjstLW1hdC10YWItaGVhZGVyLWluYWN0aXZlLWZvY3VzLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjYpOy0tbWF0LXRhYi1oZWFkZXItaW5hY3RpdmUtaG92ZXItbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNik7LS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtZm9jdXMtbGFiZWwtdGV4dC1jb2xvcjojZjQ0MzM2Oy0tbWF0LXRhYi1oZWFkZXItYWN0aXZlLWhvdmVyLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNjstLW1hdC10YWItaGVhZGVyLWFjdGl2ZS1mb2N1cy1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNjstLW1hdC10YWItaGVhZGVyLWFjdGl2ZS1ob3Zlci1pbmRpY2F0b3ItY29sb3I6I2Y0NDMzNn0ubWF0LW1kYy10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSwubWF0LW1kYy10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5ey0tbWF0LXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6IzNmNTFiNTstLW1hdC10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQsLm1hdC1tZGMtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50ey0tbWF0LXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWJhY2tncm91bmQtY29sb3I6I2ZmNDA4MTstLW1hdC10YWItaGVhZGVyLXdpdGgtYmFja2dyb3VuZC1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlfS5tYXQtbWRjLXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuLC5tYXQtbWRjLXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm57LS1tYXQtdGFiLWhlYWRlci13aXRoLWJhY2tncm91bmQtYmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2Oy0tbWF0LXRhYi1oZWFkZXItd2l0aC1iYWNrZ3JvdW5kLWZvcmVncm91bmQtY29sb3I6d2hpdGV9Lm1hdC1tZGMtdGFiLWhlYWRlcnstLW1kYy1zZWNvbmRhcnktbmF2aWdhdGlvbi10YWItY29udGFpbmVyLWhlaWdodDo0OHB4fS5tYXQtbWRjLXRhYi1oZWFkZXJ7LS1tYXQtdGFiLWhlYWRlci1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LXRhYi1oZWFkZXItbGFiZWwtdGV4dC1zaXplOjE0cHg7LS1tYXQtdGFiLWhlYWRlci1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDg5Mjg1NzE0M2VtOy0tbWF0LXRhYi1oZWFkZXItbGFiZWwtdGV4dC1saW5lLWhlaWdodDozNnB4Oy0tbWF0LXRhYi1oZWFkZXItbGFiZWwtdGV4dC13ZWlnaHQ6NTAwfWh0bWx7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtY2hlY2ttYXJrLWNvbG9yOiNmZmY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjE2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wNDstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wNDstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjE2fWh0bWx7LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjp3aGl0ZTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmZjQwODE7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZmY0MDgxOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2ZmNDA4MTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2ZmNDA4MTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmZjQwODE7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2ZmNDA4MTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmZjQwODE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1hdC1jaGVja2JveC1kaXNhYmxlZC1sYWJlbC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpfS5tYXQtbWRjLWNoZWNrYm94ey0tbWRjLWZvcm0tZmllbGQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tYXQtbWRjLWNoZWNrYm94Lm1hdC1wcmltYXJ5ey0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1kaXNhYmxlZC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1jaGVja21hcmstY29sb3I6d2hpdGU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtZm9jdXMtaWNvbi1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzNmNTFiNTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1pY29uLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1pY29uLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1pY29uLWNvbG9yOiMyMTIxMjE7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOiMzZjUxYjU7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjojM2Y1MWI1Oy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2t9Lm1hdC1tZGMtY2hlY2tib3gubWF0LXdhcm57LS1tZGMtY2hlY2tib3gtZGlzYWJsZWQtc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LWRpc2FibGVkLXVuc2VsZWN0ZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWNoZWNrbWFyay1jb2xvcjp3aGl0ZTstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1mb2N1cy1pY29uLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItaWNvbi1jb2xvcjojZjQ0MzM2Oy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLWljb24tY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWZvY3VzLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLWljb24tY29sb3I6IzIxMjEyMTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLXByZXNzZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWRjLWNoZWNrYm94LXNlbGVjdGVkLWZvY3VzLXN0YXRlLWxheWVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtc2VsZWN0ZWQtaG92ZXItc3RhdGUtbGF5ZXItY29sb3I6I2Y0NDMzNjstLW1kYy1jaGVja2JveC1zZWxlY3RlZC1wcmVzc2VkLXN0YXRlLWxheWVyLWNvbG9yOiNmNDQzMzY7LS1tZGMtY2hlY2tib3gtdW5zZWxlY3RlZC1mb2N1cy1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1kYy1jaGVja2JveC11bnNlbGVjdGVkLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWRjLWNoZWNrYm94LXVuc2VsZWN0ZWQtcHJlc3NlZC1zdGF0ZS1sYXllci1jb2xvcjpibGFja31odG1sey0tbWRjLWNoZWNrYm94LXN0YXRlLWxheWVyLXNpemU6NDBweDstLW1hdC1jaGVja2JveC10b3VjaC10YXJnZXQtZGlzcGxheTpibG9ja30ubWF0LW1kYy1jaGVja2JveHstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtZm9ybS1maWVsZC1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tZGMtZm9ybS1maWVsZC1sYWJlbC10ZXh0LXNpemU6MTRweDstLW1kYy1mb3JtLWZpZWxkLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMTc4NTcxNDI5ZW07LS1tZGMtZm9ybS1maWVsZC1sYWJlbC10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1kYy10ZXh0LWJ1dHRvbi1jb250YWluZXItc2hhcGU6NHB4Oy0tbWRjLXRleHQtYnV0dG9uLWtlZXAtdG91Y2gtdGFyZ2V0OmZhbHNlOy0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLXNoYXBlOjRweDstLW1kYy1maWxsZWQtYnV0dG9uLWtlZXAtdG91Y2gtdGFyZ2V0OmZhbHNlOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLXNoYXBlOjRweDstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWtlZXAtdG91Y2gtdGFyZ2V0OmZhbHNlOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1rZWVwLXRvdWNoLXRhcmdldDpmYWxzZTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS13aWR0aDoxcHg7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFwZTo0cHg7LS1tYXQtdGV4dC1idXR0b24taG9yaXpvbnRhbC1wYWRkaW5nOjhweDstLW1hdC10ZXh0LWJ1dHRvbi13aXRoLWljb24taG9yaXpvbnRhbC1wYWRkaW5nOjhweDstLW1hdC10ZXh0LWJ1dHRvbi1pY29uLXNwYWNpbmc6OHB4Oy0tbWF0LXRleHQtYnV0dG9uLWljb24tb2Zmc2V0OjA7LS1tYXQtZmlsbGVkLWJ1dHRvbi1ob3Jpem9udGFsLXBhZGRpbmc6MTZweDstLW1hdC1maWxsZWQtYnV0dG9uLWljb24tc3BhY2luZzo4cHg7LS1tYXQtZmlsbGVkLWJ1dHRvbi1pY29uLW9mZnNldDotNHB4Oy0tbWF0LXByb3RlY3RlZC1idXR0b24taG9yaXpvbnRhbC1wYWRkaW5nOjE2cHg7LS1tYXQtcHJvdGVjdGVkLWJ1dHRvbi1pY29uLXNwYWNpbmc6OHB4Oy0tbWF0LXByb3RlY3RlZC1idXR0b24taWNvbi1vZmZzZXQ6LTRweDstLW1hdC1vdXRsaW5lZC1idXR0b24taG9yaXpvbnRhbC1wYWRkaW5nOjE1cHg7LS1tYXQtb3V0bGluZWQtYnV0dG9uLWljb24tc3BhY2luZzo4cHg7LS1tYXQtb3V0bGluZWQtYnV0dG9uLWljb24tb2Zmc2V0Oi00cHh9aHRtbHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOmJsYWNrOy0tbWRjLXRleHQtYnV0dG9uLWRpc2FibGVkLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjM4KTstLW1hdC10ZXh0LWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1hdC10ZXh0LWJ1dHRvbi1kaXNhYmxlZC1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1hdC10ZXh0LWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEpOy0tbWF0LXRleHQtYnV0dG9uLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wNDstLW1hdC10ZXh0LWJ1dHRvbi1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tYXQtdGV4dC1idXR0b24tcHJlc3NlZC1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6d2hpdGU7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOmJsYWNrOy0tbWRjLWZpbGxlZC1idXR0b24tZGlzYWJsZWQtY29udGFpbmVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmlsbGVkLWJ1dHRvbi1kaXNhYmxlZC1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtZmlsbGVkLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1hdC1maWxsZWQtYnV0dG9uLWRpc2FibGVkLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LWZpbGxlZC1idXR0b24tcmlwcGxlLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xKTstLW1hdC1maWxsZWQtYnV0dG9uLWhvdmVyLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4wNDstLW1hdC1maWxsZWQtYnV0dG9uLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1hdC1maWxsZWQtYnV0dG9uLXByZXNzZWQtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjpibGFjazstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWVsZXZhdGlvbi1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWRpc2FibGVkLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWZvY3VzLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLXByb3RlY3RlZC1idXR0b24taG92ZXItY29udGFpbmVyLWVsZXZhdGlvbi1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1wcmVzc2VkLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1zaGFkb3ctY29sb3I6IzAwMDstLW1hdC1wcm90ZWN0ZWQtYnV0dG9uLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LXByb3RlY3RlZC1idXR0b24tZGlzYWJsZWQtc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tYXQtcHJvdGVjdGVkLWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEpOy0tbWF0LXByb3RlY3RlZC1idXR0b24taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWF0LXByb3RlY3RlZC1idXR0b24tZm9jdXMtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWF0LXByb3RlY3RlZC1idXR0b24tcHJlc3NlZC1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWRpc2FibGVkLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1vdXRsaW5lZC1idXR0b24tZGlzYWJsZWQtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOmJsYWNrOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tYXQtb3V0bGluZWQtYnV0dG9uLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LW91dGxpbmVkLWJ1dHRvbi1kaXNhYmxlZC1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1hdC1vdXRsaW5lZC1idXR0b24tcmlwcGxlLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xKTstLW1hdC1vdXRsaW5lZC1idXR0b24taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWF0LW91dGxpbmVkLWJ1dHRvbi1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tYXQtb3V0bGluZWQtYnV0dG9uLXByZXNzZWQtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyfS5tYXQtbWRjLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiMzZjUxYjU7LS1tYXQtdGV4dC1idXR0b24tc3RhdGUtbGF5ZXItY29sb3I6IzNmNTFiNTstLW1hdC10ZXh0LWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSg2MywgODEsIDE4MSwgMC4xKX0ubWF0LW1kYy1idXR0b24ubWF0LWFjY2VudHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOiNmZjQwODE7LS1tYXQtdGV4dC1idXR0b24tc3RhdGUtbGF5ZXItY29sb3I6I2ZmNDA4MTstLW1hdC10ZXh0LWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgyNTUsIDY0LCAxMjksIDAuMSl9Lm1hdC1tZGMtYnV0dG9uLm1hdC13YXJuey0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNjstLW1hdC10ZXh0LWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjojZjQ0MzM2Oy0tbWF0LXRleHQtYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjEpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWZpbGxlZC1idXR0b24tY29udGFpbmVyLWNvbG9yOiMzZjUxYjU7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWNvbG9yOndoaXRlOy0tbWF0LWZpbGxlZC1idXR0b24tc3RhdGUtbGF5ZXItY29sb3I6d2hpdGU7LS1tYXQtZmlsbGVkLWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfS5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmNDA4MTstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tYXQtZmlsbGVkLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1hdC1maWxsZWQtYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1tZGMtdW5lbGV2YXRlZC1idXR0b24ubWF0LXdhcm57LS1tZGMtZmlsbGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1kYy1maWxsZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tYXQtZmlsbGVkLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1hdC1maWxsZWQtYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojM2Y1MWI1Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1hdC1wcm90ZWN0ZWQtYnV0dG9uLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWF0LXByb3RlY3RlZC1idXR0b24tcmlwcGxlLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnR7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1jb250YWluZXItY29sb3I6I2ZmNDA4MTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6d2hpdGU7LS1tYXQtcHJvdGVjdGVkLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1hdC1wcm90ZWN0ZWQtYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9Lm1hdC1tZGMtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWNvbnRhaW5lci1jb2xvcjojZjQ0MzM2Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjp3aGl0ZTstLW1hdC1wcm90ZWN0ZWQtYnV0dG9uLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWF0LXByb3RlY3RlZC1idXR0b24tcmlwcGxlLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXByaW1hcnl7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6IzNmNTFiNTstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LW91dGxpbmVkLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjojM2Y1MWI1Oy0tbWF0LW91dGxpbmVkLWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSg2MywgODEsIDE4MSwgMC4xKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LWFjY2VudHstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1jb2xvcjojZmY0MDgxOy0tbWRjLW91dGxpbmVkLWJ1dHRvbi1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tYXQtb3V0bGluZWQtYnV0dG9uLXN0YXRlLWxheWVyLWNvbG9yOiNmZjQwODE7LS1tYXQtb3V0bGluZWQtYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDI1NSwgNjQsIDEyOSwgMC4xKX0ubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ubWF0LXdhcm57LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtY29sb3I6I2Y0NDMzNjstLW1kYy1vdXRsaW5lZC1idXR0b24tb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LW91dGxpbmVkLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjojZjQ0MzM2Oy0tbWF0LW91dGxpbmVkLWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1odG1sey0tbWRjLXRleHQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQ6MzZweDstLW1kYy1maWxsZWQtYnV0dG9uLWNvbnRhaW5lci1oZWlnaHQ6MzZweDstLW1kYy1vdXRsaW5lZC1idXR0b24tY29udGFpbmVyLWhlaWdodDozNnB4Oy0tbWRjLXByb3RlY3RlZC1idXR0b24tY29udGFpbmVyLWhlaWdodDozNnB4Oy0tbWF0LXRleHQtYnV0dG9uLXRvdWNoLXRhcmdldC1kaXNwbGF5OmJsb2NrOy0tbWF0LWZpbGxlZC1idXR0b24tdG91Y2gtdGFyZ2V0LWRpc3BsYXk6YmxvY2s7LS1tYXQtcHJvdGVjdGVkLWJ1dHRvbi10b3VjaC10YXJnZXQtZGlzcGxheTpibG9jazstLW1hdC1vdXRsaW5lZC1idXR0b24tdG91Y2gtdGFyZ2V0LWRpc3BsYXk6YmxvY2t9aHRtbHstLW1kYy10ZXh0LWJ1dHRvbi1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wODkyODU3MTQzZW07LS1tZGMtdGV4dC1idXR0b24tbGFiZWwtdGV4dC13ZWlnaHQ6NTAwOy0tbWRjLXRleHQtYnV0dG9uLWxhYmVsLXRleHQtdHJhbnNmb3JtOm5vbmU7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC1zaXplOjE0cHg7LS1tZGMtZmlsbGVkLWJ1dHRvbi1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDg5Mjg1NzE0M2VtOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC13ZWlnaHQ6NTAwOy0tbWRjLWZpbGxlZC1idXR0b24tbGFiZWwtdGV4dC10cmFuc2Zvcm06bm9uZTstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC1zaXplOjE0cHg7LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wODkyODU3MTQzZW07LS1tZGMtb3V0bGluZWQtYnV0dG9uLWxhYmVsLXRleHQtd2VpZ2h0OjUwMDstLW1kYy1vdXRsaW5lZC1idXR0b24tbGFiZWwtdGV4dC10cmFuc2Zvcm06bm9uZTstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LXNpemU6MTRweDstLW1kYy1wcm90ZWN0ZWQtYnV0dG9uLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wODkyODU3MTQzZW07LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LXdlaWdodDo1MDA7LS1tZGMtcHJvdGVjdGVkLWJ1dHRvbi1sYWJlbC10ZXh0LXRyYW5zZm9ybTpub25lfWh0bWx7LS1tZGMtaWNvbi1idXR0b24taWNvbi1zaXplOjI0cHh9aHRtbHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOmluaGVyaXQ7LS1tZGMtaWNvbi1idXR0b24tZGlzYWJsZWQtaWNvbi1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LWljb24tYnV0dG9uLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LWljb24tYnV0dG9uLWRpc2FibGVkLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LWljb24tYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMSk7LS1tYXQtaWNvbi1idXR0b24taG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWF0LWljb24tYnV0dG9uLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1hdC1pY29uLWJ1dHRvbi1wcmVzc2VkLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMn1odG1sIC5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1wcmltYXJ5ey0tbWRjLWljb24tYnV0dG9uLWljb24tY29sb3I6IzNmNTFiNTstLW1hdC1pY29uLWJ1dHRvbi1zdGF0ZS1sYXllci1jb2xvcjojM2Y1MWI1Oy0tbWF0LWljb24tYnV0dG9uLXJpcHBsZS1jb2xvcjpyZ2JhKDYzLCA4MSwgMTgxLCAwLjEpfWh0bWwgLm1hdC1tZGMtaWNvbi1idXR0b24ubWF0LWFjY2VudHstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmZjQwODE7LS1tYXQtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItY29sb3I6I2ZmNDA4MTstLW1hdC1pY29uLWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgyNTUsIDY0LCAxMjksIDAuMSl9aHRtbCAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtd2FybnstLW1kYy1pY29uLWJ1dHRvbi1pY29uLWNvbG9yOiNmNDQzMzY7LS1tYXQtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItY29sb3I6I2Y0NDMzNjstLW1hdC1pY29uLWJ1dHRvbi1yaXBwbGUtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4xKX1odG1sey0tbWF0LWljb24tYnV0dG9uLXRvdWNoLXRhcmdldC1kaXNwbGF5OmJsb2NrfS5tYXQtbWRjLWljb24tYnV0dG9uLm1hdC1tZGMtYnV0dG9uLWJhc2V7LS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZTo0OHB4O3dpZHRoOnZhcigtLW1kYy1pY29uLWJ1dHRvbi1zdGF0ZS1sYXllci1zaXplKTtoZWlnaHQ6dmFyKC0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemUpO3BhZGRpbmc6MTJweH1odG1sey0tbWRjLWZhYi1jb250YWluZXItc2hhcGU6NTAlOy0tbWRjLWZhYi1pY29uLXNpemU6MjRweDstLW1kYy1mYWItc21hbGwtY29udGFpbmVyLXNoYXBlOjUwJTstLW1kYy1mYWItc21hbGwtaWNvbi1zaXplOjI0cHg7LS1tZGMtZXh0ZW5kZWQtZmFiLWNvbnRhaW5lci1oZWlnaHQ6NDhweDstLW1kYy1leHRlbmRlZC1mYWItY29udGFpbmVyLXNoYXBlOjI0cHh9aHRtbHstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWRjLWZhYi1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmFiLWZvY3VzLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1mYWItaG92ZXItY29udGFpbmVyLWVsZXZhdGlvbi1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZhYi1wcmVzc2VkLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmFiLWNvbnRhaW5lci1zaGFkb3ctY29sb3I6IzAwMDstLW1hdC1mYWItZm9yZWdyb3VuZC1jb2xvcjpibGFjazstLW1hdC1mYWItc3RhdGUtbGF5ZXItY29sb3I6YmxhY2s7LS1tYXQtZmFiLWRpc2FibGVkLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LWZhYi1yaXBwbGUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEpOy0tbWF0LWZhYi1ob3Zlci1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMDQ7LS1tYXQtZmFiLWZvY3VzLXN0YXRlLWxheWVyLW9wYWNpdHk6MC4xMjstLW1hdC1mYWItcHJlc3NlZC1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tYXQtZmFiLWRpc2FibGVkLXN0YXRlLWNvbnRhaW5lci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LWZhYi1kaXNhYmxlZC1zdGF0ZS1mb3JlZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tZGMtZmFiLXNtYWxsLWNvbnRhaW5lci1jb2xvcjp3aGl0ZTstLW1kYy1mYWItc21hbGwtY29udGFpbmVyLWVsZXZhdGlvbi1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZhYi1zbWFsbC1mb2N1cy1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZmFiLXNtYWxsLWhvdmVyLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1mYWItc21hbGwtcHJlc3NlZC1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWZhYi1zbWFsbC1jb250YWluZXItc2hhZG93LWNvbG9yOiMwMDA7LS1tYXQtZmFiLXNtYWxsLWZvcmVncm91bmQtY29sb3I6YmxhY2s7LS1tYXQtZmFiLXNtYWxsLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LWZhYi1zbWFsbC1kaXNhYmxlZC1zdGF0ZS1sYXllci1jb2xvcjpibGFjazstLW1hdC1mYWItc21hbGwtcmlwcGxlLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xKTstLW1hdC1mYWItc21hbGwtaG92ZXItc3RhdGUtbGF5ZXItb3BhY2l0eTowLjA0Oy0tbWF0LWZhYi1zbWFsbC1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTI7LS1tYXQtZmFiLXNtYWxsLXByZXNzZWQtc3RhdGUtbGF5ZXItb3BhY2l0eTowLjEyOy0tbWF0LWZhYi1zbWFsbC1kaXNhYmxlZC1zdGF0ZS1jb250YWluZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1hdC1mYWItc21hbGwtZGlzYWJsZWQtc3RhdGUtZm9yZWdyb3VuZC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWRjLWV4dGVuZGVkLWZhYi1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZXh0ZW5kZWQtZmFiLWZvY3VzLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1kYy1leHRlbmRlZC1mYWItaG92ZXItY29udGFpbmVyLWVsZXZhdGlvbi1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWRjLWV4dGVuZGVkLWZhYi1wcmVzc2VkLWNvbnRhaW5lci1lbGV2YXRpb24tc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7LS1tZGMtZXh0ZW5kZWQtZmFiLWNvbnRhaW5lci1zaGFkb3ctY29sb3I6IzAwMH1odG1sIC5tYXQtbWRjLWZhYi5tYXQtcHJpbWFyeXstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiMzZjUxYjU7LS1tYXQtZmFiLWZvcmVncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtZmFiLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWF0LWZhYi1yaXBwbGUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfWh0bWwgLm1hdC1tZGMtZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLWNvbnRhaW5lci1jb2xvcjojZmY0MDgxOy0tbWF0LWZhYi1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlOy0tbWF0LWZhYi1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1hdC1mYWItcmlwcGxlLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1odG1sIC5tYXQtbWRjLWZhYi5tYXQtd2FybnstLW1kYy1mYWItY29udGFpbmVyLWNvbG9yOiNmNDQzMzY7LS1tYXQtZmFiLWZvcmVncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtZmFiLXN0YXRlLWxheWVyLWNvbG9yOndoaXRlOy0tbWF0LWZhYi1yaXBwbGUtY29sb3I6cmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpfWh0bWwgLm1hdC1tZGMtbWluaS1mYWIubWF0LXByaW1hcnl7LS1tZGMtZmFiLXNtYWxsLWNvbnRhaW5lci1jb2xvcjojM2Y1MWI1Oy0tbWF0LWZhYi1zbWFsbC1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlOy0tbWF0LWZhYi1zbWFsbC1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1hdC1mYWItc21hbGwtcmlwcGxlLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1odG1sIC5tYXQtbWRjLW1pbmktZmFiLm1hdC1hY2NlbnR7LS1tZGMtZmFiLXNtYWxsLWNvbnRhaW5lci1jb2xvcjojZmY0MDgxOy0tbWF0LWZhYi1zbWFsbC1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlOy0tbWF0LWZhYi1zbWFsbC1zdGF0ZS1sYXllci1jb2xvcjp3aGl0ZTstLW1hdC1mYWItc21hbGwtcmlwcGxlLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKX1odG1sIC5tYXQtbWRjLW1pbmktZmFiLm1hdC13YXJuey0tbWRjLWZhYi1zbWFsbC1jb250YWluZXItY29sb3I6I2Y0NDMzNjstLW1hdC1mYWItc21hbGwtZm9yZWdyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1mYWItc21hbGwtc3RhdGUtbGF5ZXItY29sb3I6d2hpdGU7LS1tYXQtZmFiLXNtYWxsLXJpcHBsZS1jb2xvcjpyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSl9aHRtbHstLW1hdC1mYWItdG91Y2gtdGFyZ2V0LWRpc3BsYXk6YmxvY2s7LS1tYXQtZmFiLXNtYWxsLXRvdWNoLXRhcmdldC1kaXNwbGF5OmJsb2NrfWh0bWx7LS1tZGMtZXh0ZW5kZWQtZmFiLWxhYmVsLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tZGMtZXh0ZW5kZWQtZmFiLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWRjLWV4dGVuZGVkLWZhYi1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDg5Mjg1NzE0M2VtOy0tbWRjLWV4dGVuZGVkLWZhYi1sYWJlbC10ZXh0LXdlaWdodDo1MDB9aHRtbHstLW1kYy1zbmFja2Jhci1jb250YWluZXItc2hhcGU6NHB4fWh0bWx7LS1tZGMtc25hY2tiYXItY29udGFpbmVyLWNvbG9yOiMzMzMzMzM7LS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nyk7LS1tYXQtc25hY2stYmFyLWJ1dHRvbi1jb2xvcjojZmY0MDgxfWh0bWx7LS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1saW5lLWhlaWdodDoyMHB4Oy0tbWRjLXNuYWNrYmFyLXN1cHBvcnRpbmctdGV4dC1zaXplOjE0cHg7LS1tZGMtc25hY2tiYXItc3VwcG9ydGluZy10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1hdC10YWJsZS1yb3ctaXRlbS1vdXRsaW5lLXdpZHRoOjFweH1odG1sey0tbWF0LXRhYmxlLWJhY2tncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtdGFibGUtaGVhZGVyLWhlYWRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyk7LS1tYXQtdGFibGUtcm93LWl0ZW0tbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LXRhYmxlLXJvdy1pdGVtLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKX1odG1sey0tbWF0LXRhYmxlLWhlYWRlci1jb250YWluZXItaGVpZ2h0OjU2cHg7LS1tYXQtdGFibGUtZm9vdGVyLWNvbnRhaW5lci1oZWlnaHQ6NTJweDstLW1hdC10YWJsZS1yb3ctaXRlbS1jb250YWluZXItaGVpZ2h0OjUycHh9aHRtbHstLW1hdC10YWJsZS1oZWFkZXItaGVhZGxpbmUtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtdGFibGUtaGVhZGVyLWhlYWRsaW5lLWxpbmUtaGVpZ2h0OjIycHg7LS1tYXQtdGFibGUtaGVhZGVyLWhlYWRsaW5lLXNpemU6MTRweDstLW1hdC10YWJsZS1oZWFkZXItaGVhZGxpbmUtd2VpZ2h0OjUwMDstLW1hdC10YWJsZS1oZWFkZXItaGVhZGxpbmUtdHJhY2tpbmc6MC4wMDcxNDI4NTcxZW07LS1tYXQtdGFibGUtcm93LWl0ZW0tbGFiZWwtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC10YWJsZS1yb3ctaXRlbS1sYWJlbC10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tYXQtdGFibGUtcm93LWl0ZW0tbGFiZWwtdGV4dC1zaXplOjE0cHg7LS1tYXQtdGFibGUtcm93LWl0ZW0tbGFiZWwtdGV4dC13ZWlnaHQ6NDAwOy0tbWF0LXRhYmxlLXJvdy1pdGVtLWxhYmVsLXRleHQtdHJhY2tpbmc6MC4wMTc4NTcxNDI5ZW07LS1tYXQtdGFibGUtZm9vdGVyLXN1cHBvcnRpbmctdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC10YWJsZS1mb290ZXItc3VwcG9ydGluZy10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tYXQtdGFibGUtZm9vdGVyLXN1cHBvcnRpbmctdGV4dC1zaXplOjE0cHg7LS1tYXQtdGFibGUtZm9vdGVyLXN1cHBvcnRpbmctdGV4dC13ZWlnaHQ6NDAwOy0tbWF0LXRhYmxlLWZvb3Rlci1zdXBwb3J0aW5nLXRleHQtdHJhY2tpbmc6MC4wMTc4NTcxNDI5ZW19aHRtbHstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLXdpZHRoOjRweDstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1zaXplOjQ4cHh9aHRtbHstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiMzZjUxYjV9aHRtbCAubWF0LWFjY2VudHstLW1kYy1jaXJjdWxhci1wcm9ncmVzcy1hY3RpdmUtaW5kaWNhdG9yLWNvbG9yOiNmZjQwODF9aHRtbCAubWF0LXdhcm57LS1tZGMtY2lyY3VsYXItcHJvZ3Jlc3MtYWN0aXZlLWluZGljYXRvci1jb2xvcjojZjQ0MzM2fWh0bWx7LS1tYXQtYmFkZ2UtY29udGFpbmVyLXNoYXBlOjUwJTstLW1hdC1iYWRnZS1jb250YWluZXItc2l6ZTp1bnNldDstLW1hdC1iYWRnZS1zbWFsbC1zaXplLWNvbnRhaW5lci1zaXplOnVuc2V0Oy0tbWF0LWJhZGdlLWxhcmdlLXNpemUtY29udGFpbmVyLXNpemU6dW5zZXQ7LS1tYXQtYmFkZ2UtbGVnYWN5LWNvbnRhaW5lci1zaXplOjIycHg7LS1tYXQtYmFkZ2UtbGVnYWN5LXNtYWxsLXNpemUtY29udGFpbmVyLXNpemU6MTZweDstLW1hdC1iYWRnZS1sZWdhY3ktbGFyZ2Utc2l6ZS1jb250YWluZXItc2l6ZToyOHB4Oy0tbWF0LWJhZGdlLWNvbnRhaW5lci1vZmZzZXQ6LTExcHggMDstLW1hdC1iYWRnZS1zbWFsbC1zaXplLWNvbnRhaW5lci1vZmZzZXQ6LThweCAwOy0tbWF0LWJhZGdlLWxhcmdlLXNpemUtY29udGFpbmVyLW9mZnNldDotMTRweCAwOy0tbWF0LWJhZGdlLWNvbnRhaW5lci1vdmVybGFwLW9mZnNldDotMTFweDstLW1hdC1iYWRnZS1zbWFsbC1zaXplLWNvbnRhaW5lci1vdmVybGFwLW9mZnNldDotOHB4Oy0tbWF0LWJhZGdlLWxhcmdlLXNpemUtY29udGFpbmVyLW92ZXJsYXAtb2Zmc2V0Oi0xNHB4Oy0tbWF0LWJhZGdlLWNvbnRhaW5lci1wYWRkaW5nOjA7LS1tYXQtYmFkZ2Utc21hbGwtc2l6ZS1jb250YWluZXItcGFkZGluZzowOy0tbWF0LWJhZGdlLWxhcmdlLXNpemUtY29udGFpbmVyLXBhZGRpbmc6MH1odG1sey0tbWF0LWJhZGdlLWJhY2tncm91bmQtY29sb3I6IzNmNTFiNTstLW1hdC1iYWRnZS10ZXh0LWNvbG9yOndoaXRlOy0tbWF0LWJhZGdlLWRpc2FibGVkLXN0YXRlLWJhY2tncm91bmQtY29sb3I6I2I5YjliOTstLW1hdC1iYWRnZS1kaXNhYmxlZC1zdGF0ZS10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCl9Lm1hdC1iYWRnZS1hY2NlbnR7LS1tYXQtYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjojZmY0MDgxOy0tbWF0LWJhZGdlLXRleHQtY29sb3I6d2hpdGV9Lm1hdC1iYWRnZS13YXJuey0tbWF0LWJhZGdlLWJhY2tncm91bmQtY29sb3I6I2Y0NDMzNjstLW1hdC1iYWRnZS10ZXh0LWNvbG9yOndoaXRlfWh0bWx7LS1tYXQtYmFkZ2UtdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC1iYWRnZS10ZXh0LXNpemU6MTJweDstLW1hdC1iYWRnZS10ZXh0LXdlaWdodDo2MDA7LS1tYXQtYmFkZ2Utc21hbGwtc2l6ZS10ZXh0LXNpemU6OXB4Oy0tbWF0LWJhZGdlLWxhcmdlLXNpemUtdGV4dC1zaXplOjI0cHh9aHRtbHstLW1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLXNoYXBlOjRweH1odG1sey0tbWF0LWJvdHRvbS1zaGVldC1jb250YWluZXItdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LWJvdHRvbS1zaGVldC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjp3aGl0ZX1odG1sey0tbWF0LWJvdHRvbS1zaGVldC1jb250YWluZXItdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLXRleHQtbGluZS1oZWlnaHQ6MjBweDstLW1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLXRleHQtc2l6ZToxNHB4Oy0tbWF0LWJvdHRvbS1zaGVldC1jb250YWluZXItdGV4dC10cmFja2luZzowLjAxNzg1NzE0MjllbTstLW1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVyLXRleHQtd2VpZ2h0OjQwMH1odG1sey0tbWF0LWxlZ2FjeS1idXR0b24tdG9nZ2xlLWhlaWdodDozNnB4Oy0tbWF0LWxlZ2FjeS1idXR0b24tdG9nZ2xlLXNoYXBlOjJweDstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjE7LS1tYXQtc3RhbmRhcmQtYnV0dG9uLXRvZ2dsZS1zaGFwZTo0cHg7LS1tYXQtc3RhbmRhcmQtYnV0dG9uLXRvZ2dsZS1ob3Zlci1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMDQ7LS1tYXQtc3RhbmRhcmQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1zdGF0ZS1sYXllci1vcGFjaXR5OjAuMTJ9aHRtbHstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtbGVnYWN5LWJ1dHRvbi10b2dnbGUtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjEyKTstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1zZWxlY3RlZC1zdGF0ZS10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtbGVnYWN5LWJ1dHRvbi10b2dnbGUtc2VsZWN0ZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojZTBlMGUwOy0tbWF0LWxlZ2FjeS1idXR0b24tdG9nZ2xlLWRpc2FibGVkLXN0YXRlLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjI2KTstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOiNlZWVlZWU7LS1tYXQtbGVnYWN5LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQtc2VsZWN0ZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojYmRiZGJkOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zdGFuZGFyZC1idXR0b24tdG9nZ2xlLXN0YXRlLWxheWVyLWNvbG9yOmJsYWNrOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtc2VsZWN0ZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojZTBlMGUwOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtc2VsZWN0ZWQtc3RhdGUtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQtc3RhdGUtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMjYpOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zdGFuZGFyZC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLXNlbGVjdGVkLXN0YXRlLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1zdGFuZGFyZC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLXNlbGVjdGVkLXN0YXRlLWJhY2tncm91bmQtY29sb3I6I2JkYmRiZDstLW1hdC1zdGFuZGFyZC1idXR0b24tdG9nZ2xlLWRpdmlkZXItY29sb3I6I2UwZTBlMH1odG1sey0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtaGVpZ2h0OjQ4cHh9aHRtbHstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LWxlZ2FjeS1idXR0b24tdG9nZ2xlLWxhYmVsLXRleHQtbGluZS1oZWlnaHQ6MjRweDstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1sYWJlbC10ZXh0LXNpemU6MTZweDstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDMxMjVlbTstLW1hdC1sZWdhY3ktYnV0dG9uLXRvZ2dsZS1sYWJlbC10ZXh0LXdlaWdodDo0MDA7LS1tYXQtc3RhbmRhcmQtYnV0dG9uLXRvZ2dsZS1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtbGFiZWwtdGV4dC1saW5lLWhlaWdodDoyNHB4Oy0tbWF0LXN0YW5kYXJkLWJ1dHRvbi10b2dnbGUtbGFiZWwtdGV4dC1zaXplOjE2cHg7LS1tYXQtc3RhbmRhcmQtYnV0dG9uLXRvZ2dsZS1sYWJlbC10ZXh0LXRyYWNraW5nOjAuMDMxMjVlbTstLW1hdC1zdGFuZGFyZC1idXR0b24tdG9nZ2xlLWxhYmVsLXRleHQtd2VpZ2h0OjQwMH1odG1sey0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItY29udGFpbmVyLXNoYXBlOjRweDstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWNvbnRhaW5lci10b3VjaC1zaGFwZTo0cHg7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwgMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWNvbnRhaW5lci10b3VjaC1lbGV2YXRpb24tc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1odG1sey0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1zZWxlY3RlZC1zdGF0ZS10ZXh0LWNvbG9yOndoaXRlOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1zZWxlY3RlZC1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOiMzZjUxYjU7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLXNlbGVjdGVkLWRpc2FibGVkLXN0YXRlLWJhY2tncm91bmQtY29sb3I6cmdiYSg2MywgODEsIDE4MSwgMC40KTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtdG9kYXktc2VsZWN0ZWQtc3RhdGUtb3V0bGluZS1jb2xvcjp3aGl0ZTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtZm9jdXMtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLCA4MSwgMTgxLCAwLjMpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1ob3Zlci1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoNjMsIDgxLCAxODEsIDAuMyk7LS1tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLXN0YXRlLWljb24tY29sb3I6IzNmNTFiNTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtaW4tcmFuZ2Utc3RhdGUtYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDYzLCA4MSwgMTgxLCAwLjIpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1pbi1jb21wYXJpc29uLXJhbmdlLXN0YXRlLWJhY2tncm91bmQtY29sb3I6cmdiYSgyNDksIDE3MSwgMCwgMC4yKTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtaW4tb3ZlcmxhcC1yYW5nZS1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOiNhOGRhYjU7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLWluLW92ZXJsYXAtcmFuZ2Utc2VsZWN0ZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojNDZhMzVlOy0tbWF0LWRhdGVwaWNrZXItdG9nZ2xlLWljb24tY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWJvZHktbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItcGVyaW9kLWJ1dHRvbi10ZXh0LWNvbG9yOmJsYWNrOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItcGVyaW9kLWJ1dHRvbi1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1uYXZpZ2F0aW9uLWJ1dHRvbi1pY29uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1oZWFkZXItZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItaGVhZGVyLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtdG9kYXktb3V0bGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS10b2RheS1kaXNhYmxlZC1zdGF0ZS1vdXRsaW5lLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xOCk7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtb3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudDstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtZGlzYWJsZWQtc3RhdGUtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMzgpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1wcmV2aWV3LXN0YXRlLW91dGxpbmUtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjI0KTstLW1hdC1kYXRlcGlja2VyLXJhbmdlLWlucHV0LXNlcGFyYXRvci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LWRhdGVwaWNrZXItcmFuZ2UtaW5wdXQtZGlzYWJsZWQtc3RhdGUtc2VwYXJhdG9yLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtZGF0ZXBpY2tlci1yYW5nZS1pbnB1dC1kaXNhYmxlZC1zdGF0ZS10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4zOCk7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWNvbnRhaW5lci10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC44Nyl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudHstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtc2VsZWN0ZWQtc3RhdGUtdGV4dC1jb2xvcjp3aGl0ZTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtc2VsZWN0ZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojZmY0MDgxOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1zZWxlY3RlZC1kaXNhYmxlZC1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjQpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS10b2RheS1zZWxlY3RlZC1zdGF0ZS1vdXRsaW5lLWNvbG9yOndoaXRlOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1mb2N1cy1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjMpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1ob3Zlci1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjMpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1pbi1yYW5nZS1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LCA2NCwgMTI5LCAwLjIpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1pbi1jb21wYXJpc29uLXJhbmdlLXN0YXRlLWJhY2tncm91bmQtY29sb3I6cmdiYSgyNDksIDE3MSwgMCwgMC4yKTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtaW4tb3ZlcmxhcC1yYW5nZS1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOiNhOGRhYjU7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLWluLW92ZXJsYXAtcmFuZ2Utc2VsZWN0ZWQtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuey0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1zZWxlY3RlZC1zdGF0ZS10ZXh0LWNvbG9yOndoaXRlOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1zZWxlY3RlZC1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLXNlbGVjdGVkLWRpc2FibGVkLXN0YXRlLWJhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC40KTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtdG9kYXktc2VsZWN0ZWQtc3RhdGUtb3V0bGluZS1jb2xvcjp3aGl0ZTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtZm9jdXMtc3RhdGUtYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCwgNjcsIDU0LCAwLjMpOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1ob3Zlci1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LCA2NywgNTQsIDAuMyk7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLWluLXJhbmdlLXN0YXRlLWJhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsIDY3LCA1NCwgMC4yKTstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWRhdGUtaW4tY29tcGFyaXNvbi1yYW5nZS1zdGF0ZS1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ5LCAxNzEsIDAsIDAuMik7LS1tYXQtZGF0ZXBpY2tlci1jYWxlbmRhci1kYXRlLWluLW92ZXJsYXAtcmFuZ2Utc3RhdGUtYmFja2dyb3VuZC1jb2xvcjojYThkYWI1Oy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItZGF0ZS1pbi1vdmVybGFwLXJhbmdlLXNlbGVjdGVkLXN0YXRlLWJhY2tncm91bmQtY29sb3I6IzQ2YTM1ZX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50ey0tbWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS1zdGF0ZS1pY29uLWNvbG9yOiNmZjQwODF9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57LS1tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLXN0YXRlLWljb24tY29sb3I6I2Y0NDMzNn0ubWF0LWNhbGVuZGFyLWNvbnRyb2xzey0tbWF0LWljb24tYnV0dG9uLXRvdWNoLXRhcmdldC1kaXNwbGF5Om5vbmV9Lm1hdC1jYWxlbmRhci1jb250cm9scyAubWF0LW1kYy1pY29uLWJ1dHRvbi5tYXQtbWRjLWJ1dHRvbi1iYXNley0tbWRjLWljb24tYnV0dG9uLXN0YXRlLWxheWVyLXNpemU6NDBweDt3aWR0aDp2YXIoLS1tZGMtaWNvbi1idXR0b24tc3RhdGUtbGF5ZXItc2l6ZSk7aGVpZ2h0OnZhcigtLW1kYy1pY29uLWJ1dHRvbi1zdGF0ZS1sYXllci1zaXplKTtwYWRkaW5nOjhweH1odG1sey0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLXRleHQtc2l6ZToxM3B4Oy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItYm9keS1sYWJlbC10ZXh0LXNpemU6MTRweDstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLWJvZHktbGFiZWwtdGV4dC13ZWlnaHQ6NTAwOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItcGVyaW9kLWJ1dHRvbi10ZXh0LXNpemU6MTRweDstLW1hdC1kYXRlcGlja2VyLWNhbGVuZGFyLXBlcmlvZC1idXR0b24tdGV4dC13ZWlnaHQ6NTAwOy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItaGVhZGVyLXRleHQtc2l6ZToxMXB4Oy0tbWF0LWRhdGVwaWNrZXItY2FsZW5kYXItaGVhZGVyLXRleHQtd2VpZ2h0OjQwMH1odG1sey0tbWF0LWRpdmlkZXItd2lkdGg6MXB4fWh0bWx7LS1tYXQtZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpfWh0bWx7LS1tYXQtZXhwYW5zaW9uLWNvbnRhaW5lci1zaGFwZTo0cHg7LS1tYXQtZXhwYW5zaW9uLWxlZ2FjeS1oZWFkZXItaW5kaWNhdG9yLWRpc3BsYXk6aW5saW5lLWJsb2NrOy0tbWF0LWV4cGFuc2lvbi1oZWFkZXItaW5kaWNhdG9yLWRpc3BsYXk6bm9uZX1odG1sey0tbWF0LWV4cGFuc2lvbi1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1leHBhbnNpb24tY29udGFpbmVyLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1leHBhbnNpb24tYWN0aW9ucy1kaXZpZGVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4xMik7LS1tYXQtZXhwYW5zaW9uLWhlYWRlci1ob3Zlci1zdGF0ZS1sYXllci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMDQpOy0tbWF0LWV4cGFuc2lvbi1oZWFkZXItZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KTstLW1hdC1leHBhbnNpb24taGVhZGVyLWRpc2FibGVkLXN0YXRlLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjI2KTstLW1hdC1leHBhbnNpb24taGVhZGVyLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1leHBhbnNpb24taGVhZGVyLWRlc2NyaXB0aW9uLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtZXhwYW5zaW9uLWhlYWRlci1pbmRpY2F0b3ItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjU0KX1odG1sey0tbWF0LWV4cGFuc2lvbi1oZWFkZXItY29sbGFwc2VkLXN0YXRlLWhlaWdodDo0OHB4Oy0tbWF0LWV4cGFuc2lvbi1oZWFkZXItZXhwYW5kZWQtc3RhdGUtaGVpZ2h0OjY0cHh9aHRtbHstLW1hdC1leHBhbnNpb24taGVhZGVyLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtZXhwYW5zaW9uLWhlYWRlci10ZXh0LXNpemU6MTRweDstLW1hdC1leHBhbnNpb24taGVhZGVyLXRleHQtd2VpZ2h0OjUwMDstLW1hdC1leHBhbnNpb24taGVhZGVyLXRleHQtbGluZS1oZWlnaHQ6aW5oZXJpdDstLW1hdC1leHBhbnNpb24taGVhZGVyLXRleHQtdHJhY2tpbmc6aW5oZXJpdDstLW1hdC1leHBhbnNpb24tY29udGFpbmVyLXRleHQtZm9udDpSb2JvdG8sIHNhbnMtc2VyaWY7LS1tYXQtZXhwYW5zaW9uLWNvbnRhaW5lci10ZXh0LWxpbmUtaGVpZ2h0OjIwcHg7LS1tYXQtZXhwYW5zaW9uLWNvbnRhaW5lci10ZXh0LXNpemU6MTRweDstLW1hdC1leHBhbnNpb24tY29udGFpbmVyLXRleHQtdHJhY2tpbmc6MC4wMTc4NTcxNDI5ZW07LS1tYXQtZXhwYW5zaW9uLWNvbnRhaW5lci10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1hdC1ncmlkLWxpc3QtdGlsZS1oZWFkZXItcHJpbWFyeS10ZXh0LXNpemU6MTRweDstLW1hdC1ncmlkLWxpc3QtdGlsZS1oZWFkZXItc2Vjb25kYXJ5LXRleHQtc2l6ZToxMnB4Oy0tbWF0LWdyaWQtbGlzdC10aWxlLWZvb3Rlci1wcmltYXJ5LXRleHQtc2l6ZToxNHB4Oy0tbWF0LWdyaWQtbGlzdC10aWxlLWZvb3Rlci1zZWNvbmRhcnktdGV4dC1zaXplOjEycHh9aHRtbHstLW1hdC1pY29uLWNvbG9yOmluaGVyaXR9Lm1hdC1pY29uLm1hdC1wcmltYXJ5ey0tbWF0LWljb24tY29sb3I6IzNmNTFiNX0ubWF0LWljb24ubWF0LWFjY2VudHstLW1hdC1pY29uLWNvbG9yOiNmZjQwODF9Lm1hdC1pY29uLm1hdC13YXJuey0tbWF0LWljb24tY29sb3I6I2Y0NDMzNn1odG1sey0tbWF0LXNpZGVuYXYtY29udGFpbmVyLXNoYXBlOjA7LS1tYXQtc2lkZW5hdi1jb250YWluZXItZWxldmF0aW9uLXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksIDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTstLW1hdC1zaWRlbmF2LWNvbnRhaW5lci13aWR0aDphdXRvfWh0bWx7LS1tYXQtc2lkZW5hdi1jb250YWluZXItZGl2aWRlci1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LXNpZGVuYXYtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc2lkZW5hdi1jb250YWluZXItdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpOy0tbWF0LXNpZGVuYXYtY29udGVudC1iYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7LS1tYXQtc2lkZW5hdi1jb250ZW50LXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1zaWRlbmF2LXNjcmltLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC42KX1odG1sey0tbWF0LXN0ZXBwZXItaGVhZGVyLWljb24tZm9yZWdyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zdGVwcGVyLWhlYWRlci1zZWxlY3RlZC1zdGF0ZS1pY29uLWJhY2tncm91bmQtY29sb3I6IzNmNTFiNTstLW1hdC1zdGVwcGVyLWhlYWRlci1zZWxlY3RlZC1zdGF0ZS1pY29uLWZvcmVncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc3RlcHBlci1oZWFkZXItZG9uZS1zdGF0ZS1pY29uLWJhY2tncm91bmQtY29sb3I6IzNmNTFiNTstLW1hdC1zdGVwcGVyLWhlYWRlci1kb25lLXN0YXRlLWljb24tZm9yZWdyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zdGVwcGVyLWhlYWRlci1lZGl0LXN0YXRlLWljb24tYmFja2dyb3VuZC1jb2xvcjojM2Y1MWI1Oy0tbWF0LXN0ZXBwZXItaGVhZGVyLWVkaXQtc3RhdGUtaWNvbi1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlOy0tbWF0LXN0ZXBwZXItY29udGFpbmVyLWNvbG9yOndoaXRlOy0tbWF0LXN0ZXBwZXItbGluZS1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuMTIpOy0tbWF0LXN0ZXBwZXItaGVhZGVyLWhvdmVyLXN0YXRlLWxheWVyLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC4wNCk7LS1tYXQtc3RlcHBlci1oZWFkZXItZm9jdXMtc3RhdGUtbGF5ZXItY29sb3I6cmdiYSgwLCAwLCAwLCAwLjA0KTstLW1hdC1zdGVwcGVyLWhlYWRlci1sYWJlbC10ZXh0LWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtc3RlcHBlci1oZWFkZXItb3B0aW9uYWwtbGFiZWwtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuNTQpOy0tbWF0LXN0ZXBwZXItaGVhZGVyLXNlbGVjdGVkLXN0YXRlLWxhYmVsLXRleHQtY29sb3I6cmdiYSgwLCAwLCAwLCAwLjg3KTstLW1hdC1zdGVwcGVyLWhlYWRlci1lcnJvci1zdGF0ZS1sYWJlbC10ZXh0LWNvbG9yOiNmNDQzMzY7LS1tYXQtc3RlcHBlci1oZWFkZXItaWNvbi1iYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwgMCwgMCwgMC41NCk7LS1tYXQtc3RlcHBlci1oZWFkZXItZXJyb3Itc3RhdGUtaWNvbi1mb3JlZ3JvdW5kLWNvbG9yOiNmNDQzMzY7LS1tYXQtc3RlcHBlci1oZWFkZXItZXJyb3Itc3RhdGUtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWh0bWwgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50ey0tbWF0LXN0ZXBwZXItaGVhZGVyLWljb24tZm9yZWdyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zdGVwcGVyLWhlYWRlci1zZWxlY3RlZC1zdGF0ZS1pY29uLWJhY2tncm91bmQtY29sb3I6I2ZmNDA4MTstLW1hdC1zdGVwcGVyLWhlYWRlci1zZWxlY3RlZC1zdGF0ZS1pY29uLWZvcmVncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc3RlcHBlci1oZWFkZXItZG9uZS1zdGF0ZS1pY29uLWJhY2tncm91bmQtY29sb3I6I2ZmNDA4MTstLW1hdC1zdGVwcGVyLWhlYWRlci1kb25lLXN0YXRlLWljb24tZm9yZWdyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC1zdGVwcGVyLWhlYWRlci1lZGl0LXN0YXRlLWljb24tYmFja2dyb3VuZC1jb2xvcjojZmY0MDgxOy0tbWF0LXN0ZXBwZXItaGVhZGVyLWVkaXQtc3RhdGUtaWNvbi1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlfWh0bWwgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybnstLW1hdC1zdGVwcGVyLWhlYWRlci1pY29uLWZvcmVncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc3RlcHBlci1oZWFkZXItc2VsZWN0ZWQtc3RhdGUtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7LS1tYXQtc3RlcHBlci1oZWFkZXItc2VsZWN0ZWQtc3RhdGUtaWNvbi1mb3JlZ3JvdW5kLWNvbG9yOndoaXRlOy0tbWF0LXN0ZXBwZXItaGVhZGVyLWRvbmUtc3RhdGUtaWNvbi1iYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7LS1tYXQtc3RlcHBlci1oZWFkZXItZG9uZS1zdGF0ZS1pY29uLWZvcmVncm91bmQtY29sb3I6d2hpdGU7LS1tYXQtc3RlcHBlci1oZWFkZXItZWRpdC1zdGF0ZS1pY29uLWJhY2tncm91bmQtY29sb3I6I2Y0NDMzNjstLW1hdC1zdGVwcGVyLWhlYWRlci1lZGl0LXN0YXRlLWljb24tZm9yZWdyb3VuZC1jb2xvcjp3aGl0ZX1odG1sey0tbWF0LXN0ZXBwZXItaGVhZGVyLWhlaWdodDo3MnB4fWh0bWx7LS1tYXQtc3RlcHBlci1jb250YWluZXItdGV4dC1mb250OlJvYm90bywgc2Fucy1zZXJpZjstLW1hdC1zdGVwcGVyLWhlYWRlci1sYWJlbC10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LXN0ZXBwZXItaGVhZGVyLWxhYmVsLXRleHQtc2l6ZToxNHB4Oy0tbWF0LXN0ZXBwZXItaGVhZGVyLWxhYmVsLXRleHQtd2VpZ2h0OjQwMDstLW1hdC1zdGVwcGVyLWhlYWRlci1lcnJvci1zdGF0ZS1sYWJlbC10ZXh0LXNpemU6MTZweDstLW1hdC1zdGVwcGVyLWhlYWRlci1zZWxlY3RlZC1zdGF0ZS1sYWJlbC10ZXh0LXNpemU6MTZweDstLW1hdC1zdGVwcGVyLWhlYWRlci1zZWxlY3RlZC1zdGF0ZS1sYWJlbC10ZXh0LXdlaWdodDo0MDB9aHRtbHstLW1hdC1zb3J0LWFycm93LWNvbG9yOiM3NTc1NzV9aHRtbHstLW1hdC10b29sYmFyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOndoaXRlc21va2U7LS1tYXQtdG9vbGJhci1jb250YWluZXItdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXstLW1hdC10b29sYmFyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOiMzZjUxYjU7LS1tYXQtdG9vbGJhci1jb250YWluZXItdGV4dC1jb2xvcjp3aGl0ZX0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHstLW1hdC10b29sYmFyLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yOiNmZjQwODE7LS1tYXQtdG9vbGJhci1jb250YWluZXItdGV4dC1jb2xvcjp3aGl0ZX0ubWF0LXRvb2xiYXIubWF0LXdhcm57LS1tYXQtdG9vbGJhci1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2Oy0tbWF0LXRvb2xiYXItY29udGFpbmVyLXRleHQtY29sb3I6d2hpdGV9aHRtbHstLW1hdC10b29sYmFyLXN0YW5kYXJkLWhlaWdodDo2NHB4Oy0tbWF0LXRvb2xiYXItbW9iaWxlLWhlaWdodDo1NnB4fWh0bWx7LS1tYXQtdG9vbGJhci10aXRsZS10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LXRvb2xiYXItdGl0bGUtdGV4dC1saW5lLWhlaWdodDozMnB4Oy0tbWF0LXRvb2xiYXItdGl0bGUtdGV4dC1zaXplOjIwcHg7LS1tYXQtdG9vbGJhci10aXRsZS10ZXh0LXRyYWNraW5nOjAuMDEyNWVtOy0tbWF0LXRvb2xiYXItdGl0bGUtdGV4dC13ZWlnaHQ6NTAwfWh0bWx7LS1tYXQtdHJlZS1jb250YWluZXItYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTstLW1hdC10cmVlLW5vZGUtdGV4dC1jb2xvcjpyZ2JhKDAsIDAsIDAsIDAuODcpfWh0bWx7LS1tYXQtdHJlZS1ub2RlLW1pbi1oZWlnaHQ6NDhweH1odG1sey0tbWF0LXRyZWUtbm9kZS10ZXh0LWZvbnQ6Um9ib3RvLCBzYW5zLXNlcmlmOy0tbWF0LXRyZWUtbm9kZS10ZXh0LXNpemU6MTRweDstLW1hdC10cmVlLW5vZGUtdGV4dC13ZWlnaHQ6NDAwfS5tYXQtaDEsLm1hdC1oZWFkbGluZS01LC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtaGVhZGxpbmUtNiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZS02LC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMTI1ZW07bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJ0aXRsZS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YnRpdGxlLTEsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwOTM3NWVtO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udDo0MDAgMTZweC8yNHB4IFJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzouMDMxMjVlbTttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4Ki44MykvMjBweCBSb2JvdG8sIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCouNjcpLzIwcHggUm9ib3RvLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtc3VidGl0bGUtMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LXN0cm9uZywubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJ0aXRsZS0ye2ZvbnQ6NTAwIDE0cHgvMjJweCBSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzE0Mjg1NzFlbX0ubWF0LWJvZHksLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTIsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAxNzg1NzE0MjllbX0ubWF0LWJvZHkgcCwubWF0LWJvZHktMiBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTIgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi4wMzMzMzMzMzMzZW19Lm1hdC1oZWFkbGluZS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTF7Zm9udDozMDAgOTZweC85NnB4IFJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMTU2MjVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1oZWFkbGluZS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTJ7Zm9udDozMDAgNjBweC82MHB4IFJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotLjAwODMzMzMzMzNlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1oZWFkbGluZS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLTN7Zm9udDo0MDAgNDhweC81MHB4IFJvYm90bywgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtaGVhZGxpbmUtNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1oZWFkbGluZS00e2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LjAwNzM1Mjk0MTJlbTttYXJnaW46MCAwIDY0cHh9Il0sInNvdXJjZVJvb3QiOiIifQ== */@charset \"UTF-8\";\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n/* You can add global styles to this file, and also import other style files */\n/* roboto-cyrillic-ext-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-cyrillic-ext-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-cyrillic-ext-400-normal.woff') format(\"woff\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* roboto-cyrillic-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-cyrillic-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-cyrillic-400-normal.woff') format(\"woff\");\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* roboto-greek-ext-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-greek-ext-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-greek-ext-400-normal.woff') format(\"woff\");\n unicode-range: U+1F00-1FFF;\n}\n/* roboto-greek-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-greek-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-greek-400-normal.woff') format(\"woff\");\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* roboto-vietnamese-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-vietnamese-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-vietnamese-400-normal.woff') format(\"woff\");\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* roboto-latin-ext-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-latin-ext-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-latin-ext-400-normal.woff') format(\"woff\");\n unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* roboto-latin-400-normal */\n@font-face {\n font-family: \"Roboto\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-latin-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-latin-400-normal.woff') format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* roboto-mono-cyrillic-ext-400-normal */\n@font-face {\n font-family: \"Roboto Mono\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-mono-cyrillic-ext-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-mono-cyrillic-ext-400-normal.woff') format(\"woff\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* roboto-mono-cyrillic-400-normal */\n@font-face {\n font-family: \"Roboto Mono\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-mono-cyrillic-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-mono-cyrillic-400-normal.woff') format(\"woff\");\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* roboto-mono-greek-400-normal */\n@font-face {\n font-family: \"Roboto Mono\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-mono-greek-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-mono-greek-400-normal.woff') format(\"woff\");\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* roboto-mono-vietnamese-400-normal */\n@font-face {\n font-family: \"Roboto Mono\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-mono-vietnamese-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-mono-vietnamese-400-normal.woff') format(\"woff\");\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* roboto-mono-latin-ext-400-normal */\n@font-face {\n font-family: \"Roboto Mono\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-mono-latin-ext-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-mono-latin-ext-400-normal.woff') format(\"woff\");\n unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* roboto-mono-latin-400-normal */\n@font-face {\n font-family: \"Roboto Mono\";\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url('mitre/roboto-mono-latin-400-normal.woff2') format(\"woff2\"), url('mitre/roboto-mono-latin-400-normal.woff') format(\"woff\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n@media print {\n @page {\n size: A3;\n margin: 0;\n }\n}\n@font-face {\n font-family: \"Material Icons\";\n font-style: normal;\n font-display: block;\n font-weight: 400;\n src: local(\"Material Icons\"), local(\"MaterialIcons-Regular\"), url('mitre/MaterialIcons-Regular.ttf') format(\"truetype\");\n}\n.material-icons {\n font-family: \"Material Icons\";\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n /* Support for IE. */\n font-feature-settings: \"liga\";\n}\n\n.text-deemphasis {\n color: #6b7279;\n font-size: 12px !important;\n letter-spacing: normal;\n}\n\nbody {\n margin: 0;\n overflow-y: scroll;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\", \"Helvetica Neue\", sans-serif;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .svgcontainer {\n background-color: white;\n }\n}\n.theme-override-dark .svgcontainer {\n background-color: white;\n}\n\n.mdc-button, .mat-mdc-button-base {\n letter-spacing: normal !important;\n}\n\n.mat-dialog .mat-mdc-dialog-actions {\n justify-content: center;\n}\n.mat-dialog .mat-mdc-dialog-title {\n text-align: center;\n}\n.mat-dialog .mat-mdc-dialog-content {\n color: black !important;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-dialog .mat-mdc-dialog-content {\n color: white !important;\n }\n}\n.theme-override-dark .mat-dialog .mat-mdc-dialog-content {\n color: white !important;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .mdc-dialog__surface {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .mdc-dialog__surface {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .mdc-dialog__title,\n .theme-use-system .mat-mdc-dialog-container .mdc-dialog__content {\n color: white !important;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .mdc-dialog__title,\n.theme-override-dark .mat-mdc-dialog-container .mdc-dialog__content {\n color: white !important;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .mat-mdc-button-base {\n border-color: #4c4c68;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .mat-mdc-button-base {\n border-color: #4c4c68;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .mat-mdc-button-base {\n color: white;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .mat-mdc-button-base {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .help-dialog h1 {\n border-color: white;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .help-dialog h1 {\n border-color: white;\n}\n.mat-mdc-dialog-container .content {\n overflow-y: scroll;\n max-height: 60vh;\n font-size: 11pt;\n}\n.mat-mdc-dialog-container .content p,\n.mat-mdc-dialog-container .content ul {\n margin-block-start: 1em;\n margin-block-end: 1em;\n}\n.mat-mdc-dialog-container .content code {\n color: black;\n padding: 1px 2px;\n word-break: break-word;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .content code {\n background-color: #1a1a23;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .content code {\n background-color: #1a1a23;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .content code {\n border-color: #ddd !important;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .content code {\n border-color: #ddd !important;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container .content code {\n color: white !important;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container .content code {\n color: white !important;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container a {\n color: #7588e8 !important;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container a {\n color: #7588e8 !important;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-mdc-dialog-container a:active,\n .theme-use-system .mat-mdc-dialog-container a:visited {\n color: #e847e8;\n }\n}\n.theme-override-dark .mat-mdc-dialog-container a:active,\n.theme-override-dark .mat-mdc-dialog-container a:visited {\n color: #e847e8;\n}\n.mat-mdc-dialog-container .top-button {\n display: inline;\n float: right;\n margin-top: 14px;\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */ /* Konqueror HTML */ /* Firefox */ /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome and Opera */\n}\n\n.controlsContainer {\n text-align: right;\n display: block;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer {\n background-color: #ddd;\n }\n}\n.theme-override-light .controlsContainer {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .controlsContainer {\n background-color: #2e2e3f;\n}\n@media print {\n .controlsContainer {\n display: none;\n }\n}\n.controlsContainer ul {\n margin: 0;\n padding: 0;\n}\n.controlsContainer .label .control-row-item + .control-row-item {\n margin-right: 6px;\n}\n.controlsContainer .control-sections > li {\n list-style: none;\n display: inline-block;\n border-left: 1px solid #c9c9c9;\n padding: 0 5px 0 5px;\n position: relative;\n}\n.controlsContainer .control-sections > li .section-label {\n font-size: 8pt;\n top: -12px;\n position: absolute;\n padding: 0 5px;\n border-radius: 2px 2px 0 0;\n text-align: center;\n cursor: default;\n -webkit-user-select: none;\n user-select: none;\n white-space: nowrap;\n z-index: 1;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .section-label {\n background-color: #ddd;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .section-label {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .section-label {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .section-label {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .section-label {\n color: #555;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .section-label {\n color: #555;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .section-label {\n color: white;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .section-label {\n color: white;\n}\n.controlsContainer .control-sections > li .control-row-item {\n display: inline-block;\n position: relative;\n height: 34px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item > :not(.disabled) {\n color: black;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item > :not(.disabled) {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item > :not(.disabled) {\n color: white;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item > :not(.disabled) {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item > .disabled {\n color: #aaaaaa;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item > .disabled {\n color: #aaaaaa;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item > .disabled {\n color: rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item > .disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n.controlsContainer .control-sections > li .control-row-item .control-row-button {\n border-radius: 3px;\n padding: 5px;\n height: 24px;\n cursor: pointer;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .control-row-button:hover {\n background-color: #d0d0d0;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item .control-row-button:hover {\n background-color: #d0d0d0;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .control-row-button:hover {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .control-row-button:hover {\n background-color: #4c4c68;\n}\n.controlsContainer .control-sections > li .control-row-item .control-row-button.dropdown::after {\n font-size: 5pt;\n content: \"\u25BC\";\n}\n.controlsContainer .control-sections > li .control-row-item .control-row-button span {\n vertical-align: middle;\n}\n.controlsContainer .control-sections > li .control-row-item .control-row-button .control-label {\n padding-right: 5px;\n}\n.controlsContainer .control-sections > li .control-row-item .dropdown-container {\n position: absolute;\n z-index: 100;\n width: max-content;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n background-color: white;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n border: 1px solid black;\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n border: 1px solid black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n border: 1px solid #4c4c68;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n border: 1px solid #4c4c68;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n box-shadow: 0px 10px 5px rgba(0, 0, 0, 0.5);\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n box-shadow: 0px 10px 5px rgba(0, 0, 0, 0.5);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n box-shadow: 0px 10px 5px #2e2e3f;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container {\n box-shadow: 0px 10px 5px #2e2e3f;\n}\n.controlsContainer .control-sections > li .control-row-item .dropdown-container.left {\n right: 0;\n}\n.controlsContainer .control-sections > li .control-row-item .dropdown-container.inputfield {\n width: 150px;\n padding: 0px 10px 10px;\n z-index: 1000;\n}\n.controlsContainer .control-sections > li .control-row-item .dropdown-container.inputfield .mat-mdc-form-field {\n width: 100%;\n}\n.controlsContainer .control-sections > li .control-row-item .dropdown-container.inputfield .mat-mdc-form-field:first-child {\n padding-top: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-floating-label {\n color: rgba(255, 255, 255, 0.9);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-floating-label {\n color: rgba(255, 255, 255, 0.9);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element,\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element::placeholder {\n color: white;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element,\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element::placeholder {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element:disabled {\n color: rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element:disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mdc-line-ripple::before {\n border-bottom-color: white;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mdc-line-ripple::before {\n border-bottom-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before {\n border-bottom-color: transparent;\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before {\n border-bottom-color: transparent;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before {\n background-image: linear-gradient(to right, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-value-text {\n color: rgba(255, 255, 255, 0.9);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-value-text {\n color: rgba(255, 255, 255, 0.9);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-arrow {\n color: rgba(255, 255, 255, 0.9);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-arrow {\n color: rgba(255, 255, 255, 0.9);\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text {\n color: rgba(0, 0, 0, 0.38);\n }\n}\n.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text {\n color: rgba(0, 0, 0, 0.38);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text {\n color: rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.checkbox-custom {\n opacity: 0;\n position: absolute;\n}\n.checkbox-custom:disabled {\n cursor: default;\n}\n\n.checkbox-custom,\n.checkbox-custom-label {\n display: inline-block;\n vertical-align: middle;\n margin: 5px;\n cursor: pointer;\n}\n\n.checkbox-custom-label {\n position: relative;\n}\n.checkbox-custom-label.disabled {\n cursor: default;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .checkbox-custom-label.disabled {\n color: rgba(0, 0, 0, 0.46);\n }\n}\n.theme-override-light .checkbox-custom-label.disabled {\n color: rgba(0, 0, 0, 0.46);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .checkbox-custom-label.disabled {\n color: rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .checkbox-custom-label.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.checkbox-custom + .checkbox-custom-label:before {\n content: \"\";\n background: #fff;\n border: 3px solid #ddd;\n display: inline-block;\n vertical-align: middle;\n width: 10px;\n height: 10px;\n padding: 2px;\n margin-right: 5px;\n text-align: center;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .checkbox-custom:checked + .checkbox-custom-label:before {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before {\n background: #464dff;\n }\n}\n.theme-override-dark .checkbox-custom:checked + .checkbox-custom-label:before {\n background: #464dff;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px rgb(96, 197, 255);\n }\n}\n.theme-override-light .checkbox-custom:checked + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px #464dff;\n }\n}\n.theme-override-dark .checkbox-custom:checked + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px #464dff;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n background: #b0b0b0;\n }\n}\n.theme-override-light .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n background: #b0b0b0;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n background: #a3a3a3;\n }\n}\n.theme-override-dark .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n background: #a3a3a3;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px #b0b0b0;\n }\n}\n.theme-override-light .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px #b0b0b0;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px #a3a3a3;\n }\n}\n.theme-override-dark .checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n box-shadow: inset 0px 0px 0px 1px #a3a3a3;\n}\n\n.dialog-custom .mat-mdc-dialog-container {\n padding: 0 !important;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-side.mat-drawer-end {\n border-left: none;\n }\n}\n.theme-override-dark .mat-drawer-side.mat-drawer-end {\n border-left: none;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .mat-drawer-inner-container {\n background-color: #f1f1f1;\n }\n}\n.theme-override-light .mat-drawer-inner-container {\n background-color: #f1f1f1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .mat-drawer-inner-container {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container a {\n color: #7588e8;\n }\n}\n.theme-override-dark .mat-drawer-inner-container a {\n color: #7588e8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container a:visited,\n .theme-use-system .mat-drawer-inner-container a:active {\n color: #e847e8;\n }\n}\n.theme-override-dark .mat-drawer-inner-container a:visited,\n.theme-override-dark .mat-drawer-inner-container a:active {\n color: #e847e8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__leading,\n .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__notch,\n .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__trailing, .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__leading,\n .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__notch,\n .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__trailing {\n border-color: white !important;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__leading,\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__notch,\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__trailing, .theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__leading,\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__notch,\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__trailing {\n border-color: white !important;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-mdc-card {\n background-color: #3f3f56;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-card {\n background-color: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-mdc-card {\n color: white;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-card {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-expansion-panel .mat-expansion-panel-header,\n .theme-use-system .mat-drawer-inner-container .mat-expansion-panel-body {\n background-color: #3f3f56;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-expansion-panel .mat-expansion-panel-header,\n.theme-override-dark .mat-drawer-inner-container .mat-expansion-panel-body {\n background-color: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-expansion-panel-header-title {\n color: white;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-expansion-panel-header-title {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-divider {\n border-top-color: #4c4c68;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-divider {\n border-top-color: #4c4c68;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-mdc-button-base {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-button-base {\n background-color: #4c4c68;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .mat-mdc-button-base {\n color: white;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .mat-mdc-button-base {\n color: white;\n}\n\n.mat-mdc-dialog-container .markdown {\n padding: 25px;\n}\n\n.popover {\n position: absolute;\n border-radius: 4px !important;\n width: unset !important;\n}\n\n.mat-mdc-form-field .mdc-text-field--filled, .mat-mdc-form-field .mdc-text-field--filled:hover {\n background-color: transparent !important;\n}\n\n.hide-subscript .mat-mdc-form-field-subscript-wrapper {\n display: none !important;\n}\n\n.mat-mdc-floating-label, .mat-mdc-form-field-hint {\n letter-spacing: normal !important;\n}\n\n.mat-expansion-panel-body {\n padding-bottom: 24px !important;\n}\n\n.matrices {\n overflow-x: scroll;\n min-height: 50vh;\n border: 1px solid #ddd;\n transition: height ease-in-out 0.2s;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrices {\n background-color: #21212c;\n }\n}\n.theme-override-dark .matrices {\n background-color: #21212c;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrices {\n color: white;\n }\n}\n.theme-override-dark .matrices {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrices {\n border: none;\n }\n}\n.theme-override-dark .matrices {\n border: none;\n}\n.matrices .spinner {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 50vh;\n}\n.matrices .spinner mat-progress-spinner circle {\n stroke: #6b7279;\n}\n.matrices .matrices-columns {\n display: table;\n}\n.matrices .matrices-columns .matrix-column {\n display: table-cell;\n white-space: normal;\n padding: 10px;\n}\n@media print {\n .matrices .matrices-columns .matrix-column {\n padding: 0;\n }\n}\n.matrices .matrices-columns .matrix-column .matrix-name {\n text-align: center;\n padding-bottom: 5px;\n margin-bottom: 5px;\n font-size: 16px;\n border-bottom: 1px solid #ddd;\n}\n.matrices .matrices-columns .matrix-column + .matrix-column {\n border-left: 1px solid #ddd;\n}\n\n.colorpicker {\n width: 88px !important;\n align-items: center;\n text-align: center;\n}\n.colorpicker .color-block {\n cursor: pointer;\n margin: 2.5px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .colorpicker .color-block {\n border: 1px solid black;\n }\n}\n.theme-override-light .colorpicker .color-block {\n border: 1px solid black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorpicker .color-block {\n border: 1px solid rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .colorpicker .color-block {\n border: 1px solid rgba(255, 255, 255, 0.25);\n}\n.colorpicker .color-block.square {\n display: inline-block;\n width: 15px;\n height: 15px;\n}\n.colorpicker .color-block.wide {\n display: block;\n height: 15px;\n font-size: 10pt;\n color: gray;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorpicker .color-block.wide {\n color: rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .colorpicker .color-block.wide {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.colorSetup {\n font-size: 8pt;\n}\n.colorSetup .colorpicker {\n width: 10ex;\n}\n.colorSetup .gradient-section-label {\n font-weight: bold;\n padding: 4px;\n text-align: center;\n}\n.colorSetup .gradient-section-content {\n border-style: solid;\n border-width: 1px 0;\n text-align: left;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .colorSetup .gradient-section-content {\n border-color: black;\n }\n}\n.theme-override-light .colorSetup .gradient-section-content {\n border-color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-section-content {\n border-color: white;\n }\n}\n.theme-override-dark .colorSetup .gradient-section-content {\n border-color: white;\n}\n.colorSetup .display-buttons {\n text-align: center;\n}\n.colorSetup .display-buttons .squarebutton {\n padding: 4px 0;\n cursor: pointer;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .colorSetup .display-buttons .squarebutton {\n border: 1px solid #ddd;\n }\n}\n.theme-override-light .colorSetup .display-buttons .squarebutton {\n border: 1px solid #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .display-buttons .squarebutton {\n border: 1px solid rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .colorSetup .display-buttons .squarebutton {\n border: 1px solid rgba(255, 255, 255, 0.25);\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .colorSetup .display-buttons .squarebutton:hover {\n background: #f1f1f1;\n }\n}\n.theme-override-light .colorSetup .display-buttons .squarebutton:hover {\n background: #f1f1f1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .display-buttons .squarebutton:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .colorSetup .display-buttons .squarebutton:hover {\n background: #464dff;\n}\n.colorSetup .display-buttons .squarebutton.gradient:hover {\n text-decoration: underline;\n}\n.colorSetup .display-buttons .presetsmenu {\n width: 90%;\n display: inline-block;\n}\n.colorSetup .gradient-controls table {\n padding: 0;\n margin: 0;\n border-collapse: collapse;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table td button {\n background-color: #1a1a23;\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table td button {\n background-color: #1a1a23;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table td button {\n border: 1px solid rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table td button {\n border: 1px solid rgba(255, 255, 255, 0.25);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table td button {\n color: white;\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table td button {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table td button:hover {\n background-color: black;\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table td button:hover {\n background-color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table td input {\n background-color: black;\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table td input {\n background-color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table td input {\n color: white;\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table td input {\n color: white;\n}\n.colorSetup .gradient-controls table td.buttons > div {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.colorSetup .gradient-controls table td .left,\n.colorSetup .gradient-controls table td .right {\n display: inline-block;\n}\n.colorSetup .gradient-controls table td .left {\n float: left;\n}\n.colorSetup .gradient-controls table td .right {\n text-align: left;\n}\n.colorSetup .gradient-controls table td .right select {\n width: 80px;\n}\n.colorSetup .gradient-controls table td.col2 {\n width: 45px;\n}\n.colorSetup .gradient-controls table td.col2 input[type=number] {\n width: 40px;\n}\n.colorSetup .gradient-controls table .minmax {\n text-align: center;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .colorSetup .gradient-controls table .minmax {\n background-color: #f1f1f1;\n }\n}\n.theme-override-light .colorSetup .gradient-controls table .minmax {\n background-color: #f1f1f1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .colorSetup .gradient-controls table .minmax {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .colorSetup .gradient-controls table .minmax {\n background-color: #4c4c68;\n}\n.colorSetup .gradient-controls .addcolor {\n width: 100%;\n}\n\n.select_behavior {\n padding: 5px;\n text-align: left;\n}\n\n.control-section-header {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n height: 30px;\n}\n\n.control-section-tabs {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n}\n.control-section-tabs .section-label {\n cursor: pointer;\n padding: 6px 24px;\n border-style: solid;\n border-width: 1px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .control-section-tabs .section-label {\n color: black;\n }\n}\n.theme-override-light .control-section-tabs .section-label {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .section-label {\n color: white;\n }\n}\n.theme-override-dark .control-section-tabs .section-label {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .control-section-tabs .section-label {\n border-color: black;\n }\n}\n.theme-override-light .control-section-tabs .section-label {\n border-color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .section-label {\n border-color: white;\n }\n}\n.theme-override-dark .control-section-tabs .section-label {\n border-color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .control-section-tabs .section-label.active {\n background-color: white;\n }\n}\n.theme-override-light .control-section-tabs .section-label.active {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .section-label.active {\n background-color: #364370;\n }\n}\n.theme-override-dark .control-section-tabs .section-label.active {\n background-color: #364370;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .control-section-tabs .section-label.active {\n border-color: #464DFF;\n }\n}\n.theme-override-light .control-section-tabs .section-label.active {\n border-color: #464DFF;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .section-label.active {\n border-color: #464DFF;\n }\n}\n.theme-override-dark .control-section-tabs .section-label.active {\n border-color: #464DFF;\n}\n.control-section-tabs .control-bar-help .control-help-button {\n text-align: center;\n width: 4ex;\n height: 3ex;\n padding: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .control-help-button svg {\n fill: white;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .control-help-button svg {\n fill: white;\n}\n.control-section-tabs .control-bar-help .control-help-button:hover svg {\n fill: #505050;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .control-help-button:hover svg {\n fill: white;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .control-help-button:hover svg {\n fill: white;\n}\n.control-section-tabs .control-bar-help .dropdown-container {\n position: absolute;\n right: 16px;\n display: flex;\n justify-content: center;\n flex-flow: column;\n background: white;\n border-style: solid;\n border-color: #ddd;\n border-width: 1px 0 1px 1px;\n box-shadow: 2px 1px 1px #ddd;\n border-radius: 0 0 5px 5px;\n padding: 10px;\n top: 40px;\n z-index: 9;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .dropdown-container {\n background: #3f3f56;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .dropdown-container {\n background: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .dropdown-container {\n border-color: #3f3f56;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .dropdown-container {\n border-color: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .dropdown-container {\n box-shadow: 2px 1px 1px #2e2e3f;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .dropdown-container {\n box-shadow: 2px 1px 1px #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .dropdown-container {\n color: #7588e8;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .dropdown-container {\n color: #7588e8;\n}\n.control-section-tabs .control-bar-help .dropdown-container button {\n border: none;\n background-color: transparent;\n text-align: right;\n padding-bottom: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .control-section-tabs .control-bar-help .dropdown-container button {\n color: white;\n }\n}\n.theme-override-dark .control-section-tabs .control-bar-help .dropdown-container button {\n color: white;\n}\n.control-section-tabs .control-bar-help .dropdown-container button:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n\n.mat-mdc-select :focus {\n color: #63961c;\n}\n\n.filters {\n padding: 4px;\n}\n.filters .filter {\n text-align: left;\n}\n.filters .filter:not(:first-child) {\n margin-top: 4px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .filters .filter .filter-option:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .filters .filter .filter-option:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .filters .filter .filter-option:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .filters .filter .filter-option:hover {\n background: #464dff;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .warning {\n color: #b30000;\n }\n}\n.theme-override-light .warning {\n color: #b30000;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .warning {\n color: #ffab0f;\n }\n}\n.theme-override-dark .warning {\n color: #ffab0f;\n}\n\n.warning-label {\n vertical-align: super;\n}\n\n.multiselect {\n text-align: center;\n}\n.multiselect .multiselect-grouping .multiselect-grouping-label {\n padding: 4px;\n font-weight: bold;\n}\n.multiselect .multiselect-grouping .multiselect-list {\n text-align: left;\n border-top: 1px solid black;\n border-bottom: 1px solid black;\n height: 200px;\n overflow-y: scroll;\n}\n.multiselect .multiselect-grouping .multiselect-list table {\n border-collapse: collapse;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .multiselect .multiselect-grouping .multiselect-list .multiselect-list-item:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .multiselect .multiselect-grouping .multiselect-list .multiselect-list-item:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .multiselect .multiselect-grouping .multiselect-list .multiselect-list-item:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .multiselect .multiselect-grouping .multiselect-list .multiselect-list-item:hover {\n background: #464dff;\n}\n.multiselect .multiselect-grouping .multiselect-list .multiselect-list-item .multiselect-list-item-label {\n width: 25ex;\n}\n.multiselect .multiselect-grouping .multiselect-list .multiselect-list-item.selected:not(:hover) {\n background: #ddd;\n}\n\n.search {\n text-align: center;\n}\n.search .search-list {\n margin-top: 2px;\n text-align: left;\n border-top: 1px solid black;\n border-bottom: 1px solid black;\n height: 300px;\n overflow-y: scroll;\n}\n.search .search-list table {\n border-collapse: collapse;\n width: 325px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .search .search-list .search-list-item:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .search .search-list .search-list-item:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search .search-list .search-list-item:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .search .search-list .search-list-item:hover {\n background: #464dff;\n}\n.search .search-list .search-list-item .search-list-item-label {\n width: 25ex;\n}\n.search .search-list .search-list-item.selected:not(:hover) {\n background: #ddd;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .search-button:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .search-button:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-button:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .search-button:hover {\n background: #464dff;\n}\n\n.button {\n border: none;\n padding: 4px 10px;\n text-align: center;\n margin: 2px 1px;\n transition: 0.3s;\n display: inline-block;\n text-decoration: none;\n cursor: pointer;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .button {\n background-color: #ddd;\n }\n}\n.theme-override-light .button {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .button {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .button {\n background-color: #4c4c68;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .button {\n color: white;\n }\n}\n.theme-override-dark .button {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .button:hover {\n background-color: #b8b8b8;\n }\n}\n.theme-override-light .button:hover {\n background-color: #b8b8b8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .button:hover {\n background-color: #7588e8;\n }\n}\n.theme-override-dark .button:hover {\n background-color: #7588e8;\n}\n\n.deselectNumber {\n font-size: 5pt;\n bottom: 2px;\n right: 4px;\n position: absolute;\n text-align: right;\n}\n\n.legend {\n z-index: 999;\n position: fixed;\n bottom: 0;\n right: 0;\n width: 300px;\n height: -moz-fit-content;\n height: fit-content;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .legend {\n background-color: white;\n }\n}\n.theme-override-light .legend {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .legend {\n background-color: #3f3f56;\n }\n}\n.theme-override-dark .legend {\n background-color: #3f3f56;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .legend {\n border-left: 1px solid #ddd;\n }\n}\n.theme-override-light .legend {\n border-left: 1px solid #ddd;\n}\n@media print {\n .legend {\n display: none;\n }\n}\n.legend .itemArea {\n position: static;\n overflow-y: scroll;\n margin: 30px 8px 8px;\n height: 270px;\n width: 100%;\n overflow-x: hidden;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .legend .itemArea {\n color: white;\n }\n}\n.theme-override-dark .legend .itemArea {\n color: white;\n}\n.legend .itemArea .item + .item {\n margin-top: 6px;\n}\n.legend .itemArea .item {\n width: 100%;\n padding-left: 5px;\n}\n.legend .itemArea .item .label {\n margin-left: 10px;\n width: 180px;\n}\n\n.legendBar {\n z-index: 999;\n position: fixed;\n bottom: 0;\n right: 0;\n width: 300px;\n height: 30px;\n transition: 0.3s;\n display: flex;\n align-items: center;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .legendBar {\n background-color: #ddd;\n }\n}\n.theme-override-light .legendBar {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .legendBar {\n background-color: #3f3f56;\n }\n}\n.theme-override-dark .legendBar {\n background-color: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .legendBar {\n color: white;\n }\n}\n.theme-override-dark .legendBar {\n color: white;\n}\n@media print {\n .legendBar {\n display: none;\n }\n}\n.legendBar .title {\n flex: 1;\n text-align: center;\n font-size: 14px;\n}\n.legendBar:hover {\n cursor: pointer;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .legendBar:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .legendBar:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .legendBar:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .legendBar:hover {\n background: #464dff;\n}\n\n.layout {\n width: 100px;\n text-align: left;\n}\n.layout select {\n width: 100%;\n}\n.layout .section {\n padding: 10px;\n}\n.layout .section + .section {\n border-top: 1px solid #f1f1f1;\n}\n.layout .subsection {\n padding-left: 5px;\n}\n.layout .subsection .inner-dropdown-container {\n margin: 5px;\n}\n\n.list-input {\n width: 250px !important;\n overflow-y: auto;\n max-height: 50vh;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvZGF0YXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvY29sb3JzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9zcmMvc3R5bGVzLnNjc3MiLCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvQGZvbnRzb3VyY2Uvcm9ib3RvL2luZGV4LmNzcyIsIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9AZm9udHNvdXJjZS9yb2JvdG8tbW9uby9pbmRleC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDU2hCOzs7Ozs7OztFQUFBO0FDVEEsOEVBQUE7QUNBQSxtQ0FBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSwySEFBQTtFQUNBLHNGQUFBO0FIYUY7QUdWQSwrQkFBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtSEFBQTtFQUNBLG9FQUFBO0FIWUY7QUdUQSxnQ0FBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxSEFBQTtFQUNBLDBCQUFBO0FIV0Y7QUdSQSw0QkFBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSw2R0FBQTtFQUNBLHNGQUFBO0FIVUY7QUdQQSxpQ0FBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSx1SEFBQTtFQUNBLHVLQUFBO0FIU0Y7QUdOQSxnQ0FBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxSEFBQTtFQUNBLGdKQUFBO0FIUUY7QUdMQSw0QkFBQTtBQUNBO0VBQ0UscUJBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0VBQ0Es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LFdDSGlDO0VGME4zQztBQUNGO0FDck5JO0VBR0ksV0NUcUM7QUY4TjdDO0FDek1RO0VBSEo7SUFJUSxZQ3RCd0Q7RUZrT2xFO0FBQ0Y7QUMxTUk7RUFHSSxZQzVCNEQ7QUZzT3BFO0FFek5RO0VBQ0kscUJBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7QUYyTlo7QUN6T1E7RUFISjtJQUlRLFlDZ0JxQztFRjROL0M7QUFDRjtBQzFPSTtFQUdJLFlDVXlDO0FGZ09qRDtBQzlOUTtFQUhKO0lBSVEsWUNINEM7RUZvT3REO0FBQ0Y7QUMvTkk7RUFHSSxZQ1RnRDtBRndPeEQ7QUN6UFE7RUFISjtJQUlRLGNDb0JxQztFRndPL0M7QUFDRjtBQzFQSTtFQUdJLGNDY3lDO0FGNE9qRDtBQzlPUTtFQUhKO0lBSVEsZ0NDQzhDO0VGZ1B4RDtBQUNGO0FDL09JO0VBR0ksZ0NDTGtEO0FGb1AxRDtBRWpQWTtFQUNJLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0FGbVBoQjtBQy9RUTtFQUhKO0lBSVEseUJDOEJvRDtFRm9QOUQ7QUFDRjtBQ2hSSTtFQUdJLHlCQ3dCd0Q7QUZ3UGhFO0FDcFFRO0VBSEo7SUFJUSx5QkNXbUY7RUY0UDdGO0FBQ0Y7QUNyUUk7RUFHSSx5QkNLdUY7QUZnUS9GO0FFN1BnQjtFQUNJLGNBQUE7RUFDQSxZQUFBO0FGK1BwQjtBRTdQZ0I7RUFDSSxzQkFBQTtBRitQcEI7QUU3UGdCO0VBQ0ksa0JBQUE7QUYrUHBCO0FFMVBZO0VBU0ksa0JBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7QUZvUGhCO0FDOVNRO0VBSEo7SUFJUSx1QkMrQ2dEO0VGa1ExRDtBQUNGO0FDL1NJO0VBR0ksdUJDeUNvRDtBRnNRNUQ7QUNuU1E7RUFISjtJQUlRLHlCQzRCdUQ7RUYwUWpFO0FBQ0Y7QUNwU0k7RUFHSSx5QkNzQjJEO0FGOFFuRTtBQzlUUTtFQUhKO0lBSVEsdUJDZ0RzQztFRmlSaEQ7QUFDRjtBQy9USTtFQUdJLHVCQzBDMEM7QUZxUmxEO0FDblRRO0VBSEo7SUFJUSx5QkM2QnVEO0VGeVJqRTtBQUNGO0FDcFRJO0VBR0kseUJDdUIyRDtBRjZSbkU7QUM5VVE7RUFISjtJQUlRLDJDQ2lEMEM7RUZnU3BEO0FBQ0Y7QUMvVUk7RUFHSSwyQ0MyQzhDO0FGb1N0RDtBQ25VUTtFQUhKO0lBSVEsZ0NDOEIyRTtFRndTckY7QUFDRjtBQ3BVSTtFQUdJLGdDQ3dCK0U7QUY0U3ZGO0FFMVNnQjtFQUNJLFFBQUE7QUY0U3BCO0FFclNnQjtFQUNJLFlBQUE7RUFDQSxzQkFBQTtFQUNBLGFBQUE7QUZ1U3BCO0FFclNvQjtFQUNJLFdBQUE7QUZ1U3hCO0FFclN3QjtFQUNJLGdCQUFBO0FGdVM1QjtBQ3pWUTtFQUhKO0lBSVEsK0JDc0RtRDtFRnNTN0Q7QUFDRjtBQzFWSTtFQUdJLCtCQ2dEdUQ7QUYwUy9EO0FDaldRO0VBSEo7O0lBSVEsWUMyRG1EO0VGMFM3RDtBQUNGO0FDbldJOztFQUdJLFlDcUR1RDtBRitTL0Q7QUMzV1E7RUFISjtJQUlRLGdDQzhEbUQ7RUZnVDdEO0FBQ0Y7QUM1V0k7RUFHSSxnQ0N3RHVEO0FGb1QvRDtBQ25YUTtFQUhKO0lBSVEsMEJDaUVpRTtFRnFUM0U7QUFDRjtBQ3BYSTtFQUdJLDBCQzJEcUU7QUZ5VDdFO0FDM1hRO0VBSEo7SUFJUSxnQ0NvRWlFO0VGMFQzRTtBQUNGO0FDNVhJO0VBR0ksZ0NDOERxRTtBRjhUN0U7QUNuWVE7RUFISjtJQUlRLHNIQ3VFWTtFRitUdEI7QUFDRjtBQ3BZSTtFQUdJLHNIQ2lFZ0I7QUZtVXhCO0FDM1lRO0VBSEo7SUFJUSwrQkMyRW1EO0VGbVU3RDtBQUNGO0FDNVlJO0VBR0ksK0JDcUV1RDtBRnVVL0Q7QUNuWlE7RUFISjtJQUlRLCtCQzhFbUQ7RUZ3VTdEO0FBQ0Y7QUNwWkk7RUFHSSwrQkN3RXVEO0FGNFUvRDtBQzlhUTtFQUhKO0lBSVEsMEJDcUd5QztFRjRVbkQ7QUFDRjtBQy9hSTtFQUdJLDBCQytGNkM7QUZnVnJEO0FDbmFRO0VBSEo7SUFJUSxnQ0NrRjhEO0VGb1Z4RTtBQUNGO0FDcGFJO0VBR0ksZ0NDNEVrRTtBRndWMUU7O0FFN1VBO0VBQ0ksVUFBQTtFQUNBLGtCQUFBO0FGZ1ZKO0FFOVVJO0VBQ0ksZUFBQTtBRmdWUjs7QUU1VUE7O0VBRUkscUJBQUE7RUFDQSxzQkFBQTtFQUNBLFdBQUE7RUFDQSxlQUFBO0FGK1VKOztBRTVVQTtFQUNJLGtCQUFBO0FGK1VKO0FFN1VJO0VBRUksZUFBQTtBRjhVUjtBQ3JkUTtFQUhKO0lBSVEsMEJDcUk2QjtFRm1WdkM7QUFDRjtBQ3RkSTtFQUdJLDBCQytIaUM7QUZ1VnpDO0FDMWNRO0VBSEo7SUFJUSxnQ0NrSGtEO0VGMlY1RDtBQUNGO0FDM2NJO0VBR0ksZ0NDNEdzRDtBRitWOUQ7O0FFMVZBO0VBQ0ksV0FBQTtFQUNBLGdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxxQkFBQTtFQUNBLHNCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7RUFDQSxrQkFBQTtBRjZWSjs7QUNsZlE7RUFISjtJQUlRLDZCQ3dKOEI7RUY4VnhDO0FBQ0Y7QUNwZkk7RUFHSSw2QkNrSmtDO0FGa1cxQztBQ3hlUTtFQUhKO0lBSVEsbUJDcUkyRDtFRnNXckU7QUFDRjtBQ3plSTtFQUdJLG1CQytIK0Q7QUYwV3ZFO0FDbmdCUTtFQUhKO0lBSVEsbURDeUo4QjtFRjZXeEM7QUFDRjtBQ3BnQkk7RUFHSSxtRENtSmtDO0FGaVgxQztBQ3hmUTtFQUhKO0lBSVEseUNDc0lpRjtFRnFYM0Y7QUFDRjtBQ3pmSTtFQUdJLHlDQ2dJcUY7QUZ5WDdGOztBQ25oQlE7RUFISjtJQUlRLG1CQzZKOEI7RUYwWHhDO0FBQ0Y7QUNyaEJJO0VBR0ksbUJDdUprQztBRjhYMUM7QUN6Z0JRO0VBSEo7SUFJUSxtQkMwSTZFO0VGa1l2RjtBQUNGO0FDMWdCSTtFQUdJLG1CQ29JaUY7QUZzWXpGO0FDcGlCUTtFQUhKO0lBSVEseUNDZ0tKO0VGdVlOO0FBQ0Y7QUNyaUJJO0VBR0kseUNDMEpBO0FGMllSO0FDemhCUTtFQUhKO0lBSVEseUNDOElKO0VGOFlOO0FBQ0Y7QUMxaEJJO0VBR0kseUNDd0lBO0FGa1pSOztBRTNZQTtFQUNJLHFCQUFBO0FGOFlKOztBQ3JpQlE7RUFISjtJQUlRLGlCQzBKeUM7RUYrWW5EO0FBQ0Y7QUN2aUJJO0VBR0ksaUJDb0o2QztBRm1ackQ7O0FDamtCUTtFQUhKO0lBSVEseUJDaUxvQztFRm9aOUM7QUFDRjtBQ25rQkk7RUFHSSx5QkMyS3dDO0FGd1poRDtBQ3ZqQlE7RUFISjtJQUlRLHlCQzhKd0Q7RUY0WmxFO0FBQ0Y7QUN4akJJO0VBR0kseUJDd0o0RDtBRmdhcEU7QUMvakJRO0VBSEo7SUFJUSxjQ2lLdUM7RUZpYWpEO0FBQ0Y7QUNoa0JJO0VBR0ksY0MySjJDO0FGcWFuRDtBQ3ZrQlE7RUFISjs7SUFJUSxjQ3FLdUM7RUZzYWpEO0FBQ0Y7QUN6a0JJOztFQUdJLGNDK0oyQztBRjJhbkQ7QUNqbEJRO0VBSEo7Ozs7O0lBSVEsOEJDMktrRDtFRjZhNUQ7QUFDRjtBQ3RsQkk7Ozs7O0VBR0ksOEJDcUtzRDtBRnFiOUQ7QUNqbUJRO0VBSEo7SUFJUSx5QkNnTGtEO0VGb2I1RDtBQUNGO0FDbG1CSTtFQUdJLHlCQzBLc0Q7QUZ3YjlEO0FDem1CUTtFQUhKO0lBSVEsWUNpTHVDO0VGMmJqRDtBQUNGO0FDMW1CSTtFQUdJLFlDMksyQztBRitibkQ7QUNqbkJRO0VBSEo7O0lBSVEseUJDc0xrRDtFRitiNUQ7QUFDRjtBQ25uQkk7O0VBR0kseUJDZ0xzRDtBRm9jOUQ7QUMzbkJRO0VBSEo7SUFJUSxZQzBMdUM7RUZvY2pEO0FBQ0Y7QUM1bkJJO0VBR0ksWUNvTDJDO0FGd2NuRDtBQ25vQlE7RUFISjtJQUlRLHlCQzhMa0Q7RUZ3YzVEO0FBQ0Y7QUNwb0JJO0VBR0kseUJDd0xzRDtBRjRjOUQ7QUMzb0JRO0VBSEo7SUFJUSx5QkNrTWtEO0VGNGM1RDtBQUNGO0FDNW9CSTtFQUdJLHlCQzRMc0Q7QUZnZDlEO0FDbnBCUTtFQUhKO0lBSVEsWUNtTXVDO0VGbWRqRDtBQUNGO0FDcHBCSTtFQUdJLFlDNkwyQztBRnVkbkQ7O0FFbmRBO0VBQ0ksYUFBQTtBRnNkSjs7QUVsZEE7RUFFSSxrQkFBQTtF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QSxRQUFBO0VBQ0EsWUFBQTtFQUNBLFlBQUE7RUFDQSxnQkFBQTtFQUNBLGFBQUE7RUFJQSxtQkFBQTtBQTJwQ0o7QUNuN0NRO0VBSEo7SUFJUSxzQkQwUW9DO0VBNHFDOUM7QUFDRjtBQ3A3Q0k7RUFHSSxzQkRvUXdDO0FBZ3JDaEQ7QUN4NkNRO0VBSEo7SUFJUSx5QkR1UHVEO0VBb3JDakU7QUFDRjtBQ3o2Q0k7RUFHSSx5QkRpUDJEO0FBd3JDbkU7QUNoN0NRO0VBSEo7SUFJUSxZRHdQbUM7RUEyckM3QztBQUNGO0FDajdDSTtFQUdJLFlEa1B1QztBQStyQy9DO0FBdHJDSTtFQVhKO0lBWVEsYUFBQTtFQXlyQ047QUFDRjtBQXRyQ0k7RUFDSSxPQUFBO0VBQ0Esa0JBQUE7RUFDQSxlQUFBO0FBd3JDUjtBQXJyQ0k7RUFFSSxlQUFBO0FBc3JDUjtBQ3g5Q1E7RUFISjtJQUlRLDZCRGdTa0M7RUEyckM1QztBQUNGO0FDejlDSTtFQUdJLDZCRDBSc0M7QUErckM5QztBQzc4Q1E7RUFISjtJQUlRLG1CRDZRK0Q7RUFtc0N6RTtBQUNGO0FDOThDSTtFQUdJLG1CRHVRbUU7QUF1c0MzRTs7QUFsc0NBO0VBQ0ksWUFBQTtFQUNBLGdCQUFBO0FBcXNDSjtBQW5zQ0k7RUFDSSxXQUFBO0FBcXNDUjtBQWxzQ0k7RUFDSSxhQUFBO0FBb3NDUjtBQWxzQ1E7RUFDSSw2QkFBQTtBQW9zQ1o7QUFoc0NJO0VBQ0ksaUJBQUE7QUFrc0NSO0FBaHNDUTtFQUNJLFdBQUE7QUFrc0NaOztBQTdyQ0E7RUFDSSx1QkFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7QUFnc0NKIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnLi4vLi4vY29sb3JzLnNjc3MnO1xuQGltcG9ydCAnLi4vLi4vc3R5bGVzLnNjc3MnO1xuXG4kY2VsbFNpemU6IDE1cHg7XG5cbi8vICBfICBfIF9fXyBfX18gXyAgXyBfICAgIF9fXyBfX18gXyAgXyBfX19fXyBfX18gXyAgXyAgX19fXG4vLyB8IHx8IHxfIF8vIF9ffCB8fCB8IHwgIHxfIF8vIF9ffCB8fCB8XyAgIF98XyBffCBcXHwgfC8gX198XG4vLyB8IF9fIHx8IHwgKF8gfCBfXyB8IHxfXyB8IHwgKF8gfCBfXyB8IHwgfCAgfCB8fCAuYCB8IChfIHxcbi8vIHxffHxffF9fX1xcX19ffF98fF98X19fX3xfX19cXF9fX3xffHxffCB8X3wgfF9fX3xffFxcX3xcXF9fX3xcblxuLy8gIF9fICBfXyAgIF8gICBfX18gXyAgXyAgIF9fX19fIF8gICBfX18gXyAgICBfX19cbi8vIHwgIFxcLyAgfCAvX1xcIHxfIF98IFxcfCB8IHxfICAgXy9fXFwgfCBfICkgfCAgfCBfX3xcbi8vIHwgfFxcL3wgfC8gXyBcXCB8IHx8IC5gIHwgICB8IHwvIF8gXFx8IF8gXFwgfF9ffCBffFxuLy8gfF98ICB8Xy9fLyBcXF9cXF9fX3xffFxcX3wgICB8Xy9fLyBcXF9cXF9fXy9fX19ffF9fX3xcblxuLy8gY29udGVudCBvZiBlYWNoIHRhYlxuLm1hdHJpY2VzIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBsaWdodGVuKGNvbG9yKGRhcmstMSksIDMlKSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlcicsIG5vbmUpO1xuICAgIG92ZXJmbG93LXg6IHNjcm9sbDtcbiAgICBtaW4taGVpZ2h0OiA1MHZoO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yKHBhbmVsLWRhcmspO1xuICAgIHRyYW5zaXRpb246IGhlaWdodCBlYXNlLWluLW91dCAwLjJzO1xuXG4gICAgLnNwaW5uZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgaGVpZ2h0OiA1MHZoO1xuXG4gICAgICAgIG1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSB7XG4gICAgICAgICAgICBzdHJva2U6IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0cmljZXMtY29sdW1ucyB7XG4gICAgICAgIGRpc3BsYXk6IHRhYmxlO1xuXG4gICAgICAgIC5tYXRyaXgtY29sdW1uIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1hdHJpeC1uYW1lIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvcihwYW5lbC1kYXJrKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJiArIC5tYXRyaXgtY29sdW1uIHtcbiAgICAgICAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGNvbG9yKHBhbmVsLWRhcmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4uY29sb3JwaWNrZXIge1xuICAgIHdpZHRoOiAoJGNlbGxTaXplICsgNSArIDIpICogNCAhaW1wb3J0YW50OyAvL292ZXJyaWRlIHByZXNldCB3aWR0aFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgLmNvbG9yLWJsb2NrIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JvcmRlcicsIDFweCBzb2xpZCBibGFjaywgMXB4IHNvbGlkIGNvbG9yKGRhcmstZGlzYWJsZWQpKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBtYXJnaW46IDIuNXB4O1xuXG4gICAgICAgICYuc3F1YXJlIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIHdpZHRoOiAkY2VsbFNpemU7XG4gICAgICAgICAgICBoZWlnaHQ6ICRjZWxsU2l6ZTtcbiAgICAgICAgfVxuXG4gICAgICAgICYud2lkZSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgY29sb3IoZGFyay1kaXNhYmxlZCkpO1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBoZWlnaHQ6ICRjZWxsU2l6ZTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTBwdDtcbiAgICAgICAgICAgIGNvbG9yOiBkYXJrZW4od2hpdGUsIDUwJSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vY29sb3IgY29udHJvbHNcbi5jb2xvclNldHVwIHtcbiAgICBmb250LXNpemU6IDhwdDtcblxuICAgIC5jb2xvcnBpY2tlciB7XG4gICAgICAgIHdpZHRoOiAxMGV4O1xuICAgIH1cblxuICAgIC5ncmFkaWVudC1zZWN0aW9uLWxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIHBhZGRpbmc6IDRweDtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5ncmFkaWVudC1zZWN0aW9uLWNvbnRlbnQge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm9yZGVyLWNvbG9yJywgYmxhY2ssIHdoaXRlKTtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAxcHggMDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG5cbiAgICAuZGlzcGxheS1idXR0b25zIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuXG4gICAgICAgIC5zcXVhcmVidXR0b24ge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JvcmRlcicsIDFweCBzb2xpZCBjb2xvcihwYW5lbC1kYXJrKSwgMXB4IHNvbGlkIGNvbG9yKGRhcmstZGlzYWJsZWQpKTtcbiAgICAgICAgICAgIHBhZGRpbmc6IDRweCAwO1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGNvbG9yKHBhbmVsLWxpZ2h0KSwgY29sb3IoY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmLmdyYWRpZW50OmhvdmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLy9zaW5jZSBiYWNrZ3JvdW5kIGNvbG9yIHdvbid0IGJlIHNlZW4gb24gZ3JhZGllbnQgYnV0dG9uc1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLnByZXNldHNtZW51IHtcbiAgICAgICAgICAgIHdpZHRoOiA5MCU7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuZ3JhZGllbnQtY29udHJvbHMge1xuICAgICAgICB0YWJsZSB7XG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcblxuICAgICAgICAgICAgdGQge1xuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKGRhcmstMSkpO1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlcicsIDFweCBzb2xpZCBjb2xvcihkYXJrLWRpc2FibGVkKSk7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCB3aGl0ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBibGFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGJsYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIHdoaXRlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLmJ1dHRvbnMgPiBkaXYge1xuICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubGVmdCxcbiAgICAgICAgICAgICAgICAucmlnaHQge1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmxlZnQge1xuICAgICAgICAgICAgICAgICAgICBmbG9hdDogbGVmdDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAucmlnaHQge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogODBweDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICYuY29sMiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0NXB4O1xuXG4gICAgICAgICAgICAgICAgICAgIGlucHV0W3R5cGU9J251bWJlciddIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiA0MHB4O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWlubWF4IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKHBhbmVsLWxpZ2h0KSwgY29sb3IoZGFyay00KSk7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLmFkZGNvbG9yIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uc2VsZWN0X2JlaGF2aW9yIHtcbiAgICBwYWRkaW5nOiA1cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmNvbnRyb2wtc2VjdGlvbi1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBcbiAgICBoZWlnaHQ6IDMwcHg7XG4gIH1cbiAgXG4gIC5jb250cm9sLXNlY3Rpb24tdGFicyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIFxuICAgIC5zZWN0aW9uLWxhYmVsIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBcbiAgICAgIHBhZGRpbmc6IDZweCAyNHB4O1xuICAgIFxuICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoXCJjb2xvclwiLCBibGFjaywgd2hpdGUpO1xuICAgIFxuICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoXCJib3JkZXItY29sb3JcIiwgYmxhY2ssIHdoaXRlKTtcbiAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICBib3JkZXItd2lkdGg6IDFweDtcbiAgICBcbiAgICAgICYuYWN0aXZlIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsIHdoaXRlLCAjMzY0MzcwKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoXCJib3JkZXItY29sb3JcIiwgIzQ2NERGRiwgIzQ2NERGRik7XG4gICAgICB9XG4gICAgfVxuICBcbiAgICAuY29udHJvbC1iYXItaGVscCB7XG4gICAgICAuY29udHJvbC1oZWxwLWJ1dHRvbiB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDRleDtcbiAgICAgICAgaGVpZ2h0OiAzZXg7XG4gICAgICAgIHBhZGRpbmc6IDVweDtcbiAgXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KFwiZmlsbFwiLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlciBzdmcge1xuICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seShcImZpbGxcIiwgb24tY29sb3IoZGFyaykpO1xuICAgICAgICAgIGZpbGw6ICM1MDUwNTA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgXG4gICAgICAuZHJvcGRvd24tY29udGFpbmVyIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KFwiYmFja2dyb3VuZFwiLCBjb2xvcihkYXJrLTMpKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KFwiYm9yZGVyLWNvbG9yXCIsIGNvbG9yKGRhcmstMykpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoXCJib3gtc2hhZG93XCIsIDJweCAxcHggMXB4IGNvbG9yKGRhcmstMikpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoXCJjb2xvclwiLCBjb2xvcihkYXJrLWxpbmspKTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGRkO1xuICAgICAgICBib3JkZXItd2lkdGg6IDFweCAwIDFweCAxcHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDJweCAxcHggMXB4ICNkZGQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA1cHggNXB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICB0b3A6IDQwcHg7XG4gICAgICAgIHotaW5kZXg6IDk7XG4gICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoXCJjb2xvclwiLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbn1cblxuLm1hdC1tZGMtc2VsZWN0IHtcbiAgICA6Zm9jdXMge1xuICAgICAgICBjb2xvcjogIzYzOTYxYztcbiAgICB9XG59XG5cbi5maWx0ZXJzIHtcbiAgICBwYWRkaW5nOiA0cHg7XG5cbiAgICAuZmlsdGVyIHtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcblxuICAgICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IDRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5maWx0ZXItb3B0aW9uIHtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgY29sb3IoY2VsbC1oaWdobGlnaHQtY29sb3IpLCBjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi53YXJuaW5nIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCAjYjMwMDAwLCAjZmZhYjBmKTtcbn1cblxuLndhcm5pbmctbGFiZWwge1xuICAgIHZlcnRpY2FsLWFsaWduOiBzdXBlcjtcbn1cblxuLm11bHRpc2VsZWN0IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAubXVsdGlzZWxlY3QtZ3JvdXBpbmcge1xuICAgICAgICAubXVsdGlzZWxlY3QtZ3JvdXBpbmctbGFiZWwge1xuICAgICAgICAgICAgcGFkZGluZzogNHB4O1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIH1cblxuICAgICAgICAubXVsdGlzZWxlY3QtbGlzdCB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrO1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xuICAgICAgICAgICAgaGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcblxuICAgICAgICAgICAgdGFibGUge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tdWx0aXNlbGVjdC1saXN0LWl0ZW0ge1xuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWNvbG9yKSwgY29sb3IoY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5tdWx0aXNlbGVjdC1saXN0LWl0ZW0tbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjVleDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAmLnNlbGVjdGVkOm5vdCg6aG92ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3IocGFuZWwtZGFyayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4uc2VhcmNoIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG5cbiAgICAuc2VhcmNoLWxpc3Qge1xuICAgICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjaztcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO1xuICAgICAgICBoZWlnaHQ6IDMwMHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG5cbiAgICAgICAgdGFibGUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgICAgIHdpZHRoOiAzMjVweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gtbGlzdC1pdGVtIHtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgY29sb3IoY2VsbC1oaWdobGlnaHQtY29sb3IpLCBjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5zZWFyY2gtbGlzdC1pdGVtLWxhYmVsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjVleDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgJi5zZWxlY3RlZDpub3QoOmhvdmVyKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogY29sb3IocGFuZWwtZGFyayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5zZWFyY2gtYnV0dG9uIHtcbiAgICAmOmhvdmVyIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQnLCBjb2xvcihjZWxsLWhpZ2hsaWdodC1jb2xvciksIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3IpKTtcbiAgICB9XG59XG5cbi5idXR0b24ge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IocGFuZWwtZGFyayksIGNvbG9yKGRhcmstNCkpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW46IDJweCAxcHg7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKGJ1dHRvbi1kYXJrKSwgY29sb3IoZGFyay1saW5rKSk7XG4gICAgfVxufVxuXG4uZGVzZWxlY3ROdW1iZXIge1xuICAgIGZvbnQtc2l6ZTogNXB0O1xuICAgIGJvdHRvbTogMnB4O1xuICAgIHJpZ2h0OiA0cHg7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4ubGVnZW5kIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIHdoaXRlLCBjb2xvcihkYXJrLTMpKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCdib3JkZXItbGVmdCcsIDFweCBzb2xpZCBjb2xvcihwYW5lbC1kYXJrKSk7XG4gICAgei1pbmRleDogOTk5O1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBib3R0b206IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGhlaWdodDogZml0LWNvbnRlbnQ7XG4gICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuaXRlbUFyZWEge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xuICAgICAgICBwb3NpdGlvbjogc3RhdGljO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIG1hcmdpbjogMzBweCA4cHggOHB4O1xuICAgICAgICBoZWlnaHQ6IDI3MHB4O1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuXG4gICAgICAgIC5pdGVtICsgLml0ZW0ge1xuICAgICAgICAgICAgbWFyZ2luLXRvcDogNnB4O1xuICAgICAgICB9XG4gICAgICAgIC5pdGVtIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7XG5cbiAgICAgICAgICAgIC5sYWJlbCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDE4MHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4ubGVnZW5kQmFyIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKHBhbmVsLWRhcmspLCBjb2xvcihkYXJrLTMpKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xuICAgIHotaW5kZXg6IDk5OTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgYm90dG9tOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAzMDBweDtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gICAgdHJhbnNpdGlvbjogMC4zcztcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAudGl0bGUge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB9XG5cbiAgICAmOmhvdmVyIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQnLCBjb2xvcihjZWxsLWhpZ2hsaWdodC1jb2xvciksIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3IpKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbn1cblxuLmxheW91dCB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG5cbiAgICBzZWxlY3Qge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAuc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDEwcHg7XG5cbiAgICAgICAgJiArIC5zZWN0aW9uIHtcbiAgICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvcihwYW5lbC1saWdodCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuc3Vic2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogNXB4O1xuXG4gICAgICAgIC5pbm5lci1kcm9wZG93bi1jb250YWluZXIge1xuICAgICAgICAgICAgbWFyZ2luOiA1cHg7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5saXN0LWlucHV0IHtcbiAgICB3aWR0aDogMjUwcHggIWltcG9ydGFudDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIG1heC1oZWlnaHQ6IDUwdmg7XG59XG4iLCIkY29sdW1uLWhvdmVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7XG4kZGlzYWJsZWQtY29sb3I6IGRhcmtlbigkY29sdW1uLWhvdmVyLWNvbG9yLCAyMCUpO1xuXG4vLyBBVFQmQ0sgQnJhbmQgY29sb3JzXG4kYXR0YWNrLWNvbG9yczogKFxuICAgIGF0dGFjay1vcmFuZ2U6ICNjNjNmMWYsXG4gICAgYXR0YWNrLWJsdWU6ICMwNjJmNGYsXG4pO1xuXG4vKipcbiAqIENvbG9ycyB1c2VkIGFjcm9zcyB0aGUgTmF2aWdhdG9yLiBTaGFyZWQgYnkgdGhlIEFUVCZDSyBXZWJzaXRlLlxuICogRm9yIGVhY2ggY29sb3ItcGFpcjpcbiAqICAgLSBcImNvbG9yXCIgcmVmZXJzIHRvIHRoZSBjb2xvciBpdHNlbGZcbiAqICAgLSBcIm9uLWNvbG9yXCIgcmVmZXJzIHRvIHRoZSBtb3N0IHJlYWRhYmxlIHRleHQtY29sb3IgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgY29sb3IuXG4gKiBOb3RlOiBzb21lIGNvbG9ycyBkb24ndCBkZWZpbmUgb24tY29sb3JzLiBUaGlzIGlzIGJlY2F1c2UsIGZvciB0aGVzZSBjb2xvcnMsIHRoZXkgYXJlbid0IGludGVuZGVkIHRvXG4gKiBhcHBlYXIgd2l0aCBpbm5lciBjb250ZW50LiBGb3IgZXhhbXBsZSwgXCJsaW5rXCIgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBsaW5rIHRleHQsIHdoaWNoIGluaGVyZW50bHlcbiAqIGNhbm5vdCBoYXZlIGlubmVyIHRleHQuXG4gKi9cbiRjb2xvcnM6IChcbiAgICBwcmltYXJ5OiAoXG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stb3JhbmdlKSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy91c2VkIGZvciBoZWFkZXIgYW5kIHNvbWUgbmF2IGVsZW1lbnRzXG4gICAgc2Vjb25kYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLWJsdWUpLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vdXNlZCBmb3IgZm9vdGVyIGFuZCBzb21lIGJ1dHRvbnNcbiAgICBib2R5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICAvL3ByaW1hcnkgcGFnZSBib2R5XG4gICAgbGlnaHQ6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIGRhcms6IChcbiAgICAgICAgY29sb3I6ICMwODA4MGIsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vIGRhcmsgdGhlbWUgY29sb3JzIHZhcmlhdGlvbnMgMC0zIChmcm9tIGRhcmtlc3QgdG8gbGlnaHRlc3QpXG4gICAgZGFyay0xOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzFhMWEyMyxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTI6IChcbiAgICAgICAgY29sb3I6ICMyZTJlM2YsXG4gICAgICAgIG9uLWNvbG9yOiAjZmE2MzQxLFxuICAgICksXG4gICAgLy8gYWNjZW50IGRhcmsgY29sb3Igc2NoZW1lICh1c2VkIGZvciA6aG92ZXIgc2VsZWN0b3JzKVxuICAgIGRhcmstMzpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMzZjNmNTYsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay00OiAoXG4gICAgICAgIGNvbG9yOiAjNGM0YzY4LFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBkYXJrLWRpc2FibGVkOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyAyNSUpLFxuICAgICksXG4gICAgZGFyay1saW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNzU4OGU4LFxuICAgICksXG4gICAgZGFyay1saW5rLWFjdGl2ZTogKFxuICAgICAgICBjb2xvcjogI2U4NDdlOCxcbiAgICApLFxuICAgIGxpbms6IChcbiAgICAgICAgY29sb3I6ICM0ZjdjYWMsXG4gICAgKSxcbiAgICAvLyBoeXBlcmxpbmtzXG4gICAgbWF0cml4LWhlYWRlcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IGdyYXksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy8gY29sb3Igb2YgbWF0cml4IGhlYWRlcnNcbiAgICBjZWxsLWhpZ2hsaWdodC1jb2xvcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHJnYig5NiwgMTk3LCAyNTUpLFxuICAgICAgICApLFxuICAgIGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM0NjRkZmYsXG4gICAgKSxcbiAgICBob3Zlci1jZWxsLWZvbnQtY29sb3I6IChcbiAgICAgICAgY29sb3I6IHJnYigwLCAwLCAwKSxcbiAgICApLFxuICAgIHBhbmVsLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNkZGQsXG4gICAgKSxcbiAgICBwYW5lbC1saWdodDogKFxuICAgICAgICBjb2xvcjogbGlnaHRlbigjZGRkLCA4JSksXG4gICAgKSxcbiAgICB0YWItdGV4dC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzU1NSxcbiAgICApLFxuICAgIGJ1dHRvbi1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjYjhiOGI4LFxuICAgICksXG4gICAgLy9ib290c3RyYXAgY29sb3JzXG4gICAgYm9vdHN0cmFwLXByaW1hcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjNDI4YmNhLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGJvb3RzdHJhcC1zdWNjZXNzOiAoXG4gICAgICAgIGNvbG9yOiAjNWNiODVjLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBib290c3RyYXAtZGFuZ2VyOiAoXG4gICAgICAgIGNvbG9yOiAjZDk1MzRmLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtd2FybmluZzogKFxuICAgICAgICBjb2xvcjogI2YwYWQ0ZSxcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWluZm86IChcbiAgICAgICAgY29sb3I6ICM1YmMwZGUsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuKTtcblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBjb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIGNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBnZXQgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGNvbG9yLCBmb3IgcGF0dGVybmluZ1xuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgZGFyaywgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGxpZ2h0ZXIuXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBsaWdodCwgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGRhcmtlci5cbi8vIGNvbnRyYXN0LCBhbiBvcHRpb25hbCBhcmd1bWVudCwgbXVsdGlwbGllcyB0byBjcmVhdGUgYSBtb3JlIGRpc3RhbnQgb3Igc2ltaWxhciBjb2xvci4gPjEgaXMgbW9yZSBkaXN0YW50LCA8MSBpcyBtb3JlIHNpbWlsYXIuXG5AZnVuY3Rpb24gY29sb3ItYWx0ZXJuYXRlKCRuYW1lLCAkY29udHJhc3Q6IDEpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAkd2VpZ2h0OiAkY29udHJhc3QgKiA1JSk7XG59XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgb24tY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBvbi1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ29uLWNvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZW1waGFzaXplZCBvbi1jb2xvciBpcyBsZXNzIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgb24tY29sb3IoJG5hbWUpKTtcbn1cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGRlZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBkZWVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbW9yZSBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWRlZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChjb2xvcigkbmFtZSksIG9uLWNvbG9yKCRuYW1lKSwgMjUlKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBjb21wdXRlIGEgYm9yZGVyIGNvbG9yIGZvciB0aGUgY29sb3JcbkBmdW5jdGlvbiBib3JkZXItY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAxMi41JSk7XG4gICAgLy8gQHJldHVybiByZ2JhKGludmVydChjb2xvcigkbmFtZSkpLCAwLjEyNSk7XG59XG5cbi8vIElNUE9SVEFOVCBVU0FHRSBOT1RFOlxuLy8gdG8gdXNlIGFkYXB0aXZlIGNvbG9ycywgeW91IE1VU1QgZGlzYWJsZSB2aWV3IGVuY2Fwc3VsYXRpb24gb24gdGhlIGNvbXBvbmVudFxuLy8geW91J3JlIGFwcGx5aW5nIHRoZSBzdHlsZXMgd2l0aGluLiBPdGhlcndpc2UgYW5jZXN0b3IgY2xhc3NlcyBjYW5ub3QgYmUgYXNzZXNzZWRcbi8vIGJ5IHRoZSBtaXhpbnMgdG8gZGV0ZXJtaW5lIHRoZSBhcHAgdGhlbWUgY29uZmlndXJhdGlvbi5cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBsaWdodCBhbmQgZGFyayB0aGVtZXNcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yKCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlLCAkZGFyay12YWx1ZSkge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKTtcbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWxpZ2h0ICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGxpZ2h0IHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgIH1cbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWRhcmsgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgZGFyayB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgfVxufVxuIiwiLyogWW91IGNhbiBhZGQgZ2xvYmFsIHN0eWxlcyB0byB0aGlzIGZpbGUsIGFuZCBhbHNvIGltcG9ydCBvdGhlciBzdHlsZSBmaWxlcyAqL1xuQGltcG9ydCAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJlYnVpbHQtdGhlbWVzL2luZGlnby1waW5rLmNzcyc7XG5AaW1wb3J0ICdAZm9udHNvdXJjZS9yb2JvdG8nO1xuQGltcG9ydCAnQGZvbnRzb3VyY2Uvcm9ib3RvLW1vbm8nO1xuQGltcG9ydCAnY29sb3JzLnNjc3MnO1xuXG5AbWVkaWEgcHJpbnQge1xuICAgIEBwYWdlIHtcbiAgICAgICAgc2l6ZTogQTM7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG59XG5cbkBmb250LWZhY2Uge1xuICAgIGZvbnQtZmFtaWx5OiAnTWF0ZXJpYWwgSWNvbnMnO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWRpc3BsYXk6IGJsb2NrO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgc3JjOlxuICAgICAgICBsb2NhbCgnTWF0ZXJpYWwgSWNvbnMnKSxcbiAgICAgICAgbG9jYWwoJ01hdGVyaWFsSWNvbnMtUmVndWxhcicpLFxuICAgICAgICB1cmwoYXNzZXRzL2ljb25zL01hdGVyaWFsSWNvbnMtUmVndWxhci50dGYpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbn1cblxuLm1hdGVyaWFsLWljb25zIHtcbiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJztcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LXNpemU6IDI0cHg7IC8qIFByZWZlcnJlZCBpY29uIHNpemUgKi9cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcbiAgICB3b3JkLXdyYXA6IG5vcm1hbDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGRpcmVjdGlvbjogbHRyO1xuXG4gICAgLyogU3VwcG9ydCBmb3IgYWxsIFdlYktpdCBicm93c2Vycy4gKi9cbiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgICAvKiBTdXBwb3J0IGZvciBTYWZhcmkgYW5kIENocm9tZS4gKi9cbiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuXG4gICAgLyogU3VwcG9ydCBmb3IgRmlyZWZveC4gKi9cbiAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuXG4gICAgLyogU3VwcG9ydCBmb3IgSUUuICovXG4gICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnbGlnYSc7XG59XG5cbi50ZXh0LWRlZW1waGFzaXMge1xuICAgIGNvbG9yOiBvbi1jb2xvci1kZWVtcGhhc2lzKGJvZHkpO1xuICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1xuICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG59XG5cbmJvZHkge1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBPeHlnZW4sIFVidW50dSwgQ2FudGFyZWxsLCAnT3BlbiBTYW5zJywgJ0hlbHZldGljYSBOZXVlJywgc2Fucy1zZXJpZjtcbn1cblxuLnN2Z2NvbnRhaW5lciB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgd2hpdGUpO1xufVxuXG4ubWRjLWJ1dHRvbiwgLm1hdC1tZGMtYnV0dG9uLWJhc2Uge1xuICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWwgIWltcG9ydGFudDtcbn1cblxuLm1hdC1kaWFsb2cge1xuICAgIC5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgfVxuICAgIC5tYXQtbWRjLWRpYWxvZy10aXRsZSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gICAgLm1hdC1tZGMtZGlhbG9nLWNvbnRlbnQge1xuICAgICAgICBjb2xvcjogYmxhY2sgIWltcG9ydGFudDtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspICFpbXBvcnRhbnQpO1xuICAgIH1cbn1cblxuLm1hdC1tZGMtZGlhbG9nLWNvbnRhaW5lciB7XG4gICAgLm1kYy1kaWFsb2dfX3N1cmZhY2Uge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihkYXJrLTIpKTtcbiAgICB9XG4gICAgLm1kYy1kaWFsb2dfX3RpdGxlLFxuICAgIC5tZGMtZGlhbG9nX19jb250ZW50IHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspICFpbXBvcnRhbnQpO1xuICAgIH1cbiAgICAubWF0LW1kYy1idXR0b24tYmFzZSB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLWNvbG9yJywgY29sb3IoZGFyay00KSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgfVxuXG4gICAgLmhlbHAtZGlhbG9nIGgxIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItY29sb3InLCBvbi1jb2xvcihkYXJrLTEpKTtcbiAgICB9XG5cbiAgICAuY29udGVudCB7XG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgbWF4LWhlaWdodDogNjB2aDtcbiAgICAgICAgZm9udC1zaXplOiAxMXB0O1xuXG4gICAgICAgIHAsXG4gICAgICAgIHVsIHtcbiAgICAgICAgICAgIG1hcmdpbi1ibG9jay1zdGFydDogMWVtO1xuICAgICAgICAgICAgbWFyZ2luLWJsb2NrLWVuZDogMWVtO1xuICAgICAgICB9XG5cbiAgICAgICAgY29kZSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihkYXJrLTEpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLWNvbG9yJywgY29sb3IocGFuZWwtZGFyaykgIWltcG9ydGFudCk7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykgIWltcG9ydGFudCk7XG4gICAgICAgICAgICBjb2xvcjogYmxhY2s7XG4gICAgICAgICAgICBwYWRkaW5nOiAxcHggMnB4O1xuICAgICAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGEge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgY29sb3IoZGFyay1saW5rKSAhaW1wb3J0YW50KTtcbiAgICB9XG5cbiAgICBhOmFjdGl2ZSxcbiAgICBhOnZpc2l0ZWQge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgY29sb3IoZGFyay1saW5rLWFjdGl2ZSkpO1xuICAgIH1cblxuICAgIC50b3AtYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDE0cHg7XG4gICAgfVxufVxuXG4ubm9zZWxlY3Qge1xuICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsgLyogaU9TIFNhZmFyaSAqL1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IC8qIFNhZmFyaSAqL1xuICAgIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTsgLyogS29ucXVlcm9yIEhUTUwgKi9cbiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOyAvKiBGaXJlZm94ICovXG4gICAgLW1zLXVzZXItc2VsZWN0OiBub25lOyAvKiBJbnRlcm5ldCBFeHBsb3Jlci9FZGdlICovXG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgLyogTm9uLXByZWZpeGVkIHZlcnNpb24sIGN1cnJlbnRseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgYnkgQ2hyb21lIGFuZCBPcGVyYSAqL1xufVxuXG4vLyAgIF9fXyBfX18gIF8gIF8gX19fX18gX19fICBfX18gIF8gICAgX19fXG4vLyAgLyBfXy8gXyBcXHwgXFx8IHxfICAgX3wgXyBcXC8gXyBcXHwgfCAgLyBfX3xcbi8vIHwgKF98IChfKSB8IC5gIHwgfCB8IHwgICAvIChfKSB8IHxfX1xcX18gXFxcbi8vICBcXF9fX1xcX19fL3xffFxcX3wgfF98IHxffF9cXFxcX19fL3xfX19ffF9fXy9cblxuLy8gcGFuZWwgd2l0aCBjb250cm9sc1xuLmNvbnRyb2xzQ29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKHBhbmVsLWRhcmspLCBjb2xvcihkYXJrLTIpKTtcblxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgdWwge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgfVxuXG4gICAgLmxhYmVse1xuICAgICAgICAuY29udHJvbC1yb3ctaXRlbSArIC5jb250cm9sLXJvdy1pdGVte1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAuY29udHJvbC1zZWN0aW9ucyA+IGxpIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyAmOm5vdCg6bGFzdC1jaGlsZCl7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgZGFya2VuKGNvbG9yKHBhbmVsLWRhcmspLCA4JSk7XG4gICAgICAgIHBhZGRpbmc6IDAgNXB4IDAgNXB4O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgLy8gbGFiZWwgZm9yIGEgc2VjdGlvbiBvZiBjb250cm9scywgZS5nIGxheWVyIGNvbnRyb2xzIG9yIHRlY2huaXF1ZSBjb250cm9sc1xuICAgICAgICAuc2VjdGlvbi1sYWJlbCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKHBhbmVsLWRhcmspLCBjb2xvcihkYXJrLTIpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsIGNvbG9yKHRhYi10ZXh0LWNvbG9yKSwgb24tY29sb3IoZGFyaykpO1xuICAgICAgICAgICAgZm9udC1zaXplOiA4cHQ7XG4gICAgICAgICAgICB0b3A6IC0xMnB4O1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgcGFkZGluZzogMCA1cHg7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAuY29udHJvbC1yb3ctaXRlbSB7XG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgICBoZWlnaHQ6IDM0cHg7XG5cbiAgICAgICAgICAgICYgPiA6bm90KC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsIGJsYWNrLCB3aGl0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICYgPiAuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsICNhYWFhYWEsIHJnYigyNTUgMjU1IDI1NSAvIDI1JSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29udHJvbC1yb3ctYnV0dG9uIHtcbiAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjRweDtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBkYXJrZW4oY29sb3IocGFuZWwtZGFyayksIDUlKSwgY29sb3IoZGFyay00KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJi5kcm9wZG93bjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgICAgICBmb250LXNpemU6IDVwdDtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogJ8OiwpbCvCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwYW57XG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5jb250cm9sLWxhYmVsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogNXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZHJvcGRvd24gY29udHJvbHMgY29udGFpbmVyXG4gICAgICAgICAgICAuZHJvcGRvd24tY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIHdoaXRlLCBjb2xvcihkYXJrLTIpKTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm9yZGVyJywgMXB4IHNvbGlkIGJsYWNrLCAxcHggc29saWQgY29sb3IoZGFyay00KSk7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JveC1zaGFkb3cnLCAwcHggMTBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjUpLCAwcHggMTBweCA1cHggY29sb3IoZGFyay0yKSk7XG5cbiAgICAgICAgICAgICAgICAmLmxlZnQge1xuICAgICAgICAgICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICAgICAgei1pbmRleDogMTAwOyAvL2RyYXcgb24gdG9wIG9mIG90aGVyIGNvbnRyb2xzXG4gICAgICAgICAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuXG4gICAgICAgICAgICAgICAgJi5pbnB1dGZpZWxkIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE1MHB4O1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwcHggMTBweCAxMHB4O1xuICAgICAgICAgICAgICAgICAgICB6LWluZGV4OiAxMDAwO1xuXG4gICAgICAgICAgICAgICAgICAgIC5tYXQtbWRjLWZvcm0tZmllbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiA1cHg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWF0LW1kYy1pbnB1dC1lbGVtZW50LFxuICAgICAgICAgICAgICAgIC5tYXQtbWRjLWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLm1hdC1tZGMtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBjb2xvcihkYXJrLWRpc2FibGVkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLWJvdHRvbS1jb2xvcicsIG9uLWNvbG9yKGRhcmspKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLm1hdC1tZGMtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmUge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlci1ib3R0b20tY29sb3InLCB0cmFuc3BhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seShcbiAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLm1hdC1tZGMtc2VsZWN0LXZhbHVlLXRleHQge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLm1hdC1tZGMtc2VsZWN0LWFycm93IHtcbiAgICAgICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmRpc2FibGVkLXRleHQge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCByZ2JhKDAsIDAsIDAsIDAuMzgpLCBjb2xvcihkYXJrLWRpc2FibGVkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDaGVja2JveCBTdHlsaW5nIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbi5jaGVja2JveC1jdXN0b20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICAgJjpkaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG59XG5cbi5jaGVja2JveC1jdXN0b20sXG4uY2hlY2tib3gtY3VzdG9tLWxhYmVsIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICBtYXJnaW46IDVweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5jaGVja2JveC1jdXN0b20tbGFiZWwge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICYuZGlzYWJsZWQge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCByZ2JhKDAsIDAsIDAsIDAuNDYpLCBjb2xvcihkYXJrLWRpc2FibGVkKSk7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICB9XG59XG5cbi5jaGVja2JveC1jdXN0b20gKyAuY2hlY2tib3gtY3VzdG9tLWxhYmVsOmJlZm9yZSB7XG4gICAgY29udGVudDogJyc7XG4gICAgYmFja2dyb3VuZDogI2ZmZjtcbiAgICBib3JkZXI6IDNweCBzb2xpZCBjb2xvcihwYW5lbC1kYXJrKTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB3aWR0aDogMTBweDtcbiAgICBoZWlnaHQ6IDEwcHg7XG4gICAgcGFkZGluZzogMnB4O1xuICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmNoZWNrYm94LWN1c3RvbTpjaGVja2VkICsgLmNoZWNrYm94LWN1c3RvbS1sYWJlbDpiZWZvcmUge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgY29sb3IoY2VsbC1oaWdobGlnaHQtY29sb3IpLCBjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JveC1zaGFkb3cnLCBpbnNldCAwcHggMHB4IDBweCAxcHggY29sb3IoY2VsbC1oaWdobGlnaHQtY29sb3IpLCBpbnNldCAwcHggMHB4IDBweCAxcHggY29sb3IoY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcikpO1xufVxuXG4uY2hlY2tib3gtY3VzdG9tOmNoZWNrZWQ6ZGlzYWJsZWQgKyAuY2hlY2tib3gtY3VzdG9tLWxhYmVsOmJlZm9yZSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQnLCBkZXNhdHVyYXRlKGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWNvbG9yKSwgMTAwJSksIGRlc2F0dXJhdGUoY29sb3IoY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvciksIDEwMCUpKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcihcbiAgICAgICAgJ2JveC1zaGFkb3cnLFxuICAgICAgICBpbnNldCAwcHggMHB4IDBweCAxcHggZGVzYXR1cmF0ZShjb2xvcihjZWxsLWhpZ2hsaWdodC1jb2xvciksIDEwMCUpLFxuICAgICAgICBpbnNldCAwcHggMHB4IDBweCAxcHggZGVzYXR1cmF0ZShjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSwgMTAwJSlcbiAgICApO1xufVxuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8gRGlhbG9nIFN0eWxpbmcgLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4uZGlhbG9nLWN1c3RvbSAubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG59XG5cbi5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmQge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLWxlZnQnLCBub25lKTtcbn1cblxuLm1hdC1kcmF3ZXItaW5uZXItY29udGFpbmVyIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKHBhbmVsLWxpZ2h0KSwgY29sb3IoZGFyay0yKSk7XG5cbiAgICBhIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIGNvbG9yKGRhcmstbGluaykpO1xuICAgIH1cbiAgICBhOnZpc2l0ZWQsXG4gICAgYTphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgY29sb3IoZGFyay1saW5rLWFjdGl2ZSkpO1xuICAgIH1cbiAgICAubWF0LW1kYy1mb3JtLWZpZWxkLCAubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIHtcbiAgICAgICAgLm1kYy1ub3RjaGVkLW91dGxpbmVfX2xlYWRpbmcsXG4gICAgICAgIC5tZGMtbm90Y2hlZC1vdXRsaW5lX19ub3RjaCxcbiAgICAgICAgLm1kYy1ub3RjaGVkLW91dGxpbmVfX3RyYWlsaW5nIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLWNvbG9yJywgb24tY29sb3IoZGFyaykgIWltcG9ydGFudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LW1kYy1jYXJkIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IoZGFyay0zKSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgfVxuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLFxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihkYXJrLTMpKTtcbiAgICB9XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xuICAgIH1cblxuICAgIC5tYXQtZGl2aWRlciB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLXRvcC1jb2xvcicsIGNvbG9yKGRhcmstNCkpO1xuICAgIH1cblxuICAgIC5tYXQtbWRjLWJ1dHRvbi1iYXNlIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IoZGFyay00KSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgfVxufVxuXG4ubWF0LW1kYy1kaWFsb2ctY29udGFpbmVyIC5tYXJrZG93biB7XG4gICAgcGFkZGluZzogMjVweDtcbn1cblxuLy8gcGF0Y2ggcG9wb3ZlciBzdHlsZVxuLnBvcG92ZXIge1xuICAgIC8vcG9zaXRpb25pbmcgYmVjYXVzZSB3ZSBkaWRuJ3QgaW1wb3J0IGJvb3RzdHJhcFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAvLyBhZGQgYm9yZGVyIHJhZGl1c1xuICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50O1xuICAgIC8vZG9uJ3QgZm9yY2UgMjByZW0gd2lkdGgsIGNvbmZvcm0gdG8gY29udGVudCBvZiBwb3BvdmVyXG4gICAgd2lkdGg6IHVuc2V0ICFpbXBvcnRhbnQ7XG59XG5cbi8vIGZvcm0gZmllbGQgc3R5bGluZ1xuLm1hdC1tZGMtZm9ybS1maWVsZCB7XG4gICAgLm1kYy10ZXh0LWZpZWxkLS1maWxsZWQsIC5tZGMtdGV4dC1maWVsZC0tZmlsbGVkOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG59XG4uaGlkZS1zdWJzY3JpcHQge1xuICAgIC5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwsIC5tYXQtbWRjLWZvcm0tZmllbGQtaGludCB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbCAhaW1wb3J0YW50O1xufVxuXG4vLyBleHBhbnNpb24gcGFuZWwgc3R5bGluZ1xuLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSB7XG4gICAgcGFkZGluZy1ib3R0b206IDI0cHggIWltcG9ydGFudDtcbn0iLCIvKiByb2JvdG8tY3lyaWxsaWMtZXh0LTQwMC1ub3JtYWwgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ1JvYm90byc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCguL2ZpbGVzL3JvYm90by1jeXJpbGxpYy1leHQtNDAwLW5vcm1hbC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLCB1cmwoLi9maWxlcy9yb2JvdG8tY3lyaWxsaWMtZXh0LTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLFUrMUM4MC0xQzg4LFUrMjBCNCxVKzJERTAtMkRGRixVK0E2NDAtQTY5RixVK0ZFMkUtRkUyRjtcbn1cblxuLyogcm9ib3RvLWN5cmlsbGljLTQwMC1ub3JtYWwgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ1JvYm90byc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCguL2ZpbGVzL3JvYm90by1jeXJpbGxpYy00MDAtbm9ybWFsLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksIHVybCguL2ZpbGVzL3JvYm90by1jeXJpbGxpYy00MDAtbm9ybWFsLndvZmYpIGZvcm1hdCgnd29mZicpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAzMDEsVSswNDAwLTA0NUYsVSswNDkwLTA0OTEsVSswNEIwLTA0QjEsVSsyMTE2O1xufVxuXG4vKiByb2JvdG8tZ3JlZWstZXh0LTQwMC1ub3JtYWwgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ1JvYm90byc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCguL2ZpbGVzL3JvYm90by1ncmVlay1leHQtNDAwLW5vcm1hbC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLCB1cmwoLi9maWxlcy9yb2JvdG8tZ3JlZWstZXh0LTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGO1xufVxuXG4vKiByb2JvdG8tZ3JlZWstNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LWRpc3BsYXk6IHN3YXA7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKC4vZmlsZXMvcm9ib3RvLWdyZWVrLTQwMC1ub3JtYWwud29mZjIpIGZvcm1hdCgnd29mZjInKSwgdXJsKC4vZmlsZXMvcm9ib3RvLWdyZWVrLTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LFUrMDM3QS0wMzdGLFUrMDM4NC0wMzhBLFUrMDM4QyxVKzAzOEUtMDNBMSxVKzAzQTMtMDNGRjtcbn1cblxuLyogcm9ib3RvLXZpZXRuYW1lc2UtNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LWRpc3BsYXk6IHN3YXA7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKC4vZmlsZXMvcm9ib3RvLXZpZXRuYW1lc2UtNDAwLW5vcm1hbC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLCB1cmwoLi9maWxlcy9yb2JvdG8tdmlldG5hbWVzZS00MDAtbm9ybWFsLndvZmYpIGZvcm1hdCgnd29mZicpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMyxVKzAxMTAtMDExMSxVKzAxMjgtMDEyOSxVKzAxNjgtMDE2OSxVKzAxQTAtMDFBMSxVKzAxQUYtMDFCMCxVKzAzMDAtMDMwMSxVKzAzMDMtMDMwNCxVKzAzMDgtMDMwOSxVKzAzMjMsVSswMzI5LFUrMUVBMC0xRUY5LFUrMjBBQjtcbn1cblxuLyogcm9ib3RvLWxhdGluLWV4dC00MDAtbm9ybWFsICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoLi9maWxlcy9yb2JvdG8tbGF0aW4tZXh0LTQwMC1ub3JtYWwud29mZjIpIGZvcm1hdCgnd29mZjInKSwgdXJsKC4vZmlsZXMvcm9ib3RvLWxhdGluLWV4dC00MDAtbm9ybWFsLndvZmYpIGZvcm1hdCgnd29mZicpO1xuICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDJBRixVKzAzMDQsVSswMzA4LFUrMDMyOSxVKzFFMDAtMUU5RixVKzFFRjItMUVGRixVKzIwMjAsVSsyMEEwLTIwQUIsVSsyMEFELTIwQzAsVSsyMTEzLFUrMkM2MC0yQzdGLFUrQTcyMC1BN0ZGO1xufVxuXG4vKiByb2JvdG8tbGF0aW4tNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvJztcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBmb250LWRpc3BsYXk6IHN3YXA7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIHNyYzogdXJsKC4vZmlsZXMvcm9ib3RvLWxhdGluLTQwMC1ub3JtYWwud29mZjIpIGZvcm1hdCgnd29mZjInKSwgdXJsKC4vZmlsZXMvcm9ib3RvLWxhdGluLTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLFUrMDEzMSxVKzAxNTItMDE1MyxVKzAyQkItMDJCQyxVKzAyQzYsVSswMkRBLFUrMDJEQyxVKzAzMDQsVSswMzA4LFUrMDMyOSxVKzIwMDAtMjA2RixVKzIwNzQsVSsyMEFDLFUrMjEyMixVKzIxOTEsVSsyMTkzLFUrMjIxMixVKzIyMTUsVStGRUZGLFUrRkZGRDtcbn0iLCIvKiByb2JvdG8tbW9uby1jeXJpbGxpYy1leHQtNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby1jeXJpbGxpYy1leHQtNDAwLW5vcm1hbC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLCB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby1jeXJpbGxpYy1leHQtNDAwLW5vcm1hbC53b2ZmKSBmb3JtYXQoJ3dvZmYnKTtcbiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsVSsxQzgwLTFDODgsVSsyMEI0LFUrMkRFMC0yREZGLFUrQTY0MC1BNjlGLFUrRkUyRS1GRTJGO1xufVxuXG4vKiByb2JvdG8tbW9uby1jeXJpbGxpYy00MDAtbm9ybWFsICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCguL2ZpbGVzL3JvYm90by1tb25vLWN5cmlsbGljLTQwMC1ub3JtYWwud29mZjIpIGZvcm1hdCgnd29mZjInKSwgdXJsKC4vZmlsZXMvcm9ib3RvLW1vbm8tY3lyaWxsaWMtNDAwLW5vcm1hbC53b2ZmKSBmb3JtYXQoJ3dvZmYnKTtcbiAgdW5pY29kZS1yYW5nZTogVSswMzAxLFUrMDQwMC0wNDVGLFUrMDQ5MC0wNDkxLFUrMDRCMC0wNEIxLFUrMjExNjtcbn1cblxuLyogcm9ib3RvLW1vbm8tZ3JlZWstNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby1ncmVlay00MDAtbm9ybWFsLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksIHVybCguL2ZpbGVzL3JvYm90by1tb25vLWdyZWVrLTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wMzc3LFUrMDM3QS0wMzdGLFUrMDM4NC0wMzhBLFUrMDM4QyxVKzAzOEUtMDNBMSxVKzAzQTMtMDNGRjtcbn1cblxuLyogcm9ib3RvLW1vbm8tdmlldG5hbWVzZS00MDAtbm9ybWFsICovXG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7XG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXdlaWdodDogNDAwO1xuICBzcmM6IHVybCguL2ZpbGVzL3JvYm90by1tb25vLXZpZXRuYW1lc2UtNDAwLW5vcm1hbC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLCB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby12aWV0bmFtZXNlLTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLFUrMDExMC0wMTExLFUrMDEyOC0wMTI5LFUrMDE2OC0wMTY5LFUrMDFBMC0wMUExLFUrMDFBRi0wMUIwLFUrMDMwMC0wMzAxLFUrMDMwMy0wMzA0LFUrMDMwOC0wMzA5LFUrMDMyMyxVKzAzMjksVSsxRUEwLTFFRjksVSsyMEFCO1xufVxuXG4vKiByb2JvdG8tbW9uby1sYXRpbi1leHQtNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby1sYXRpbi1leHQtNDAwLW5vcm1hbC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpLCB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby1sYXRpbi1leHQtNDAwLW5vcm1hbC53b2ZmKSBmb3JtYXQoJ3dvZmYnKTtcbiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyQUYsVSswMzA0LFUrMDMwOCxVKzAzMjksVSsxRTAwLTFFOUYsVSsxRUYyLTFFRkYsVSsyMDIwLFUrMjBBMC0yMEFCLFUrMjBBRC0yMEMwLFUrMjExMyxVKzJDNjAtMkM3RixVK0E3MjAtQTdGRjtcbn1cblxuLyogcm9ib3RvLW1vbm8tbGF0aW4tNDAwLW5vcm1hbCAqL1xuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgc3JjOiB1cmwoLi9maWxlcy9yb2JvdG8tbW9uby1sYXRpbi00MDAtbm9ybWFsLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyksIHVybCguL2ZpbGVzL3JvYm90by1tb25vLWxhdGluLTQwMC1ub3JtYWwud29mZikgZm9ybWF0KCd3b2ZmJyk7XG4gIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLFUrMDEzMSxVKzAxNTItMDE1MyxVKzAyQkItMDJCQyxVKzAyQzYsVSswMkRBLFUrMDJEQyxVKzAzMDQsVSswMzA4LFUrMDMyOSxVKzIwMDAtMjA2RixVKzIwNzQsVSsyMEFDLFUrMjEyMixVKzIxOTEsVSsyMTkzLFUrMjIxMixVKzIyMTUsVStGRUZGLFUrRkZGRDtcbn0iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 12492: +/*!****************************************!*\ + !*** ./src/app/help/help.component.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ HelpComponent: () => (/* binding */ HelpComponent) +/* harmony export */ }); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var _layer_information_layer_information_component__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../layer-information/layer-information.component */ 20880); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var ngx_markdown__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ngx-markdown */ 8329); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/button */ 84175); + + + + + + + +const _c0 = ["markdownElement"]; +function HelpComponent_ul_11_li_1_Template(rf, ctx) { + if (rf & 1) { + const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "li")(1, "a", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function HelpComponent_ul_11_li_1_Template_a_click_1_listener() { + const heading_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r2).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx_r3.scrollTo(heading_r3.anchor)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const heading_r3 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵclassMapInterpolate1"]("toc-heading level-", heading_r3.level, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](heading_r3.label); + } +} +function HelpComponent_ul_11_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "ul", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, HelpComponent_ul_11_li_1_Template, 3, 4, "li", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", ctx_r3.headingAnchors); + } +} +class HelpComponent { + constructor(dialog, markdownService, renderer, data) { + this.dialog = dialog; + this.markdownService = markdownService; + this.renderer = renderer; + this.data = data; + this.headingAnchors = []; + // intentionally left blank + } + ngOnInit() { + setTimeout(() => { + this.scrollTo('toc'); + }, 175); + let self = this; + this.markdownService.renderer.heading = (text, level) => { + let img = text.match(/()/g) ? text.match(/()/g)[0].replace(/(nav-app\/src\/)/g, '') : ''; + text = text.replace(/()/g, ''); + const escapedText = text.toLowerCase().trim().replace(/[^\w]+/g, '-'); + self.headingAnchors.push({ + level: level, + anchor: escapedText, + label: text.replace('&', '&') + }); + return `${img}${text}`; + }; + this.markdownService.renderer.html = html => { + if (!html.match(/(nav-app\/src\/)/g)) return html; + return html.replace(/(nav-app\/src\/)/g, ''); + }; + } + ngOnDestroy() { + if (this.listenObj) { + this.listenObj(); + } + } + // from https://github.com/jfcere/ngx-markdown/issues/125#issuecomment-518025821 + onMarkdownLoad(e) { + // hijack clicks on links + if (this.markdownElement) { + this.listenObj = this.renderer.listen(this.markdownElement.element.nativeElement, 'click', e => { + if (e.target && e.target.tagName === 'A') { + const el = e.target; + const linkURL = el.getAttribute && el.getAttribute('href'); + if (linkURL) { + e.preventDefault(); + if (linkURL.charAt(0) === '#') this.scrollTo(linkURL.replace('#', ''));else if (linkURL.includes('layers/')) this.openLayerDialog();else if (linkURL.match(/(nav-app\/src\/)/g)) window.open(linkURL.replace(/(nav-app\/src\/)/g, ''));else window.open(linkURL); + } + } + }); + } + } + scrollTo(anchor) { + let element = document.querySelector('.' + anchor); + if (element) element.scrollIntoView({ + behavior: 'smooth', + block: 'start', + inline: 'nearest' + }); + } + /** + * open the layer information dialog + */ + openLayerDialog() { + this.dialog.open(_layer_information_layer_information_component__WEBPACK_IMPORTED_MODULE_0__.LayerInformationComponent, { + autoFocus: false, + panelClass: this.data.theme + }); + } + static #_ = this.ɵfac = function HelpComponent_Factory(t) { + return new (t || HelpComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialog), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](ngx_markdown__WEBPACK_IMPORTED_MODULE_3__.MarkdownService), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_1__.Renderer2), _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MAT_DIALOG_DATA)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: HelpComponent, + selectors: [["help"]], + viewQuery: function HelpComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵviewQuery"](_c0, 5); + } + if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵloadQuery"]()) && (ctx.markdownElement = _t.first); + } + }, + decls: 17, + vars: 2, + consts: [["markdownElement", ""], [1, "help-dialog", "mat-dialog"], ["mat-dialog-title", ""], [2, "margin-left", "50px"], [1, "top-button"], ["mat-button", "", 3, "click"], [1, "content", "markdown"], [1, "col", "toc"], ["class", "table-of-contents", 4, "ngIf"], [3, "load", "src"], ["mat-button", "", "mat-dialog-close", ""], [1, "table-of-contents"], [3, "class", 4, "ngFor", "ngForOf"], [3, "click"]], + template: function HelpComponent_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 1)(1, "h1", 2)(2, "span", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](3, "Documentation"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](4, "div", 4)(5, "button", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function HelpComponent_Template_button_click_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r1); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx.scrollTo("toc")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](6, "Top ^"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](7, "mat-dialog-content", 6)(8, "div", 7)(9, "h1"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](10, "Table of Contents"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](11, HelpComponent_ul_11_Template, 2, 1, "ul", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](12, "markdown", 9, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("load", function HelpComponent_Template_markdown_load_12_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r1); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx.onMarkdownLoad($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](14, "mat-dialog-actions")(15, "button", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](16, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](11); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx.headingAnchors.length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("src", "./USAGE.md"); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_4__.NgIf, _angular_material_button__WEBPACK_IMPORTED_MODULE_5__.MatButton, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogTitle, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogActions, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_2__.MatDialogContent, ngx_markdown__WEBPACK_IMPORTED_MODULE_3__.MarkdownComponent], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.help-dialog .table-of-contents {\n list-style: none;\n margin: 0;\n padding: 0 25px 0 0;\n}\n.help-dialog .table-of-contents li.toc-heading {\n margin-bottom: 0;\n}\n.help-dialog .table-of-contents li.toc-heading a {\n cursor: pointer;\n color: blue;\n text-decoration: underline;\n}\n.help-dialog .table-of-contents li.toc-heading.level-1 {\n padding-inline-start: 40px;\n}\n.help-dialog .table-of-contents li.toc-heading.level-2 {\n padding-inline-start: 80px;\n}\n.help-dialog .table-of-contents li.toc-heading.level-3 {\n padding-inline-start: 120px;\n}\n.help-dialog .table-of-contents li.toc-heading.level-4 {\n padding-inline-start: 160px;\n}\n.help-dialog .table-of-contents li.toc-heading.level-5 {\n padding-inline-start: 200px;\n}\n.help-dialog .table-of-contents li.toc-heading.level-6 {\n padding-inline-start: 240px;\n}\n.help-dialog .content code {\n border: 1px solid #ddd;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvaGVscC9oZWxwLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDTkk7RUFDSSxnQkFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtBQU9SO0FBTlE7RUFDSSxnQkFBQTtBQVFaO0FBUFk7RUFDSSxlQUFBO0VBQ0EsV0FBQTtFQUNBLDBCQUFBO0FBU2hCO0FBTmdCO0VBQ0ksMEJBQUE7QUFRcEI7QUFUZ0I7RUFDSSwwQkFBQTtBQVdwQjtBQVpnQjtFQUNJLDJCQUFBO0FBY3BCO0FBZmdCO0VBQ0ksMkJBQUE7QUFpQnBCO0FBbEJnQjtFQUNJLDJCQUFBO0FBb0JwQjtBQXJCZ0I7RUFDSSwyQkFBQTtBQXVCcEI7QUFqQlE7RUFDSSxzQkFBQTtBQW1CWiIsInNvdXJjZXNDb250ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi9jb2xvcnMuc2Nzcyc7XG5cbi5oZWxwLWRpYWxvZyB7XG4gICAgLnRhYmxlLW9mLWNvbnRlbnRzIHtcbiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwIDI1cHggMCAwO1xuICAgICAgICBsaS50b2MtaGVhZGluZyB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgICAgYSB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBibHVlO1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAkbGV2ZWwgZnJvbSAxIHRocm91Z2ggNiB7XG4gICAgICAgICAgICAgICAgJi5sZXZlbC0jeyRsZXZlbH0ge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nLWlubGluZS1zdGFydDogI3s0MCAqICgkbGV2ZWwpfXB4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAuY29udGVudCB7XG4gICAgICAgIGNvZGUge1xuICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IocGFuZWwtZGFyayk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 20880: +/*!******************************************************************!*\ + !*** ./src/app/layer-information/layer-information.component.ts ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LayerInformationComponent: () => (/* binding */ LayerInformationComponent) +/* harmony export */ }); +/* harmony import */ var _utils_globals__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/globals */ 98552); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var ngx_markdown__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ngx-markdown */ 8329); + + + + + +class LayerInformationComponent { + get layerFormatLink() { + return `mitre/layers/spec/v${_utils_globals__WEBPACK_IMPORTED_MODULE_0__.layerVersion}/layerformat.md`; + } + static #_ = this.ɵfac = function LayerInformationComponent_Factory(t) { + return new (t || LayerInformationComponent)(); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: LayerInformationComponent, + selectors: [["app-layer-information"]], + decls: 8, + vars: 1, + consts: [["markdownElement", ""], [1, "layer-dialog", "mat-dialog"], [1, "content", "markdown"], [3, "src"], ["mat-button", "", "mat-dialog-close", ""]], + template: function LayerInformationComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 1)(1, "mat-dialog-content")(2, "div", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](3, "markdown", 3, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](5, "mat-dialog-actions")(6, "button", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](7, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("src", ctx.layerFormatLink); + } + }, + dependencies: [_angular_material_button__WEBPACK_IMPORTED_MODULE_2__.MatButton, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_3__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_3__.MatDialogActions, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_3__.MatDialogContent, ngx_markdown__WEBPACK_IMPORTED_MODULE_4__.MarkdownComponent], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.layer-dialog .content {\n max-height: 75vh;\n font-size: 10pt;\n}\n.layer-dialog table {\n border-collapse: collapse;\n width: 100%;\n}\n.layer-dialog table th,\n.layer-dialog table td {\n width: 20%;\n padding: 5px;\n word-break: break-word;\n line-height: 16pt;\n}\n.layer-dialog table th:nth-child(4) {\n padding: 0 30px;\n}\n.layer-dialog table th:nth-child(3),\n.layer-dialog table th:nth-child(4),\n.layer-dialog table th:last-child,\n.layer-dialog table td:nth-child(3),\n.layer-dialog table td:nth-child(4) {\n text-align: center;\n}\n.layer-dialog table td {\n vertical-align: middle;\n border-top: 1px solid #ddd;\n}\n.layer-dialog table td:not(td:last-child) {\n -webkit-hyphens: auto;\n hyphens: auto;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbGF5ZXItaW5mb3JtYXRpb24vbGF5ZXItaW5mb3JtYXRpb24uY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0E7Ozs7Ozs7O0VBQUE7QUNOSTtFQUNJLGdCQUFBO0VBQ0EsZUFBQTtBQU9SO0FBSkk7RUFDSSx5QkFBQTtFQUNBLFdBQUE7QUFNUjtBQUpROztFQUVJLFVBQUE7RUFDQSxZQUFBO0VBQ0Esc0JBQUE7RUFDQSxpQkFBQTtBQU1aO0FBSFE7RUFDSSxlQUFBO0FBS1o7QUFGUTs7Ozs7RUFLSSxrQkFBQTtBQUlaO0FBRFE7RUFDSSxzQkFBQTtFQUNBLDBCQUFBO0FBR1o7QUFBUTtFQUNJLHFCQUFBO1VBQUEsYUFBQTtBQUVaIiwic291cmNlc0NvbnRlbnQiOlsiJGNvbHVtbi1ob3Zlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpO1xuJGRpc2FibGVkLWNvbG9yOiBkYXJrZW4oJGNvbHVtbi1ob3Zlci1jb2xvciwgMjAlKTtcblxuLy8gQVRUJkNLIEJyYW5kIGNvbG9yc1xuJGF0dGFjay1jb2xvcnM6IChcbiAgICBhdHRhY2stb3JhbmdlOiAjYzYzZjFmLFxuICAgIGF0dGFjay1ibHVlOiAjMDYyZjRmLFxuKTtcblxuLyoqXG4gKiBDb2xvcnMgdXNlZCBhY3Jvc3MgdGhlIE5hdmlnYXRvci4gU2hhcmVkIGJ5IHRoZSBBVFQmQ0sgV2Vic2l0ZS5cbiAqIEZvciBlYWNoIGNvbG9yLXBhaXI6XG4gKiAgIC0gXCJjb2xvclwiIHJlZmVycyB0byB0aGUgY29sb3IgaXRzZWxmXG4gKiAgIC0gXCJvbi1jb2xvclwiIHJlZmVycyB0byB0aGUgbW9zdCByZWFkYWJsZSB0ZXh0LWNvbG9yIHRvIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogTm90ZTogc29tZSBjb2xvcnMgZG9uJ3QgZGVmaW5lIG9uLWNvbG9ycy4gVGhpcyBpcyBiZWNhdXNlLCBmb3IgdGhlc2UgY29sb3JzLCB0aGV5IGFyZW4ndCBpbnRlbmRlZCB0b1xuICogYXBwZWFyIHdpdGggaW5uZXIgY29udGVudC4gRm9yIGV4YW1wbGUsIFwibGlua1wiIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgbGluayB0ZXh0LCB3aGljaCBpbmhlcmVudGx5XG4gKiBjYW5ub3QgaGF2ZSBpbm5lciB0ZXh0LlxuICovXG4kY29sb3JzOiAoXG4gICAgcHJpbWFyeTogKFxuICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLW9yYW5nZSksXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vdXNlZCBmb3IgaGVhZGVyIGFuZCBzb21lIG5hdiBlbGVtZW50c1xuICAgIHNlY29uZGFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1ibHVlKSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvL3VzZWQgZm9yIGZvb3RlciBhbmQgc29tZSBidXR0b25zXG4gICAgYm9keTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgLy9wcmltYXJ5IHBhZ2UgYm9keVxuICAgIGxpZ2h0OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICBkYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjMDgwODBiLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvLyBkYXJrIHRoZW1lIGNvbG9ycyB2YXJpYXRpb25zIDAtMyAoZnJvbSBkYXJrZXN0IHRvIGxpZ2h0ZXN0KVxuICAgIGRhcmstMTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMxYTFhMjMsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay0yOiAoXG4gICAgICAgIGNvbG9yOiAjMmUyZTNmLFxuICAgICAgICBvbi1jb2xvcjogI2ZhNjM0MSxcbiAgICApLFxuICAgIC8vIGFjY2VudCBkYXJrIGNvbG9yIHNjaGVtZSAodXNlZCBmb3IgOmhvdmVyIHNlbGVjdG9ycylcbiAgICBkYXJrLTM6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjM2YzZjU2LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstNDogKFxuICAgICAgICBjb2xvcjogIzRjNGM2OCxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgZGFyay1kaXNhYmxlZDogKFxuICAgICAgICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gMjUlKSxcbiAgICApLFxuICAgIGRhcmstbGluazogKFxuICAgICAgICBjb2xvcjogIzc1ODhlOCxcbiAgICApLFxuICAgIGRhcmstbGluay1hY3RpdmU6IChcbiAgICAgICAgY29sb3I6ICNlODQ3ZTgsXG4gICAgKSxcbiAgICBsaW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNGY3Y2FjLFxuICAgICksXG4gICAgLy8gaHlwZXJsaW5rc1xuICAgIG1hdHJpeC1oZWFkZXI6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBncmF5LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vIGNvbG9yIG9mIG1hdHJpeCBoZWFkZXJzXG4gICAgY2VsbC1oaWdobGlnaHQtY29sb3I6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoOTYsIDE5NywgMjU1KSxcbiAgICAgICAgKSxcbiAgICBjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNDY0ZGZmLFxuICAgICksXG4gICAgaG92ZXItY2VsbC1mb250LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMCwgMCwgMCksXG4gICAgKSxcbiAgICBwYW5lbC1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjZGRkLFxuICAgICksXG4gICAgcGFuZWwtbGlnaHQ6IChcbiAgICAgICAgY29sb3I6IGxpZ2h0ZW4oI2RkZCwgOCUpLFxuICAgICksXG4gICAgdGFiLXRleHQtY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM1NTUsXG4gICAgKSxcbiAgICBidXR0b24tZGFyazogKFxuICAgICAgICBjb2xvcjogI2I4YjhiOCxcbiAgICApLFxuICAgIC8vYm9vdHN0cmFwIGNvbG9yc1xuICAgIGJvb3RzdHJhcC1wcmltYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzQyOGJjYSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBib290c3RyYXAtc3VjY2VzczogKFxuICAgICAgICBjb2xvcjogIzVjYjg1YyxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWRhbmdlcjogKFxuICAgICAgICBjb2xvcjogI2Q5NTM0ZixcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLXdhcm5pbmc6IChcbiAgICAgICAgY29sb3I6ICNmMGFkNGUsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1pbmZvOiAoXG4gICAgICAgIGNvbG9yOiAjNWJjMGRlLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbik7XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBjb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ2NvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgZ2V0IGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRoZSBjb2xvciwgZm9yIHBhdHRlcm5pbmdcbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGRhcmssIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBsaWdodGVyLlxuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgbGlnaHQsIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBkYXJrZXIuXG4vLyBjb250cmFzdCwgYW4gb3B0aW9uYWwgYXJndW1lbnQsIG11bHRpcGxpZXMgdG8gY3JlYXRlIGEgbW9yZSBkaXN0YW50IG9yIHNpbWlsYXIgY29sb3IuID4xIGlzIG1vcmUgZGlzdGFudCwgPDEgaXMgbW9yZSBzaW1pbGFyLlxuQGZ1bmN0aW9uIGNvbG9yLWFsdGVybmF0ZSgkbmFtZSwgJGNvbnRyYXN0OiAxKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgJHdlaWdodDogJGNvbnRyYXN0ICogNSUpO1xufVxuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIG9uLWNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gb24tY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdvbi1jb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbGVzcyBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIG9uLWNvbG9yKCRuYW1lKSk7XG59XG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBkZWVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZGVlbXBoYXNpemVkIG9uLWNvbG9yIGlzIG1vcmUgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1kZWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoY29sb3IoJG5hbWUpLCBvbi1jb2xvcigkbmFtZSksIDI1JSk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgY29tcHV0ZSBhIGJvcmRlciBjb2xvciBmb3IgdGhlIGNvbG9yXG5AZnVuY3Rpb24gYm9yZGVyLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgMTIuNSUpO1xuICAgIC8vIEByZXR1cm4gcmdiYShpbnZlcnQoY29sb3IoJG5hbWUpKSwgMC4xMjUpO1xufVxuXG4vLyBJTVBPUlRBTlQgVVNBR0UgTk9URTpcbi8vIHRvIHVzZSBhZGFwdGl2ZSBjb2xvcnMsIHlvdSBNVVNUIGRpc2FibGUgdmlldyBlbmNhcHN1bGF0aW9uIG9uIHRoZSBjb21wb25lbnRcbi8vIHlvdSdyZSBhcHBseWluZyB0aGUgc3R5bGVzIHdpdGhpbi4gT3RoZXJ3aXNlIGFuY2VzdG9yIGNsYXNzZXMgY2Fubm90IGJlIGFzc2Vzc2VkXG4vLyBieSB0aGUgbWl4aW5zIHRvIGRldGVybWluZSB0aGUgYXBwIHRoZW1lIGNvbmZpZ3VyYXRpb24uXG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgbGlnaHQgYW5kIGRhcmsgdGhlbWVzXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvcigkcHJvcGVydHksICRsaWdodC12YWx1ZSwgJGRhcmstdmFsdWUpIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSk7XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1saWdodCAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBsaWdodCB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICB9XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1kYXJrICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGRhcmsgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJy4uLy4uL2NvbG9ycy5zY3NzJztcblxuLmxheWVyLWRpYWxvZyB7XG4gICAgLmNvbnRlbnQge1xuICAgICAgICBtYXgtaGVpZ2h0OiA3NXZoO1xuICAgICAgICBmb250LXNpemU6IDEwcHQ7XG4gICAgfVxuXG4gICAgdGFibGUge1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICB0aCxcbiAgICAgICAgdGQge1xuICAgICAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpO1xuICAgICAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxNnB0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGg6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMzBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoOm50aC1jaGlsZCgzKSxcbiAgICAgICAgdGg6bnRoLWNoaWxkKDQpLFxuICAgICAgICB0aDpsYXN0LWNoaWxkLFxuICAgICAgICB0ZDpudGgtY2hpbGQoMyksXG4gICAgICAgIHRkOm50aC1jaGlsZCg0KSB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICB0ZCB7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yKHBhbmVsLWRhcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgdGQ6bm90KHRkOmxhc3QtY2hpbGQpIHtcbiAgICAgICAgICAgIGh5cGhlbnM6IGF1dG87XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 89616: +/*!************************************************************!*\ + !*** ./src/app/layer-settings/layer-settings.component.ts ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LayerSettingsComponent: () => (/* binding */ LayerSettingsComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/material/form-field */ 24950); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/input */ 95541); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_card__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/material/card */ 53777); +/* harmony import */ var _angular_material_divider__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/material/divider */ 14102); +/* harmony import */ var _list_input_list_input_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../list-input/list-input.component */ 54120); + + + + + + + + + +const _c0 = (a0, a1) => ({ + viewModel: a0, + list: a1, + level: "layer", + type: "metadata", + nameField: "name", + valueField: "value" +}); +const _c1 = (a0, a1) => ({ + viewModel: a0, + list: a1, + level: "layer", + type: "links", + nameField: "label", + valueField: "url" +}); +function LayerSettingsComponent_For_56_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div")(1, "input", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_For_56_Template_input_ngModelChange_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.layout.layout, $event) || (ctx_r1.viewModel.layout.layout = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const option_r3 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", option_r3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.layout.layout); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("name", option_r3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", option_r3, " layout "); + } +} +function LayerSettingsComponent_For_91_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div")(1, "input", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_For_91_Template_input_ngModelChange_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx_r1.viewModel.layout.aggregateFunction, $event) || (ctx_r1.viewModel.layout.aggregateFunction = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const option_r5 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("value", option_r5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.viewModel.layout.aggregateFunction); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("name", option_r5)("disabled", !ctx_r1.viewModel.layout.showAggregateScores); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", option_r5, " "); + } +} +class LayerSettingsComponent { + constructor(dataService) { + this.dataService = dataService; + // intentionally left blank + } + static #_ = this.ɵfac = function LayerSettingsComponent_Factory(t) { + return new (t || LayerSettingsComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_0__.DataService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineComponent"]({ + type: LayerSettingsComponent, + selectors: [["app-layer-settings"]], + inputs: { + viewModel: "viewModel" + }, + decls: 96, + vars: 25, + consts: [[1, "layer-settings"], [1, "sidebar-content", "info-card"], [1, "settings"], [1, "title"], [1, "info-field"], [1, "hide-subscript"], ["matInput", "", "type", "text", 3, "ngModelChange", "ngModel"], ["matInput", "", "matTextareaAutosize", "", 3, "ngModelChange", "ngModel"], ["matInput", "", "readonly", "", "disabled", "", "type", "text", 3, "ngModelChange", "ngModel"], [1, "sidebar-content"], [1, "settings", "layer-data"], [1, "data-input"], [3, "config"], ["id", "showID-option", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "disabled", "ngModel"], ["for", "showID-option", 1, "checkbox-custom-label", "noselect"], ["id", "showName-option", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "disabled", "ngModel"], ["for", "showName-option", 1, "checkbox-custom-label", "noselect"], ["id", "showAggregateScores-option", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "ngModel"], ["for", "showAggregateScores-option", 1, "checkbox-custom-label", "noselect"], ["id", "countUnscored-option", "type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "disabled", "ngModel"], ["for", "countUnscored-option", 1, "checkbox-custom-label", "noselect"], [1, "sub-section"], [1, "padding-top"], [1, "button-container", "sidebar-content"], ["mat-raised-button", "", 3, "click"], ["type", "radio", 3, "ngModelChange", "value", "ngModel", "name"], ["type", "radio", 3, "ngModelChange", "value", "ngModel", "name", "disabled"]], + template: function LayerSettingsComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 0)(1, "div", 1)(2, "mat-card")(3, "div", 2)(4, "mat-card-title")(5, "h4", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](6, "Layer Information"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](7, "mat-card-content")(8, "div", 4)(9, "mat-form-field", 5)(10, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](11, "Name"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](12, "input", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_12_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.viewModel.name, $event) || (ctx.viewModel.name = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](13, "div", 4)(14, "mat-form-field")(15, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](16, "Description"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](17, "textarea", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_textarea_ngModelChange_17_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.viewModel.description, $event) || (ctx.viewModel.description = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](18, "div", 4)(19, "mat-form-field")(20, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](21, "Domain"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](22, "input", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_22_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.dataService.getDomain(ctx.viewModel.domainVersionID).name, $event) || (ctx.dataService.getDomain(ctx.viewModel.domainVersionID).name = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](23, "div", 4)(24, "mat-form-field")(25, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](26, "Version"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](27, "input", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_27_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.dataService.getDomain(ctx.viewModel.domainVersionID).version.name, $event) || (ctx.dataService.getDomain(ctx.viewModel.domainVersionID).version.name = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](28, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](29, "div", 9)(30, "mat-card")(31, "div", 10)(32, "mat-card-title")(33, "h4", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](34, "Metadata"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](35, "mat-card-content")(36, "div", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](37, "app-list-input", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](38, "div", 9)(39, "mat-card")(40, "div", 10)(41, "mat-card-title")(42, "h4", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](43, "Links"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](44, "mat-card-content")(45, "div", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](46, "app-list-input", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](47, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](48, "div", 1)(49, "mat-card")(50, "div", 2)(51, "mat-card-title")(52, "h4", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](53, "Matrix Layout"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](54, "mat-card-content"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrepeaterCreate"](55, LayerSettingsComponent_For_56_Template, 3, 4, "div", null, _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrepeaterTrackByIdentity"]); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](57, "mat-card")(58, "div", 2)(59, "mat-card-title")(60, "h4", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](61, "Labels"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](62, "mat-card-content")(63, "div")(64, "input", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_64_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.viewModel.layout.showID, $event) || (ctx.viewModel.layout.showID = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](65, "label", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](66, " show IDs "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](67, "div")(68, "input", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_68_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.viewModel.layout.showName, $event) || (ctx.viewModel.layout.showName = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](69, "label", 16); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](70, " show names "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](71, "div", 9)(72, "mat-card")(73, "div", 2)(74, "mat-card-title")(75, "h4", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](76, "Aggregate Scores"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](77, "mat-card-content")(78, "div")(79, "input", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_79_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.viewModel.layout.showAggregateScores, $event) || (ctx.viewModel.layout.showAggregateScores = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](80, "label", 18); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](81, "show aggregate scores"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](82, "div")(83, "input", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerSettingsComponent_Template_input_ngModelChange_83_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx.viewModel.layout.countUnscored, $event) || (ctx.viewModel.layout.countUnscored = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](84, "label", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](85, " count unscored techniques as 0 "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](86, "div", 21)(87, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](88, "Aggregate Function"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](89, "div", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrepeaterCreate"](90, LayerSettingsComponent_For_91_Template, 3, 5, "div", null, _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrepeaterTrackByIdentity"]); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](92, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](93, "div", 23)(94, "button", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerSettingsComponent_Template_button_click_94_listener() { + return ctx.viewModel.sidebarOpened = !ctx.viewModel.sidebarOpened; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](95, "Close"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](12); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.viewModel.name); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.viewModel.description); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.dataService.getDomain(ctx.viewModel.domainVersionID).name); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.dataService.getDomain(ctx.viewModel.domainVersionID).version.name); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](10); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("config", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction2"](19, _c0, ctx.viewModel, ctx.viewModel.metadata)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](9); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("config", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpureFunction2"](22, _c1, ctx.viewModel, ctx.viewModel.links)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](9); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrepeater"](ctx.viewModel.layout.layoutOptions); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](9); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx.viewModel.layout.layout == "mini"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.viewModel.layout.showID); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("disabled", ctx.viewModel.layout.layout == "mini"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx.viewModel.layout.layout == "mini"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.viewModel.layout.showName); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("disabled", ctx.viewModel.layout.layout == "mini"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](10); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.viewModel.layout.showAggregateScores); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx.viewModel.layout.showAggregateScores || ctx.viewModel.layout.aggregateFunction !== "average"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx.viewModel.layout.countUnscored); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("disabled", !ctx.viewModel.layout.showAggregateScores || ctx.viewModel.layout.aggregateFunction !== "average"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrepeater"](ctx.viewModel.layout.aggregateFunctionOptions); + } + }, + dependencies: [_angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__.MatLabel, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.CheckboxControlValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.RadioControlValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.NgModel, _angular_material_input__WEBPACK_IMPORTED_MODULE_5__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_6__.MatButton, _angular_material_card__WEBPACK_IMPORTED_MODULE_7__.MatCard, _angular_material_card__WEBPACK_IMPORTED_MODULE_7__.MatCardContent, _angular_material_card__WEBPACK_IMPORTED_MODULE_7__.MatCardTitle, _angular_material_divider__WEBPACK_IMPORTED_MODULE_8__.MatDivider, _list_input_list_input_component__WEBPACK_IMPORTED_MODULE_1__.ListInputComponent], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.layer-settings .sidebar-content {\n margin: 1rem 0;\n}\n.layer-settings .info-card {\n display: flex;\n justify-content: space-between;\n}\n.layer-settings .info-field {\n margin: 1em 0;\n}\n.layer-settings .info-field .mat-mdc-form-field {\n width: 100%;\n}\n.layer-settings .settings .title {\n font-size: 14px;\n margin: 0;\n}\n.layer-settings .layer-data .mat-divider.layer-div {\n margin-bottom: 10px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .layer-settings .layer-data .mat-divider.layer-div {\n border-top-color: #4c4c68;\n }\n}\n.theme-override-dark .layer-settings .layer-data .mat-divider.layer-div {\n border-top-color: #4c4c68;\n}\n.layer-settings .sub-section {\n padding-top: 1.5em;\n}\n.layer-settings .padding-top {\n padding-top: 1em;\n}\n.layer-settings .data-input {\n overflow-y: auto;\n max-height: 30vh;\n}\n.layer-settings .button-container {\n display: flex;\n justify-content: flex-end;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .layer-settings .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n .theme-use-system .layer-settings .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-input-element, .theme-use-system .layer-settings .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n .theme-use-system .layer-settings .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-input-element {\n color: white;\n }\n}\n.theme-override-dark .layer-settings .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n.theme-override-dark .layer-settings .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-input-element, .theme-override-dark .layer-settings .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n.theme-override-dark .layer-settings .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-input-element {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .layer-settings .mat-mdc-form-field:not(.mat-form-field-disabled) .mdc-line-ripple::before, .theme-use-system .layer-settings .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mdc-line-ripple::before {\n border-bottom-color: white;\n }\n}\n.theme-override-dark .layer-settings .mat-mdc-form-field:not(.mat-form-field-disabled) .mdc-line-ripple::before, .theme-override-dark .layer-settings .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mdc-line-ripple::before {\n border-bottom-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .layer-settings .mat-mdc-form-field.mat-form-field-disabled .mat-mdc-floating-label,\n .theme-use-system .layer-settings .mat-mdc-form-field.mat-form-field-disabled .mdc-text-field__input, .theme-use-system .layer-settings .mat-mdc-form-field:hover.mat-form-field-disabled .mat-mdc-floating-label,\n .theme-use-system .layer-settings .mat-mdc-form-field:hover.mat-form-field-disabled .mdc-text-field__input {\n color: #bfbfbf;\n }\n}\n.theme-override-dark .layer-settings .mat-mdc-form-field.mat-form-field-disabled .mat-mdc-floating-label,\n.theme-override-dark .layer-settings .mat-mdc-form-field.mat-form-field-disabled .mdc-text-field__input, .theme-override-dark .layer-settings .mat-mdc-form-field:hover.mat-form-field-disabled .mat-mdc-floating-label,\n.theme-override-dark .layer-settings .mat-mdc-form-field:hover.mat-form-field-disabled .mdc-text-field__input {\n color: #bfbfbf;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .layer-settings .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before, .theme-use-system .layer-settings .mat-mdc-form-field:hover.mat-form-field-disabled .mdc-line-ripple::before {\n border-bottom-color: #bfbfbf;\n }\n}\n.theme-override-dark .layer-settings .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before, .theme-override-dark .layer-settings .mat-mdc-form-field:hover.mat-form-field-disabled .mdc-line-ripple::before {\n border-bottom-color: #bfbfbf;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .layer-settings .mat-mdc-form-field .mat-mdc-form-field-hint, .theme-use-system .layer-settings .mat-mdc-form-field:hover .mat-mdc-form-field-hint {\n color: white;\n }\n}\n.theme-override-dark .layer-settings .mat-mdc-form-field .mat-mdc-form-field-hint, .theme-override-dark .layer-settings .mat-mdc-form-field:hover .mat-mdc-form-field-hint {\n color: white;\n}\n.layer-settings .mat-mdc-card {\n width: 100%;\n}\n.layer-settings .mat-mdc-card-title {\n padding: 16px 16px 0 16px;\n}\n.layer-settings .mat-mdc-card + .mat-mdc-card {\n margin-left: 1em;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbGF5ZXItc2V0dGluZ3MvbGF5ZXItc2V0dGluZ3MuY29tcG9uZW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0E7Ozs7Ozs7O0VBQUE7QUNQQztFQUNPLGNBQUE7QUFRUjtBQU5DO0VBQ0MsYUFBQTtFQUNBLDhCQUFBO0FBUUY7QUFOQztFQUNDLGFBQUE7QUFRRjtBQVBFO0VBQ0MsV0FBQTtBQVNIO0FBTkM7RUFDTyxlQUFBO0VBQ0EsU0FBQTtBQVFSO0FBTFE7RUFDSSxtQkFBQTtBQU9aO0FEaUxRO0VBSEo7SUFJUSx5QkN4THNEO0VBVWhFO0FBQ0Y7QURnTEk7RUFHSSx5QkM5TDBEO0FBY2xFO0FBWEM7RUFDQyxrQkFBQTtBQWFGO0FBWEM7RUFDQyxnQkFBQTtBQWFGO0FBWEk7RUFDSSxnQkFBQTtFQUNBLGdCQUFBO0FBYVI7QUFYSTtFQUNJLGFBQUE7RUFDQSx5QkFBQTtBQWFSO0FEMkpRO0VBSEo7OztJQUlRLFlDbksrQztFQWF6RDtBQUNGO0FEd0pJOzs7RUFHSSxZQ3pLbUQ7QUFtQjNEO0FEK0lRO0VBSEo7SUFJUSwwQkNoS2lEO0VBb0IzRDtBQUNGO0FEOElJO0VBR0ksMEJDdEtxRDtBQXdCN0Q7QUR1SVE7RUFISjs7O0lBSVEsY0N6SitDO0VBdUJ6RDtBQUNGO0FEb0lJOzs7RUFHSSxjQy9KbUQ7QUE2QjNEO0FEMkhRO0VBSEo7SUFJUSw0QkN0SmlEO0VBOEIzRDtBQUNGO0FEMEhJO0VBR0ksNEJDNUpxRDtBQWtDN0Q7QURtSFE7RUFISjtJQUlRLFlDbEoyQztFQWtDckQ7QUFDRjtBRGtISTtFQUdJLFlDeEorQztBQXNDdkQ7QUFuQ0M7RUFDQyxXQUFBO0FBcUNGO0FBbkNDO0VBQ0MseUJBQUE7QUFxQ0Y7QUFuQ0M7RUFDQyxnQkFBQTtBQXFDRiIsInNvdXJjZXNDb250ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi9jb2xvcnMuc2Nzcyc7XG4ubGF5ZXItc2V0dGluZ3Mge1xuXHQuc2lkZWJhci1jb250ZW50IHtcbiAgICAgICAgbWFyZ2luOiAxcmVtIDA7XG4gICAgfVxuXHQuaW5mby1jYXJkIHtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcblx0fVxuXHQuaW5mby1maWVsZCB7XG5cdFx0bWFyZ2luOiAxZW0gMDtcblx0XHQubWF0LW1kYy1mb3JtLWZpZWxkIHtcblx0XHRcdHdpZHRoOiAxMDAlO1xuXHRcdH1cblx0fVxuXHQuc2V0dGluZ3MgLnRpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5sYXllci1kYXRhIHtcbiAgICAgICAgLm1hdC1kaXZpZGVyLmxheWVyLWRpdiB7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItdG9wLWNvbG9yJywgY29sb3IoZGFyay00KSk7XG4gICAgICAgIH1cbiAgICB9XG5cdC5zdWItc2VjdGlvbiB7XG5cdFx0cGFkZGluZy10b3A6IDEuNWVtO1xuXHR9XG5cdC5wYWRkaW5nLXRvcCB7XG5cdFx0cGFkZGluZy10b3A6IDFlbTtcblx0fVxuICAgIC5kYXRhLWlucHV0IHtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgbWF4LWhlaWdodDogMzB2aDtcbiAgICB9XG4gICAgLmJ1dHRvbi1jb250YWluZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cbiAgICAubWF0LW1kYy1mb3JtLWZpZWxkLCAubWF0LW1kYy1mb3JtLWZpZWxkOmhvdmVyIHtcbiAgICAgICAgJjpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSB7XG4gICAgICAgICAgICAubWF0LW1kYy1mbG9hdGluZy1sYWJlbCxcbiAgICAgICAgICAgIC5tYXQtbWRjLWlucHV0LWVsZW1lbnQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgICAgICB9XG5cdFx0XHQubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmUge1xuXHRcdFx0XHRAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlci1ib3R0b20tY29sb3InLCBvbi1jb2xvcihkYXJrLTMpKTtcblx0XHRcdH1cbiAgICAgICAgfVxuXG4gICAgICAgICYubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQge1xuICAgICAgICAgICAgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwsXG5cdFx0XHQubWRjLXRleHQtZmllbGRfX2lucHV0IHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgZGFya2VuKG9uLWNvbG9yKGRhcmstMSksIDI1JSkpO1xuICAgICAgICAgICAgfVxuXHRcdFx0Lm1kYy1saW5lLXJpcHBsZTo6YmVmb3JlIHtcblx0XHRcdFx0QGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItYm90dG9tLWNvbG9yJywgZGFya2VuKG9uLWNvbG9yKGRhcmstMSksIDI1JSkpO1xuXHRcdFx0fVxuICAgICAgICB9XG4gICAgICAgIC5tYXQtbWRjLWZvcm0tZmllbGQtaGludCB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xuICAgICAgICB9XG4gICAgfVxuXHQubWF0LW1kYy1jYXJkIHtcblx0XHR3aWR0aDogMTAwJTtcblx0fVxuXHQubWF0LW1kYy1jYXJkLXRpdGxlIHtcblx0XHRwYWRkaW5nOiAxNnB4IDE2cHggMCAxNnB4O1xuXHR9XG5cdC5tYXQtbWRjLWNhcmQgKyAubWF0LW1kYy1jYXJkIHtcblx0XHRtYXJnaW4tbGVmdDogMWVtO1xuXHR9XG59Il0sInNvdXJjZVJvb3QiOiIifQ== */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 56559: +/*!**************************************************************************!*\ + !*** ./src/app/layer-upgrade/changelog-cell/changelog-cell.component.ts ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ChangelogCellComponent: () => (/* binding */ ChangelogCellComponent) +/* harmony export */ }); +/* harmony import */ var _matrix_cell__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../matrix/cell */ 12264); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/config.service */ 43696); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/data.service */ 28490); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ 60316); + + + + + + +class ChangelogCellComponent extends _matrix_cell__WEBPACK_IMPORTED_MODULE_0__.Cell { + constructor(configService, dataService, viewModelsService) { + super(dataService, configService); + this.configService = configService; + this.dataService = dataService; + this.viewModelsService = viewModelsService; + this.isCurrentVersion = true; + this.isDraggable = false; + } + /** + * Highlight the moused over technique + */ + highlight() { + if (this.isCurrentVersion) { + this.viewModel.highlightTechnique(this.technique, this.tactic); + } + } + /** + * Clear the technique highlight + */ + unhighlight() { + if (this.isCurrentVersion) this.viewModel.clearHighlight(); + } + /** + * Select or unselect this technique + */ + onClick() { + if (this.isCurrentVersion) { + // unselect technique + if (this.viewModel.isTechniqueSelected(this.technique, this.tactic)) { + this.viewModel.unselectTechnique(this.technique, this.tactic); + } + // select technique + else { + this.viewModel.clearSelectedTechniques(); + this.viewModel.selectTechnique(this.technique, this.tactic); + } + this.viewModelsService.selectionChanged(); // emit selection change + } + } + /** + * Retrieve css classes for this technique + */ + getClass() { + let theclass = super.getClass(); + if (!this.isCurrentVersion && !this.isDraggable) { + theclass += ' nopointer'; + } + if (this.section == 'additions' || this.section == 'deprecations') { + theclass += ' setwidth'; + } + return theclass; + } + static #_ = this.ɵfac = function ChangelogCellComponent_Factory(t) { + return new (t || ChangelogCellComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_1__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_2__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_3__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineComponent"]({ + type: ChangelogCellComponent, + selectors: [["changelog-cell"]], + inputs: { + isCurrentVersion: "isCurrentVersion", + isDraggable: "isDraggable", + section: "section" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵInheritDefinitionFeature"]], + decls: 12, + vars: 17, + consts: [[1, "technique-cell", 3, "ngStyle", "ngClass"], [3, "click", "mouseenter", "mouseleave"], [1, "section"]], + template: function ChangelogCellComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div", 0)(1, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵlistener"]("click", function ChangelogCellComponent_Template_div_click_1_listener() { + return ctx.onClick(); + })("mouseenter", function ChangelogCellComponent_Template_div_mouseenter_1_listener() { + return ctx.highlight(); + })("mouseleave", function ChangelogCellComponent_Template_div_mouseleave_1_listener() { + return ctx.unhighlight(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](2, "div", 2)(3, "span")(4, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](6, "div", 2)(7, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtext"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](9, "div", 2)(10, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtext"](11); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("ngStyle", ctx.getTechniqueBackground())("ngClass", ctx.getClass()); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵstyleProp"]("border-color", ctx.configService.commentColor)("color", ctx.getTechniqueTextColor()); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtextInterpolate"](ctx.tactic.name); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵstyleProp"]("border-color", ctx.configService.commentColor)("color", ctx.getTechniqueTextColor()); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtextInterpolate"](ctx.technique.attackID); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵstyleProp"]("border-color", ctx.configService.commentColor)("color", ctx.getTechniqueTextColor()); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtextInterpolate"](ctx.technique.name); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_5__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_5__.NgStyle], + styles: ["@charset \"UTF-8\";\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.matrix {\n border-collapse: collapse;\n line-height: 14px;\n}\n\n@media print {\n .matrix {\n border-collapse: collapse;\n line-height: 12px;\n }\n}\n.technique-cell {\n cursor: pointer;\n height: 100%;\n display: flex;\n align-items: center;\n position: relative;\n font-size: 13px;\n line-height: 14px;\n min-width: 14px;\n min-height: 14px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell {\n background-color: white;\n }\n}\n.theme-override-light .technique-cell {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .technique-cell {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell {\n color: black;\n }\n}\n.theme-override-light .technique-cell {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell {\n color: white;\n }\n}\n.theme-override-dark .technique-cell {\n color: white;\n}\n@media print {\n .technique-cell {\n font-size: 7px;\n }\n}\n.technique-cell > div {\n padding: 7px 3px;\n box-sizing: border-box;\n display: block;\n width: 100%;\n height: 100%;\n}\n.technique-cell.showID:not(.showName) {\n text-align: center;\n}\n.technique-cell .id-name-break {\n outline-offset: -0.5px;\n outline: 1px solid rgba(223, 223, 223, 0.5);\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #dfdfdf inset;\n }\n}\n.theme-override-light .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #dfdfdf inset;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #42424f inset;\n }\n}\n.theme-override-dark .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #42424f inset;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell.editing {\n box-shadow: 0 0 0 1px black inset;\n }\n}\n.theme-override-light .technique-cell.editing {\n box-shadow: 0 0 0 1px black inset;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell.editing {\n box-shadow: 0 0 0 1px #464dff inset;\n }\n}\n.theme-override-dark .technique-cell.editing {\n box-shadow: 0 0 0 1px #464dff inset;\n}\n.technique-cell.underlined.mini div:before {\n position: absolute;\n content: \"i\";\n font-size: 13px;\n text-align: center;\n width: 100%;\n top: 0;\n left: 0;\n}\n.technique-cell.underlined div span {\n border-bottom: 2px solid transparent;\n}\n.technique-cell.mini.disabled div:before {\n position: absolute;\n content: \"\u2715\";\n font-size: 14px -1px;\n text-align: center;\n width: 100%;\n top: 0;\n left: 0;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell.highlight {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .technique-cell.highlight {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell.highlight {\n background: #464dff;\n }\n}\n.theme-override-dark .technique-cell.highlight {\n background: #464dff;\n}\n.technique-cell.highlight .id-name-break {\n outline: 1px solid rgba(0, 0, 0, 0.5);\n}\n.technique-cell.unannotated .sub {\n color: gray;\n}\n\n.sub {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n bottom: -0.5em;\n}\n@media print {\n .sub {\n display: none;\n }\n}\n\n.nopointer {\n cursor: unset;\n}\n\n.section {\n margin: 4px 0;\n}\n\n.section + .section {\n border-top: 1px solid rgba(223, 223, 223, 0.5);\n}\n\n.technique-cell {\n margin: auto;\n}\n\n.setwidth {\n max-width: 50%;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-drawer-inner-container .technique-cell {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .mat-drawer-inner-container .technique-cell {\n background-color: #4c4c68;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvbGF5ZXItdXBncmFkZS9jaGFuZ2Vsb2ctY2VsbC9jaGFuZ2Vsb2ctY2VsbC5jb21wb25lbnQuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1jb21tb24uc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L3RlY2huaXF1ZS1jZWxsL3RlY2huaXF1ZS1jZWxsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQjtBQ1NoQjs7Ozs7Ozs7RUFBQTtBQ0pBO0VBQ0kseUJBQUE7RUFDQSxpQkFMTztBRldYOztBRUhBO0VBQ0k7SUFDSSx5QkFBQTtJQUNBLGlCQVZTO0VGZ0JmO0FBQ0Y7QUdsQkE7RUFHSSxlQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtFQUVBLGtCQUFBO0VBRUEsZUFBQTtFQUNBLGlCRFhPO0VDYVAsZURiTztFQ2NQLGdCRGRPO0FGNkJYO0FDMkpRO0VBSEo7SUFJUSx1QkV4TG9DO0VIZ0M5QztBQUNGO0FDMEpJO0VBR0ksdUJFOUx3QztBSG9DaEQ7QUNzS1E7RUFISjtJQUlRLHlCRTNNMkM7RUh3Q3JEO0FBQ0Y7QUNxS0k7RUFHSSx5QkVqTitDO0FINEN2RDtBQzJJUTtFQUhKO0lBSVEsWUV2THlCO0VIK0NuQztBQUNGO0FDMElJO0VBR0ksWUU3TDZCO0FIbURyQztBQ3NKUTtFQUhKO0lBSVEsWUUxTWdDO0VIdUQxQztBQUNGO0FDcUpJO0VBR0ksWUVoTm9DO0FIMkQ1QztBRzlDSTtFQWZKO0lBZ0JRLGNBQUE7RUhpRE47QUFDRjtBRy9DSTtFQUNJLGdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7QUhpRFI7QUc5Q0k7RUFDSSxrQkFBQTtBSGdEUjtBRzdDSTtFQUNJLHNCQUFBO0VBQ0EsMkNBQUE7QUgrQ1I7QUN3R1E7RUFISjtJQUlRLG1DRXBKa0M7RUgrQzVDO0FBQ0Y7QUN1R0k7RUFHSSxtQ0UxSnNDO0FIbUQ5QztBQ21IUTtFQUhKO0lBSVEsbUNFdktzRTtFSHVEaEY7QUFDRjtBQ2tISTtFQUdJLG1DRTdLMEU7QUgyRGxGO0FDd0ZRO0VBSEo7SUFJUSxpQ0VoSmtDO0VIMkQ1QztBQUNGO0FDdUZJO0VBR0ksaUNFdEpzQztBSCtEOUM7QUNtR1E7RUFISjtJQUlRLG1DRW5LeUQ7RUhtRW5FO0FBQ0Y7QUNrR0k7RUFHSSxtQ0V6SzZEO0FIdUVyRTtBR25FUTtFQUNJLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtBSHFFWjtBR25FUTtFQUNJLG9DQUFBO0FIcUVaO0FHakVJO0VBQ0ksa0JBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtBSG1FUjtBQ21EUTtFQUhKO0lBSVEsNkJFbkhrQztFSG1FNUM7QUFDRjtBQ2tESTtFQUdJLDZCRXpIc0M7QUh1RTlDO0FDOERRO0VBSEo7SUFJUSxtQkV0SStEO0VIMkV6RTtBQUNGO0FDNkRJO0VBR0ksbUJFNUltRTtBSCtFM0U7QUc5RVE7RUFDSSxxQ0FBQTtBSGdGWjtBRzNFUTtFQUNJLFdBQUE7QUg2RVo7O0FHeEVBO0VBQ0ksa0JBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLHdCQUFBO0VBQ0EsY0FBQTtBSDJFSjtBRzFFSTtFQU5KO0lBT1EsYUFBQTtFSDZFTjtBQUNGOztBQXhLQTtFQUNJLGFBQUE7QUEyS0o7O0FBektBO0VBQ0ksYUFBQTtBQTRLSjs7QUExS0E7RUFDSSw4Q0FBQTtBQTZLSjs7QUEzS0E7RUFDSSxZQUFBO0FBOEtKOztBQTVLQTtFQUNJLGNBQUE7QUErS0o7O0FDZVE7RUFISjtJQUlRLHlCRDVMOEM7RUFpTHhEO0FBQ0Y7QUNhSTtFQUdJLHlCRGxNa0Q7QUFxTDFEIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnLi4vLi4vbWF0cml4L3RlY2huaXF1ZS1jZWxsL3RlY2huaXF1ZS1jZWxsLmNvbXBvbmVudC5zY3NzJztcblxuLm5vcG9pbnRlciB7XG4gICAgY3Vyc29yOiB1bnNldDtcbn1cbi5zZWN0aW9uIHtcbiAgICBtYXJnaW46IDRweCAwO1xufVxuLnNlY3Rpb24gKyAuc2VjdGlvbiB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoYm9yZGVyLWNvbG9yKGJvZHkpLCAwLjUpO1xufVxuLnRlY2huaXF1ZS1jZWxsIHtcbiAgICBtYXJnaW46IGF1dG87XG59XG4uc2V0d2lkdGgge1xuICAgIG1heC13aWR0aDogNTAlO1xufVxuLm1hdC1kcmF3ZXItaW5uZXItY29udGFpbmVyIC50ZWNobmlxdWUtY2VsbCB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IoZGFyay00KSk7XG59XG4iLCIkY29sdW1uLWhvdmVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7XG4kZGlzYWJsZWQtY29sb3I6IGRhcmtlbigkY29sdW1uLWhvdmVyLWNvbG9yLCAyMCUpO1xuXG4vLyBBVFQmQ0sgQnJhbmQgY29sb3JzXG4kYXR0YWNrLWNvbG9yczogKFxuICAgIGF0dGFjay1vcmFuZ2U6ICNjNjNmMWYsXG4gICAgYXR0YWNrLWJsdWU6ICMwNjJmNGYsXG4pO1xuXG4vKipcbiAqIENvbG9ycyB1c2VkIGFjcm9zcyB0aGUgTmF2aWdhdG9yLiBTaGFyZWQgYnkgdGhlIEFUVCZDSyBXZWJzaXRlLlxuICogRm9yIGVhY2ggY29sb3ItcGFpcjpcbiAqICAgLSBcImNvbG9yXCIgcmVmZXJzIHRvIHRoZSBjb2xvciBpdHNlbGZcbiAqICAgLSBcIm9uLWNvbG9yXCIgcmVmZXJzIHRvIHRoZSBtb3N0IHJlYWRhYmxlIHRleHQtY29sb3IgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgY29sb3IuXG4gKiBOb3RlOiBzb21lIGNvbG9ycyBkb24ndCBkZWZpbmUgb24tY29sb3JzLiBUaGlzIGlzIGJlY2F1c2UsIGZvciB0aGVzZSBjb2xvcnMsIHRoZXkgYXJlbid0IGludGVuZGVkIHRvXG4gKiBhcHBlYXIgd2l0aCBpbm5lciBjb250ZW50LiBGb3IgZXhhbXBsZSwgXCJsaW5rXCIgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBsaW5rIHRleHQsIHdoaWNoIGluaGVyZW50bHlcbiAqIGNhbm5vdCBoYXZlIGlubmVyIHRleHQuXG4gKi9cbiRjb2xvcnM6IChcbiAgICBwcmltYXJ5OiAoXG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stb3JhbmdlKSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy91c2VkIGZvciBoZWFkZXIgYW5kIHNvbWUgbmF2IGVsZW1lbnRzXG4gICAgc2Vjb25kYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLWJsdWUpLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vdXNlZCBmb3IgZm9vdGVyIGFuZCBzb21lIGJ1dHRvbnNcbiAgICBib2R5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICAvL3ByaW1hcnkgcGFnZSBib2R5XG4gICAgbGlnaHQ6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIGRhcms6IChcbiAgICAgICAgY29sb3I6ICMwODA4MGIsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vIGRhcmsgdGhlbWUgY29sb3JzIHZhcmlhdGlvbnMgMC0zIChmcm9tIGRhcmtlc3QgdG8gbGlnaHRlc3QpXG4gICAgZGFyay0xOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzFhMWEyMyxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTI6IChcbiAgICAgICAgY29sb3I6ICMyZTJlM2YsXG4gICAgICAgIG9uLWNvbG9yOiAjZmE2MzQxLFxuICAgICksXG4gICAgLy8gYWNjZW50IGRhcmsgY29sb3Igc2NoZW1lICh1c2VkIGZvciA6aG92ZXIgc2VsZWN0b3JzKVxuICAgIGRhcmstMzpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMzZjNmNTYsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay00OiAoXG4gICAgICAgIGNvbG9yOiAjNGM0YzY4LFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBkYXJrLWRpc2FibGVkOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyAyNSUpLFxuICAgICksXG4gICAgZGFyay1saW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNzU4OGU4LFxuICAgICksXG4gICAgZGFyay1saW5rLWFjdGl2ZTogKFxuICAgICAgICBjb2xvcjogI2U4NDdlOCxcbiAgICApLFxuICAgIGxpbms6IChcbiAgICAgICAgY29sb3I6ICM0ZjdjYWMsXG4gICAgKSxcbiAgICAvLyBoeXBlcmxpbmtzXG4gICAgbWF0cml4LWhlYWRlcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IGdyYXksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy8gY29sb3Igb2YgbWF0cml4IGhlYWRlcnNcbiAgICBjZWxsLWhpZ2hsaWdodC1jb2xvcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHJnYig5NiwgMTk3LCAyNTUpLFxuICAgICAgICApLFxuICAgIGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM0NjRkZmYsXG4gICAgKSxcbiAgICBob3Zlci1jZWxsLWZvbnQtY29sb3I6IChcbiAgICAgICAgY29sb3I6IHJnYigwLCAwLCAwKSxcbiAgICApLFxuICAgIHBhbmVsLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNkZGQsXG4gICAgKSxcbiAgICBwYW5lbC1saWdodDogKFxuICAgICAgICBjb2xvcjogbGlnaHRlbigjZGRkLCA4JSksXG4gICAgKSxcbiAgICB0YWItdGV4dC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzU1NSxcbiAgICApLFxuICAgIGJ1dHRvbi1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjYjhiOGI4LFxuICAgICksXG4gICAgLy9ib290c3RyYXAgY29sb3JzXG4gICAgYm9vdHN0cmFwLXByaW1hcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjNDI4YmNhLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGJvb3RzdHJhcC1zdWNjZXNzOiAoXG4gICAgICAgIGNvbG9yOiAjNWNiODVjLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBib290c3RyYXAtZGFuZ2VyOiAoXG4gICAgICAgIGNvbG9yOiAjZDk1MzRmLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtd2FybmluZzogKFxuICAgICAgICBjb2xvcjogI2YwYWQ0ZSxcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWluZm86IChcbiAgICAgICAgY29sb3I6ICM1YmMwZGUsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuKTtcblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBjb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIGNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBnZXQgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGNvbG9yLCBmb3IgcGF0dGVybmluZ1xuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgZGFyaywgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGxpZ2h0ZXIuXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBsaWdodCwgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGRhcmtlci5cbi8vIGNvbnRyYXN0LCBhbiBvcHRpb25hbCBhcmd1bWVudCwgbXVsdGlwbGllcyB0byBjcmVhdGUgYSBtb3JlIGRpc3RhbnQgb3Igc2ltaWxhciBjb2xvci4gPjEgaXMgbW9yZSBkaXN0YW50LCA8MSBpcyBtb3JlIHNpbWlsYXIuXG5AZnVuY3Rpb24gY29sb3ItYWx0ZXJuYXRlKCRuYW1lLCAkY29udHJhc3Q6IDEpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAkd2VpZ2h0OiAkY29udHJhc3QgKiA1JSk7XG59XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgb24tY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBvbi1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ29uLWNvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZW1waGFzaXplZCBvbi1jb2xvciBpcyBsZXNzIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgb24tY29sb3IoJG5hbWUpKTtcbn1cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGRlZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBkZWVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbW9yZSBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWRlZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChjb2xvcigkbmFtZSksIG9uLWNvbG9yKCRuYW1lKSwgMjUlKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBjb21wdXRlIGEgYm9yZGVyIGNvbG9yIGZvciB0aGUgY29sb3JcbkBmdW5jdGlvbiBib3JkZXItY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAxMi41JSk7XG4gICAgLy8gQHJldHVybiByZ2JhKGludmVydChjb2xvcigkbmFtZSkpLCAwLjEyNSk7XG59XG5cbi8vIElNUE9SVEFOVCBVU0FHRSBOT1RFOlxuLy8gdG8gdXNlIGFkYXB0aXZlIGNvbG9ycywgeW91IE1VU1QgZGlzYWJsZSB2aWV3IGVuY2Fwc3VsYXRpb24gb24gdGhlIGNvbXBvbmVudFxuLy8geW91J3JlIGFwcGx5aW5nIHRoZSBzdHlsZXMgd2l0aGluLiBPdGhlcndpc2UgYW5jZXN0b3IgY2xhc3NlcyBjYW5ub3QgYmUgYXNzZXNzZWRcbi8vIGJ5IHRoZSBtaXhpbnMgdG8gZGV0ZXJtaW5lIHRoZSBhcHAgdGhlbWUgY29uZmlndXJhdGlvbi5cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBsaWdodCBhbmQgZGFyayB0aGVtZXNcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yKCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlLCAkZGFyay12YWx1ZSkge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKTtcbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWxpZ2h0ICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGxpZ2h0IHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgIH1cbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWRhcmsgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgZGFyayB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnLi4vLi4vY29sb3JzLnNjc3MnO1xuXG4kc2l6ZXVuaXQ6IDE0cHg7XG4kc2l6ZXVuaXRfcHJpbnQ6IDEycHg7XG5cbi5tYXRyaXgge1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXpldW5pdDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgICAubWF0cml4IHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRzaXpldW5pdF9wcmludDtcbiAgICB9XG59XG4iLCJAdXNlICdzYXNzOm1hdGgnIGFzIG1hdGg7XG5AaW1wb3J0ICcuLi9tYXRyaXgtY29tbW9uLnNjc3MnO1xuLnRlY2huaXF1ZS1jZWxsIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIHdoaXRlLCBjb2xvcihkYXJrLTIpKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCBibGFjaywgb24tY29sb3IoZGFyay0zKSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBmb250LXNpemU6ICRzaXpldW5pdCAtIDFweDtcbiAgICBsaW5lLWhlaWdodDogJHNpemV1bml0O1xuXG4gICAgbWluLXdpZHRoOiAkc2l6ZXVuaXQ7XG4gICAgbWluLWhlaWdodDogJHNpemV1bml0O1xuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgIGZvbnQtc2l6ZTogJHNpemV1bml0X3ByaW50IC0gNXB4O1xuICAgIH1cblxuICAgID4gZGl2IHtcbiAgICAgICAgcGFkZGluZzogbWF0aC5kaXYoJHNpemV1bml0LCAyKSAzcHg7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cblxuICAgICYuc2hvd0lEOm5vdCguc2hvd05hbWUpIHtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIH1cblxuICAgIC5pZC1uYW1lLWJyZWFrIHtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0wLjVweDtcbiAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkIHJnYmEoYm9yZGVyLWNvbG9yKGJvZHkpLCAwLjUpO1xuICAgIH1cblxuICAgICY6bm90KC5lZGl0aW5nKTpub3QoLmNvbG9yZWQpOm5vdCguc3VwZXJ0ZWNobmlxdWVjZWxsKSB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdib3gtc2hhZG93JywgMCAwIDAgMXB4IGJvcmRlci1jb2xvcihib2R5KSBpbnNldCwgMCAwIDAgMXB4IGJvcmRlci1jb2xvcihkYXJrLTIpIGluc2V0KTtcbiAgICB9XG5cbiAgICAmLmVkaXRpbmcge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm94LXNoYWRvdycsIDAgMCAwIDFweCBibGFjayBpbnNldCwgMCAwIDAgMXB4IGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3IpIGluc2V0KTtcbiAgICB9XG5cbiAgICAmLnVuZGVybGluZWQge1xuICAgICAgICAmLm1pbmkgZGl2OmJlZm9yZSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBjb250ZW50OiAnaSc7XG4gICAgICAgICAgICBmb250LXNpemU6ICRzaXpldW5pdCAtIDFweDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgfVxuICAgICAgICBkaXYgc3BhbiB7XG4gICAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmLm1pbmkuZGlzYWJsZWQgZGl2OmJlZm9yZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgY29udGVudDogJ1xcMjcxNSc7XG4gICAgICAgIGZvbnQtc2l6ZTogJHNpemV1bml0IC0xcHg7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICB9XG5cbiAgICAmLmhpZ2hsaWdodCB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgY29sb3IoY2VsbC1oaWdobGlnaHQtY29sb3IpLCBjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSk7XG4gICAgICAgIC5pZC1uYW1lLWJyZWFrIHtcbiAgICAgICAgICAgIG91dGxpbmU6IDFweCBzb2xpZCByZ2JhKGJsYWNrLCAwLjUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi51bmFubm90YXRlZCB7XG4gICAgICAgIC5zdWIge1xuICAgICAgICAgICAgY29sb3I6IGdyYXk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5zdWIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmb250LXNpemU6IDc1JTtcbiAgICBsaW5lLWhlaWdodDogMDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgYm90dG9tOiAtMC41ZW07XG4gICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 34048: +/*!**********************************************************!*\ + !*** ./src/app/layer-upgrade/layer-upgrade.component.ts ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ LayerUpgradeComponent: () => (/* binding */ LayerUpgradeComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/material/expansion */ 19322); +/* harmony import */ var _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/material/paginator */ 24624); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/material/progress-spinner */ 41134); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); +/* harmony import */ var ngx_drag_drop__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ngx-drag-drop */ 53935); +/* harmony import */ var _angular_material_card__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/material/card */ 53777); +/* harmony import */ var _angular_material_divider__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/material/divider */ 14102); +/* harmony import */ var _angular_material_stepper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/stepper */ 56622); +/* harmony import */ var _changelog_cell_changelog_cell_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./changelog-cell/changelog-cell.component */ 56559); + + + + + + + + + + + + + + + + + + +const _c0 = ["stepper"]; +function LayerUpgradeComponent_mat_step_19_ng_template_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](0); + } + if (rf & 2) { + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"]("Review ", ctx_r3.getHeader(section_r3), ""); + } +} +function LayerUpgradeComponent_mat_step_19_div_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 11)(1, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const desc_r5 = ctx.ngIf; + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](desc_r5); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_div_3_Template(rf, ctx) { + if (rf & 1) { + const _r7 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div")(1, "input", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayListener"]("ngModelChange", function LayerUpgradeComponent_mat_step_19_div_4_div_3_Template_input_ngModelChange_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r7); + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayBindingSet"](ctx_r3.filter[section_r3], $event) || (ctx_r3.filter[section_r3] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function LayerUpgradeComponent_mat_step_19_div_4_div_3_Template_input_change_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r7); + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.applyFilters(section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "label", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](3, " show annotated techniques only "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("id", "filter_", section_r3, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r3.disableFilter(section_r3)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtwoWayProperty"]("ngModel", ctx_r3.filter[section_r3]); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵclassProp"]("disabled", ctx_r3.disableFilter(section_r3)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("for", "filter_", section_r3, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("matTooltip", ctx_r3.disableFilter(section_r3) ? "no annotated techniques" : ""); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_div_10_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "mat-progress-spinner", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_mat_icon_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "mat-icon", 33); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, "check_circle_outline"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_mat_icon_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "mat-icon", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, "radio_button_unchecked"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 42)(1, "div", 43)(2, "a", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](4, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate"]("href", ctx_r3.getPreservedURL(attackID_r9), _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsanitizeUrl"]); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ATT&CK v", ctx_r3.compareTo.version, " "); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 45)(1, "mat-icon", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2, "east"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 42)(1, "div", 43)(2, "a", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](4, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate"]("href", ctx_r3.getTechnique(attackID_r9, ctx_r3.viewModel, section_r3).url, _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵsanitizeUrl"]); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ATT&CK v", ctx_r3.viewModel.version, " "); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_1_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 48)(1, "div", 49); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](2, "changelog-cell", 50); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const tactic_r10 = ctx.$implicit; + const oldTechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().ngIf; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](7).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("dndDraggable", oldTechnique_r11.get_technique_tactic_id(tactic_r10)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("tactic", tactic_r10)("technique", oldTechnique_r11)("viewModel", ctx_r3.compareTo)("isCurrentVersion", false)("isDraggable", true)("section", section_r3); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 42); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_1_div_1_Template, 3, 7, "div", 47); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r3.getTactics(attackID_r9, ctx_r3.compareTo)); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_span_2_Template(rf, ctx) { + if (rf & 1) { + const _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span", 55); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_span_2_Template_span_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r15); + const tactic_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const newTechnique_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().ngIf; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](8); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.clearAnnotations(newTechnique_r14, tactic_r13)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, " x "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r12 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("dndDrop", function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_Template_div_dndDrop_0_listener($event) { + const tactic_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r12).$implicit; + const newTechnique_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().ngIf; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](7).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.onDrop($event, newTechnique_r14, tactic_r13, section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "changelog-cell", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_span_2_Template, 2, 0, "span", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r13 = ctx.$implicit; + const newTechnique_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().ngIf; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](7).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("tactic", tactic_r13)("technique", newTechnique_r14)("viewModel", ctx_r3.viewModel)("isCurrentVersion", true)("section", section_r3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.isAnnotated(newTechnique_r14, tactic_r13, ctx_r3.viewModel)); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 42); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_Template, 3, 6, "div", 51); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r3.getTactics(attackID_r9, ctx_r3.viewModel, section_r3)); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 35); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_1_Template, 2, 1, "div", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "div", 45)(3, "mat-icon", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](4, " info_outline "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](5, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_Template, 2, 1, "div", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.getTechnique(attackID_r9, ctx_r3.compareTo)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("matTooltip", "Drag and drop to copy annotations to the desired tactics in ATT&CK v", ctx_r3.viewModel.version, "."); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.getTechnique(attackID_r9, ctx_r3.viewModel, section_r3)); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "changelog-cell", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("tactic", tactic_r16)("technique", ctx_r3.getTechnique(attackID_r9, ctx_r3.compareTo))("viewModel", ctx_r3.compareTo)("isCurrentVersion", false)("section", section_r3); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template(rf, ctx) { + if (rf & 1) { + const _r17 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td", 58)(1, "button", 59); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r17); + const tactic_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.copyAnnotations(attackID_r9, tactic_r16, section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](2, "mat-icon", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](3, "chevron_right"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](4, "button", 60); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template_button_click_4_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r17); + const tactic_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.revertCopy(attackID_r9, tactic_r16, section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "mat-icon", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](6, "chevron_left"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const tactic_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", ctx_r3.isCopied(ctx_r3.getTechnique(attackID_r9, ctx_r3.compareTo), tactic_r16) || !ctx_r3.anyAnnotated(attackID_r9)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("disabled", !ctx_r3.isCopied(ctx_r3.getTechnique(attackID_r9, ctx_r3.compareTo), tactic_r16)); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](1, "changelog-cell", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("tactic", tactic_r16)("technique", ctx_r3.getTechnique(attackID_r9, ctx_r3.viewModel, section_r3))("viewModel", ctx_r3.viewModel)("isCurrentVersion", true)("section", section_r3); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_1_Template, 2, 5, "td", 17)(2, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template, 7, 2, "td", 57)(3, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_3_Template, 2, 5, "td", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](7).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "additions"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "additions" && section_r3 !== "deprecations"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "deprecations"); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div")(1, "table", 56); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_Template, 4, 3, "tr", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](2).$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r3.getTactics(attackID_r9, ctx_r3.compareTo, section_r3)); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 35); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_1_Template, 5, 2, "div", 36)(2, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_2_Template, 3, 0, "div", 37)(3, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_3_Template, 5, 2, "div", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_Template, 6, 4, "div", 38)(5, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_Template, 3, 1, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](6, "div", 39)(7, "input", 40); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_Template_input_click_7_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r8); + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const panel_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵreference"](1); + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](5); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.reviewedChanged(attackID_r9, panel_r18)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](8, "label", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](9, "reviewed"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const attackID_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "additions"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "additions" && section_r3 !== "deprecations"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "deprecations"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.tacticsChanged(attackID_r9, section_r3)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r3.tacticsChanged(attackID_r9, section_r3)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("id", "review_", attackID_r9, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("checked", ctx_r3.isReviewed(attackID_r9)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("for", "review_", attackID_r9, ""); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "mat-expansion-panel", null, 1)(2, "mat-expansion-panel-header")(3, "mat-panel-title"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_mat_icon_4_Template, 2, 0, "mat-icon", 30)(5, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_mat_icon_5_Template, 2, 0, "mat-icon", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](6, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_Template, 10, 10, "ng-template", 32); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const attackID_r9 = ctx.$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.isReviewed(attackID_r9)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r3.isReviewed(attackID_r9)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate2"]("", attackID_r9, ": ", ctx_r3.getTechnique(attackID_r9, ctx_r3.viewModel).name, ""); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 28)(1, "mat-accordion", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](2, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_Template, 9, 4, "mat-expansion-panel", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx_r3.filteredIDs); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_Template, 3, 1, "div", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r3.loading); + } +} +function LayerUpgradeComponent_mat_step_19_div_4_Template(rf, ctx) { + if (rf & 1) { + const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div")(1, "h4"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2, "Options"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, LayerUpgradeComponent_mat_step_19_div_4_div_3_Template, 4, 9, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](4, "input", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function LayerUpgradeComponent_mat_step_19_div_4_Template_input_change_4_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r6); + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.reviewAll(section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](5, "label", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](6, " mark all as reviewed "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](7, "input", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("change", function LayerUpgradeComponent_mat_step_19_div_4_Template_input_change_7_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r6); + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.expandAll(section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](8, "label", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](9, " expand visible techniques "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](10, LayerUpgradeComponent_mat_step_19_div_4_div_10_Template, 2, 0, "div", 22)(11, LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_Template, 2, 1, "ng-container", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](12, "mat-paginator", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("page", function LayerUpgradeComponent_mat_step_19_div_4_Template_mat_paginator_page_12_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r6); + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.applyFilters(section_r3)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + const stepper_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵreference"](18); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "additions"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("id", "filter_review_all_", section_r3, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("for", "filter_review_all_", section_r3, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("matTooltip", "mark all as reviewed"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("id", "filter_expand_visible_", section_r3, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵpropertyInterpolate1"]("for", "filter_expand_visible_", section_r3, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("matTooltip", "expand visible techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.loading); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", stepper_r19 ? section_r3 == ctx_r3.sections[stepper_r19.selectedIndex] : section_r3 == ctx_r3.sections[0]); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("hidePageSize", true)("length", ctx_r3.sectionLength(section_r3)); + } +} +function LayerUpgradeComponent_mat_step_19_div_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div")(1, "div", 61); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2, "No objects to show"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + } +} +function LayerUpgradeComponent_mat_step_19_span_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate2"]("Reviewed ", ctx_r3.countReviewed(section_r3), "/", ctx_r3.sectionLength(section_r3), " techniques"); + } +} +function LayerUpgradeComponent_mat_step_19_button_9_Template(rf, ctx) { + if (rf & 1) { + const _r20 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "button", 62); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_mat_step_19_button_9_Template_button_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r20); + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.onStepChange(section_r3, -1)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, "Back"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_mat_step_19_Template(rf, ctx) { + if (rf & 1) { + const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "mat-step"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](1, LayerUpgradeComponent_mat_step_19_ng_template_1_Template, 1, 1, "ng-template", 10)(2, LayerUpgradeComponent_mat_step_19_div_2_Template, 3, 1, "div", 16); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](3, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](4, LayerUpgradeComponent_mat_step_19_div_4_Template, 13, 15, "div", 17)(5, LayerUpgradeComponent_mat_step_19_div_5_Template, 3, 0, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](6, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](7, "div", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](8, LayerUpgradeComponent_mat_step_19_span_8_Template, 2, 2, "span", 17)(9, LayerUpgradeComponent_mat_step_19_button_9_Template, 2, 0, "button", 18); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](10, "button", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_mat_step_19_Template_button_click_10_listener() { + const section_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r2).$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx_r3.onStepChange(section_r3, 1)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](11); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const section_r3 = ctx.$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.getDescription(section_r3)); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.changelog[section_r3].length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.changelog[section_r3].length == 0 && !ctx_r3.loading); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.changelog[section_r3].length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", section_r3 !== "additions"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ", ctx_r3.countReviewed(section_r3) > 0 ? "Next" : "Skip", " "); + } +} +function LayerUpgradeComponent_ng_template_21_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](0, "Finish"); + } +} +function LayerUpgradeComponent_div_28_span_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const section_r21 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"]().$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate3"](" Reviewed ", ctx_r3.countReviewed(section_r21), "/", ctx_r3.sectionLength(section_r21), " ", ctx_r3.filter[section_r21] ? "annotated" : "", " techniques "); + } +} +function LayerUpgradeComponent_div_28_span_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, "No objects to review"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_div_28_span_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](1, "Skipped"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } +} +function LayerUpgradeComponent_div_28_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](0, "div", 63)(1, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](3, LayerUpgradeComponent_div_28_span_3_Template, 2, 3, "span", 17)(4, LayerUpgradeComponent_div_28_span_4_Template, 2, 0, "span", 17)(5, LayerUpgradeComponent_div_28_span_5_Template, 2, 0, "span", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + } + if (rf & 2) { + const section_r21 = ctx.$implicit; + const ctx_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"]("", ctx_r3.getHeader(section_r21), ":\u00A0"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.countReviewed(section_r21) > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", !ctx_r3.changelog[section_r21].length); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngIf", ctx_r3.changelog[section_r21].length && ctx_r3.countReviewed(section_r21) == 0); + } +} +class LayerUpgradeComponent { + constructor(dataService) { + this.dataService = dataService; + this.paginators = new _angular_core__WEBPACK_IMPORTED_MODULE_2__.QueryList(); + this.paginator_map = new Map(); // section name mapped to index of paginator + this.filteredIDs = []; + this.sections = ['additions', 'changes', 'minor_changes', 'revocations', 'deprecations', 'unchanged']; + this.filter = { + changes: false, + minor_changes: false, + revocations: false, + deprecations: false, + unchanged: false + }; + this.loading = false; + // changelog section descriptions + this.descriptions = { + additions: "The following techniques have been added to the dataset since the layer was created. You can review the techniques below to identify which may require annotations. Annotations may be added using the 'technique controls' in the toolbar.", + changes: 'The following techniques have undergone major changes since the layer was created such as changes to scope or technique name. You can view the annotations you had previously added, map them to the current ATT&CK version, and adjust them as needed. You can also review the previous and current technique definitions by clicking the version numbers in each row.', + minor_changes: 'The following techniques have had minor revisions since the layer was created such as typo corrections. The annotations have automatically been copied for these techniques, but you can review them if desired. You can also view the previous and current technique definitions by clicking the version numbers under the technique.', + revocations: 'These are techniques which have been replaced by other techniques since the layer was created. You can view the replacing techniques and transfer annotations from the replaced techniques, adjusting them as nessecary. You can also review the replaced and replacing technique definitions by clicking the version numbers under the technique.', + deprecations: 'These are techniques which have been removed from the dataset. You can view any annotations you had previously added to these techniques.', + unchanged: "These are techniques which have not changed since the uploaded layer's ATT&CK version. The annotations have automatically been copied for these techniques, but you can review them if desired.", + finish: "The overview below indicates either the number of techniques you have reviewed in a section, if you have skipped a section, or if there are no techniques to review in that section. Annotations mapped to the current version have been saved to the new layer.\n\nVerify your changes and click 'Done' to complete the layer upgrade workflow. Once completed you cannot return to this workflow." + }; + } + ngOnInit() { + this.changelog = this.viewModel.versionChangelog; + this.compareTo = this.viewModel.compareTo; + // map sections with techniques to paginator index + let i = 0; + for (let s of this.sections) { + if (this.changelog[s].length) this.paginator_map.set(s, i++); + } + this.applyFilters(this.sections[0]); + this.wait(); + } + wait() { + this.loading = true; + setTimeout(() => this.loading = false, 1000); + } + /** + * Get a readable version for the name of the changelog section + * @param section name of the changelog section + * @returns {string} readable section header text + */ + getHeader(section) { + return section.split(/[_-]+/).map(s => s.charAt(0).toUpperCase() + s.substring(1)).join(' '); + } + /** + * Retrieve the URL for a given technique in the previous ATT&CK version + * @param attackID the ATT&CK ID of the technique + * @returns {string} the URL + */ + getPreservedURL(attackID) { + let url = this.getTechnique(attackID, this.compareTo).url; + let i = url.search('/techniques'); + return url.substring(0, i) + '/versions/v' + this.compareTo.version + url.substring(i); + } + /** + * Disable the annotated techniques filter? + * @param section the name of the changelog section + * @returns true if there are no annotated techniques in the given section, false otherwise + */ + disableFilter(section) { + return !this.changelog[section].filter(id => this.anyAnnotated(id)).length; + } + /** + * Apply filters to the changelog section + * @returns the list of filtered ATT&CK IDs in the changelog section + */ + applyFilters(section) { + let sectionIDs = this.changelog[section]; + if (this.filter[section]) sectionIDs = sectionIDs.filter(id => this.anyAnnotated(id)); + let i = this.paginator_map.get(section); + let paginator = this.paginators.toArray()[i]; + if (paginator && paginator.pageIndex * paginator.pageSize > sectionIDs.length) { + paginator.pageIndex = 0; + } + let start = paginator ? paginator.pageIndex * paginator.pageSize : 0; + let end = paginator ? start + paginator.pageSize : 10; + this.filteredIDs = sectionIDs.slice(start, end); + setTimeout(() => { + this.expandAll(section); + }); + } + /** + * Update the list of IDs to render on step change + * @param section the name of the changelog section + * @param offset -1 if moving to the previous step, 1 if moving to the next step + */ + onStepChange(section, offset) { + let i = this.sections.findIndex(s => s === section); + if (i + offset < this.sections.length) { + let nextSection = this.sections[i + offset]; + this.applyFilters(nextSection); + if (this.changelog[nextSection].length > 0) this.wait(); + } + } + /** + * Get the technique object in the domain of the given view model + * @param attackID the ATT&CK ID of the technique + * @param vm the view model + * @param section name of the changelog section + * @returns {Technique} the technique object + */ + getTechnique(attackID, vm, section) { + let domain = this.dataService.getDomain(vm.domainVersionID); + let all_techniques = domain.techniques.concat(domain.subtechniques); + let technique = all_techniques.find(t => t.attackID == attackID); + if (section == 'revocations' && this.viewModel.version == vm.version) { + // get revoking object + let revokedByID = technique.revoked_by(vm.domainVersionID); + let revokingObject = all_techniques.find(t => t.id == revokedByID); + return revokingObject; + } else return technique; + } + /** + * Get the list of tactic objects the given technique is found under + * @param attackID the ATT&CK ID of the object + * @param vm the view model used to identify the domain + * @param section name of the changelog section + * @returns {Tactic[]} list of tactic objects the object is found under + */ + getTactics(attackID, vm, section) { + if (section == 'additions') vm = this.viewModel; + let technique = this.getTechnique(attackID, vm, section); + let domain = this.dataService.getDomain(vm.domainVersionID); + return technique.tactics.map(shortname => domain.tactics.find(t => t.shortname == shortname)); + } + /** + * Determine if the lists of tactics between the technique in the new version and + * old version are the same + * @param attackID the ATT&CK ID of the object + * @param section name of the changelog section + * @returns {boolean} true if the list of tactics are not identical + */ + tacticsChanged(attackID, section) { + if (section == 'deprecations' || section == 'additions') return false; + let oldTechnique = this.getTechnique(attackID, this.compareTo); + let newTechnique = this.getTechnique(attackID, this.viewModel, section); + if (!oldTechnique.tactics && !newTechnique.tactics) return false; + if (oldTechnique.tactics.length !== newTechnique.tactics.length) return true; + // order lists and compare + let sortArray = function (a, b) { + if (a < b) return -1; + if (a > b) return 1; + return 0; + }; + let oldTactics = oldTechnique.tactics.sort(sortArray); + let newTactics = newTechnique.tactics.sort(sortArray); + if (oldTactics.every((value, i) => value === newTactics[i])) return false; + return true; + } + /** + * Determine if the technique is marked as reviewed + * @param attackID the ATT&CK ID of the technique + * @returns {boolean} true if the technique has been marked as reviewed + */ + isReviewed(attackID) { + return this.changelog.reviewed.has(attackID); + } + /** + * Marks or unmarks a single given technique as reviewed + * @param attackID the ATT&CK ID of the technique + * @param panel the object's expansion panel + */ + reviewedChanged(attackID, panel) { + if (this.isReviewed(attackID)) { + this.changelog.reviewed.delete(attackID); + } else { + this.changelog.reviewed.add(attackID); + panel.expanded = false; // close on review + } + } + /** + * Expands all the techniques for easy review + */ + expandAll(section) { + let filtered_expand_visible_section = document.getElementById('filter_expand_visible_' + section); + this.panels.forEach(panel => { + if (filtered_expand_visible_section.checked) { + panel.open(); + } else { + panel.close(); + } + }); + } + /** + * Marks all techniques in the section as reviewed + * @param section name of the changelog section + */ + reviewAll(section) { + let sectionIDs = this.changelog[section]; + let filtered_review_all_section = document.getElementById('filter_review_all_' + section); + if (filtered_review_all_section.checked) { + for (let sectionID of sectionIDs) { + this.changelog.reviewed.add(sectionID); + } + } else { + for (let sectionID of sectionIDs) { + this.changelog.reviewed.delete(sectionID); + } + } + } + /** + * Get the number of techniques marked as reviewed in the given section + * @param section the name of the changelog section + * @returns number of reviewed techniques + */ + countReviewed(section) { + return this.changelog[section].filter(attackID => this.changelog.reviewed.has(attackID)).length; + } + /** + * Get the changelog section description + * @param section the name of the changelog section + * @returns the section description + */ + getDescription(section) { + return this.descriptions[section]; + } + /** + * Determine if any techniqueVM in the old version with the given + * ATT&CK ID has annotations + * @param attackID the ATT&CK ID of the technique + * @returns {boolean} true if any TechniqueVM for this technique is annotated + */ + anyAnnotated(attackID) { + let oldTechnique = this.getTechnique(attackID, this.compareTo); + if (oldTechnique) { + let technique_tactic_ids = oldTechnique.get_all_technique_tactic_ids(); + for (let id of technique_tactic_ids) { + if (this.compareTo.getTechniqueVM_id(id).annotated()) return true; + } + } + return false; + } + /** + * Is the TechniqueVM for this technique-tactic annotated? + * @param technique the technique in the old version + * @param tactic the tactic the technique is found under + * @param vm the view model + * @returns {boolean} true if the TechniqueVM is annotated, false otherwise + */ + isAnnotated(technique, tactic, vm) { + return vm.getTechniqueVM(technique, tactic).annotated(); + } + /** + * Get the total number of techniques currently displayed in a given section + * @param section the name of the changelog section + * @returns the total number of annotated techniques in the section if the filter is enabled, + * otherwise the total number of techniques in the seciton + */ + sectionLength(section) { + if (this.filter[section]) return this.changelog[section].filter(attackID => this.anyAnnotated(attackID)).length;else return this.changelog[section].length; + } + /** + * Determine if the annotations of the technique under the given tactic + * in the old version have been copied to the new version + * @param technique the technique in the old version + * @param tactic the tactic the technique is found under + * @returns {boolean} true if the annotations have been copied to the + * object in the new version + */ + isCopied(technique, tactic) { + if (this.changelog.copied.has(technique.get_technique_tactic_id(tactic))) return true; + return false; + } + /** + * Copy the annotations from the technique in the old version + * to the technique in the new version + * @param attackID the ATT&CK ID of the technique + * @param tactic the tactic the technique is found under + */ + copyAnnotations(attackID, tactic, section) { + let fromTechnique = this.getTechnique(attackID, this.compareTo); + let toTechnique = this.getTechnique(attackID, this.viewModel, section); + this.viewModel.copyAnnotations(fromTechnique, toTechnique, tactic); + } + /** + * Re-enable the annotations on the technique in the old version and + * reset the annotations on the technique in the new version + * @param attackID the ATT&CK ID of the technique + * @param tactic the tactic the technique is found under + */ + revertCopy(attackID, tactic, section) { + let fromTechnique = this.getTechnique(attackID, this.compareTo); + let toTechnique = this.getTechnique(attackID, this.viewModel, section); + this.viewModel.revertCopy(fromTechnique, toTechnique, tactic); + } + /** + * Copy the annotations from the TechniqueVM in the old version + * to the TechniqueVM that the element was dropped over + * @param event the ngx drop event + * @param toTechnique the technique object to copy annotations to + * @param toTactic the tactic object to copy annotations to + * @param section the name of the changelog section + */ + onDrop(event, toTechnique, toTactic, section) { + let attackID = event.data.split('^')[0]; + let validTechnique = this.getTechnique(attackID, this.viewModel, section); + if (validTechnique.id === toTechnique.id) { + // copying annotations to a valid target? + // retrieve relevant technique VMs + let fromTvm = this.compareTo.getTechniqueVM_id(event.data); + let toTvm = this.viewModel.getTechniqueVM(toTechnique, toTactic); + // copy annotations + let rep = fromTvm.serialize(); + toTvm.resetAnnotations(); + toTvm.deserialize(rep, toTechnique.attackID, toTactic.shortname); + this.viewModel.updateScoreColor(toTvm); + } else { + // invalid target + } + } + /** + * Remove all annotations from the VM + * @param technique the technique object to remove annotations from + * @param tactic the tactic the technique is found under + */ + clearAnnotations(technique, tactic) { + this.viewModel.getTechniqueVM(technique, tactic).resetAnnotations(); + } + /** + * Close the layer upgrade sidebar + */ + closeSidebar() { + this.viewModel.sidebarOpened = !this.viewModel.sidebarOpened; + this.viewModel.sidebarContentType = ''; + } + static #_ = this.ɵfac = function LayerUpgradeComponent_Factory(t) { + return new (t || LayerUpgradeComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_0__.DataService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵdefineComponent"]({ + type: LayerUpgradeComponent, + selectors: [["layer-upgrade"]], + viewQuery: function LayerUpgradeComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_c0, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__.MatPaginator, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵviewQuery"](_angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__.MatExpansionPanel, 5); + } + if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.stepper = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.paginators = _t); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵloadQuery"]()) && (ctx.panels = _t); + } + }, + inputs: { + viewModel: "viewModel" + }, + decls: 35, + vars: 6, + consts: [["stepper", ""], ["panel", "matExpansionPanel"], ["href", _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtrustConstantResourceUrl"]`https://fonts.googleapis.com/icon?family=Material+Icons`, "rel", "stylesheet"], [1, "layer-upgrade"], ["appearance", "outlined"], [1, "title"], ["inline", "true"], ["href", "https://attack.mitre.org/resources/versions/", "target", "_blank", "rel", "noopener noreferrer"], ["linear", ""], [4, "ngFor", "ngForOf"], ["matStepLabel", ""], [1, "description"], ["class", "summary", 4, "ngFor", "ngForOf"], [1, "stepper-button"], ["mat-stroked-button", "", "matStepperPrevious", ""], ["mat-stroked-button", "", 3, "click"], ["class", "description", 4, "ngIf"], [4, "ngIf"], ["mat-stroked-button", "", "matStepperPrevious", "", 3, "click", 4, "ngIf"], ["mat-stroked-button", "", "matStepperNext", "", 3, "click"], ["type", "checkbox", 1, "checkbox-custom", 3, "change", "id"], ["matTooltipPosition", "above", 1, "checkbox-custom-label", "noselect", 3, "for", "matTooltip"], ["class", "spinner", 4, "ngIf"], ["pageSize", "10", 3, "page", "hidePageSize", "length"], ["type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "change", "id", "disabled", "ngModel"], [1, "spinner"], ["mode", "indeterminate"], ["class", "stepper-content", 4, "ngIf"], [1, "stepper-content"], ["multi", "true"], ["class", "reviewed", 4, "ngIf"], ["class", "disabled", 4, "ngIf"], ["matExpansionPanelContent", ""], [1, "reviewed"], [1, "disabled"], [1, "cols"], ["class", "float wide", 4, "ngIf"], ["class", "float arrow", 4, "ngIf"], ["class", "cols", 4, "ngIf"], [1, "checkbox", "right"], ["type", "checkbox", 1, "checkbox-custom", 3, "click", "id", "checked"], [1, "checkbox-custom-label", "noselect", 3, "for"], [1, "float", "wide"], [1, "version"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href"], [1, "float", "arrow"], ["matTooltipPosition", "above", 1, "info", 3, "matTooltip"], ["class", "changelog-cells", 4, "ngFor", "ngForOf"], [1, "changelog-cells"], [3, "dndDraggable"], [3, "tactic", "technique", "viewModel", "isCurrentVersion", "isDraggable", "section"], ["class", "changelog-cells", "dndDropzone", "", 3, "dndDrop", 4, "ngFor", "ngForOf"], ["dndDropzone", "", 1, "changelog-cells", 3, "dndDrop"], [3, "tactic", "technique", "viewModel", "isCurrentVersion", "section"], ["class", "clear-annotations", "matTooltipPosition", "above", "matTooltip", "clear annotations", 3, "click", 4, "ngIf"], ["matTooltipPosition", "above", "matTooltip", "clear annotations", 1, "clear-annotations", 3, "click"], [1, "changelog-table"], ["class", "narrow button-container", 4, "ngIf"], [1, "narrow", "button-container"], ["matTooltipPosition", "above", "matTooltip", "copy annotations", 1, "button", 3, "click", "disabled"], ["matTooltipPosition", "above", "matTooltip", "revert copy", 1, "button", 3, "click", "disabled"], [1, "description", "center"], ["mat-stroked-button", "", "matStepperPrevious", "", 3, "click"], [1, "summary"]], + template: function LayerUpgradeComponent_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](0, "link", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](1, "div", 3)(2, "mat-card", 4)(3, "mat-card-content")(4, "div", 5)(5, "h2"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](6, "Layer Upgrade"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](8, "mat-icon", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](9, "east"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](10); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](11, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](12); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](13, "p")(14, "a", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](15, "View Versions of ATT&CK"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](16, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](17, "mat-vertical-stepper", 8, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](19, LayerUpgradeComponent_mat_step_19_Template, 12, 6, "mat-step", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](20, "mat-step"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](21, LayerUpgradeComponent_ng_template_21_Template, 1, 0, "ng-template", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](22, "div", 11)(23, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](24); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](25, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](26, "h4"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](27, "Overview"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtemplate"](28, LayerUpgradeComponent_div_28_Template, 6, 4, "div", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelement"](29, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](30, "div", 13)(31, "button", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](32, "Back"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementStart"](33, "button", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵlistener"]("click", function LayerUpgradeComponent_Template_button_click_33_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵrestoreView"](_r1); + return _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵresetView"](ctx.closeSidebar()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtext"](34, "Done"); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵelementEnd"]()()()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" (ATT&CK v", ctx.compareTo.version, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" ATT&CK v", ctx.viewModel.version, ") "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate1"](" Review techniques which have been added, changed, replaced, or removed from the knowledge base since ATT&CK v", ctx.compareTo.version, " and update your Navigator layer to reflect these changes. "); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx.sections); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵtextInterpolate"](ctx.getDescription("finish")); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_2__["ɵɵproperty"]("ngForOf", ctx.sections); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_5__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_5__.NgIf, _angular_forms__WEBPACK_IMPORTED_MODULE_6__.CheckboxControlValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_6__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_6__.NgModel, _angular_material_button__WEBPACK_IMPORTED_MODULE_7__.MatButton, _angular_material_icon__WEBPACK_IMPORTED_MODULE_8__.MatIcon, _angular_material_progress_spinner__WEBPACK_IMPORTED_MODULE_9__.MatProgressSpinner, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_10__.MatTooltip, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__.MatAccordion, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__.MatExpansionPanel, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__.MatExpansionPanelHeader, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__.MatExpansionPanelTitle, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_4__.MatExpansionPanelContent, ngx_drag_drop__WEBPACK_IMPORTED_MODULE_11__.DndDraggableDirective, ngx_drag_drop__WEBPACK_IMPORTED_MODULE_11__.DndDropzoneDirective, _angular_material_card__WEBPACK_IMPORTED_MODULE_12__.MatCard, _angular_material_card__WEBPACK_IMPORTED_MODULE_12__.MatCardContent, _angular_material_divider__WEBPACK_IMPORTED_MODULE_13__.MatDivider, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_14__.MatStep, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_14__.MatStepLabel, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_14__.MatStepper, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_14__.MatStepperNext, _angular_material_stepper__WEBPACK_IMPORTED_MODULE_14__.MatStepperPrevious, _angular_material_paginator__WEBPACK_IMPORTED_MODULE_3__.MatPaginator, _changelog_cell_changelog_cell_component__WEBPACK_IMPORTED_MODULE_1__.ChangelogCellComponent], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.title h2 {\n display: inline-block;\n margin: 12px 0;\n}\n.title .mat-icon {\n vertical-align: middle;\n}\n\nh4 {\n margin: 12px 0;\n}\n\n.mat-divider {\n margin: 1rem 0 !important;\n}\n\n.changelog-cells {\n padding-bottom: 1rem;\n position: relative;\n}\n\n.clear-annotations {\n position: absolute;\n top: -10px;\n right: -5px;\n padding: 6px 6px;\n background: #ddd;\n border-radius: 10px;\n line-height: 10px;\n cursor: pointer;\n box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.5);\n}\n.clear-annotations:hover {\n background-color: #d0d0d0;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-step .mat-mdc-button-base {\n border-color: #4c4c68;\n }\n}\n.theme-override-dark .mat-step .mat-mdc-button-base {\n border-color: #4c4c68;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-step .mat-mdc-button-base {\n background-color: rgba(0, 0, 0, 0);\n }\n}\n.theme-override-dark .mat-step .mat-mdc-button-base {\n background-color: rgba(0, 0, 0, 0);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-step .mat-mdc-button-base:disabled {\n color: rgba(255, 255, 255, 0.5);\n }\n}\n.theme-override-dark .mat-step .mat-mdc-button-base:disabled {\n color: rgba(255, 255, 255, 0.5);\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-step-header .mat-step-label {\n color: white;\n }\n}\n.theme-override-dark .mat-step-header .mat-step-label {\n color: white;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-stepper-vertical-line::before {\n border-left-color: white;\n }\n}\n.theme-override-dark .mat-stepper-vertical-line::before {\n border-left-color: white;\n}\n\n.mat-mdc-paginator-container {\n min-height: unset;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-stepper-vertical,\n .theme-use-system .mat-mdc-paginator {\n background-color: #3f3f56;\n }\n}\n.theme-override-dark .mat-stepper-vertical,\n.theme-override-dark .mat-mdc-paginator {\n background-color: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-stepper-vertical,\n .theme-use-system .mat-mdc-paginator {\n color: white;\n }\n}\n.theme-override-dark .mat-stepper-vertical,\n.theme-override-dark .mat-mdc-paginator {\n color: white;\n}\n\n.stepper-content {\n padding: 6px;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel:first-child .mat-expansion-panel-header,\n .theme-use-system .mat-expansion-panel-header.mat-expanded {\n border-top: 1px solid rgba(255, 255, 255, 0.1294117647);\n }\n}\n.theme-override-dark .mat-expansion-panel:first-child .mat-expansion-panel-header,\n.theme-override-dark .mat-expansion-panel-header.mat-expanded {\n border-top: 1px solid rgba(255, 255, 255, 0.1294117647);\n}\n\n.mat-expansion-panel-header-title span {\n padding-left: 1rem;\n display: inline-flex;\n align-items: center;\n}\n\ntr td {\n padding-bottom: 1rem;\n}\n\n.changelog-table {\n table-layout: fixed;\n width: 100%;\n}\n\n.narrow {\n width: 44px;\n}\n\n.button-container .button {\n display: flex;\n align-items: center;\n margin: 4px;\n}\n.button-container .button .mat-icon {\n font-size: 16px;\n}\n.button-container .button:disabled {\n cursor: unset;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .button-container .button:disabled {\n background-color: #eaeaea;\n }\n}\n.theme-override-light .button-container .button:disabled {\n background-color: #eaeaea;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .button-container .button:disabled {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .button-container .button:disabled {\n background-color: #2e2e3f;\n}\n\n.cols {\n display: flex;\n}\n.cols .float {\n float: left;\n padding: 6px;\n}\n\n.version {\n text-align: center;\n margin-bottom: -1rem;\n}\n.version a {\n text-decoration: none;\n}\n\n.arrow {\n text-align: center;\n vertical-align: top;\n}\n\n.info {\n margin-top: 1.5rem;\n height: 100%;\n display: flex;\n}\n.info .mat-icon {\n height: 100%;\n}\n\n.wide {\n width: 100%;\n}\n\n.checkbox {\n padding: 6px;\n}\n.checkbox.right {\n float: right;\n}\n\n.checkbox-custom-label {\n display: block;\n}\n\n.summary {\n text-indent: 24px;\n}\n\n.stepper-button {\n float: right;\n padding-bottom: 24px;\n}\n.stepper-button .mat-mdc-outlined-button {\n margin-left: 12px;\n}\n\n.reviewed {\n color: #4bb543;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .disabled {\n color: rgba(0, 0, 0, 0.15);\n }\n}\n.theme-override-light .disabled {\n color: rgba(0, 0, 0, 0.15);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .disabled {\n color: #7588e8;\n }\n}\n.theme-override-dark .disabled {\n color: #7588e8;\n}\n\n.dndDragover .technique-cell {\n box-shadow: 0 0 0 1px rgb(96, 197, 255) inset !important;\n}\n\n.mat-vertical-stepper-header {\n pointer-events: none;\n}\n\n.description {\n white-space: pre-line;\n padding: 6px;\n text-align: justify;\n}\n.description span {\n font-size: 14px;\n}\n.description.center {\n text-align: center;\n}\n\n.spinner {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 50vh;\n}\n.spinner mat-progress-spinner circle {\n stroke: #6b7279;\n}\n\n.mat-icon {\n overflow: visible;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbGF5ZXItdXBncmFkZS9sYXllci11cGdyYWRlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDTkk7RUFDSSxxQkFBQTtFQUNBLGNBQUE7QUFPUjtBQUxJO0VBQ0ksc0JBQUE7QUFPUjs7QUFKQTtFQUNJLGNBQUE7QUFPSjs7QUFMQTtFQUNJLHlCQUFBO0FBUUo7O0FBTkE7RUFDSSxvQkFBQTtFQUNBLGtCQUFBO0FBU0o7O0FBUEE7RUFDSSxrQkFBQTtFQUNBLFVBQUE7RUFDQSxXQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBQ0EsaUJBQUE7RUFDQSxlQUFBO0VBQ0EsOENBQUE7QUFVSjtBQVRJO0VBQ0kseUJBQUE7QUFXUjs7QURrS1E7RUFISjtJQUlRLHFCQ3pLMEM7RUFXcEQ7QUFDRjtBRGdLSTtFQUdJLHFCQy9LOEM7QUFldEQ7QUR5SlE7RUFISjtJQUlRLGtDQ3hLOEM7RUFrQnhEO0FBQ0Y7QUR3Skk7RUFHSSxrQ0M5S2tEO0FBc0IxRDtBRGlKUTtFQUhKO0lBSVEsK0JDdEt1QztFQXdCakQ7QUFDRjtBRGdKSTtFQUdJLCtCQzVLMkM7QUE0Qm5EOztBRHlJUTtFQUhKO0lBSVEsWUNqS21DO0VBNEI3QztBQUNGO0FEdUlJO0VBR0ksWUN2S3VDO0FBZ0MvQzs7QURnSVE7RUFISjtJQUlRLHdCQzdKK0M7RUFpQ3pEO0FBQ0Y7QUQ4SEk7RUFHSSx3QkNuS21EO0FBcUMzRDs7QUFsQ0E7RUFDSSxpQkFBQTtBQXFDSjs7QURtSFE7RUFISjs7SUFJUSx5QkNwSjhDO0VBc0N4RDtBQUNGO0FEZ0hJOztFQUdJLHlCQzFKa0Q7QUEyQzFEO0FEd0dRO0VBSEo7O0lBSVEsWUNuSm1DO0VBK0M3QztBQUNGO0FEc0dJOztFQUdJLFlDekp1QztBQW9EL0M7O0FBakRBO0VBQ0ksWUFBQTtBQW9ESjs7QUQwRlE7RUFISjs7SUFJUSx1REMxSXdDO0VBcURsRDtBQUNGO0FEdUZJOztFQUdJLHVEQ2hKNEM7QUEwRHBEOztBQXZEQTtFQUNJLGtCQUFBO0VBQ0Esb0JBQUE7RUFDQSxtQkFBQTtBQTBESjs7QUF2REE7RUFDSSxvQkFBQTtBQTBESjs7QUF4REE7RUFDSSxtQkFBQTtFQUNBLFdBQUE7QUEyREo7O0FBekRBO0VBQ0ksV0FBQTtBQTRESjs7QUExREE7RUFDSSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxXQUFBO0FBNkRKO0FBNURJO0VBQ0ksZUFBQTtBQThEUjtBQTVESTtFQUVJLGFBQUE7QUE2RFI7QUQ2QlE7RUFISjtJQUlRLHlCQzVGd0M7RUFrRWxEO0FBQ0Y7QUQ0Qkk7RUFHSSx5QkNsRzRDO0FBc0VwRDtBRHdDUTtFQUhKO0lBSVEseUJDL0d3RTtFQTBFbEY7QUFDRjtBRHVDSTtFQUdJLHlCQ3JINEU7QUE4RXBGOztBQTFFQTtFQUNJLGFBQUE7QUE2RUo7QUE1RUk7RUFDSSxXQUFBO0VBQ0EsWUFBQTtBQThFUjs7QUEzRUE7RUFDSSxrQkFBQTtFQUNBLG9CQUFBO0FBOEVKO0FBN0VJO0VBQ0kscUJBQUE7QUErRVI7O0FBNUVBO0VBQ0ksa0JBQUE7RUFDQSxtQkFBQTtBQStFSjs7QUE3RUE7RUFDSSxrQkFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0FBZ0ZKO0FBL0VJO0VBQ0ksWUFBQTtBQWlGUjs7QUE5RUE7RUFDSSxXQUFBO0FBaUZKOztBQS9FQTtFQUNJLFlBQUE7QUFrRko7QUFqRkk7RUFDSSxZQUFBO0FBbUZSOztBQWhGQTtFQUNJLGNBQUE7QUFtRko7O0FBakZBO0VBQ0ksaUJBQUE7QUFvRko7O0FBbEZBO0VBQ0ksWUFBQTtFQUNBLG9CQUFBO0FBcUZKO0FBcEZJO0VBQ0ksaUJBQUE7QUFzRlI7O0FBbkZBO0VBQ0ksY0FBQTtBQXNGSjs7QURoRFE7RUFISjtJQUlRLDBCQ3BDeUI7RUF3Rm5DO0FBQ0Y7QURsREk7RUFHSSwwQkMxQzZCO0FBNEZyQztBRHRDUTtFQUhKO0lBSVEsY0N2RDhDO0VBZ0d4RDtBQUNGO0FEdkNJO0VBR0ksY0M3RGtEO0FBb0cxRDs7QUFsR0E7RUFDSSx3REFBQTtBQXFHSjs7QUFuR0E7RUFDSSxvQkFBQTtBQXNHSjs7QUFwR0E7RUFDSSxxQkFBQTtFQUNBLFlBQUE7RUFDQSxtQkFBQTtBQXVHSjtBQXRHSTtFQUNJLGVBQUE7QUF3R1I7QUF0R0k7RUFDSSxrQkFBQTtBQXdHUjs7QUFyR0E7RUFDSSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtFQUNBLFlBQUE7QUF3R0o7QUF0R0k7RUFDSSxlQUFBO0FBd0dSOztBQXJHQTtFQUNJLGlCQUFBO0FBd0dKIiwic291cmNlc0NvbnRlbnQiOlsiJGNvbHVtbi1ob3Zlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpO1xuJGRpc2FibGVkLWNvbG9yOiBkYXJrZW4oJGNvbHVtbi1ob3Zlci1jb2xvciwgMjAlKTtcblxuLy8gQVRUJkNLIEJyYW5kIGNvbG9yc1xuJGF0dGFjay1jb2xvcnM6IChcbiAgICBhdHRhY2stb3JhbmdlOiAjYzYzZjFmLFxuICAgIGF0dGFjay1ibHVlOiAjMDYyZjRmLFxuKTtcblxuLyoqXG4gKiBDb2xvcnMgdXNlZCBhY3Jvc3MgdGhlIE5hdmlnYXRvci4gU2hhcmVkIGJ5IHRoZSBBVFQmQ0sgV2Vic2l0ZS5cbiAqIEZvciBlYWNoIGNvbG9yLXBhaXI6XG4gKiAgIC0gXCJjb2xvclwiIHJlZmVycyB0byB0aGUgY29sb3IgaXRzZWxmXG4gKiAgIC0gXCJvbi1jb2xvclwiIHJlZmVycyB0byB0aGUgbW9zdCByZWFkYWJsZSB0ZXh0LWNvbG9yIHRvIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogTm90ZTogc29tZSBjb2xvcnMgZG9uJ3QgZGVmaW5lIG9uLWNvbG9ycy4gVGhpcyBpcyBiZWNhdXNlLCBmb3IgdGhlc2UgY29sb3JzLCB0aGV5IGFyZW4ndCBpbnRlbmRlZCB0b1xuICogYXBwZWFyIHdpdGggaW5uZXIgY29udGVudC4gRm9yIGV4YW1wbGUsIFwibGlua1wiIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgbGluayB0ZXh0LCB3aGljaCBpbmhlcmVudGx5XG4gKiBjYW5ub3QgaGF2ZSBpbm5lciB0ZXh0LlxuICovXG4kY29sb3JzOiAoXG4gICAgcHJpbWFyeTogKFxuICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLW9yYW5nZSksXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vdXNlZCBmb3IgaGVhZGVyIGFuZCBzb21lIG5hdiBlbGVtZW50c1xuICAgIHNlY29uZGFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1ibHVlKSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvL3VzZWQgZm9yIGZvb3RlciBhbmQgc29tZSBidXR0b25zXG4gICAgYm9keTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgLy9wcmltYXJ5IHBhZ2UgYm9keVxuICAgIGxpZ2h0OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICBkYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjMDgwODBiLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvLyBkYXJrIHRoZW1lIGNvbG9ycyB2YXJpYXRpb25zIDAtMyAoZnJvbSBkYXJrZXN0IHRvIGxpZ2h0ZXN0KVxuICAgIGRhcmstMTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMxYTFhMjMsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay0yOiAoXG4gICAgICAgIGNvbG9yOiAjMmUyZTNmLFxuICAgICAgICBvbi1jb2xvcjogI2ZhNjM0MSxcbiAgICApLFxuICAgIC8vIGFjY2VudCBkYXJrIGNvbG9yIHNjaGVtZSAodXNlZCBmb3IgOmhvdmVyIHNlbGVjdG9ycylcbiAgICBkYXJrLTM6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjM2YzZjU2LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstNDogKFxuICAgICAgICBjb2xvcjogIzRjNGM2OCxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgZGFyay1kaXNhYmxlZDogKFxuICAgICAgICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gMjUlKSxcbiAgICApLFxuICAgIGRhcmstbGluazogKFxuICAgICAgICBjb2xvcjogIzc1ODhlOCxcbiAgICApLFxuICAgIGRhcmstbGluay1hY3RpdmU6IChcbiAgICAgICAgY29sb3I6ICNlODQ3ZTgsXG4gICAgKSxcbiAgICBsaW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNGY3Y2FjLFxuICAgICksXG4gICAgLy8gaHlwZXJsaW5rc1xuICAgIG1hdHJpeC1oZWFkZXI6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBncmF5LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vIGNvbG9yIG9mIG1hdHJpeCBoZWFkZXJzXG4gICAgY2VsbC1oaWdobGlnaHQtY29sb3I6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoOTYsIDE5NywgMjU1KSxcbiAgICAgICAgKSxcbiAgICBjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNDY0ZGZmLFxuICAgICksXG4gICAgaG92ZXItY2VsbC1mb250LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMCwgMCwgMCksXG4gICAgKSxcbiAgICBwYW5lbC1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjZGRkLFxuICAgICksXG4gICAgcGFuZWwtbGlnaHQ6IChcbiAgICAgICAgY29sb3I6IGxpZ2h0ZW4oI2RkZCwgOCUpLFxuICAgICksXG4gICAgdGFiLXRleHQtY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM1NTUsXG4gICAgKSxcbiAgICBidXR0b24tZGFyazogKFxuICAgICAgICBjb2xvcjogI2I4YjhiOCxcbiAgICApLFxuICAgIC8vYm9vdHN0cmFwIGNvbG9yc1xuICAgIGJvb3RzdHJhcC1wcmltYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzQyOGJjYSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBib290c3RyYXAtc3VjY2VzczogKFxuICAgICAgICBjb2xvcjogIzVjYjg1YyxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWRhbmdlcjogKFxuICAgICAgICBjb2xvcjogI2Q5NTM0ZixcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLXdhcm5pbmc6IChcbiAgICAgICAgY29sb3I6ICNmMGFkNGUsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1pbmZvOiAoXG4gICAgICAgIGNvbG9yOiAjNWJjMGRlLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbik7XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBjb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ2NvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgZ2V0IGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRoZSBjb2xvciwgZm9yIHBhdHRlcm5pbmdcbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGRhcmssIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBsaWdodGVyLlxuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgbGlnaHQsIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBkYXJrZXIuXG4vLyBjb250cmFzdCwgYW4gb3B0aW9uYWwgYXJndW1lbnQsIG11bHRpcGxpZXMgdG8gY3JlYXRlIGEgbW9yZSBkaXN0YW50IG9yIHNpbWlsYXIgY29sb3IuID4xIGlzIG1vcmUgZGlzdGFudCwgPDEgaXMgbW9yZSBzaW1pbGFyLlxuQGZ1bmN0aW9uIGNvbG9yLWFsdGVybmF0ZSgkbmFtZSwgJGNvbnRyYXN0OiAxKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgJHdlaWdodDogJGNvbnRyYXN0ICogNSUpO1xufVxuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIG9uLWNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gb24tY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdvbi1jb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbGVzcyBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIG9uLWNvbG9yKCRuYW1lKSk7XG59XG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBkZWVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZGVlbXBoYXNpemVkIG9uLWNvbG9yIGlzIG1vcmUgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1kZWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoY29sb3IoJG5hbWUpLCBvbi1jb2xvcigkbmFtZSksIDI1JSk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgY29tcHV0ZSBhIGJvcmRlciBjb2xvciBmb3IgdGhlIGNvbG9yXG5AZnVuY3Rpb24gYm9yZGVyLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgMTIuNSUpO1xuICAgIC8vIEByZXR1cm4gcmdiYShpbnZlcnQoY29sb3IoJG5hbWUpKSwgMC4xMjUpO1xufVxuXG4vLyBJTVBPUlRBTlQgVVNBR0UgTk9URTpcbi8vIHRvIHVzZSBhZGFwdGl2ZSBjb2xvcnMsIHlvdSBNVVNUIGRpc2FibGUgdmlldyBlbmNhcHN1bGF0aW9uIG9uIHRoZSBjb21wb25lbnRcbi8vIHlvdSdyZSBhcHBseWluZyB0aGUgc3R5bGVzIHdpdGhpbi4gT3RoZXJ3aXNlIGFuY2VzdG9yIGNsYXNzZXMgY2Fubm90IGJlIGFzc2Vzc2VkXG4vLyBieSB0aGUgbWl4aW5zIHRvIGRldGVybWluZSB0aGUgYXBwIHRoZW1lIGNvbmZpZ3VyYXRpb24uXG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgbGlnaHQgYW5kIGRhcmsgdGhlbWVzXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvcigkcHJvcGVydHksICRsaWdodC12YWx1ZSwgJGRhcmstdmFsdWUpIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSk7XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1saWdodCAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBsaWdodCB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICB9XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1kYXJrICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGRhcmsgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJy4uLy4uL2NvbG9ycy5zY3NzJztcblxuLnRpdGxlIHtcbiAgICBoMiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWFyZ2luOiAxMnB4IDA7XG4gICAgfVxuICAgIC5tYXQtaWNvbiB7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxufVxuaDQge1xuICAgIG1hcmdpbjogMTJweCAwO1xufVxuLm1hdC1kaXZpZGVyIHtcbiAgICBtYXJnaW46IDFyZW0gMCAhaW1wb3J0YW50O1xufVxuLmNoYW5nZWxvZy1jZWxscyB7XG4gICAgcGFkZGluZy1ib3R0b206IDFyZW07XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmNsZWFyLWFubm90YXRpb25zIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAtMTBweDtcbiAgICByaWdodDogLTVweDtcbiAgICBwYWRkaW5nOiA2cHggNnB4O1xuICAgIGJhY2tncm91bmQ6IGNvbG9yKHBhbmVsLWRhcmspO1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgbGluZS1oZWlnaHQ6IDEwcHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJveC1zaGFkb3c6IDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuNSk7XG4gICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGRhcmtlbihjb2xvcihwYW5lbC1kYXJrKSwgNSUpO1xuICAgIH1cbn1cblxuLm1hdC1zdGVwIC5tYXQtbWRjLWJ1dHRvbi1iYXNlIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlci1jb2xvcicsIGNvbG9yKGRhcmstNCkpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIHJnYmEoMCwgMCwgMCwgMCkpO1xuICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpKTtcbiAgICB9XG59XG5cbi5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xufVxuXG4ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3JlIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlci1sZWZ0LWNvbG9yJywgb24tY29sb3IoZGFyaykpO1xufVxuXG4ubWF0LW1kYy1wYWdpbmF0b3ItY29udGFpbmVyIHtcbiAgICBtaW4taGVpZ2h0OiB1bnNldDtcbn1cblxuLm1hdC1zdGVwcGVyLXZlcnRpY2FsLFxuLm1hdC1tZGMtcGFnaW5hdG9yIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihkYXJrLTMpKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xufVxuXG4uc3RlcHBlci1jb250ZW50IHtcbiAgICBwYWRkaW5nOiA2cHg7XG59XG5cbi5tYXQtZXhwYW5zaW9uLXBhbmVsOmZpcnN0LWNoaWxkIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcixcbi5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWQge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLXRvcCcsIDFweCBzb2xpZCAjZmZmZmZmMjEpO1xufVxuXG4ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUgc3BhbiB7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbnRyIHRkIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXJlbTtcbn1cbi5jaGFuZ2Vsb2ctdGFibGUge1xuICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgd2lkdGg6IDEwMCU7XG59XG4ubmFycm93IHtcbiAgICB3aWR0aDogNDRweDtcbn1cbi5idXR0b24tY29udGFpbmVyIC5idXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW46IDRweDtcbiAgICAubWF0LWljb24ge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgfVxuICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGxpZ2h0ZW4oY29sb3IocGFuZWwtZGFyayksIDUlKSwgY29sb3IoZGFyay0yKSk7XG4gICAgICAgIGN1cnNvcjogdW5zZXQ7XG4gICAgfVxufVxuLmNvbHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLmZsb2F0IHtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHBhZGRpbmc6IDZweDtcbiAgICB9XG59XG4udmVyc2lvbiB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG1hcmdpbi1ib3R0b206IC0xcmVtO1xuICAgIGEge1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgfVxufVxuLmFycm93IHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cbi5pbmZvIHtcbiAgICBtYXJnaW4tdG9wOiAxLjVyZW07XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLm1hdC1pY29uIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbn1cbi53aWRlIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cbi5jaGVja2JveCB7XG4gICAgcGFkZGluZzogNnB4O1xuICAgICYucmlnaHQge1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgfVxufVxuLmNoZWNrYm94LWN1c3RvbS1sYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4uc3VtbWFyeSB7XG4gICAgdGV4dC1pbmRlbnQ6IDI0cHg7XG59XG4uc3RlcHBlci1idXR0b24ge1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMjRweDtcbiAgICAubWF0LW1kYy1vdXRsaW5lZC1idXR0b24ge1xuICAgICAgICBtYXJnaW4tbGVmdDogMTJweDtcbiAgICB9XG59XG4ucmV2aWV3ZWQge1xuICAgIGNvbG9yOiAjNGJiNTQzO1xufVxuLmRpc2FibGVkIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCByZ2JhKDAsIDAsIDAsIDAuMTUpLCBjb2xvcihkYXJrLWxpbmspKTtcbn1cbi5kbmREcmFnb3ZlciAudGVjaG5pcXVlLWNlbGwge1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvcihjZWxsLWhpZ2hsaWdodC1jb2xvcikgaW5zZXQgIWltcG9ydGFudDtcbn1cbi5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXIge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmRlc2NyaXB0aW9uIHtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG4gICAgcGFkZGluZzogNnB4O1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XG4gICAgc3BhbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICB9XG4gICAgJi5jZW50ZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgfVxufVxuLnNwaW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDUwdmg7XG5cbiAgICBtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUge1xuICAgICAgICBzdHJva2U6IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSk7XG4gICAgfVxufVxuLm1hdC1pY29uIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 54120: +/*!****************************************************!*\ + !*** ./src/app/list-input/list-input.component.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListInputComponent: () => (/* binding */ ListInputComponent) +/* harmony export */ }); +/* harmony import */ var _classes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../classes */ 47557); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/material/form-field */ 24950); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/input */ 95541); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); + + + + + + + + +function ListInputComponent_div_1_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 6)(1, "button", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function ListInputComponent_div_1_div_1_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r1); + const i_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().index; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx_r2.removeDivider(i_r2)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "span", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](3, "mat-icon", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](4, "remove"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](5, "span", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + } +} +function ListInputComponent_div_1_div_2_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 6)(1, "button", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function ListInputComponent_div_1_div_2_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r4); + const i_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().index; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx_r2.addDivider(i_r2)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](2, "span", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](3, "mat-icon", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](4, "add"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelement"](5, "span", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + } +} +function ListInputComponent_div_1_div_3_a_9_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "a", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + } + if (rf & 2) { + const item_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵpropertyInterpolate"]("href", item_r6[ctx_r2.config.valueField], _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵsanitizeUrl"]); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"](" ", item_r6[ctx_r2.config.nameField], " "); + } +} +function ListInputComponent_div_1_div_3_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 11)(1, "mat-form-field")(2, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](4, "input", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtwoWayListener"]("ngModelChange", function ListInputComponent_div_1_div_3_Template_input_ngModelChange_4_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r5); + const item_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtwoWayBindingSet"](item_r6[ctx_r2.config.nameField], $event) || (item_r6[ctx_r2.config.nameField] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("input", function ListInputComponent_div_1_div_3_Template_input_input_4_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r5); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx_r2.updateList()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](5, "mat-form-field")(6, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](8, "input", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtwoWayListener"]("ngModelChange", function ListInputComponent_div_1_div_3_Template_input_ngModelChange_8_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r5); + const item_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtwoWayBindingSet"](item_r6[ctx_r2.config.valueField], $event) || (item_r6[ctx_r2.config.valueField] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("input", function ListInputComponent_div_1_div_3_Template_input_input_8_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r5); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx_r2.updateList()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](9, ListInputComponent_div_1_div_3_a_9_Template, 2, 2, "a", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](10, "div", 14)(11, "button", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function ListInputComponent_div_1_div_3_Template_button_click_11_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵrestoreView"](_r5); + const i_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().index; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵresetView"](ctx_r2.remove(i_r2)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](12, "remove"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const item_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r2.config.nameField); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtwoWayProperty"]("ngModel", item_r6[ctx_r2.config.nameField]); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate"](ctx_r2.config.valueField); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtwoWayProperty"]("ngModel", item_r6[ctx_r2.config.valueField]); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", ctx_r2.includeLinks && item_r6.valid()); + } +} +function ListInputComponent_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, ListInputComponent_div_1_div_1_Template, 6, 0, "div", 4)(2, ListInputComponent_div_1_div_2_Template, 6, 0, "div", 4)(3, ListInputComponent_div_1_div_3_Template, 13, 5, "div", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + } + if (rf & 2) { + const item_r6 = ctx.$implicit; + const i_r2 = ctx.index; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", item_r6.divider); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !item_r6.divider && ctx_r2.canAddDivider(i_r2)); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngIf", !item_r6.divider); + } +} +class ListInputComponent { + constructor() { + this.fieldToClass = { + links: _classes__WEBPACK_IMPORTED_MODULE_0__.Link, + metadata: _classes__WEBPACK_IMPORTED_MODULE_0__.Metadata + }; + } + get includeLinks() { + return this.config.type == 'links'; + } + ngOnInit() { + if (this.config.level == 'technique') { + this.list = this.config.list.map(item => { + let clone = new this.fieldToClass[this.config.type](); + clone.deserialize(item.serialize()); + return clone; + }); + } else { + this.list = this.config.list; + } + } + /** + * Adds a new item to the list + */ + add() { + this.list.push(new this.fieldToClass[this.config.type]()); + } + /** + * Removes an item from the list at the given index + * @param i the index of the item to remove + */ + remove(i) { + if (this.list[i - 1] && this.list[i - 1].divider && this.list[i + 1] && this.list[i + 1].divider) { + this.list.splice(i - 1, 2); + } else { + this.list.splice(i, 1); + } + if (this.list[0]?.divider) this.removeDivider(0); + if (this.list[this.list.length - 1] && this.list[this.list.length - 1].divider) this.removeDivider(this.list.length - 1); + this.updateList(); + } + /** + * Validate items in the list and update the field on selected techniques + */ + updateList() { + let value = this.list.filter(item => item.valid()); + if (this.config.level == 'technique') { + // do not update techniques if editing a layer-level list + this.config.viewModel.editSelectedTechniqueValues(this.config.type, value); + } + } + /** + * Checks if a divider can be added at the previous index + * + * Note: a divider can only be added if both the items at the current and previous + * indices are valid non-divider items. + * + * @param i the current index + * @returns true, if a divider can be added, false otherwise + */ + canAddDivider(i) { + if (i < 1) return false; // cannot add divider before the first item + if (this.list[i]?.valid() && !this.list[i]?.divider && this.list[i - 1]?.valid() && !this.list[i - 1]?.divider) { + return true; + } + return false; + } + /** + * Add a divider at the given index + * @param i the index at which to add a divider + */ + addDivider(i) { + let item = new this.fieldToClass[this.config.type](); + item.divider = true; + this.list.splice(i, 0, item); + this.updateList(); + } + /** + * Remove a divider at the given index + * @param i the index of the divider to remove + */ + removeDivider(i) { + this.list.splice(i, 1); + this.updateList(); + } + static #_ = this.ɵfac = function ListInputComponent_Factory(t) { + return new (t || ListInputComponent)(); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵdefineComponent"]({ + type: ListInputComponent, + selectors: [["app-list-input"]], + inputs: { + config: "config" + }, + decls: 5, + vars: 2, + consts: [[1, "list-container"], [4, "ngFor", "ngForOf"], [1, "add-more"], [1, "button", 3, "click"], ["class", "divider-button-container", 4, "ngIf"], ["class", "item-container hide-subscript", 4, "ngIf"], [1, "divider-button-container"], ["matTooltipPosition", "below", "matTooltip", "remove divider", 1, "divider-button", "divider", 3, "click"], [1, "line"], [1, "icon"], ["matTooltipPosition", "below", "matTooltip", "add a divider", 1, "divider-button", "divider-option", 3, "click"], [1, "item-container", "hide-subscript"], ["matInput", "", "matTextareaAutosize", "", 3, "ngModelChange", "input", "ngModel"], ["class", "assigned-link", "target", "_blank", "rel", "noopener noreferrer", 3, "href", 4, "ngIf"], [1, "remove-button"], ["target", "_blank", "rel", "noopener noreferrer", 1, "assigned-link", 3, "href"]], + template: function ListInputComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](0, "div", 0); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtemplate"](1, ListInputComponent_div_1_Template, 4, 3, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementStart"](2, "div", 2)(3, "button", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵlistener"]("click", function ListInputComponent_Template_button_click_3_listener() { + return ctx.add(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵproperty"]("ngForOf", ctx.list); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_1__["ɵɵtextInterpolate1"]("add ", ctx.config.type, ""); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_2__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_2__.NgIf, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_3__.MatLabel, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_4__.NgModel, _angular_material_input__WEBPACK_IMPORTED_MODULE_5__.MatInput, _angular_material_icon__WEBPACK_IMPORTED_MODULE_6__.MatIcon, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_7__.MatTooltip], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.list-container,\n.add-more {\n margin: 10px 0;\n}\n\n.item-container {\n padding: 10px;\n border: 1px solid #ddd;\n margin: 4px 0;\n}\n.item-container.hide-subscript .mat-mdc-form-field + .mat-mdc-form-field {\n margin-top: 8px;\n}\n.item-container .mat-mdc-form-field {\n width: 100%;\n}\n\n.remove-button {\n margin-top: 8px;\n display: flex;\n justify-content: flex-end;\n}\n\n.assigned-link {\n float: left;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .assigned-link {\n color: #7588e8 !important;\n }\n}\n.theme-override-dark .assigned-link {\n color: #7588e8 !important;\n}\n\n@media (prefers-color-scheme: dark) {\n .theme-use-system .assigned-link:active,\n .theme-use-system .assigned-link:visited {\n color: #e847e8;\n }\n}\n.theme-override-dark .assigned-link:active,\n.theme-override-dark .assigned-link:visited {\n color: #e847e8;\n}\n\n.divider-button-container {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.divider-button {\n display: flex;\n width: 100%;\n align-items: center;\n background: none;\n border: none;\n cursor: pointer;\n padding: 5px 0;\n}\n.divider-button .icon {\n font-size: 16px;\n height: 16px;\n width: 16px;\n border-radius: 3px;\n padding: 1px;\n}\n.divider-button .line {\n flex: 1;\n height: 2px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .divider-button.divider-option .line, .theme-use-system .divider-button.divider-option .icon {\n background-color: #ddd;\n }\n}\n.theme-override-light .divider-button.divider-option .line, .theme-override-light .divider-button.divider-option .icon {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .divider-button.divider-option .line, .theme-use-system .divider-button.divider-option .icon {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .divider-button.divider-option .line, .theme-override-dark .divider-button.divider-option .icon {\n background-color: #4c4c68;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .divider-button.divider .line, .theme-use-system .divider-button.divider .icon {\n background-color: #777777;\n }\n}\n.theme-override-light .divider-button.divider .line, .theme-override-light .divider-button.divider .icon {\n background-color: #777777;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .divider-button.divider .line, .theme-use-system .divider-button.divider .icon {\n background-color: #b6b6ca;\n }\n}\n.theme-override-dark .divider-button.divider .line, .theme-override-dark .divider-button.divider .icon {\n background-color: #b6b6ca;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .divider-button:hover .line, .theme-use-system .divider-button:hover .icon {\n background-color: #b8b8b8;\n }\n}\n.theme-override-light .divider-button:hover .line, .theme-override-light .divider-button:hover .icon {\n background-color: #b8b8b8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .divider-button:hover .line, .theme-use-system .divider-button:hover .icon {\n background-color: #7588e8;\n }\n}\n.theme-override-dark .divider-button:hover .line, .theme-override-dark .divider-button:hover .icon {\n background-color: #7588e8;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbGlzdC1pbnB1dC9saXN0LWlucHV0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDUEE7O0VBRUksY0FBQTtBQVFKOztBQU5BO0VBQ0ksYUFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtBQVNKO0FBTlE7RUFDSSxlQUFBO0FBUVo7QUFMSTtFQUNJLFdBQUE7QUFPUjs7QUFKQTtFQUNJLGVBQUE7RUFDQSxhQUFBO0VBQ0EseUJBQUE7QUFPSjs7QUFMQTtFQUNJLFdBQUE7QUFRSjtBRDJLUTtFQUhKO0lBSVEseUJDbkxtQztFQVc3QztBQUNGO0FEMEtJO0VBR0kseUJDekx1QztBQWUvQzs7QURtS1E7RUFISjs7SUFJUSxjQy9LbUM7RUFpQjdDO0FBQ0Y7QURnS0k7O0VBR0ksY0NyTHVDO0FBc0IvQzs7QUFuQkE7RUFDSSxhQUFBO0VBQ0EsdUJBQUE7RUFDQSxtQkFBQTtBQXNCSjs7QUFuQkE7RUFDSSxhQUFBO0VBQ0EsV0FBQTtFQUNBLG1CQUFBO0VBQ0EsZ0JBQUE7RUFDQSxZQUFBO0VBQ0EsZUFBQTtFQUNBLGNBQUE7QUFzQko7QUFyQkk7RUFDSSxlQUFBO0VBQ0EsWUFBQTtFQUNBLFdBQUE7RUFDQSxrQkFBQTtFQUNBLFlBQUE7QUF1QlI7QUFyQkk7RUFDSSxPQUFBO0VBQ0EsV0FBQTtBQXVCUjtBRDBHUTtFQUhKO0lBSVEsc0JDOUg0QztFQXVCdEQ7QUFDRjtBRHlHSTtFQUdJLHNCQ3BJZ0Q7QUEyQnhEO0FEcUhRO0VBSEo7SUFJUSx5QkNqSitEO0VBK0J6RTtBQUNGO0FEb0hJO0VBR0kseUJDdkptRTtBQW1DM0U7QUQwRlE7RUFISjtJQUlRLHlCQ3pINEM7RUFrQ3REO0FBQ0Y7QUR5Rkk7RUFHSSx5QkMvSGdEO0FBc0N4RDtBRHFHUTtFQUhKO0lBSVEseUJDNUk0RTtFQTBDdEY7QUFDRjtBRG9HSTtFQUdJLHlCQ2xKZ0Y7QUE4Q3hGO0FEMEVRO0VBSEo7SUFJUSx5QkNySHdDO0VBOENsRDtBQUNGO0FEeUVJO0VBR0kseUJDM0g0QztBQWtEcEQ7QURxRlE7RUFISjtJQUlRLHlCQ3hJNEQ7RUFzRHRFO0FBQ0Y7QURvRkk7RUFHSSx5QkM5SWdFO0FBMER4RSIsInNvdXJjZXNDb250ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi9jb2xvcnMuc2Nzcyc7XG5cbi5saXN0LWNvbnRhaW5lcixcbi5hZGQtbW9yZSB7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG59XG4uaXRlbS1jb250YWluZXIge1xuICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IocGFuZWwtZGFyayk7XG4gICAgbWFyZ2luOiA0cHggMDtcblxuICAgICYuaGlkZS1zdWJzY3JpcHQge1xuICAgICAgICAubWF0LW1kYy1mb3JtLWZpZWxkICsgLm1hdC1tZGMtZm9ybS1maWVsZCB7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLm1hdC1tZGMtZm9ybS1maWVsZCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cbi5yZW1vdmUtYnV0dG9uIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xufVxuLmFzc2lnbmVkLWxpbmsge1xuICAgIGZsb2F0OiBsZWZ0O1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBjb2xvcihkYXJrLWxpbmspICFpbXBvcnRhbnQpO1xufVxuLmFzc2lnbmVkLWxpbms6YWN0aXZlLFxuLmFzc2lnbmVkLWxpbms6dmlzaXRlZCB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIGNvbG9yKGRhcmstbGluay1hY3RpdmUpKTtcbn1cblxuLmRpdmlkZXItYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4uZGl2aWRlci1idXR0b24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcGFkZGluZzogNXB4IDA7XG4gICAgLmljb24ge1xuICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICAgICAgcGFkZGluZzogMXB4O1xuICAgIH1cbiAgICAubGluZSB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGhlaWdodDogMnB4O1xuICAgIH1cbiAgICAmLmRpdmlkZXItb3B0aW9uIHtcbiAgICAgICAgLmxpbmUsIC5pY29uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IocGFuZWwtZGFyayksIGNvbG9yKGRhcmstNCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICYuZGl2aWRlciB7XG4gICAgICAgIC5saW5lLCAuaWNvbiB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGRhcmtlbihjb2xvcihwYW5lbC1kYXJrKSwgNDAlKSwgbGlnaHRlbihjb2xvcihkYXJrLTQpLCA0MCUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAmOmhvdmVyIC5saW5lLCAmOmhvdmVyIC5pY29uIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihidXR0b24tZGFyayksIGNvbG9yKGRhcmstbGluaykpO1xuICAgIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 12264: +/*!********************************!*\ + !*** ./src/app/matrix/cell.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Cell: () => (/* binding */ Cell) +/* harmony export */ }); +/* harmony import */ var _utils_cookies__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/cookies */ 71555); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinycolor2 */ 62002); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/config.service */ 43696); + + + + + +class Cell { + constructor(dataService, configService) { + this.dataService = dataService; + this.configService = configService; + this.showContextmenu = false; + this.dataService = dataService; + this.configService = configService; + if ((0,_utils_cookies__WEBPACK_IMPORTED_MODULE_0__.hasCookie)('is_user_theme_dark')) this.isDarkTheme = (0,_utils_cookies__WEBPACK_IMPORTED_MODULE_0__.getCookie)('is_user_theme_dark') === 'true';else this.isDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches; + } + get isHighlighted() { + let isHighlighted = this.showContextmenu; + let idToMatch = this.technique.id; + if (this.viewModel.selectSubtechniquesWithParent && this.technique.isSubtechnique) idToMatch = this.technique.parent.id; + if (this.viewModel.highlightedTechniques.has(idToMatch)) { + if (!this.viewModel.highlightedTactic) { + // highlight is called from search component + return true; + } else { + const isTacticMatching = this.viewModel.highlightedTactic.id === this.tactic.id; + return this.viewModel.selectTechniquesAcrossTactics || isTacticMatching; + } + } + return isHighlighted; + } + /** + * Return css classes for a technique + * @param {technique} technique the technique to get the class of + * @param {boolean} mini is it the minitable? + * @return {string} the classes the technique should currently have + */ + getClass() { + let theclass = 'link noselect cell'; + if (this.tactic && this.viewModel.isTechniqueSelected(this.technique, this.tactic)) theclass += ' editing'; + if (this.isHighlighted) { + //open context menu always keeps highlight even if the mouse has moved elsewhere + theclass += ' highlight'; + } + // classes added by layout config + if (this.viewModel.layout.showID) { + theclass += ' showID'; + //change sticky top position of technique count + let elements = document.querySelectorAll('.tactic.count'); + for (let i = 0; i < elements.length; i++) { + elements[i].style.top = '46px'; + } + } + if (this.viewModel.layout.showName) theclass += ' showName'; + theclass += ' ' + this.viewModel.layout.layout; + // classes according to annotations + if (this.tactic && this.viewModel.getTechniqueVM(this.technique, this.tactic).comment.length > 0 || this.viewModel.getTechniqueVM(this.technique, this.tactic).metadata.length > 0 || this.viewModel.getTechniqueVM(this.technique, this.tactic).links.length > 0 || this.hasNotes()) theclass += ' underlined'; + if (this.getTechniqueBackground()) theclass += ' colored'; + if (this.tactic && !this.viewModel.getTechniqueVM(this.technique, this.tactic).enabled) theclass += ' disabled'; + return theclass; + } + /** + * Emulate transparency without an alpha channel + * @param color color with alpha channel + * @returns color without an alpha channel which has been mixed with the proper background color as if it is transparent + */ + emulate_alpha(color) { + /* note: constructing a tinycolor of a tinycolor makes them aliases. E.g: + * + * x = tinycolor("#ffffff") + * y = tinycolor(x) + * y.getAlpha() -> 1 + * x.setAlpha(0) + * y.getAlpha() -> 0 + * + * Therefore y must be cloned after it is constructed to avoid transformations of x affecting it. + * In this context, the color arg must be cloned because + * in some contexts it is a tinycolor and we change its alpha below, + * which could affect the copy in the calling function + */ + if (!color || color.length < 1) return ''; + let cell_color = (0,tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"])(color).clone(); + let cell_color_alpha = cell_color.getAlpha(); + cell_color.setAlpha(1); + let result = tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mix(this.isDarkTheme ? '#2e2e3f' : '#ffffff', cell_color, cell_color_alpha * 100); + return result; + } + /** + * Get most readable text color for the given technique + * @param technique the technique to get the text color for + * @param antihighlight boolean, true if the column is not selected. + * @return black, white, or gray, depending on technique and column state + */ + getTechniqueTextColor() { + if (!this.tactic) return this.isDarkTheme ? 'white' : 'black'; + let tvm = this.viewModel.getTechniqueVM(this.technique, this.tactic); + if (!tvm.enabled) return this.isDarkTheme ? 'rgb(255 255 255 / 25%)' : '#aaaaaa'; + // don't display if disabled or highlighted + // if (this.viewModel.highlightedTechnique && this.viewModel.highlightedTechnique.technique_tactic_union_id == this.technique.technique_tactic_union_id) return "black" + if (tvm.color && this.configService.getFeature('background_color')) return tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(this.emulate_alpha(tvm.color), ['white', 'black']); + if (this.viewModel.layout.showAggregateScores && tvm.aggregateScoreColor && this.technique.subtechniques.length > 0 && this.configService.getFeature('aggregate_score_color')) return tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(this.emulate_alpha(tvm.aggregateScoreColor), ['white', 'black']); + if (tvm.score && !isNaN(Number(tvm.score)) && this.configService.getFeature('non_aggregate_score_color')) return tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(this.emulate_alpha(tvm.scoreColor), ['white', 'black']);else return this.isDarkTheme ? 'white' : 'black'; + } + /** + * Get the underline color for the given technique. The comment/metadata + * underscore color overrides the link underscore color. + */ + getTechniqueUnderlineColor() { + if (this.tactic) { + let tvm = this.viewModel.getTechniqueVM(this.technique, this.tactic); + if (tvm.comment.length > 0 || this.hasNotes()) { + if (this.configService.getFeature('comment_underline')) return this.configService.commentColor; + } + if (tvm.metadata.length > 0) { + if (this.configService.getFeature('metadata_underline')) return this.configService.metadataColor; + } + if (tvm.links.length > 0) { + if (this.configService.getFeature('link_underline')) return this.configService.linkColor; + } + } + return ''; + } + /** + * Check if technique has notes + * @return true if technique has notes, false otherwise + */ + hasNotes() { + let domain = this.dataService.getDomain(this.viewModel.domainVersionID); + let notes = domain.notes.filter(note => { + return note.object_refs.includes(this.technique.id); + }); + return notes.length > 0; + } + /** + * get the technique background style for ngstyle + * @param technique technique + * @return background object + */ + getTechniqueBackground() { + if (!this.tactic) return null; + let tvm = this.viewModel.getTechniqueVM(this.technique, this.tactic); + // don't display if disabled or highlighted + if (!tvm.enabled || this.isHighlighted) return null; + if (tvm.color && this.configService.getFeature('background_color')) return { + background: this.emulate_alpha(tvm.color) + }; + if (this.viewModel.layout.showAggregateScores && this.technique.subtechniques.length > 0 && !isNaN(Number(tvm.aggregateScore)) && tvm.aggregateScore.length > 0 && this.configService.getFeature('aggregate_score_color')) { + return { + background: this.emulate_alpha(tvm.aggregateScoreColor) + }; + } + if (tvm.score && this.configService.getFeature('non_aggregate_score_color')) return { + background: this.emulate_alpha(tvm.scoreColor) + }; + } + static #_ = this.ɵfac = function Cell_Factory(t) { + return new (t || Cell)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_2__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_3__.ConfigService)); + }; + static #_2 = this.ɵdir = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineDirective"]({ + type: Cell, + inputs: { + viewModel: "viewModel", + technique: "technique", + tactic: "tactic" + } + }); +} + +/***/ }), + +/***/ 95175: +/*!*****************************************!*\ + !*** ./src/app/matrix/matrix-common.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MatrixCommon: () => (/* binding */ MatrixCommon) +/* harmony export */ }); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinycolor2 */ 62002); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/config.service */ 43696); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/viewmodels.service */ 57833); + + + + +class MatrixCommon { + constructor(configService, viewModelsService) { + this.configService = configService; + this.viewModelsService = viewModelsService; + this.configService = configService; + } + /** + * filter tactics according to viewmodel state + * @param {Tactic[]} tactics to filter + * @returns {Tactic[]} filtered tactics + */ + filterTactics(tactics) { + return this.viewModel.filterTactics(tactics, this.matrix); + } + /** + * filter techniques according to viewModel state + * @param {Technique[]} techniques list of techniques to filter + * @param {Tactic} tactic tactic the techniques fall under + * @returns {Technique[]} filtered techniques + */ + filterTechniques(techniques, tactic) { + return this.viewModel.filterTechniques(techniques, tactic, this.matrix); + } + /** + * sort techniques accoding to viewModel state + * @param {Technique[]} techniques techniques to sort + * @param {Tactic} tactic tactic the techniques fall under + * @returns {Technique[]} sorted techniques + */ + sortTechniques(techniques, tactic) { + return this.viewModel.sortTechniques(techniques, tactic); + } + /** + * apply sort and filter state to techniques + * @param {Technique[]} techniques techniques to sort and filter + * @param {Tactic} tactic that the techniques fall under + * @returns {Technique[]} sorted and filtered techniques + */ + applyControls(techniques, tactic) { + return this.viewModel.applyControls(techniques, tactic, this.matrix); + } + onTechniqueLeftClick(event, technique, tactic) { + if (!this.configService.getFeature('selecting_techniques')) { + //if selecting is disabled, same behavior as right click. Shouldn't ever get to this point because it should be handled in technique-cell + return; + } + if (event.shift || event.ctrl || event.meta) { + // add to selection + if (this.viewModel.isTechniqueSelected(technique, tactic)) this.viewModel.unselectTechnique(technique, tactic);else this.viewModel.selectTechnique(technique, tactic); + } else { + // replace selection + if (this.viewModel.getSelectedTechniqueCount() > 1) { + if (this.viewModel.isTechniqueSelected(technique, tactic)) this.viewModel.clearSelectedTechniques(); + this.viewModel.selectTechnique(technique, tactic); + } else if (this.viewModel.isTechniqueSelected(technique, tactic)) { + //unselect currently selected + this.viewModel.clearSelectedTechniques(); + } else { + //replace + this.viewModel.clearSelectedTechniques(); + this.viewModel.selectTechnique(technique, tactic); + } + } + this.viewModelsService.onSelectionChange.emit(); + } + onToggleSubtechniquesVisible(technique, tactic) { + if (technique.subtechniques.length == 0) return; + let tvm = this.viewModel.getTechniqueVM(technique, tactic); + tvm.showSubtechniques = !tvm.showSubtechniques; + } + onTechniqueHighlight(event, technique, tactic) { + this.viewModel.highlightTechnique(technique, tactic); + } + onTechniqueUnhighlight(event) { + this.viewModel.clearHighlight(); + } + onTacticClick(tactic) { + if (this.viewModel.isTacticSelected(tactic)) this.viewModel.unselectAllTechniquesInTactic(tactic);else this.viewModel.selectAllTechniquesInTactic(tactic); + } + getTacticBackground() { + if (this.viewModel.showTacticRowBackground) return { + background: this.viewModel.tacticRowBackground, + color: tinycolor2__WEBPACK_IMPORTED_MODULE_0__["default"].mostReadable(this.viewModel.tacticRowBackground, ['white', 'black']) + };else { + return {}; + } + } + static #_ = this.ɵfac = function MatrixCommon_Factory(t) { + return new (t || MatrixCommon)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_1__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵdir = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineDirective"]({ + type: MatrixCommon, + inputs: { + matrix: "matrix", + viewModel: "viewModel" + } + }); +} + +/***/ }), + +/***/ 91388: +/*!*************************************************************!*\ + !*** ./src/app/matrix/matrix-flat/matrix-flat.component.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MatrixFlatComponent: () => (/* binding */ MatrixFlatComponent) +/* harmony export */ }); +/* harmony import */ var _matrix_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matrix-common */ 95175); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/config.service */ 43696); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../technique-cell/technique-cell.component */ 62460); +/* harmony import */ var _tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tactic-cell/tactic-cell.component */ 39132); + + + + + + + +const _c0 = a0 => ({ + disabled: a0 +}); +function MatrixFlatComponent_td_3_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 5)(1, "a", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function MatrixFlatComponent_td_3_Template_a_click_1_listener() { + const tactic_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTacticClick(tactic_r2)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](2, "tactic-cell", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const tactic_r2 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngStyle", ctx_r2.getTacticBackground()); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("viewModel", ctx_r2.viewModel)("tactic", tactic_r2); + } +} +function MatrixFlatComponent_td_5_ng_container_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "\u00A0techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + } +} +function MatrixFlatComponent_td_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](2, MatrixFlatComponent_td_5_ng_container_2_Template, 2, 0, "ng-container", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r4 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngStyle", ctx_r2.getTacticBackground()); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate1"](" ", ctx_r2.filterTechniques(tactic_r4.techniques, tactic_r4).length, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx_r2.viewModel.layout.showName); + } +} +function MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](1, "technique-cell", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_leftclick_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueLeftClick($event, technique_r6, tactic_r7)); + })("rightclick", function MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_rightclick_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueRightClick($event, technique_r6)); + })("highlight", function MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_highlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueHighlight($event, technique_r6, tactic_r7)); + })("unhighlight", function MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_unhighlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r7)("technique", technique_r6)("viewModel", ctx_r2.viewModel)("matrix", ctx_r2.matrix); + } +} +function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_2_Template(rf, ctx) { + if (rf & 1) { + const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_2_Template_td_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r9); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2).$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onToggleSubtechniquesVisible(technique_r6, tactic_r7)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](1, "div", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](2, "="); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2).$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](1, _c0, ctx_r2.applyControls(technique_r6.subtechniques, tactic_r7).length == 0)); + } +} +function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnamespaceSVG"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](1, "svg", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](2, "path", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } +} +function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template(rf, ctx) { + if (rf & 1) { + const _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "technique-cell", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_leftclick_0_listener($event) { + const subtechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10).$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueLeftClick($event, subtechnique_r11, tactic_r7)); + })("rightclick", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_rightclick_0_listener($event) { + const subtechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueRightClick($event, subtechnique_r11)); + })("highlight", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_highlight_0_listener($event) { + const subtechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10).$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueHighlight($event, subtechnique_r11, tactic_r7)); + })("unhighlight", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_unhighlight_0_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const subtechnique_r11 = ctx.$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r7)("technique", subtechnique_r11)("viewModel", ctx_r2.viewModel)("matrix", ctx_r2.matrix); + } +} +function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "table", 14)(1, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](2, MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_2_Template, 3, 3, "td", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](3, "td", 16)(4, "technique-cell", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_leftclick_4_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueLeftClick($event, technique_r6, tactic_r7)); + })("rightclick", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_rightclick_4_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueRightClick($event, technique_r6)); + })("highlight", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_highlight_4_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueHighlight($event, technique_r6, tactic_r7)); + })("unhighlight", function MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_unhighlight_4_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](5, "tr", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](6, MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_6_Template, 3, 0, "td", 18); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](7, "td", 19)(8, "div", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](9, MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template, 1, 4, "technique-cell", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", technique_r6.subtechniques.length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r7)("technique", technique_r6)("viewModel", ctx_r2.viewModel)("matrix", ctx_r2.matrix); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("hidden", !ctx_r2.viewModel.getTechniqueVM(technique_r6, tactic_r7).showSubtechniques); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx_r2.applyControls(technique_r6.subtechniques, tactic_r7).length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx_r2.applyControls(technique_r6.subtechniques, tactic_r7)); + } +} +function MatrixFlatComponent_td_8_ng_container_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](1, MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template, 2, 4, "ng-container", 12)(2, MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template, 10, 9, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const technique_r6 = ctx.$implicit; + const supertechnique_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵreference"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", technique_r6.subtechniques.length == 0)("ngIfElse", supertechnique_r12); + } +} +function MatrixFlatComponent_td_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](1, MatrixFlatComponent_td_8_ng_container_1_Template, 4, 2, "ng-container", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r7 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx_r2.applyControls(tactic_r7.techniques, tactic_r7)); + } +} +class MatrixFlatComponent extends _matrix_common__WEBPACK_IMPORTED_MODULE_0__.MatrixCommon { + constructor(configService, viewModelsService) { + super(configService, viewModelsService); + } + ngOnInit() { + // intentionally left blank + } + static #_ = this.ɵfac = function MatrixFlatComponent_Factory(t) { + return new (t || MatrixFlatComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_1__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({ + type: MatrixFlatComponent, + selectors: [["matrix-flat"]], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵInheritDefinitionFeature"]], + decls: 9, + vars: 3, + consts: [["supertechnique", ""], [1, "matrix", "flat"], ["class", "tactic name", 3, "ngStyle", 4, "ngFor", "ngForOf"], ["class", "tactic count", 3, "ngStyle", 4, "ngFor", "ngForOf"], ["class", "tactic", 4, "ngFor", "ngForOf"], [1, "tactic", "name", 3, "ngStyle"], [3, "click"], [3, "viewModel", "tactic"], [1, "tactic", "count", 3, "ngStyle"], [4, "ngIf"], [1, "tactic"], [4, "ngFor", "ngForOf"], [4, "ngIf", "ngIfElse"], [3, "leftclick", "rightclick", "highlight", "unhighlight", "tactic", "technique", "viewModel", "matrix"], [1, "supertechnique"], ["class", "sidebar technique", 3, "ngClass", "click", 4, "ngIf"], [1, "technique"], [1, "subtechniques-row", "subtechniques-container"], ["class", "sidebar subtechniques", 4, "ngIf"], [1, "subtechniques"], [3, "tactic", "technique", "viewModel", "matrix", "leftclick", "rightclick", "highlight", "unhighlight", 4, "ngFor", "ngForOf"], [1, "sidebar", "technique", 3, "click", "ngClass"], [1, "handle"], [1, "sidebar", "subtechniques"], ["width", "12px", "height", "12px"], ["d", "M0 0H12V12Z"]], + template: function MatrixFlatComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "table", 1)(1, "thead")(2, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](3, MatrixFlatComponent_td_3_Template, 3, 3, "td", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](5, MatrixFlatComponent_td_5_Template, 3, 3, "td", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "tbody")(7, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](8, MatrixFlatComponent_td_8_Template, 2, 1, "td", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_6__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgIf, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgStyle, _technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_3__.TechniqueCellComponent, _tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_4__.TacticCellComponent], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.matrix {\n border-collapse: collapse;\n line-height: 14px;\n}\n\n@media print {\n .matrix {\n border-collapse: collapse;\n line-height: 12px;\n }\n}\n.matrix.flat .tactic {\n margin-right: 5px;\n width: 1%;\n vertical-align: top;\n}\n.matrix.flat .tactic.name, .matrix.flat .tactic.count {\n text-align: center;\n font-size: 16px;\n}\n.matrix.flat .tactic.name {\n cursor: pointer;\n vertical-align: bottom;\n font-weight: bold;\n position: sticky;\n top: 0.05px;\n z-index: 9999;\n}\n@media print {\n .matrix.flat .tactic.name {\n font-size: 8px;\n }\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.flat .tactic.name {\n background-color: #21212c;\n }\n}\n.theme-override-dark .matrix.flat .tactic.name {\n background-color: #21212c;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.flat .tactic.name {\n background-color: white;\n }\n}\n.theme-override-light .matrix.flat .tactic.name {\n background-color: white;\n}\n.matrix.flat .tactic.count {\n font-size: 13px;\n padding-bottom: 5px;\n margin-bottom: 5px;\n position: sticky;\n top: 32px;\n z-index: 9999;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.flat .tactic.count {\n border-bottom: 1px solid black;\n }\n}\n.theme-override-light .matrix.flat .tactic.count {\n border-bottom: 1px solid black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.flat .tactic.count {\n border-bottom: 1px solid white;\n }\n}\n.theme-override-dark .matrix.flat .tactic.count {\n border-bottom: 1px solid white;\n}\n@media print {\n .matrix.flat .tactic.count {\n font-size: 8px;\n }\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.flat .tactic.count {\n background-color: #21212c;\n }\n}\n.theme-override-dark .matrix.flat .tactic.count {\n background-color: #21212c;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.flat .tactic.count {\n background-color: white;\n }\n}\n.theme-override-light .matrix.flat .tactic.count {\n background-color: white;\n}\n.matrix.flat .tactic .subtechniques-row.hidden {\n display: none;\n}\n.matrix.flat .tactic .supertechnique {\n border-collapse: collapse;\n width: 100%;\n padding: 0;\n margin: 0;\n}\n.matrix.flat .tactic .supertechnique td {\n padding: 0;\n vertical-align: top;\n}\n.matrix.flat .tactic .supertechnique td.sidebar.technique {\n min-width: 8px;\n width: 12px;\n padding: 0;\n background: #6b7279;\n cursor: pointer;\n vertical-align: middle;\n}\n.matrix.flat .tactic .supertechnique td.sidebar.technique .handle {\n text-align: center;\n vertical-align: middle;\n transform: rotate(-90deg);\n color: #f2f2f2;\n width: 12px;\n height: 12px;\n font-size: 16px;\n line-height: 12px;\n}\n.matrix.flat .tactic .supertechnique td.sidebar.technique.disabled {\n background: #aaaaaa;\n border-color: #aaaaaa;\n box-shadow: none;\n pointer-events: none;\n}\n.matrix.flat .tactic .supertechnique td.sidebar.subtechniques svg {\n fill: #6b7279;\n}\n.matrix.flat .tactic .supertechnique td.sidebar {\n border-right: 2px solid #6b7279;\n}\n@media print {\n .matrix.flat .tactic .supertechnique td.sidebar {\n display: none;\n }\n}\n.matrix.flat .tactic .supertechnique td.technique {\n box-shadow: 0 0 0 1px #6b7279 inset;\n}\n.matrix.flat .tactic .more-icon {\n transition: all ease 0.125s;\n vertical-align: top;\n transform: scale(0.5) rotate(-90deg);\n width: 12px;\n height: 12px;\n}\n.matrix.flat .tactic .more-icon.expanded {\n transform: scale(0.5);\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1jb21tb24uc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1mbGF0L21hdHJpeC1mbGF0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDSkE7RUFDSSx5QkFBQTtFQUNBLGlCQUxPO0FDVVg7O0FERkE7RUFDSTtJQUNJLHlCQUFBO0lBQ0EsaUJBVlM7RUNlZjtBQUNGO0FBakJJO0VBQ0ksaUJBQUE7RUFDQSxTQUFBO0VBQ0EsbUJBQUE7QUFtQlI7QUFqQlE7RUFFSSxrQkFBQTtFQUNBLGVBQUE7QUFrQlo7QUFoQlE7RUFDSSxlQUFBO0VBQ0Esc0JBQUE7RUFDQSxpQkFBQTtFQUlBLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLGFBQUE7QUFlWjtBQXBCWTtFQUpKO0lBS1EsY0FBQTtFQXVCZDtBQUNGO0FGb0tRO0VBSEo7SUFJUSx5QkV4THNEO0VBdUJoRTtBQUNGO0FGbUtJO0VBR0kseUJFOUwwRDtBQTJCbEU7QUZ5SVE7RUFISjtJQUlRLHVCRXBLdUQ7RUE4QmpFO0FBQ0Y7QUZ3SUk7RUFHSSx1QkUxSzJEO0FBa0NuRTtBQS9CUTtFQUVJLGVBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBSUEsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsYUFBQTtBQTZCWjtBRnlIUTtFQUhKO0lBSVEsOEJFaEt5QztFQTBDbkQ7QUFDRjtBRndISTtFQUdJLDhCRXRLNkM7QUE4Q3JEO0FGb0lRO0VBSEo7SUFJUSw4QkVuTDBEO0VBa0RwRTtBQUNGO0FGbUlJO0VBR0ksOEJFekw4RDtBQXNEdEU7QUFsRFk7RUFMSjtJQU1RLGNBQUE7RUFxRGQ7QUFDRjtBRnVIUTtFQUhKO0lBSVEseUJFektzRDtFQXFEaEU7QUFDRjtBRnNISTtFQUdJLHlCRS9LMEQ7QUF5RGxFO0FGNEZRO0VBSEo7SUFJUSx1QkVySnVEO0VBNERqRTtBQUNGO0FGMkZJO0VBR0ksdUJFM0oyRDtBQWdFbkU7QUE3RFE7RUFDSSxhQUFBO0FBK0RaO0FBN0RRO0VBQ0kseUJBQUE7RUFDQSxXQUFBO0VBQ0EsVUFBQTtFQUNBLFNBQUE7QUErRFo7QUE5RFk7RUFDSSxVQUFBO0VBQ0EsbUJBQUE7QUFnRWhCO0FBL0RnQjtFQUNJLGNBQUE7RUFDQSxXQUFBO0VBQ0EsVUFBQTtFQUNBLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLHNCQUFBO0FBaUVwQjtBQWhFb0I7RUFDSSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0EseUJBQUE7RUFDQSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7QUFrRXhCO0FBaEVvQjtFQUNJLG1CQUFBO0VBQ0EscUJBQUE7RUFDQSxnQkFBQTtFQUNBLG9CQUFBO0FBa0V4QjtBQTlEb0I7RUFDSSxhQUFBO0FBZ0V4QjtBQTdEZ0I7RUFDSSwrQkFBQTtBQStEcEI7QUE5RG9CO0VBRko7SUFHUSxhQUFBO0VBaUV0QjtBQUNGO0FBL0RnQjtFQUNJLG1DQUFBO0FBaUVwQjtBQTVEUTtFQUNJLDJCQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQ0FBQTtFQUNBLFdBQUE7RUFDQSxZQUFBO0FBOERaO0FBN0RZO0VBQ0kscUJBQUE7QUErRGhCIiwic291cmNlc0NvbnRlbnQiOlsiJGNvbHVtbi1ob3Zlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpO1xuJGRpc2FibGVkLWNvbG9yOiBkYXJrZW4oJGNvbHVtbi1ob3Zlci1jb2xvciwgMjAlKTtcblxuLy8gQVRUJkNLIEJyYW5kIGNvbG9yc1xuJGF0dGFjay1jb2xvcnM6IChcbiAgICBhdHRhY2stb3JhbmdlOiAjYzYzZjFmLFxuICAgIGF0dGFjay1ibHVlOiAjMDYyZjRmLFxuKTtcblxuLyoqXG4gKiBDb2xvcnMgdXNlZCBhY3Jvc3MgdGhlIE5hdmlnYXRvci4gU2hhcmVkIGJ5IHRoZSBBVFQmQ0sgV2Vic2l0ZS5cbiAqIEZvciBlYWNoIGNvbG9yLXBhaXI6XG4gKiAgIC0gXCJjb2xvclwiIHJlZmVycyB0byB0aGUgY29sb3IgaXRzZWxmXG4gKiAgIC0gXCJvbi1jb2xvclwiIHJlZmVycyB0byB0aGUgbW9zdCByZWFkYWJsZSB0ZXh0LWNvbG9yIHRvIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogTm90ZTogc29tZSBjb2xvcnMgZG9uJ3QgZGVmaW5lIG9uLWNvbG9ycy4gVGhpcyBpcyBiZWNhdXNlLCBmb3IgdGhlc2UgY29sb3JzLCB0aGV5IGFyZW4ndCBpbnRlbmRlZCB0b1xuICogYXBwZWFyIHdpdGggaW5uZXIgY29udGVudC4gRm9yIGV4YW1wbGUsIFwibGlua1wiIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgbGluayB0ZXh0LCB3aGljaCBpbmhlcmVudGx5XG4gKiBjYW5ub3QgaGF2ZSBpbm5lciB0ZXh0LlxuICovXG4kY29sb3JzOiAoXG4gICAgcHJpbWFyeTogKFxuICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLW9yYW5nZSksXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vdXNlZCBmb3IgaGVhZGVyIGFuZCBzb21lIG5hdiBlbGVtZW50c1xuICAgIHNlY29uZGFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1ibHVlKSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvL3VzZWQgZm9yIGZvb3RlciBhbmQgc29tZSBidXR0b25zXG4gICAgYm9keTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgLy9wcmltYXJ5IHBhZ2UgYm9keVxuICAgIGxpZ2h0OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICBkYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjMDgwODBiLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvLyBkYXJrIHRoZW1lIGNvbG9ycyB2YXJpYXRpb25zIDAtMyAoZnJvbSBkYXJrZXN0IHRvIGxpZ2h0ZXN0KVxuICAgIGRhcmstMTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMxYTFhMjMsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay0yOiAoXG4gICAgICAgIGNvbG9yOiAjMmUyZTNmLFxuICAgICAgICBvbi1jb2xvcjogI2ZhNjM0MSxcbiAgICApLFxuICAgIC8vIGFjY2VudCBkYXJrIGNvbG9yIHNjaGVtZSAodXNlZCBmb3IgOmhvdmVyIHNlbGVjdG9ycylcbiAgICBkYXJrLTM6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjM2YzZjU2LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstNDogKFxuICAgICAgICBjb2xvcjogIzRjNGM2OCxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgZGFyay1kaXNhYmxlZDogKFxuICAgICAgICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gMjUlKSxcbiAgICApLFxuICAgIGRhcmstbGluazogKFxuICAgICAgICBjb2xvcjogIzc1ODhlOCxcbiAgICApLFxuICAgIGRhcmstbGluay1hY3RpdmU6IChcbiAgICAgICAgY29sb3I6ICNlODQ3ZTgsXG4gICAgKSxcbiAgICBsaW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNGY3Y2FjLFxuICAgICksXG4gICAgLy8gaHlwZXJsaW5rc1xuICAgIG1hdHJpeC1oZWFkZXI6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBncmF5LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vIGNvbG9yIG9mIG1hdHJpeCBoZWFkZXJzXG4gICAgY2VsbC1oaWdobGlnaHQtY29sb3I6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoOTYsIDE5NywgMjU1KSxcbiAgICAgICAgKSxcbiAgICBjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNDY0ZGZmLFxuICAgICksXG4gICAgaG92ZXItY2VsbC1mb250LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMCwgMCwgMCksXG4gICAgKSxcbiAgICBwYW5lbC1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjZGRkLFxuICAgICksXG4gICAgcGFuZWwtbGlnaHQ6IChcbiAgICAgICAgY29sb3I6IGxpZ2h0ZW4oI2RkZCwgOCUpLFxuICAgICksXG4gICAgdGFiLXRleHQtY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM1NTUsXG4gICAgKSxcbiAgICBidXR0b24tZGFyazogKFxuICAgICAgICBjb2xvcjogI2I4YjhiOCxcbiAgICApLFxuICAgIC8vYm9vdHN0cmFwIGNvbG9yc1xuICAgIGJvb3RzdHJhcC1wcmltYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzQyOGJjYSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBib290c3RyYXAtc3VjY2VzczogKFxuICAgICAgICBjb2xvcjogIzVjYjg1YyxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWRhbmdlcjogKFxuICAgICAgICBjb2xvcjogI2Q5NTM0ZixcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLXdhcm5pbmc6IChcbiAgICAgICAgY29sb3I6ICNmMGFkNGUsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1pbmZvOiAoXG4gICAgICAgIGNvbG9yOiAjNWJjMGRlLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbik7XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBjb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ2NvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgZ2V0IGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRoZSBjb2xvciwgZm9yIHBhdHRlcm5pbmdcbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGRhcmssIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBsaWdodGVyLlxuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgbGlnaHQsIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBkYXJrZXIuXG4vLyBjb250cmFzdCwgYW4gb3B0aW9uYWwgYXJndW1lbnQsIG11bHRpcGxpZXMgdG8gY3JlYXRlIGEgbW9yZSBkaXN0YW50IG9yIHNpbWlsYXIgY29sb3IuID4xIGlzIG1vcmUgZGlzdGFudCwgPDEgaXMgbW9yZSBzaW1pbGFyLlxuQGZ1bmN0aW9uIGNvbG9yLWFsdGVybmF0ZSgkbmFtZSwgJGNvbnRyYXN0OiAxKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgJHdlaWdodDogJGNvbnRyYXN0ICogNSUpO1xufVxuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIG9uLWNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gb24tY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdvbi1jb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbGVzcyBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIG9uLWNvbG9yKCRuYW1lKSk7XG59XG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBkZWVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZGVlbXBoYXNpemVkIG9uLWNvbG9yIGlzIG1vcmUgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1kZWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoY29sb3IoJG5hbWUpLCBvbi1jb2xvcigkbmFtZSksIDI1JSk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgY29tcHV0ZSBhIGJvcmRlciBjb2xvciBmb3IgdGhlIGNvbG9yXG5AZnVuY3Rpb24gYm9yZGVyLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgMTIuNSUpO1xuICAgIC8vIEByZXR1cm4gcmdiYShpbnZlcnQoY29sb3IoJG5hbWUpKSwgMC4xMjUpO1xufVxuXG4vLyBJTVBPUlRBTlQgVVNBR0UgTk9URTpcbi8vIHRvIHVzZSBhZGFwdGl2ZSBjb2xvcnMsIHlvdSBNVVNUIGRpc2FibGUgdmlldyBlbmNhcHN1bGF0aW9uIG9uIHRoZSBjb21wb25lbnRcbi8vIHlvdSdyZSBhcHBseWluZyB0aGUgc3R5bGVzIHdpdGhpbi4gT3RoZXJ3aXNlIGFuY2VzdG9yIGNsYXNzZXMgY2Fubm90IGJlIGFzc2Vzc2VkXG4vLyBieSB0aGUgbWl4aW5zIHRvIGRldGVybWluZSB0aGUgYXBwIHRoZW1lIGNvbmZpZ3VyYXRpb24uXG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgbGlnaHQgYW5kIGRhcmsgdGhlbWVzXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvcigkcHJvcGVydHksICRsaWdodC12YWx1ZSwgJGRhcmstdmFsdWUpIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSk7XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1saWdodCAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBsaWdodCB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICB9XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1kYXJrICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGRhcmsgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJy4uLy4uL2NvbG9ycy5zY3NzJztcblxuJHNpemV1bml0OiAxNHB4O1xuJHNpemV1bml0X3ByaW50OiAxMnB4O1xuXG4ubWF0cml4IHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZXVuaXQ7XG59XG5cbkBtZWRpYSBwcmludCB7XG4gICAgLm1hdHJpeCB7XG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZXVuaXRfcHJpbnQ7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnLi4vbWF0cml4LWNvbW1vbi5zY3NzJztcbi5tYXRyaXguZmxhdCB7XG4gICAgLnRhY3RpYyB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogNXB4O1xuICAgICAgICB3aWR0aDogMSU7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG5cbiAgICAgICAgJi5uYW1lLFxuICAgICAgICAmLmNvdW50IHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogJHNpemV1bml0ICsgMnB4O1xuICAgICAgICB9XG4gICAgICAgICYubmFtZSB7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHNpemV1bml0X3ByaW50IC0gNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICAgIHRvcDogMC4wNXB4O1xuICAgICAgICAgICAgei1pbmRleDogOTk5OTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGxpZ2h0ZW4oY29sb3IoZGFyay0xKSwgMyUpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCB3aGl0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAmLmNvdW50IHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdib3JkZXItYm90dG9tJywgMXB4IHNvbGlkIGJsYWNrLCAxcHggc29saWQgd2hpdGUpO1xuICAgICAgICAgICAgZm9udC1zaXplOiAkc2l6ZXVuaXQgLSAxcHg7XG4gICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4O1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgICAgICAgICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6ICRzaXpldW5pdF9wcmludCAtIDRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgICB0b3A6IDMycHg7XG4gICAgICAgICAgICB6LWluZGV4OiA5OTk5O1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgbGlnaHRlbihjb2xvcihkYXJrLTEpLCAzJSkpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgnYmFja2dyb3VuZC1jb2xvcicsIHdoaXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdWJ0ZWNobmlxdWVzLXJvdy5oaWRkZW4ge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAuc3VwZXJ0ZWNobmlxdWUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIHRkIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgICAgICAgICAgJi5zaWRlYmFyLnRlY2huaXF1ZSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbi13aWR0aDogOHB4O1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogb24tY29sb3ItZGVlbXBoYXNpcyhib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgICAgICAgICAuaGFuZGxlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9yLWFsdGVybmF0ZShib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjYWFhYWFhO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjYWFhYWFhO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICYuc2lkZWJhci5zdWJ0ZWNobmlxdWVzIHtcbiAgICAgICAgICAgICAgICAgICAgc3ZnIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi5zaWRlYmFyIHtcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgb24tY29sb3ItZGVlbXBoYXNpcyhib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgQG1lZGlhIHByaW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJi50ZWNobmlxdWUge1xuICAgICAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggb24tY29sb3ItZGVlbXBoYXNpcyhib2R5KSBpbnNldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubW9yZS1pY29uIHtcbiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCBlYXNlIDAuMTI1cztcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNSkgcm90YXRlKC05MGRlZyk7XG4gICAgICAgICAgICB3aWR0aDogMTJweDtcbiAgICAgICAgICAgIGhlaWdodDogMTJweDtcbiAgICAgICAgICAgICYuZXhwYW5kZWQge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 31524: +/*!*************************************************************!*\ + !*** ./src/app/matrix/matrix-mini/matrix-mini.component.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MatrixMiniComponent: () => (/* binding */ MatrixMiniComponent) +/* harmony export */ }); +/* harmony import */ var _matrix_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matrix-common */ 95175); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/config.service */ 43696); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../technique-cell/technique-cell.component */ 62460); +/* harmony import */ var _tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tactic-cell/tactic-cell.component */ 39132); + + + + + + + +function MatrixMiniComponent_td_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](1, "tactic-cell", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r1 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("viewModel", ctx_r1.viewModel)("tactic", tactic_r1); + } +} +function MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template(rf, ctx) { + if (rf & 1) { + const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 13)(1, "technique-cell", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_leftclick_1_listener($event) { + const subtechnique_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r6).$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueLeftClick($event, subtechnique_r7, tactic_r5)); + })("rightclick", function MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_rightclick_1_listener($event) { + const subtechnique_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r6).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueRightClick($event, subtechnique_r7)); + })("highlight", function MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_highlight_1_listener($event) { + const subtechnique_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r6).$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueHighlight($event, subtechnique_r7, tactic_r5)); + })("unhighlight", function MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_unhighlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r6); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const subtechnique_r7 = ctx.$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r5)("technique", subtechnique_r7)("viewModel", ctx_r1.viewModel)("matrix", ctx_r1.matrix); + } +} +function MatrixMiniComponent_td_6_ng_container_1_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 9)(1, "div", 10)(2, "technique-cell", 11, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_leftclick_2_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueLeftClick($event, technique_r4, tactic_r5)); + })("rightclick", function MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_rightclick_2_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueRightClick($event, technique_r4)); + })("highlight", function MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_highlight_2_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueHighlight($event, technique_r4, tactic_r5)); + })("unhighlight", function MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_unhighlight_2_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](4, MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template, 2, 4, "div", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r5)("technique", technique_r4)("viewModel", ctx_r1.viewModel)("matrix", ctx_r1.matrix); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx_r1.applyControls(technique_r4.subtechniques, tactic_r5)); + } +} +function MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 14)(1, "technique-cell", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_leftclick_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueLeftClick($event, technique_r4, tactic_r5)); + })("rightclick", function MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_rightclick_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueRightClick($event, technique_r4)); + })("highlight", function MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_highlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueHighlight($event, technique_r4, tactic_r5)); + })("unhighlight", function MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_unhighlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const technique_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r5)("technique", technique_r4)("viewModel", ctx_r1.viewModel)("matrix", ctx_r1.matrix); + } +} +function MatrixMiniComponent_td_6_ng_container_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](1, MatrixMiniComponent_td_6_ng_container_1_div_1_Template, 5, 5, "div", 8)(2, MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template, 2, 4, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const technique_r4 = ctx.$implicit; + const elseblock_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵreference"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", technique_r4.subtechniques.length > 0)("ngIfElse", elseblock_r9); + } +} +function MatrixMiniComponent_td_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](1, MatrixMiniComponent_td_6_ng_container_1_Template, 4, 2, "ng-container", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r5 = ctx.$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx_r1.applyControls(tactic_r5.techniques, tactic_r5)); + } +} +class MatrixMiniComponent extends _matrix_common__WEBPACK_IMPORTED_MODULE_0__.MatrixCommon { + constructor(configService, viewModelsService) { + super(configService, viewModelsService); + } + ngOnInit() { + // intentionally left blank + } + static #_ = this.ɵfac = function MatrixMiniComponent_Factory(t) { + return new (t || MatrixMiniComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_1__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({ + type: MatrixMiniComponent, + selectors: [["matrix-mini"]], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵInheritDefinitionFeature"]], + decls: 7, + vars: 2, + consts: [["elseblock", ""], [1, "matrix", "mini"], ["class", "tactic header", 4, "ngFor", "ngForOf"], ["class", "tactic body", 4, "ngFor", "ngForOf"], [1, "tactic", "header"], [3, "viewModel", "tactic"], [1, "tactic", "body"], [4, "ngFor", "ngForOf"], ["class", "cell-container supertechnique-group", 4, "ngIf", "ngIfElse"], [1, "cell-container", "supertechnique-group"], [1, "cell-container", "supertechnique"], [3, "leftclick", "rightclick", "highlight", "unhighlight", "tactic", "technique", "viewModel", "matrix"], ["class", "cell-container subtechnique", 4, "ngFor", "ngForOf"], [1, "cell-container", "subtechnique"], [1, "cell-container"]], + template: function MatrixMiniComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "table", 1)(1, "thead")(2, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](3, MatrixMiniComponent_td_3_Template, 2, 2, "td", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "tbody")(5, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](6, MatrixMiniComponent_td_6_Template, 2, 1, "td", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_6__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgIf, _technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_3__.TechniqueCellComponent, _tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_4__.TacticCellComponent], + styles: ["\n\n\n\n\n\n\n\n\n\n.matrix[_ngcontent-%COMP%] {\n border-collapse: collapse;\n line-height: 14px;\n}\n\n@media print {\n .matrix[_ngcontent-%COMP%] {\n border-collapse: collapse;\n line-height: 12px;\n }\n}\n.matrix.mini[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] {\n text-align: left;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic[_ngcontent-%COMP%] {\n padding: 0 5px;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic.header[_ngcontent-%COMP%] {\n padding: 5px;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic.body[_ngcontent-%COMP%] {\n padding-top: 5px;\n vertical-align: top;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic.body[_ngcontent-%COMP%] .cell-container[_ngcontent-%COMP%] {\n margin-right: 2.3333333333px;\n margin-bottom: 2.3333333333px;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic.body[_ngcontent-%COMP%] .cell-container[_ngcontent-%COMP%]:not(.supertechnique-group) {\n display: inline-block;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic.body[_ngcontent-%COMP%] .cell-container.supertechnique-group[_ngcontent-%COMP%] {\n box-shadow: 0 0 0 1px #6b7279 inset;\n padding-top: 8px;\n padding-left: 8px;\n padding-bottom: 4.6666666667px;\n padding-right: 4.6666666667px;\n}\n.matrix.mini[_ngcontent-%COMP%] .tactic.body[_ngcontent-%COMP%] .cell-container.supertechnique[_ngcontent-%COMP%] {\n box-shadow: 0 0 0 1px #6b7279;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1jb21tb24uc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1taW5pL21hdHJpeC1taW5pLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDSkE7RUFDSSx5QkFBQTtFQUNBLGlCQUxPO0FDVVg7O0FERkE7RUFDSTtJQUNJLHlCQUFBO0lBQ0EsaUJBVlM7RUNlZjtBQUNGO0FBaEJJO0VBQ0ksZ0JBQUE7QUFrQlI7QUFoQkk7RUFDSSxjQUFBO0FBa0JSO0FBaEJJO0VBQ0ksWUFBQTtBQWtCUjtBQWhCSTtFQUNJLGdCQUFBO0VBQ0EsbUJBQUE7QUFrQlI7QUFiUTtFQUNJLDRCQUFBO0VBQ0EsNkJBQUE7QUFlWjtBQWRZO0VBQ0kscUJBQUE7QUFnQmhCO0FBYlk7RUFNSSxtQ0FBQTtFQUVBLGdCQUFBO0VBQ0EsaUJBQUE7RUFDQSw4QkFBQTtFQUNBLDZCQUFBO0FBU2hCO0FBUFk7RUFDSSw2QkFBQTtBQVNoQiIsInNvdXJjZXNDb250ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi9jb2xvcnMuc2Nzcyc7XG5cbiRzaXpldW5pdDogMTRweDtcbiRzaXpldW5pdF9wcmludDogMTJweDtcblxuLm1hdHJpeCB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBsaW5lLWhlaWdodDogJHNpemV1bml0O1xufVxuXG5AbWVkaWEgcHJpbnQge1xuICAgIC5tYXRyaXgge1xuICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICBsaW5lLWhlaWdodDogJHNpemV1bml0X3ByaW50O1xuICAgIH1cbn1cbiIsIkB1c2UgJ3Nhc3M6bWF0aCcgYXMgbWF0aDtcbkBpbXBvcnQgJy4uL21hdHJpeC1jb21tb24uc2Nzcyc7XG4ubWF0cml4Lm1pbmkge1xuICAgIC5oZWFkZXIge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cbiAgICAudGFjdGljIHtcbiAgICAgICAgcGFkZGluZzogMCA1cHg7XG4gICAgfVxuICAgIC50YWN0aWMuaGVhZGVyIHtcbiAgICAgICAgcGFkZGluZzogNXB4O1xuICAgIH1cbiAgICAudGFjdGljLmJvZHkge1xuICAgICAgICBwYWRkaW5nLXRvcDogNXB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICAvLyBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAvLyBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIC8vIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgICAgICAuY2VsbC1jb250YWluZXIge1xuICAgICAgICAgICAgbWFyZ2luLXJpZ2h0OiBtYXRoLmRpdigkc2l6ZXVuaXQsIDYpO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogbWF0aC5kaXYoJHNpemV1bml0LCA2KTtcbiAgICAgICAgICAgICY6bm90KC5zdXBlcnRlY2huaXF1ZS1ncm91cCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIG1hcmdpbjogMCAycHggMCAycHg7XG4gICAgICAgICAgICAmLnN1cGVydGVjaG5pcXVlLWdyb3VwIHtcbiAgICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kOiBjb2xvcihwYW5lbC1saWdodCk7XG4gICAgICAgICAgICAgICAgLy8gYm9yZGVyLXRvcDogMXB4IHNvbGlkIGRhcmtlbihjb2xvcihwYW5lbC1saWdodCksIDUlKTtcbiAgICAgICAgICAgICAgICAvLyBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2VuKGNvbG9yKHBhbmVsLWxpZ2h0KSwgNSUpO1xuICAgICAgICAgICAgICAgIC8vIHBhZGRpbmctdG9wOiAzcHg7XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zcHgpO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBvbi1jb2xvci1kZWVtcGhhc2lzKGJvZHkpIGluc2V0O1xuICAgICAgICAgICAgICAgIC8vIHBhZGRpbmc6IDNweCAwIDAgM3B4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAxcHggKyBtYXRoLmRpdigkc2l6ZXVuaXQsIDIpO1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMXB4ICsgbWF0aC5kaXYoJHNpemV1bml0LCAyKTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogbWF0aC5kaXYoJHNpemV1bml0LCAzKTtcbiAgICAgICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiBtYXRoLmRpdigkc2l6ZXVuaXQsIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5zdXBlcnRlY2huaXF1ZSB7XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"] + }); +} + +/***/ }), + +/***/ 31132: +/*!*************************************************************!*\ + !*** ./src/app/matrix/matrix-side/matrix-side.component.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MatrixSideComponent: () => (/* binding */ MatrixSideComponent) +/* harmony export */ }); +/* harmony import */ var _matrix_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../matrix-common */ 95175); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/config.service */ 43696); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../technique-cell/technique-cell.component */ 62460); +/* harmony import */ var _tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../tactic-cell/tactic-cell.component */ 39132); + + + + + + + +const _c0 = (a0, a1) => ({ + disabled: a0, + expanded: a1 +}); +function MatrixSideComponent_td_3_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 6)(1, "a", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function MatrixSideComponent_td_3_Template_a_click_1_listener() { + const tactic_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTacticClick(tactic_r2)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](2, "tactic-cell", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const tactic_r2 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngStyle", ctx_r2.getTacticBackground()); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("viewModel", ctx_r2.viewModel)("tactic", tactic_r2); + } +} +function MatrixSideComponent_td_5_ng_container_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "\u00A0techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + } +} +function MatrixSideComponent_td_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](2, MatrixSideComponent_td_5_ng_container_2_Template, 2, 0, "ng-container", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tactic_r4 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngStyle", ctx_r2.getTacticBackground()); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate1"](" ", ctx_r2.filterTechniques(tactic_r4.techniques, tactic_r4).length, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx_r2.viewModel.layout.showName); + } +} +function MatrixSideComponent_td_8_tr_2_ng_container_2_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](1, "technique-cell", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_leftclick_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueLeftClick($event, technique_r6, tactic_r7)); + })("rightclick", function MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_rightclick_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueRightClick($event, technique_r6)); + })("highlight", function MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_highlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueHighlight($event, technique_r6, tactic_r7)); + })("unhighlight", function MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_unhighlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r7)("technique", technique_r6)("viewModel", ctx_r2.viewModel)("matrix", ctx_r2.matrix); + } +} +function MatrixSideComponent_td_8_tr_2_ng_template_3_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "table", 20)(1, "tr")(2, "td", 21)(3, "technique-cell", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_leftclick_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueLeftClick($event, technique_r6, tactic_r7)); + })("rightclick", function MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_rightclick_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueRightClick($event, technique_r6)); + })("highlight", function MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_highlight_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueHighlight($event, technique_r6, tactic_r7)); + })("unhighlight", function MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_unhighlight_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r8); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r7)("technique", technique_r6)("viewModel", ctx_r2.viewModel)("matrix", ctx_r2.matrix); + } +} +function MatrixSideComponent_td_8_tr_2_td_5_Template(rf, ctx) { + if (rf & 1) { + const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function MatrixSideComponent_td_8_tr_2_td_5_Template_td_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r9); + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onToggleSubtechniquesVisible(technique_r6, tactic_r7)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](1, "div", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnamespaceSVG"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](2, "svg", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](3, "path", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnamespaceHTML"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "div", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](5, "="); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "div", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnamespaceSVG"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](7, "svg", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelement"](8, "path", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const technique_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassMapInterpolate2"]("sidebar sidebar--", tactic_r7.id, "--", technique_r6.id, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction2"](5, _c0, ctx_r2.applyControls(technique_r6.subtechniques, tactic_r7).length == 0, ctx_r2.viewModel.getTechniqueVM(technique_r6, tactic_r7).showSubtechniques && ctx_r2.applyControls(technique_r6.subtechniques, tactic_r7).length > 0)); + } +} +function MatrixSideComponent_td_8_tr_2_div_8_Template(rf, ctx) { + if (rf & 1) { + const _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 29)(1, "technique-cell", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("leftclick", function MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_leftclick_1_listener($event) { + const subtechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10).$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueLeftClick($event, subtechnique_r11, tactic_r7)); + })("rightclick", function MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_rightclick_1_listener($event) { + const subtechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueRightClick($event, subtechnique_r11)); + })("highlight", function MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_highlight_1_listener($event) { + const subtechnique_r11 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10).$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueHighlight($event, subtechnique_r11, tactic_r7)); + })("unhighlight", function MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_unhighlight_1_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r10); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r2.onTechniqueUnhighlight($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const subtechnique_r11 = ctx.$implicit; + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("tactic", tactic_r7)("technique", subtechnique_r11)("viewModel", ctx_r2.viewModel)("matrix", ctx_r2.matrix); + } +} +function MatrixSideComponent_td_8_tr_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "tr", 13)(1, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](2, MatrixSideComponent_td_8_tr_2_ng_container_2_Template, 2, 4, "ng-container", 14)(3, MatrixSideComponent_td_8_tr_2_ng_template_3_Template, 4, 4, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](5, MatrixSideComponent_td_8_tr_2_td_5_Template, 9, 8, "td", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "td", 16)(7, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](8, MatrixSideComponent_td_8_tr_2_div_8_Template, 2, 4, "div", 18); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const technique_r6 = ctx.$implicit; + const supertechnique_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵreference"](4); + const tactic_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", technique_r6.subtechniques.length == 0)("ngIfElse", supertechnique_r12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", technique_r6.subtechniques.length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("hidden", !ctx_r2.viewModel.getTechniqueVM(technique_r6, tactic_r7).showSubtechniques); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx_r2.applyControls(technique_r6.subtechniques, tactic_r7)); + } +} +function MatrixSideComponent_td_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "td", 2)(1, "table", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](2, MatrixSideComponent_td_8_tr_2_Template, 9, 6, "tr", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const tactic_r7 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx_r2.applyControls(tactic_r7.techniques, tactic_r7)); + } +} +class MatrixSideComponent extends _matrix_common__WEBPACK_IMPORTED_MODULE_0__.MatrixCommon { + constructor(configService, viewModelsService) { + super(configService, viewModelsService); + } + ngOnInit() { + // intentionally left blank + } + static #_ = this.ɵfac = function MatrixSideComponent_Factory(t) { + return new (t || MatrixSideComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_1__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({ + type: MatrixSideComponent, + selectors: [["matrix-side"]], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵInheritDefinitionFeature"]], + decls: 9, + vars: 3, + consts: [["supertechnique", ""], [1, "matrix", "side"], [1, "tactic"], ["class", "tactic name", 3, "ngStyle", 4, "ngFor", "ngForOf"], ["class", "tactic count", 3, "ngStyle", 4, "ngFor", "ngForOf"], ["class", "tactic", 4, "ngFor", "ngForOf"], [1, "tactic", "name", 3, "ngStyle"], [3, "click"], [3, "viewModel", "tactic"], [1, "tactic", "count", 3, "ngStyle"], [4, "ngIf"], [1, "techniques-table"], ["class", "technique-row", 4, "ngFor", "ngForOf"], [1, "technique-row"], [4, "ngIf", "ngIfElse"], [3, "ngClass", "class", "click", 4, "ngIf"], [1, "subtechniques-td"], [1, "subtechniques"], ["class", "subtechnique", 4, "ngFor", "ngForOf"], [3, "leftclick", "rightclick", "highlight", "unhighlight", "tactic", "technique", "viewModel", "matrix"], [1, "supertechnique"], [1, "technique"], [3, "click", "ngClass"], [1, "angle", "top"], ["width", "12px", "height", "12px"], ["d", "M0 12H12V0Z"], [1, "handle"], [1, "angle", "bottom"], ["d", "M0 0H12V12Z"], [1, "subtechnique"]], + template: function MatrixSideComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "table", 1)(1, "thead")(2, "tr", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](3, MatrixSideComponent_td_3_Template, 3, 3, "td", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](5, MatrixSideComponent_td_5_Template, 3, 3, "td", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "tbody")(7, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](8, MatrixSideComponent_td_8_Template, 3, 1, "td", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngForOf", ctx.filterTactics(ctx.matrix.tactics)); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_6__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgIf, _angular_common__WEBPACK_IMPORTED_MODULE_6__.NgStyle, _technique_cell_technique_cell_component__WEBPACK_IMPORTED_MODULE_3__.TechniqueCellComponent, _tactic_cell_tactic_cell_component__WEBPACK_IMPORTED_MODULE_4__.TacticCellComponent], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.matrix {\n border-collapse: collapse;\n line-height: 14px;\n}\n\n@media print {\n .matrix {\n border-collapse: collapse;\n line-height: 12px;\n }\n}\n.matrix.side .tactic {\n padding: 2px;\n width: 1%;\n vertical-align: top;\n}\n.matrix.side .tactic.name, .matrix.side .tactic.count {\n text-align: center;\n font-size: 16px;\n}\n.matrix.side .tactic.name {\n cursor: pointer;\n font-weight: bold;\n vertical-align: bottom;\n position: sticky;\n top: 0.05px;\n z-index: 9999;\n}\n@media print {\n .matrix.side .tactic.name {\n font-size: 8px;\n }\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic.name {\n background-color: #21212c;\n }\n}\n.theme-override-dark .matrix.side .tactic.name {\n background-color: #21212c;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic.name {\n background-color: white;\n }\n}\n.theme-override-light .matrix.side .tactic.name {\n background-color: white;\n}\n.matrix.side .tactic.count {\n border-width: 0 0 1px 0;\n border-style: solid;\n font-size: 13px;\n padding-bottom: 5px;\n margin-bottom: 5px;\n position: sticky;\n top: 35px;\n z-index: 9999;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic.count {\n border-color: black;\n }\n}\n.theme-override-light .matrix.side .tactic.count {\n border-color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic.count {\n border-color: white;\n }\n}\n.theme-override-dark .matrix.side .tactic.count {\n border-color: white;\n}\n@media print {\n .matrix.side .tactic.count {\n font-size: 8px;\n }\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic.count {\n background-color: #21212c;\n }\n}\n.theme-override-dark .matrix.side .tactic.count {\n background-color: #21212c;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic.count {\n background-color: white;\n }\n}\n.theme-override-light .matrix.side .tactic.count {\n background-color: white;\n}\n.matrix.side .tactic .techniques-table {\n border-collapse: collapse;\n width: 100%;\n}\n.matrix.side .tactic .techniques-table tr,\n.matrix.side .tactic .techniques-table td {\n padding: 0;\n}\n.matrix.side .tactic .techniques-table tr {\n height: 1px;\n}\n.matrix.side .tactic .supertechnique {\n border-collapse: collapse;\n width: 100%;\n padding: 0;\n margin: 0;\n}\n.matrix.side .tactic .supertechnique td {\n padding: 0;\n vertical-align: top;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic .supertechnique td.technique {\n box-shadow: 0 0 0 1px #6b7279 inset;\n }\n}\n.theme-override-light .matrix.side .tactic .supertechnique td.technique {\n box-shadow: 0 0 0 1px #6b7279 inset;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic .supertechnique td.technique {\n box-shadow: 0 0 0 1px #3f3f56 inset;\n }\n}\n.theme-override-dark .matrix.side .tactic .supertechnique td.technique {\n box-shadow: 0 0 0 1px #3f3f56 inset;\n}\n.matrix.side .tactic .subtechniques {\n display: flex;\n flex-direction: column;\n height: 100%;\n margin-left: -1px;\n white-space: nowrap;\n vertical-align: top;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic .subtechniques {\n border-left: 2px solid #6b7279;\n }\n}\n.theme-override-light .matrix.side .tactic .subtechniques {\n border-left: 2px solid #6b7279;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic .subtechniques {\n border-left: 2px solid #3f3f56;\n }\n}\n.theme-override-dark .matrix.side .tactic .subtechniques {\n border-left: 2px solid #3f3f56;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic .subtechniques {\n box-shadow: 0 0 0 1px #6b7279 inset;\n }\n}\n.theme-override-light .matrix.side .tactic .subtechniques {\n box-shadow: 0 0 0 1px #6b7279 inset;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic .subtechniques {\n box-shadow: 0 0 0 1px #3f3f56 inset;\n }\n}\n.theme-override-dark .matrix.side .tactic .subtechniques {\n box-shadow: 0 0 0 1px #3f3f56 inset;\n}\n.matrix.side .tactic .subtechniques.hidden {\n display: none;\n}\n.matrix.side .tactic .subtechniques .subtechnique {\n height: 100%;\n flex-grow: 1;\n}\n.matrix.side .tactic .handle {\n font-family: roboto-regular;\n text-align: center;\n vertical-align: middle;\n transform: rotate(-90deg);\n width: 12px;\n height: 12px;\n font-size: 16px;\n line-height: 12px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .tactic .handle {\n color: #f2f2f2;\n }\n}\n.theme-override-light .matrix.side .tactic .handle {\n color: #f2f2f2;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .tactic .handle {\n color: white;\n }\n}\n.theme-override-dark .matrix.side .tactic .handle {\n color: white;\n}\n.matrix.side .sidebar {\n min-width: 8px;\n width: 12px;\n padding: 0;\n cursor: pointer;\n position: relative;\n vertical-align: middle;\n background: #6b7279;\n}\n.matrix.side .sidebar .angle {\n display: none;\n}\n.matrix.side .sidebar.disabled {\n pointer-events: none;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .sidebar.disabled {\n background: #aaaaaa;\n }\n}\n.theme-override-light .matrix.side .sidebar.disabled {\n background: #aaaaaa;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .sidebar.disabled {\n background: rgba(255, 255, 255, 0.25);\n }\n}\n.theme-override-dark .matrix.side .sidebar.disabled {\n background: rgba(255, 255, 255, 0.25);\n}\n.matrix.side .sidebar.expanded .angle {\n height: 12px;\n display: block;\n position: absolute;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .matrix.side .sidebar.expanded .angle {\n background: white;\n }\n}\n.theme-override-light .matrix.side .sidebar.expanded .angle {\n background: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .matrix.side .sidebar.expanded .angle {\n background: #21212c;\n }\n}\n.theme-override-dark .matrix.side .sidebar.expanded .angle {\n background: #21212c;\n}\n.matrix.side .sidebar.expanded .angle svg {\n fill: #6b7279;\n}\n.matrix.side .sidebar.expanded .angle.top {\n top: 0;\n}\n.matrix.side .sidebar.expanded .angle.bottom {\n bottom: 0;\n}\n@media print {\n .matrix.side .sidebar {\n display: none;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1jb21tb24uc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1zaWRlL21hdHJpeC1zaWRlLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDSkE7RUFDSSx5QkFBQTtFQUNBLGlCQUxPO0FDVVg7O0FERkE7RUFDSTtJQUNJLHlCQUFBO0lBQ0EsaUJBVlM7RUNlZjtBQUNGO0FBWEk7RUFDSSxZQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0FBYVI7QUFaUTtFQUVJLGtCQUFBO0VBQ0EsZUFBQTtBQWFaO0FBWFE7RUFDSSxlQUFBO0VBQ0EsaUJBQUE7RUFFQSxzQkFBQTtFQUlBLGdCQUFBO0VBQ0EsV0FBQTtFQUNBLGFBQUE7QUFTWjtBQWRZO0VBTEo7SUFNUSxjQUFBO0VBaUJkO0FBQ0Y7QUZvS1E7RUFISjtJQUlRLHlCRWxMc0Q7RUFpQmhFO0FBQ0Y7QUZtS0k7RUFHSSx5QkV4TDBEO0FBcUJsRTtBRnlJUTtFQUhKO0lBSVEsdUJFOUp1RDtFQXdCakU7QUFDRjtBRndJSTtFQUdJLHVCRXBLMkQ7QUE0Qm5FO0FBMUJRO0VBQ0ksdUJBQUE7RUFDQSxtQkFBQTtFQUNBLGVBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0VBS0EsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsYUFBQTtBQXdCWjtBRnVIUTtFQUhKO0lBSVEsbUJFdEp3QztFQWtDbEQ7QUFDRjtBRnNISTtFQUdJLG1CRTVKNEM7QUFzQ3BEO0FGa0lRO0VBSEo7SUFJUSxtQkV6SytDO0VBMEN6RDtBQUNGO0FGaUlJO0VBR0ksbUJFL0ttRDtBQThDM0Q7QUE3Q1k7RUFQSjtJQVFRLGNBQUE7RUFnRGQ7QUFDRjtBRnFIUTtFQUhKO0lBSVEseUJFbEtzRDtFQWdEaEU7QUFDRjtBRm9ISTtFQUdJLHlCRXhLMEQ7QUFvRGxFO0FGMEZRO0VBSEo7SUFJUSx1QkU5SXVEO0VBdURqRTtBQUNGO0FGeUZJO0VBR0ksdUJFcEoyRDtBQTJEbkU7QUF6RFE7RUFDSSx5QkFBQTtFQUNBLFdBQUE7QUEyRFo7QUExRFk7O0VBRUksVUFBQTtBQTREaEI7QUExRFk7RUFDSSxXQUFBO0FBNERoQjtBQXhEUTtFQUNJLHlCQUFBO0VBQ0EsV0FBQTtFQUNBLFVBQUE7RUFDQSxTQUFBO0FBMERaO0FBeERZO0VBQ0ksVUFBQTtFQUNBLG1CQUFBO0FBMERoQjtBRjZEUTtFQUhKO0lBSVEsbUNFbkg4QztFQXlEeEQ7QUFDRjtBRjRESTtFQUdJLG1DRXpIa0Q7QUE2RDFEO0FGd0VRO0VBSEo7SUFJUSxtQ0V0SXlGO0VBaUVuRztBQUNGO0FGdUVJO0VBR0ksbUNFNUk2RjtBQXFFckc7QUFqRVE7RUFRSSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSxZQUFBO0VBQ0EsaUJBQUE7RUFDQSxtQkFBQTtFQUNBLG1CQUFBO0FBNERaO0FGcUNRO0VBSEo7SUFJUSw4QkU5R3VDO0VBNEVqRDtBQUNGO0FGb0NJO0VBR0ksOEJFcEgyQztBQWdGbkQ7QUZnRFE7RUFISjtJQUlRLDhCRWpJNEU7RUFvRnRGO0FBQ0Y7QUYrQ0k7RUFHSSw4QkV2SWdGO0FBd0Z4RjtBRnFCUTtFQUhKO0lBSVEsbUNFN0dzQztFQTJGaEQ7QUFDRjtBRm9CSTtFQUdJLG1DRW5IMEM7QUErRmxEO0FGZ0NRO0VBSEo7SUFJUSxtQ0VoSWlGO0VBbUczRjtBQUNGO0FGK0JJO0VBR0ksbUNFdElxRjtBQXVHN0Y7QUF0R1k7RUFDSSxhQUFBO0FBd0doQjtBQTdGWTtFQUNJLFlBQUE7RUFDQSxZQUFBO0FBK0ZoQjtBQTNGUTtFQUVJLDJCQUFBO0VBQ0Esa0JBQUE7RUFDQSxzQkFBQTtFQUNBLHlCQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7QUE0Rlo7QUZaUTtFQUhKO0lBSVEsY0V6RmlDO0VBd0czQztBQUNGO0FGYkk7RUFHSSxjRS9GcUM7QUE0RzdDO0FGRFE7RUFISjtJQUlRLFlFNUd3RDtFQWdIbEU7QUFDRjtBRkZJO0VBR0ksWUVsSDREO0FBb0hwRTtBQXpHSTtFQUNJLGNBQUE7RUFDQSxXQUFBO0VBQ0EsVUFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLHNCQUFBO0VBQ0EsbUJBQUE7QUEyR1I7QUExR1E7RUFDSSxhQUFBO0FBNEdaO0FBMUdRO0VBRUksb0JBQUE7QUEyR1o7QUYzQ1E7RUFISjtJQUlRLG1CRWxFc0M7RUFnSGhEO0FBQ0Y7QUY1Q0k7RUFHSSxtQkV4RTBDO0FBb0hsRDtBRmhDUTtFQUhKO0lBSVEscUNFckYrQztFQXdIekQ7QUFDRjtBRmpDSTtFQUdJLHFDRTNGbUQ7QUE0SDNEO0FBekhRO0VBRUksWUFBQTtFQUNBLGNBQUE7RUFDQSxrQkFBQTtBQTBIWjtBRmhFUTtFQUhKO0lBSVEsaUJFOURzQztFQWlJaEQ7QUFDRjtBRmpFSTtFQUdJLGlCRXBFMEM7QUFxSWxEO0FGckRRO0VBSEo7SUFJUSxtQkVqRm1EO0VBeUk3RDtBQUNGO0FGdERJO0VBR0ksbUJFdkZ1RDtBQTZJL0Q7QUF6SVk7RUFDSSxhQUFBO0FBMkloQjtBQXpJWTtFQUNJLE1BQUE7QUEySWhCO0FBeklZO0VBQ0ksU0FBQTtBQTJJaEI7QUF4SVE7RUE5Qko7SUErQlEsYUFBQTtFQTJJVjtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiJGNvbHVtbi1ob3Zlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpO1xuJGRpc2FibGVkLWNvbG9yOiBkYXJrZW4oJGNvbHVtbi1ob3Zlci1jb2xvciwgMjAlKTtcblxuLy8gQVRUJkNLIEJyYW5kIGNvbG9yc1xuJGF0dGFjay1jb2xvcnM6IChcbiAgICBhdHRhY2stb3JhbmdlOiAjYzYzZjFmLFxuICAgIGF0dGFjay1ibHVlOiAjMDYyZjRmLFxuKTtcblxuLyoqXG4gKiBDb2xvcnMgdXNlZCBhY3Jvc3MgdGhlIE5hdmlnYXRvci4gU2hhcmVkIGJ5IHRoZSBBVFQmQ0sgV2Vic2l0ZS5cbiAqIEZvciBlYWNoIGNvbG9yLXBhaXI6XG4gKiAgIC0gXCJjb2xvclwiIHJlZmVycyB0byB0aGUgY29sb3IgaXRzZWxmXG4gKiAgIC0gXCJvbi1jb2xvclwiIHJlZmVycyB0byB0aGUgbW9zdCByZWFkYWJsZSB0ZXh0LWNvbG9yIHRvIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogTm90ZTogc29tZSBjb2xvcnMgZG9uJ3QgZGVmaW5lIG9uLWNvbG9ycy4gVGhpcyBpcyBiZWNhdXNlLCBmb3IgdGhlc2UgY29sb3JzLCB0aGV5IGFyZW4ndCBpbnRlbmRlZCB0b1xuICogYXBwZWFyIHdpdGggaW5uZXIgY29udGVudC4gRm9yIGV4YW1wbGUsIFwibGlua1wiIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgbGluayB0ZXh0LCB3aGljaCBpbmhlcmVudGx5XG4gKiBjYW5ub3QgaGF2ZSBpbm5lciB0ZXh0LlxuICovXG4kY29sb3JzOiAoXG4gICAgcHJpbWFyeTogKFxuICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLW9yYW5nZSksXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vdXNlZCBmb3IgaGVhZGVyIGFuZCBzb21lIG5hdiBlbGVtZW50c1xuICAgIHNlY29uZGFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1ibHVlKSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvL3VzZWQgZm9yIGZvb3RlciBhbmQgc29tZSBidXR0b25zXG4gICAgYm9keTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgLy9wcmltYXJ5IHBhZ2UgYm9keVxuICAgIGxpZ2h0OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICBkYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjMDgwODBiLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvLyBkYXJrIHRoZW1lIGNvbG9ycyB2YXJpYXRpb25zIDAtMyAoZnJvbSBkYXJrZXN0IHRvIGxpZ2h0ZXN0KVxuICAgIGRhcmstMTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMxYTFhMjMsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay0yOiAoXG4gICAgICAgIGNvbG9yOiAjMmUyZTNmLFxuICAgICAgICBvbi1jb2xvcjogI2ZhNjM0MSxcbiAgICApLFxuICAgIC8vIGFjY2VudCBkYXJrIGNvbG9yIHNjaGVtZSAodXNlZCBmb3IgOmhvdmVyIHNlbGVjdG9ycylcbiAgICBkYXJrLTM6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjM2YzZjU2LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstNDogKFxuICAgICAgICBjb2xvcjogIzRjNGM2OCxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgZGFyay1kaXNhYmxlZDogKFxuICAgICAgICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gMjUlKSxcbiAgICApLFxuICAgIGRhcmstbGluazogKFxuICAgICAgICBjb2xvcjogIzc1ODhlOCxcbiAgICApLFxuICAgIGRhcmstbGluay1hY3RpdmU6IChcbiAgICAgICAgY29sb3I6ICNlODQ3ZTgsXG4gICAgKSxcbiAgICBsaW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNGY3Y2FjLFxuICAgICksXG4gICAgLy8gaHlwZXJsaW5rc1xuICAgIG1hdHJpeC1oZWFkZXI6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBncmF5LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vIGNvbG9yIG9mIG1hdHJpeCBoZWFkZXJzXG4gICAgY2VsbC1oaWdobGlnaHQtY29sb3I6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoOTYsIDE5NywgMjU1KSxcbiAgICAgICAgKSxcbiAgICBjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNDY0ZGZmLFxuICAgICksXG4gICAgaG92ZXItY2VsbC1mb250LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMCwgMCwgMCksXG4gICAgKSxcbiAgICBwYW5lbC1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjZGRkLFxuICAgICksXG4gICAgcGFuZWwtbGlnaHQ6IChcbiAgICAgICAgY29sb3I6IGxpZ2h0ZW4oI2RkZCwgOCUpLFxuICAgICksXG4gICAgdGFiLXRleHQtY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM1NTUsXG4gICAgKSxcbiAgICBidXR0b24tZGFyazogKFxuICAgICAgICBjb2xvcjogI2I4YjhiOCxcbiAgICApLFxuICAgIC8vYm9vdHN0cmFwIGNvbG9yc1xuICAgIGJvb3RzdHJhcC1wcmltYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzQyOGJjYSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBib290c3RyYXAtc3VjY2VzczogKFxuICAgICAgICBjb2xvcjogIzVjYjg1YyxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWRhbmdlcjogKFxuICAgICAgICBjb2xvcjogI2Q5NTM0ZixcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLXdhcm5pbmc6IChcbiAgICAgICAgY29sb3I6ICNmMGFkNGUsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1pbmZvOiAoXG4gICAgICAgIGNvbG9yOiAjNWJjMGRlLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbik7XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBjb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ2NvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgZ2V0IGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRoZSBjb2xvciwgZm9yIHBhdHRlcm5pbmdcbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGRhcmssIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBsaWdodGVyLlxuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgbGlnaHQsIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBkYXJrZXIuXG4vLyBjb250cmFzdCwgYW4gb3B0aW9uYWwgYXJndW1lbnQsIG11bHRpcGxpZXMgdG8gY3JlYXRlIGEgbW9yZSBkaXN0YW50IG9yIHNpbWlsYXIgY29sb3IuID4xIGlzIG1vcmUgZGlzdGFudCwgPDEgaXMgbW9yZSBzaW1pbGFyLlxuQGZ1bmN0aW9uIGNvbG9yLWFsdGVybmF0ZSgkbmFtZSwgJGNvbnRyYXN0OiAxKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgJHdlaWdodDogJGNvbnRyYXN0ICogNSUpO1xufVxuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIG9uLWNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gb24tY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdvbi1jb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbGVzcyBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIG9uLWNvbG9yKCRuYW1lKSk7XG59XG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBkZWVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZGVlbXBoYXNpemVkIG9uLWNvbG9yIGlzIG1vcmUgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1kZWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoY29sb3IoJG5hbWUpLCBvbi1jb2xvcigkbmFtZSksIDI1JSk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgY29tcHV0ZSBhIGJvcmRlciBjb2xvciBmb3IgdGhlIGNvbG9yXG5AZnVuY3Rpb24gYm9yZGVyLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgMTIuNSUpO1xuICAgIC8vIEByZXR1cm4gcmdiYShpbnZlcnQoY29sb3IoJG5hbWUpKSwgMC4xMjUpO1xufVxuXG4vLyBJTVBPUlRBTlQgVVNBR0UgTk9URTpcbi8vIHRvIHVzZSBhZGFwdGl2ZSBjb2xvcnMsIHlvdSBNVVNUIGRpc2FibGUgdmlldyBlbmNhcHN1bGF0aW9uIG9uIHRoZSBjb21wb25lbnRcbi8vIHlvdSdyZSBhcHBseWluZyB0aGUgc3R5bGVzIHdpdGhpbi4gT3RoZXJ3aXNlIGFuY2VzdG9yIGNsYXNzZXMgY2Fubm90IGJlIGFzc2Vzc2VkXG4vLyBieSB0aGUgbWl4aW5zIHRvIGRldGVybWluZSB0aGUgYXBwIHRoZW1lIGNvbmZpZ3VyYXRpb24uXG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgbGlnaHQgYW5kIGRhcmsgdGhlbWVzXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvcigkcHJvcGVydHksICRsaWdodC12YWx1ZSwgJGRhcmstdmFsdWUpIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSk7XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1saWdodCAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBsaWdodCB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICB9XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1kYXJrICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGRhcmsgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJy4uLy4uL2NvbG9ycy5zY3NzJztcblxuJHNpemV1bml0OiAxNHB4O1xuJHNpemV1bml0X3ByaW50OiAxMnB4O1xuXG4ubWF0cml4IHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZXVuaXQ7XG59XG5cbkBtZWRpYSBwcmludCB7XG4gICAgLm1hdHJpeCB7XG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZXVuaXRfcHJpbnQ7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnLi4vbWF0cml4LWNvbW1vbi5zY3NzJztcbi5tYXRyaXguc2lkZSB7XG4gICAgLy8gdGhlYWQge1xuICAgIC8vIC8vICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihtYXRyaXgtaGVhZGVyKTtcbiAgICAvLyAvLyAgICAgY29sb3I6IG9uLWNvbG9yKG1hdHJpeC1oZWFkZXIpO1xuICAgIC8vICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoXCJiYWNrZ3JvdW5kLWNvbG9yXCIsIGxpZ2h0ZW4oY29sb3IoZGFyay0xKSwgMyUpKTtcbiAgICAvLyB9XG4gICAgLy8gd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAudGFjdGljIHtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICB3aWR0aDogMSU7XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgICYubmFtZSxcbiAgICAgICAgJi5jb3VudCB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBmb250LXNpemU6ICRzaXpldW5pdCArIDJweDtcbiAgICAgICAgfVxuICAgICAgICAmLm5hbWUge1xuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgICAgICAvLyBoZWlnaHQ6ICgoJHNpemV1bml0ICsgMikgKiAzKTtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgICAgICAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogJHNpemV1bml0X3ByaW50IC0gNHB4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgICAgICAgIHRvcDogMC4wNXB4O1xuICAgICAgICAgICAgei1pbmRleDogOTk5OTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGxpZ2h0ZW4oY29sb3IoZGFyay0xKSwgMyUpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCB3aGl0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgJi5jb3VudCB7XG4gICAgICAgICAgICBib3JkZXItd2lkdGg6IDAgMCAxcHggMDtcbiAgICAgICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICAgICAgICBmb250LXNpemU6ICRzaXpldW5pdCAtIDFweDtcbiAgICAgICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm9yZGVyLWNvbG9yJywgYmxhY2ssIHdoaXRlKTtcbiAgICAgICAgICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAkc2l6ZXVuaXRfcHJpbnQgLSA0cHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICAgICAgdG9wOiAzNXB4O1xuICAgICAgICAgICAgei1pbmRleDogOTk5OTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGxpZ2h0ZW4oY29sb3IoZGFyay0xKSwgMyUpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCB3aGl0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLnRlY2huaXF1ZXMtdGFibGUge1xuICAgICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgdHIsXG4gICAgICAgICAgICB0ZCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5zdXBlcnRlY2huaXF1ZSB7XG4gICAgICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAgICAgICB0ZCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuXG4gICAgICAgICAgICAgICAgJi50ZWNobmlxdWUge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdXRsaW5lOiAxcHggc29saWQgb24tY29sb3ItZGVlbXBoYXNpcyhib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3V0bGluZS1vZmZzZXQ6IC0xcHg7XG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdib3gtc2hhZG93JywgMCAwIDAgMXB4IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSkgaW5zZXQsIDAgMCAwIDFweCBjb2xvcihkYXJrLTMpIGluc2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnN1YnRlY2huaXF1ZXMge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JvcmRlci1sZWZ0JywgMnB4IHNvbGlkIG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSksIDJweCBzb2xpZCBjb2xvcihkYXJrLTMpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdib3gtc2hhZG93JywgMCAwIDAgMXB4IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSkgaW5zZXQsIDAgMCAwIDFweCBjb2xvcihkYXJrLTMpIGluc2V0KTtcbiAgICAgICAgICAgICYuaGlkZGVuIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBleHBhbmQgdG8gZW50aXJlIGhlaWdodCBvZiByb3cgaWYgaXQncyBzbWFsbGVyIHRoYW4gc3VwZXJ0ZWNobmlxdWVcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcblxuICAgICAgICAgICAgLnN1YnRlY2huaXF1ZSB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIGZsZXgtZ3JvdzogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC5oYW5kbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2NvbG9yJywgY29sb3ItYWx0ZXJuYXRlKGJvZHkpLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgICAgICBmb250LWZhbWlseTogcm9ib3RvLXJlZ3VsYXI7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTtcbiAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEycHg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnNpZGViYXIge1xuICAgICAgICBtaW4td2lkdGg6IDhweDtcbiAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgICBiYWNrZ3JvdW5kOiBvbi1jb2xvci1kZWVtcGhhc2lzKGJvZHkpO1xuICAgICAgICAuYW5nbGUge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgICAgICAmLmRpc2FibGVkIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgI2FhYWFhYSwgY29sb3IoZGFyay1kaXNhYmxlZCkpO1xuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIH1cbiAgICAgICAgJi5leHBhbmRlZCAuYW5nbGUge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQnLCBjb2xvcihib2R5KSwgbGlnaHRlbihjb2xvcihkYXJrLTEpLCAzJSkpO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgICBzdmcge1xuICAgICAgICAgICAgICAgIGZpbGw6IG9uLWNvbG9yLWRlZW1waGFzaXMoYm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAmLnRvcCB7XG4gICAgICAgICAgICAgICAgdG9wOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJi5ib3R0b20ge1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 39132: +/*!*************************************************************!*\ + !*** ./src/app/matrix/tactic-cell/tactic-cell.component.ts ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TacticCellComponent: () => (/* binding */ TacticCellComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); + + + +function TacticCellComponent_ng_container_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r0.tactic.attackID); + } +} +function TacticCellComponent_div_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelement"](0, "div", 3); + } +} +function TacticCellComponent_ng_container_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtextInterpolate"](ctx_r0.tactic.name); + } +} +class TacticCellComponent { + constructor() { + // intentionally left blank + } + ngOnInit() { + // intentionally left blank + } + static #_ = this.ɵfac = function TacticCellComponent_Factory(t) { + return new (t || TacticCellComponent)(); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineComponent"]({ + type: TacticCellComponent, + selectors: [["tactic-cell"]], + inputs: { + tactic: "tactic", + viewModel: "viewModel" + }, + decls: 4, + vars: 9, + consts: [["matTooltipPosition", "above", 1, "tactic-cell", "noselect", 3, "matTooltip", "matTooltipDisabled"], [4, "ngIf"], ["class", "id-name-break", 4, "ngIf"], [1, "id-name-break"]], + template: function TacticCellComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementStart"](0, "div", 0); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵtemplate"](1, TacticCellComponent_ng_container_1_Template, 2, 1, "ng-container", 1)(2, TacticCellComponent_div_2_Template, 1, 0, "div", 2)(3, TacticCellComponent_ng_container_3_Template, 2, 1, "ng-container", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵelementEnd"](); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵclassProp"]("bordered", !(ctx.viewModel.layout.showID || ctx.viewModel.layout.showName))("mini", ctx.viewModel.layout.layout == "mini"); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("matTooltip", ctx.tactic.attackID + ": " + ctx.tactic.name)("matTooltipDisabled", ctx.viewModel.layout.showID || ctx.viewModel.layout.showName); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showID); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showID && ctx.viewModel.layout.showName); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showName); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_1__.NgIf, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_2__.MatTooltip], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.matrix {\n border-collapse: collapse;\n line-height: 14px;\n}\n\n@media print {\n .matrix {\n border-collapse: collapse;\n line-height: 12px;\n }\n}\n.tactic-cell {\n padding-top: 3px;\n box-sizing: border-box;\n min-height: 14px;\n}\n.tactic-cell:not(.mini) {\n min-width: 42px;\n}\n.tactic-cell.mini {\n width: 14px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tactic-cell.mini {\n background: black;\n }\n}\n.theme-override-light .tactic-cell.mini {\n background: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tactic-cell.mini {\n background: white;\n }\n}\n.theme-override-dark .tactic-cell.mini {\n background: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tactic-cell.bordered {\n border: 1px solid #dfdfdf;\n }\n}\n.theme-override-light .tactic-cell.bordered {\n border: 1px solid #dfdfdf;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tactic-cell.bordered {\n border: 1px solid white;\n }\n}\n.theme-override-dark .tactic-cell.bordered {\n border: 1px solid white;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L21hdHJpeC1jb21tb24uc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L3RhY3RpYy1jZWxsL3RhY3RpYy1jZWxsLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FBQUE7Ozs7Ozs7O0VBQUE7QUNKQTtFQUNJLHlCQUFBO0VBQ0EsaUJBTE87QUNtQlg7O0FEWEE7RUFDSTtJQUNJLHlCQUFBO0lBQ0EsaUJBVlM7RUN3QmY7QUFDRjtBQTFCQTtFQUNJLGdCQUFBO0VBQ0Esc0JBQUE7RUFRQSxnQkRWTztBQytCWDtBQTVCSTtFQUNJLGVBQUE7QUE4QlI7QUE1Qkk7RUFFSSxXRFJHO0FDcUNYO0FGbUpRO0VBSEo7SUFJUSxpQkVsTGtDO0VBa0M1QztBQUNGO0FGa0pJO0VBR0ksaUJFeExzQztBQXNDOUM7QUY4SlE7RUFISjtJQUlRLGlCRXJNeUM7RUEwQ25EO0FBQ0Y7QUY2Skk7RUFHSSxpQkUzTTZDO0FBOENyRDtBRm1JUTtFQUhKO0lBSVEseUJFN0s4QjtFQTZDeEM7QUFDRjtBRmtJSTtFQUdJLHlCRW5Ma0M7QUFpRDFDO0FGOElRO0VBSEo7SUFJUSx1QkVoTTREO0VBcUR0RTtBQUNGO0FGNklJO0VBR0ksdUJFdE1nRTtBQXlEeEUiLCJzb3VyY2VzQ29udGVudCI6WyIkY29sdW1uLWhvdmVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7XG4kZGlzYWJsZWQtY29sb3I6IGRhcmtlbigkY29sdW1uLWhvdmVyLWNvbG9yLCAyMCUpO1xuXG4vLyBBVFQmQ0sgQnJhbmQgY29sb3JzXG4kYXR0YWNrLWNvbG9yczogKFxuICAgIGF0dGFjay1vcmFuZ2U6ICNjNjNmMWYsXG4gICAgYXR0YWNrLWJsdWU6ICMwNjJmNGYsXG4pO1xuXG4vKipcbiAqIENvbG9ycyB1c2VkIGFjcm9zcyB0aGUgTmF2aWdhdG9yLiBTaGFyZWQgYnkgdGhlIEFUVCZDSyBXZWJzaXRlLlxuICogRm9yIGVhY2ggY29sb3ItcGFpcjpcbiAqICAgLSBcImNvbG9yXCIgcmVmZXJzIHRvIHRoZSBjb2xvciBpdHNlbGZcbiAqICAgLSBcIm9uLWNvbG9yXCIgcmVmZXJzIHRvIHRoZSBtb3N0IHJlYWRhYmxlIHRleHQtY29sb3IgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgY29sb3IuXG4gKiBOb3RlOiBzb21lIGNvbG9ycyBkb24ndCBkZWZpbmUgb24tY29sb3JzLiBUaGlzIGlzIGJlY2F1c2UsIGZvciB0aGVzZSBjb2xvcnMsIHRoZXkgYXJlbid0IGludGVuZGVkIHRvXG4gKiBhcHBlYXIgd2l0aCBpbm5lciBjb250ZW50LiBGb3IgZXhhbXBsZSwgXCJsaW5rXCIgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBsaW5rIHRleHQsIHdoaWNoIGluaGVyZW50bHlcbiAqIGNhbm5vdCBoYXZlIGlubmVyIHRleHQuXG4gKi9cbiRjb2xvcnM6IChcbiAgICBwcmltYXJ5OiAoXG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stb3JhbmdlKSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy91c2VkIGZvciBoZWFkZXIgYW5kIHNvbWUgbmF2IGVsZW1lbnRzXG4gICAgc2Vjb25kYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLWJsdWUpLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vdXNlZCBmb3IgZm9vdGVyIGFuZCBzb21lIGJ1dHRvbnNcbiAgICBib2R5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICAvL3ByaW1hcnkgcGFnZSBib2R5XG4gICAgbGlnaHQ6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIGRhcms6IChcbiAgICAgICAgY29sb3I6ICMwODA4MGIsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vIGRhcmsgdGhlbWUgY29sb3JzIHZhcmlhdGlvbnMgMC0zIChmcm9tIGRhcmtlc3QgdG8gbGlnaHRlc3QpXG4gICAgZGFyay0xOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzFhMWEyMyxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTI6IChcbiAgICAgICAgY29sb3I6ICMyZTJlM2YsXG4gICAgICAgIG9uLWNvbG9yOiAjZmE2MzQxLFxuICAgICksXG4gICAgLy8gYWNjZW50IGRhcmsgY29sb3Igc2NoZW1lICh1c2VkIGZvciA6aG92ZXIgc2VsZWN0b3JzKVxuICAgIGRhcmstMzpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMzZjNmNTYsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay00OiAoXG4gICAgICAgIGNvbG9yOiAjNGM0YzY4LFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBkYXJrLWRpc2FibGVkOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyAyNSUpLFxuICAgICksXG4gICAgZGFyay1saW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNzU4OGU4LFxuICAgICksXG4gICAgZGFyay1saW5rLWFjdGl2ZTogKFxuICAgICAgICBjb2xvcjogI2U4NDdlOCxcbiAgICApLFxuICAgIGxpbms6IChcbiAgICAgICAgY29sb3I6ICM0ZjdjYWMsXG4gICAgKSxcbiAgICAvLyBoeXBlcmxpbmtzXG4gICAgbWF0cml4LWhlYWRlcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IGdyYXksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy8gY29sb3Igb2YgbWF0cml4IGhlYWRlcnNcbiAgICBjZWxsLWhpZ2hsaWdodC1jb2xvcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHJnYig5NiwgMTk3LCAyNTUpLFxuICAgICAgICApLFxuICAgIGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM0NjRkZmYsXG4gICAgKSxcbiAgICBob3Zlci1jZWxsLWZvbnQtY29sb3I6IChcbiAgICAgICAgY29sb3I6IHJnYigwLCAwLCAwKSxcbiAgICApLFxuICAgIHBhbmVsLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNkZGQsXG4gICAgKSxcbiAgICBwYW5lbC1saWdodDogKFxuICAgICAgICBjb2xvcjogbGlnaHRlbigjZGRkLCA4JSksXG4gICAgKSxcbiAgICB0YWItdGV4dC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzU1NSxcbiAgICApLFxuICAgIGJ1dHRvbi1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjYjhiOGI4LFxuICAgICksXG4gICAgLy9ib290c3RyYXAgY29sb3JzXG4gICAgYm9vdHN0cmFwLXByaW1hcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjNDI4YmNhLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGJvb3RzdHJhcC1zdWNjZXNzOiAoXG4gICAgICAgIGNvbG9yOiAjNWNiODVjLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBib290c3RyYXAtZGFuZ2VyOiAoXG4gICAgICAgIGNvbG9yOiAjZDk1MzRmLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtd2FybmluZzogKFxuICAgICAgICBjb2xvcjogI2YwYWQ0ZSxcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWluZm86IChcbiAgICAgICAgY29sb3I6ICM1YmMwZGUsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuKTtcblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBjb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIGNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBnZXQgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGNvbG9yLCBmb3IgcGF0dGVybmluZ1xuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgZGFyaywgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGxpZ2h0ZXIuXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBsaWdodCwgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGRhcmtlci5cbi8vIGNvbnRyYXN0LCBhbiBvcHRpb25hbCBhcmd1bWVudCwgbXVsdGlwbGllcyB0byBjcmVhdGUgYSBtb3JlIGRpc3RhbnQgb3Igc2ltaWxhciBjb2xvci4gPjEgaXMgbW9yZSBkaXN0YW50LCA8MSBpcyBtb3JlIHNpbWlsYXIuXG5AZnVuY3Rpb24gY29sb3ItYWx0ZXJuYXRlKCRuYW1lLCAkY29udHJhc3Q6IDEpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAkd2VpZ2h0OiAkY29udHJhc3QgKiA1JSk7XG59XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgb24tY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBvbi1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ29uLWNvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZW1waGFzaXplZCBvbi1jb2xvciBpcyBsZXNzIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgb24tY29sb3IoJG5hbWUpKTtcbn1cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGRlZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBkZWVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbW9yZSBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWRlZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChjb2xvcigkbmFtZSksIG9uLWNvbG9yKCRuYW1lKSwgMjUlKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBjb21wdXRlIGEgYm9yZGVyIGNvbG9yIGZvciB0aGUgY29sb3JcbkBmdW5jdGlvbiBib3JkZXItY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAxMi41JSk7XG4gICAgLy8gQHJldHVybiByZ2JhKGludmVydChjb2xvcigkbmFtZSkpLCAwLjEyNSk7XG59XG5cbi8vIElNUE9SVEFOVCBVU0FHRSBOT1RFOlxuLy8gdG8gdXNlIGFkYXB0aXZlIGNvbG9ycywgeW91IE1VU1QgZGlzYWJsZSB2aWV3IGVuY2Fwc3VsYXRpb24gb24gdGhlIGNvbXBvbmVudFxuLy8geW91J3JlIGFwcGx5aW5nIHRoZSBzdHlsZXMgd2l0aGluLiBPdGhlcndpc2UgYW5jZXN0b3IgY2xhc3NlcyBjYW5ub3QgYmUgYXNzZXNzZWRcbi8vIGJ5IHRoZSBtaXhpbnMgdG8gZGV0ZXJtaW5lIHRoZSBhcHAgdGhlbWUgY29uZmlndXJhdGlvbi5cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBsaWdodCBhbmQgZGFyayB0aGVtZXNcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yKCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlLCAkZGFyay12YWx1ZSkge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKTtcbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWxpZ2h0ICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGxpZ2h0IHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgIH1cbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWRhcmsgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgZGFyayB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnLi4vLi4vY29sb3JzLnNjc3MnO1xuXG4kc2l6ZXVuaXQ6IDE0cHg7XG4kc2l6ZXVuaXRfcHJpbnQ6IDEycHg7XG5cbi5tYXRyaXgge1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXpldW5pdDtcbn1cblxuQG1lZGlhIHByaW50IHtcbiAgICAubWF0cml4IHtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgbGluZS1oZWlnaHQ6ICRzaXpldW5pdF9wcmludDtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi8uLi9jb2xvcnMuc2Nzcyc7XG5AaW1wb3J0ICcuLi9tYXRyaXgtY29tbW9uLnNjc3MnO1xuLnRhY3RpYy1jZWxsIHtcbiAgICBwYWRkaW5nLXRvcDogM3B4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgJjpub3QoLm1pbmkpIHtcbiAgICAgICAgbWluLXdpZHRoOiAkc2l6ZXVuaXQgKiAzO1xuICAgIH1cbiAgICAmLm1pbmkge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGJsYWNrLCB3aGl0ZSk7XG4gICAgICAgIHdpZHRoOiAkc2l6ZXVuaXQ7XG4gICAgfVxuICAgIG1pbi1oZWlnaHQ6ICRzaXpldW5pdDtcbiAgICAmLmJvcmRlcmVkIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JvcmRlcicsIDFweCBzb2xpZCBib3JkZXItY29sb3IoYm9keSksIDFweCBzb2xpZCB3aGl0ZSk7XG4gICAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 84144: +/*!*******************************************************!*\ + !*** ./src/app/matrix/technique-cell/cell-popover.ts ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ CellPopover: () => (/* binding */ CellPopover) +/* harmony export */ }); +class CellPopover { + constructor(element) { + this.theElement = element.nativeElement; + } + /** + * Get the location of the tooltip according to the location on the screen. + * Returns one of the following: + * "top left": + * ------------------ + * | XXXX | + * | XXXX | + * | X | + * | | + * ------------------ + * "top right": + * ------------------ + * | XXXX | + * | XXXX | + * | X | + * | | + * ------------------ + * "bottom left": + * ------------------ + * | | + * | XXXX X | + * | XXXX | + * ------------------ + * "bottom right": + * ------------------ + * | | + * | X XXXX | + * | XXXX | + * ------------------ + * @returns {string} direction + */ + getPosition() { + let boundingRect = this.theElement.getBoundingClientRect(); + let halfWidth = window.innerWidth / 2; + let halfHeight = window.innerHeight / 2; + let position = []; + if (boundingRect.right > halfWidth) position.push('left');else position.push('right'); + if (boundingRect.bottom > halfHeight) position.push('top');else position.push('bottom'); + return position.join(' '); + } +} + +/***/ }), + +/***/ 60572: +/*!****************************************************************************!*\ + !*** ./src/app/matrix/technique-cell/contextmenu/contextmenu.component.ts ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ContextmenuComponent: () => (/* binding */ ContextmenuComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _cell_popover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cell-popover */ 84144); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/config.service */ 43696); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ 60316); + + + + + + +function ContextmenuComponent_div_9_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 4)(1, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_9_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.select()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "select"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_9_Template_div_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.addSelection()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4, "add to selection"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](5, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_9_Template_div_click_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.removeSelection()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](6, "remove from selection"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } +} +function ContextmenuComponent_div_10_Template(rf, ctx) { + if (rf & 1) { + const _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 4)(1, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_10_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.selectAll()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "select all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_10_Template_div_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.deselectAll()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4, "deselect all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](5, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_10_Template_div_click_5_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.invertSelection()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](6, "invert selection"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } +} +function ContextmenuComponent_div_11_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 4)(1, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_11_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.selectAnnotated()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "select annotated"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_11_Template_div_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.selectUnannotated()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4, "select unannotated"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } +} +function ContextmenuComponent_div_12_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 4)(1, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_12_Template_div_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.selectAllInTactic()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "select all techniques in tactic"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_12_Template_div_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.deselectAllInTactic()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4, "deselect all techniques in tactic"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } +} +function ContextmenuComponent_div_18_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_18_div_1_Template_div_click_0_listener() { + const contextMenuItem_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r6).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.openCustomContextMenuItem(contextMenuItem_r7)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const contextMenuItem_r7 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", contextMenuItem_r7.label, " "); + } +} +function ContextmenuComponent_div_18_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, ContextmenuComponent_div_18_div_1_Template, 2, 1, "div", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx_r1.configService.contextMenuItems); + } +} +function ContextmenuComponent_div_19_div_1_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_div_19_div_1_div_1_Template_div_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r8); + const link_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.openLink(link_r9)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const link_r9 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", link_r9.label, " "); + } +} +function ContextmenuComponent_div_19_div_1_ng_template_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](0, "div", 12); + } +} +function ContextmenuComponent_div_19_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, ContextmenuComponent_div_19_div_1_div_1_Template, 2, 1, "div", 11)(2, ContextmenuComponent_div_19_div_1_ng_template_2_Template, 1, 0, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const link_r9 = ctx.$implicit; + const divider_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵreference"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !link_r9.divider)("ngIfElse", divider_r10); + } +} +function ContextmenuComponent_div_19_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, ContextmenuComponent_div_19_div_1_Template, 4, 2, "div", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx_r1.links); + } +} +class ContextmenuComponent extends _cell_popover__WEBPACK_IMPORTED_MODULE_0__.CellPopover { + get techniqueVM() { + return this.viewModel.getTechniqueVM(this.technique, this.tactic); + } + get links() { + return this.techniqueVM.links; + } + constructor(element, configService, viewModelsService) { + super(element); + this.element = element; + this.configService = configService; + this.viewModelsService = viewModelsService; + this.close = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + } + ngOnInit() { + this.placement = this.getPosition(); + } + closeContextmenu() { + this.close.emit(); + } + select() { + this.viewModel.clearSelectedTechniques(); + this.viewModel.selectTechnique(this.technique, this.tactic); + this.closeContextmenu(); + } + addSelection() { + this.viewModel.selectTechnique(this.technique, this.tactic); + this.closeContextmenu(); + } + removeSelection() { + this.viewModel.unselectTechnique(this.technique, this.tactic); + this.closeContextmenu(); + } + selectAll() { + this.viewModel.selectAllTechniques(); + this.closeContextmenu(); + } + deselectAll() { + this.viewModel.clearSelectedTechniques(); + this.closeContextmenu(); + } + invertSelection() { + this.viewModel.invertSelection(); + this.closeContextmenu(); + } + selectAnnotated() { + this.viewModel.selectAnnotated(); + this.closeContextmenu(); + } + selectUnannotated() { + this.viewModel.selectUnannotated(); + this.closeContextmenu(); + } + selectAllInTactic() { + this.viewModel.selectAllTechniquesInTactic(this.tactic); + this.closeContextmenu(); + } + deselectAllInTactic() { + this.viewModel.unselectAllTechniquesInTactic(this.tactic); + this.closeContextmenu(); + } + viewTechnique() { + window.open(this.technique.url, '_blank'); + this.closeContextmenu(); + } + viewTactic() { + window.open(this.tactic.url, '_blank'); + this.closeContextmenu(); + } + pinCell() { + this.viewModelsService.pinnedCell = this.viewModelsService.pinnedCell === this.techniqueVM.technique_tactic_union_id ? '' : this.techniqueVM.technique_tactic_union_id; + this.closeContextmenu(); + } + openCustomContextMenuItem(customItem) { + window.open(customItem.getReplacedURL(this.technique, this.tactic), '_blank'); + this.closeContextmenu(); + } + openLink(link) { + window.open(link.url); + this.closeContextmenu(); + } + static #_ = this.ɵfac = function ContextmenuComponent_Factory(t) { + return new (t || ContextmenuComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_1__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({ + type: ContextmenuComponent, + selectors: [["app-contextmenu"]], + inputs: { + technique: "technique", + tactic: "tactic", + viewModel: "viewModel" + }, + outputs: { + close: "close" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]], + decls: 20, + vars: 9, + consts: [["divider", ""], [1, "contextmenu", 3, "contextmenu"], [1, "cover", 3, "click"], [3, "ngClass"], [1, "contextMenu-section"], [1, "contextMenu-header"], [1, "contextMenu-button", 3, "click"], ["class", "contextMenu-section", 4, "ngIf"], ["class", "contextMenu-button", 3, "click", 4, "ngFor", "ngForOf"], ["class", "link-container", 4, "ngFor", "ngForOf"], [1, "link-container"], ["class", "contextMenu-button", 3, "click", 4, "ngIf", "ngIfElse"], [1, "divider"]], + template: function ContextmenuComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("contextmenu", function ContextmenuComponent_Template_div_contextmenu_0_listener() { + return ctx.closeContextmenu(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "div", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_Template_div_click_1_listener() { + return ctx.closeContextmenu(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](2, "div", 3)(3, "div", 4)(4, "div", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](6, "div", 4)(7, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_Template_div_click_7_listener() { + return ctx.pinCell(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](8, "pin/unpin tooltip"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](9, ContextmenuComponent_div_9_Template, 7, 0, "div", 7)(10, ContextmenuComponent_div_10_Template, 7, 0, "div", 7)(11, ContextmenuComponent_div_11_Template, 5, 0, "div", 7)(12, ContextmenuComponent_div_12_Template, 5, 0, "div", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](13, "div", 4)(14, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_Template_div_click_14_listener() { + return ctx.viewTechnique(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](15, "view technique"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](16, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function ContextmenuComponent_Template_div_click_16_listener() { + return ctx.viewTactic(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](17, "view tactic"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](18, ContextmenuComponent_div_18_Template, 2, 1, "div", 7)(19, ContextmenuComponent_div_19_Template, 2, 1, "div", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngClass", "menu " + ctx.placement); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate2"]("", ctx.technique.name, " (", ctx.technique.attackID, ")"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.configService.getFeature("selecting_techniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.configService.getFeature("selecting_techniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.configService.getFeature("selecting_techniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.configService.getFeature("selecting_techniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.configService.contextMenuItems.length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.links.length); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_4__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_4__.NgIf], + styles: ["@charset \"UTF-8\";\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.contextmenu .cover {\n z-index: 100;\n position: fixed;\n top: 0;\n left: 0;\n width: 100vw;\n height: 100vh;\n cursor: default;\n}\n.contextmenu .menu {\n cursor: default;\n position: absolute;\n padding: 6px;\n z-index: 100;\n min-width: 150px;\n max-width: 300px;\n text-align: left;\n white-space: normal;\n border-radius: 3px;\n font-size: 8pt;\n color: white;\n}\n.contextmenu .menu:not(.top) {\n top: 0;\n}\n.contextmenu .menu.bottom.right {\n /* ------------------\n * | |\n * | X XXXX |\n * | XXXX |\n * ------------------\n */\n transform: translateX(10px);\n}\n.contextmenu .menu.bottom.right:before {\n left: -9.5px;\n transform: rotate(90deg);\n}\n.contextmenu .menu.bottom.left {\n /* ------------------\n * | |\n * | XXXX X |\n * | XXXX |\n * ------------------\n */\n transform: translateX(-10px);\n right: 100%;\n}\n.contextmenu .menu.bottom.left:before {\n right: -9px;\n transform: rotate(-90deg);\n}\n.contextmenu .menu.top.right {\n /* ------------------\n * | XXXX |\n * | XXXX |\n * | X |\n * | |\n * ------------------\n */\n transform: translateY(-10px);\n bottom: 100%;\n left: 0;\n}\n.contextmenu .menu.top.right:before {\n bottom: -9px;\n}\n.contextmenu .menu.top.left {\n /* ------------------\n * | XXXX |\n * | XXXX |\n * | X |\n * | |\n * ------------------\n */\n transform: translateY(-10px);\n bottom: 100%;\n right: 0;\n}\n.contextmenu .menu.top.left:before {\n bottom: -9px;\n right: 6px;\n}\n.contextmenu .menu:before {\n position: absolute;\n font-size: 12px;\n content: \"\u25BC\";\n color: rgba(80, 80, 80, 0.85);\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .contextmenu .menu {\n background: rgba(80, 80, 80, 0.85);\n }\n}\n.theme-override-light .contextmenu .menu {\n background: rgba(80, 80, 80, 0.85);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .contextmenu .menu {\n background: rgba(70, 77, 255, 0.85);\n }\n}\n.theme-override-dark .contextmenu .menu {\n background: rgba(70, 77, 255, 0.85);\n}\n.contextmenu .menu .contextMenu-section:not(:first-child) {\n border-top: 1px solid white;\n margin-top: 2px;\n padding-top: 2px;\n}\n.contextmenu .menu .contextMenu-section div:not(.link-container) {\n padding: 3px;\n}\n.contextmenu .menu .contextMenu-section .divider {\n border-top: 1px solid white;\n margin-top: 2px;\n padding: 2px 0 0 0 !important;\n}\n.contextmenu .menu .contextMenu-section .contextMenu-button {\n cursor: pointer;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .contextmenu .menu .contextMenu-section .contextMenu-button:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .contextmenu .menu .contextMenu-section .contextMenu-button:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .contextmenu .menu .contextMenu-section .contextMenu-button:hover {\n background: #131cff;\n }\n}\n.theme-override-dark .contextmenu .menu .contextMenu-section .contextMenu-button:hover {\n background: #131cff;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L3RlY2huaXF1ZS1jZWxsL2NvbnRleHRtZW51L2NvbnRleHRtZW51LmNvbXBvbmVudC5zY3NzIiwid2VicGFjazovLy4vc3JjL2NvbG9ycy5zY3NzIiwid2VicGFjazovLy4vc3JjL2FwcC9tYXRyaXgvdGVjaG5pcXVlLWNlbGwvY2VsbC1wb3BvdmVyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDU2hCOzs7Ozs7OztFQUFBO0FETkk7RUFDSSxZQUFBO0VBR0EsZUFBQTtFQUNBLE1BQUE7RUFDQSxPQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxlQUFBO0FBTVI7QUFKSTtFQUNJLGVBQUE7RUVkSixrQkFBQTtFQUNBLFlBQUE7RUFJQSxZQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFFQSxrQkFBQTtFQUNBLGNBQUE7RUFDQSxZQUFBO0FGaUJKO0FFNUJJO0VBQ0ksTUFBQTtBRjhCUjtBRW5CSTtFQUNJOzs7OztJQUFBO0VBTUEsMkJBQUE7QUZxQlI7QUVwQlE7RUFDSSxZQUFBO0VBQ0Esd0JBQUE7QUZzQlo7QUVuQkk7RUFDSTs7Ozs7SUFBQTtFQU1BLDRCQUFBO0VBQ0EsV0FBQTtBRnFCUjtBRXBCUTtFQUNJLFdBQUE7RUFDQSx5QkFBQTtBRnNCWjtBRW5CSTtFQUNJOzs7Ozs7SUFBQTtFQU9BLDRCQUFBO0VBQ0EsWUFBQTtFQUNBLE9BQUE7QUZxQlI7QUVwQlE7RUFDSSxZQUFBO0FGc0JaO0FFbEJJO0VBQ0k7Ozs7OztJQUFBO0VBT0EsNEJBQUE7RUFDQSxZQUFBO0VBQ0EsUUFBQTtBRm9CUjtBRW5CUTtFQUNJLFlBQUE7RUFDQSxVQUFBO0FGcUJaO0FFakJJO0VBQ0ksa0JBQUE7RUFDQSxlQUFBO0VBQ0EsWUFBQTtFQUNBLDZCQUFBO0FGbUJSO0FDd0ZRO0VBSEo7SUFJUSxrQ0QxS2tDO0VBcUY1QztBQUNGO0FDdUZJO0VBR0ksa0NEaExzQztBQXlGOUM7QUNtR1E7RUFISjtJQUlRLG1DRDdMMEQ7RUE2RnBFO0FBQ0Y7QUNrR0k7RUFHSSxtQ0RuTThEO0FBaUd0RTtBQS9GWTtFQUNJLDJCQUFBO0VBQ0EsZUFBQTtFQUNBLGdCQUFBO0FBaUdoQjtBQS9GWTtFQUNJLFlBQUE7QUFpR2hCO0FBL0ZZO0VBQ0ksMkJBQUE7RUFDQSxlQUFBO0VBQ0EsNkJBQUE7QUFpR2hCO0FBL0ZZO0VBQ0ksZUFBQTtBQWlHaEI7QUN3RFE7RUFISjtJQUlRLDZCRHhKOEM7RUFtR3hEO0FBQ0Y7QUN1REk7RUFHSSw2QkQ5SmtEO0FBdUcxRDtBQ21FUTtFQUhKO0lBSVEsbUJEM0syRTtFQTJHckY7QUFDRjtBQ2tFSTtFQUdJLG1CRGpMK0U7QUErR3ZGIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnLi4vY2VsbC1wb3BvdmVyLnNjc3MnO1xuQGltcG9ydCAnLi4vLi4vLi4vLi4vY29sb3JzLnNjc3MnO1xuLmNvbnRleHRtZW51IHtcbiAgICAuY292ZXIge1xuICAgICAgICB6LWluZGV4OiAxMDA7XG4gICAgICAgIC8vIGJhY2tncm91bmQ6IHJlZDtcbiAgICAgICAgLy8gb3BhY2l0eTogMC41O1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgd2lkdGg6IDEwMHZ3O1xuICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuICAgIC5tZW51IHtcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICBAaW5jbHVkZSBjZWxsLXBvcG92ZXIoMC44NSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgcmdiYSg4MCwgODAsIDgwLCAwLjg1KSwgcmdiYShjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSwgMC44NSkpO1xuICAgICAgICAuY29udGV4dE1lbnUtc2VjdGlvbiB7XG4gICAgICAgICAgICAmOm5vdCg6Zmlyc3QtY2hpbGQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmctdG9wOiAycHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXY6bm90KC5saW5rLWNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC5kaXZpZGVyIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDJweCAwIDAgMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLmNvbnRleHRNZW51LWJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWNvbG9yKSwgZGFya2VuKGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3IpLCAxMCUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIkY29sdW1uLWhvdmVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7XG4kZGlzYWJsZWQtY29sb3I6IGRhcmtlbigkY29sdW1uLWhvdmVyLWNvbG9yLCAyMCUpO1xuXG4vLyBBVFQmQ0sgQnJhbmQgY29sb3JzXG4kYXR0YWNrLWNvbG9yczogKFxuICAgIGF0dGFjay1vcmFuZ2U6ICNjNjNmMWYsXG4gICAgYXR0YWNrLWJsdWU6ICMwNjJmNGYsXG4pO1xuXG4vKipcbiAqIENvbG9ycyB1c2VkIGFjcm9zcyB0aGUgTmF2aWdhdG9yLiBTaGFyZWQgYnkgdGhlIEFUVCZDSyBXZWJzaXRlLlxuICogRm9yIGVhY2ggY29sb3ItcGFpcjpcbiAqICAgLSBcImNvbG9yXCIgcmVmZXJzIHRvIHRoZSBjb2xvciBpdHNlbGZcbiAqICAgLSBcIm9uLWNvbG9yXCIgcmVmZXJzIHRvIHRoZSBtb3N0IHJlYWRhYmxlIHRleHQtY29sb3IgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgY29sb3IuXG4gKiBOb3RlOiBzb21lIGNvbG9ycyBkb24ndCBkZWZpbmUgb24tY29sb3JzLiBUaGlzIGlzIGJlY2F1c2UsIGZvciB0aGVzZSBjb2xvcnMsIHRoZXkgYXJlbid0IGludGVuZGVkIHRvXG4gKiBhcHBlYXIgd2l0aCBpbm5lciBjb250ZW50LiBGb3IgZXhhbXBsZSwgXCJsaW5rXCIgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBsaW5rIHRleHQsIHdoaWNoIGluaGVyZW50bHlcbiAqIGNhbm5vdCBoYXZlIGlubmVyIHRleHQuXG4gKi9cbiRjb2xvcnM6IChcbiAgICBwcmltYXJ5OiAoXG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stb3JhbmdlKSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy91c2VkIGZvciBoZWFkZXIgYW5kIHNvbWUgbmF2IGVsZW1lbnRzXG4gICAgc2Vjb25kYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLWJsdWUpLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vdXNlZCBmb3IgZm9vdGVyIGFuZCBzb21lIGJ1dHRvbnNcbiAgICBib2R5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICAvL3ByaW1hcnkgcGFnZSBib2R5XG4gICAgbGlnaHQ6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIGRhcms6IChcbiAgICAgICAgY29sb3I6ICMwODA4MGIsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vIGRhcmsgdGhlbWUgY29sb3JzIHZhcmlhdGlvbnMgMC0zIChmcm9tIGRhcmtlc3QgdG8gbGlnaHRlc3QpXG4gICAgZGFyay0xOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzFhMWEyMyxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTI6IChcbiAgICAgICAgY29sb3I6ICMyZTJlM2YsXG4gICAgICAgIG9uLWNvbG9yOiAjZmE2MzQxLFxuICAgICksXG4gICAgLy8gYWNjZW50IGRhcmsgY29sb3Igc2NoZW1lICh1c2VkIGZvciA6aG92ZXIgc2VsZWN0b3JzKVxuICAgIGRhcmstMzpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMzZjNmNTYsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay00OiAoXG4gICAgICAgIGNvbG9yOiAjNGM0YzY4LFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBkYXJrLWRpc2FibGVkOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyAyNSUpLFxuICAgICksXG4gICAgZGFyay1saW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNzU4OGU4LFxuICAgICksXG4gICAgZGFyay1saW5rLWFjdGl2ZTogKFxuICAgICAgICBjb2xvcjogI2U4NDdlOCxcbiAgICApLFxuICAgIGxpbms6IChcbiAgICAgICAgY29sb3I6ICM0ZjdjYWMsXG4gICAgKSxcbiAgICAvLyBoeXBlcmxpbmtzXG4gICAgbWF0cml4LWhlYWRlcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IGdyYXksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy8gY29sb3Igb2YgbWF0cml4IGhlYWRlcnNcbiAgICBjZWxsLWhpZ2hsaWdodC1jb2xvcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHJnYig5NiwgMTk3LCAyNTUpLFxuICAgICAgICApLFxuICAgIGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM0NjRkZmYsXG4gICAgKSxcbiAgICBob3Zlci1jZWxsLWZvbnQtY29sb3I6IChcbiAgICAgICAgY29sb3I6IHJnYigwLCAwLCAwKSxcbiAgICApLFxuICAgIHBhbmVsLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNkZGQsXG4gICAgKSxcbiAgICBwYW5lbC1saWdodDogKFxuICAgICAgICBjb2xvcjogbGlnaHRlbigjZGRkLCA4JSksXG4gICAgKSxcbiAgICB0YWItdGV4dC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzU1NSxcbiAgICApLFxuICAgIGJ1dHRvbi1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjYjhiOGI4LFxuICAgICksXG4gICAgLy9ib290c3RyYXAgY29sb3JzXG4gICAgYm9vdHN0cmFwLXByaW1hcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjNDI4YmNhLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGJvb3RzdHJhcC1zdWNjZXNzOiAoXG4gICAgICAgIGNvbG9yOiAjNWNiODVjLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBib290c3RyYXAtZGFuZ2VyOiAoXG4gICAgICAgIGNvbG9yOiAjZDk1MzRmLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtd2FybmluZzogKFxuICAgICAgICBjb2xvcjogI2YwYWQ0ZSxcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWluZm86IChcbiAgICAgICAgY29sb3I6ICM1YmMwZGUsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuKTtcblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBjb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIGNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBnZXQgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGNvbG9yLCBmb3IgcGF0dGVybmluZ1xuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgZGFyaywgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGxpZ2h0ZXIuXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBsaWdodCwgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGRhcmtlci5cbi8vIGNvbnRyYXN0LCBhbiBvcHRpb25hbCBhcmd1bWVudCwgbXVsdGlwbGllcyB0byBjcmVhdGUgYSBtb3JlIGRpc3RhbnQgb3Igc2ltaWxhciBjb2xvci4gPjEgaXMgbW9yZSBkaXN0YW50LCA8MSBpcyBtb3JlIHNpbWlsYXIuXG5AZnVuY3Rpb24gY29sb3ItYWx0ZXJuYXRlKCRuYW1lLCAkY29udHJhc3Q6IDEpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAkd2VpZ2h0OiAkY29udHJhc3QgKiA1JSk7XG59XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgb24tY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBvbi1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ29uLWNvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZW1waGFzaXplZCBvbi1jb2xvciBpcyBsZXNzIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgb24tY29sb3IoJG5hbWUpKTtcbn1cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGRlZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBkZWVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbW9yZSBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWRlZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChjb2xvcigkbmFtZSksIG9uLWNvbG9yKCRuYW1lKSwgMjUlKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBjb21wdXRlIGEgYm9yZGVyIGNvbG9yIGZvciB0aGUgY29sb3JcbkBmdW5jdGlvbiBib3JkZXItY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAxMi41JSk7XG4gICAgLy8gQHJldHVybiByZ2JhKGludmVydChjb2xvcigkbmFtZSkpLCAwLjEyNSk7XG59XG5cbi8vIElNUE9SVEFOVCBVU0FHRSBOT1RFOlxuLy8gdG8gdXNlIGFkYXB0aXZlIGNvbG9ycywgeW91IE1VU1QgZGlzYWJsZSB2aWV3IGVuY2Fwc3VsYXRpb24gb24gdGhlIGNvbXBvbmVudFxuLy8geW91J3JlIGFwcGx5aW5nIHRoZSBzdHlsZXMgd2l0aGluLiBPdGhlcndpc2UgYW5jZXN0b3IgY2xhc3NlcyBjYW5ub3QgYmUgYXNzZXNzZWRcbi8vIGJ5IHRoZSBtaXhpbnMgdG8gZGV0ZXJtaW5lIHRoZSBhcHAgdGhlbWUgY29uZmlndXJhdGlvbi5cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBsaWdodCBhbmQgZGFyayB0aGVtZXNcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yKCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlLCAkZGFyay12YWx1ZSkge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKTtcbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWxpZ2h0ICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGxpZ2h0IHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgIH1cbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWRhcmsgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgZGFyayB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgfVxufVxuIiwiQG1peGluIGNlbGwtcG9wb3Zlcigkb3BhY2l0eSkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBwYWRkaW5nOiA2cHg7XG4gICAgJjpub3QoLnRvcCkge1xuICAgICAgICB0b3A6IDA7XG4gICAgfVxuICAgIHotaW5kZXg6IDEwMDtcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xuICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGZvbnQtc2l6ZTogOHB0O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAmLmJvdHRvbS5yaWdodCB7XG4gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgKiB8ICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICogfCAgICAgICBYIFhYWFggICB8XG4gICAgICAgICAqIHwgICAgICAgICBYWFhYICAgfFxuICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICovXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgbGVmdDogLTkuNXB4O1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB9XG4gICAgfVxuICAgICYuYm90dG9tLmxlZnQge1xuICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICogfCAgICAgICAgICAgICAgICB8XG4gICAgICAgICAqIHwgIFhYWFggWCAgICAgICAgfFxuICAgICAgICAgKiB8ICBYWFhYICAgICAgICAgIHxcbiAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwcHgpO1xuICAgICAgICByaWdodDogMTAwJTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgcmlnaHQ6IC05cHg7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgICAgICB9XG4gICAgfVxuICAgICYudG9wLnJpZ2h0IHtcbiAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAqIHwgICAgICAgIFhYWFggIHxcbiAgICAgICAgICogfCAgICAgICAgWFhYWCAgfFxuICAgICAgICAgKiB8ICAgICAgIFggICAgICB8XG4gICAgICAgICAqIHwgICAgICAgICAgICAgIHxcbiAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICAgICAgICBib3R0b206IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvdHRvbTogLTlweDtcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi50b3AubGVmdCB7XG4gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgKiB8ICAgIFhYWFggICAgICB8XG4gICAgICAgICAqIHwgICAgWFhYWCAgICAgIHxcbiAgICAgICAgICogfCAgICAgICBYICAgICAgfFxuICAgICAgICAgKiB8ICAgICAgICAgICAgICB8XG4gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgKi9cbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgICAgICAgYm90dG9tOiAxMDAlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgYm90dG9tOiAtOXB4O1xuICAgICAgICAgICAgcmlnaHQ6IDZweDtcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29udGVudDogJ1xcMjVCQyc7XG4gICAgICAgIGNvbG9yOiByZ2JhKDgwLCA4MCwgODAsICRvcGFjaXR5KTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 62460: +/*!*******************************************************************!*\ + !*** ./src/app/matrix/technique-cell/technique-cell.component.ts ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TechniqueCellComponent: () => (/* binding */ TechniqueCellComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _cell__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cell */ 12264); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../services/data.service */ 28490); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../services/config.service */ 43696); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _tooltip_tooltip_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tooltip/tooltip.component */ 58892); +/* harmony import */ var _contextmenu_contextmenu_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contextmenu/contextmenu.component */ 60572); + + + + + + + + + +function TechniqueCellComponent_ng_container_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](ctx_r0.technique.attackID); + } +} +function TechniqueCellComponent_div_4_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](0, "div", 6); + } +} +function TechniqueCellComponent_ng_container_5_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate"](ctx_r0.technique.name); + } +} +function TechniqueCellComponent_ng_container_6_sub_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "sub", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtextInterpolate2"](" \u00A0(", ctx_r0.annotatedSubtechniques(), "/", ctx_r0.applyControls(ctx_r0.technique.subtechniques, ctx_r0.tactic).length, ") "); + } +} +function TechniqueCellComponent_ng_container_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](1, TechniqueCellComponent_ng_container_6_sub_1_Template, 2, 2, "sub", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx_r0.viewModel.layout.showID || ctx_r0.viewModel.layout.showName); + } +} +function TechniqueCellComponent_app_tooltip_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelement"](0, "app-tooltip", 9); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("technique", ctx_r0.technique)("tactic", ctx_r0.tactic)("viewModel", ctx_r0.viewModel); + } +} +function TechniqueCellComponent_app_contextmenu_8_Template(rf, ctx) { + if (rf & 1) { + const _r2 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "app-contextmenu", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵlistener"]("close", function TechniqueCellComponent_app_contextmenu_8_Template_app_contextmenu_close_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵrestoreView"](_r2); + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + ctx_r0.showContextmenu = false; + return _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵresetView"](ctx_r0.onMouseLeave()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("technique", ctx_r0.technique)("tactic", ctx_r0.tactic)("viewModel", ctx_r0.viewModel); + } +} +class TechniqueCellComponent extends _cell__WEBPACK_IMPORTED_MODULE_0__.Cell { + get isCellPinned() { + return this.viewModelsService.pinnedCell === this.viewModel.getTechniqueVM(this.technique, this.tactic).technique_tactic_union_id; + } + get showTooltip() { + if (this.isCellPinned) return true; + if (this.showContextmenu) return false; + if (this.viewModel.highlightedTechniques.size === 0) return false; + return this.viewModel.highlightedTechnique === this.technique && this.viewModel.highlightedTactic && this.viewModel.highlightedTactic.id === this.tactic.id; + } + constructor(dataService, configService, viewModelsService) { + super(dataService, configService); + this.dataService = dataService; + this.configService = configService; + this.viewModelsService = viewModelsService; + this.highlight = new _angular_core__WEBPACK_IMPORTED_MODULE_6__.EventEmitter(); // emit with the highlighted technique, or null to unhighlight + this.unhighlight = new _angular_core__WEBPACK_IMPORTED_MODULE_6__.EventEmitter(); + this.leftclick = new _angular_core__WEBPACK_IMPORTED_MODULE_6__.EventEmitter(); // emit with the selected technique and the modifier keys + } + ngOnInit() { + // intentionally left blank + } + // count number of annotated sub-techniques on this technique + annotatedSubtechniques() { + let annotatedSubs = []; + for (let s of this.technique.subtechniques) { + let subVM = this.viewModel.getTechniqueVM(s, this.tactic); + if (subVM.annotated()) annotatedSubs.push(s); + } + return this.applyControls(annotatedSubs, this.tactic).length; + } + // sort and filter techniques + applyControls(techniques, tactic) { + return this.viewModel.applyControls(techniques, tactic, this.matrix); + } + // events to pass to parent component + onMouseEnter() { + this.highlight.emit(); + } + onMouseLeave() { + this.unhighlight.emit(); + } + onLeftClick(event) { + if (!this.isCellPinned) this.viewModelsService.pinnedCell = ''; + if (this.configService.getFeature('selecting_techniques')) this.leftclick.emit({ + technique: this.technique, + // modifier keys + shift: event.shiftKey, + ctrl: event.ctrlKey, + meta: event.metaKey, + // position of event on page + x: event.pageX, + y: event.pageY + });else this.onRightClick(event); + } + onRightClick(event) { + if (!this.isCellPinned) this.viewModelsService.pinnedCell = ''; + this.showContextmenu = true; + } + // return css classes for a technique + getClass() { + let theclass = super.getClass(); + // classes by annotated sub-techniques + if (!this.annotatedSubtechniques()) theclass += ' unannotated'; + if (this.isCellPinned) theclass += ' editing'; + return theclass; + } + static #_ = this.ɵfac = function TechniqueCellComponent_Factory(t) { + return new (t || TechniqueCellComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_1__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_2__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_3__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdefineComponent"]({ + type: TechniqueCellComponent, + selectors: [["technique-cell"]], + inputs: { + matrix: "matrix" + }, + outputs: { + highlight: "highlight", + unhighlight: "unhighlight", + leftclick: "leftclick" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵInheritDefinitionFeature"]], + decls: 9, + vars: 12, + consts: [[1, "technique-cell", 3, "ngStyle", "ngClass"], [3, "click", "contextmenu", "mouseenter", "mouseleave"], [4, "ngIf"], ["class", "id-name-break", 4, "ngIf"], [3, "technique", "tactic", "viewModel", 4, "ngIf"], [3, "technique", "tactic", "viewModel", "close", 4, "ngIf"], [1, "id-name-break"], ["class", "sub", 4, "ngIf"], [1, "sub"], [3, "technique", "tactic", "viewModel"], [3, "close", "technique", "tactic", "viewModel"]], + template: function TechniqueCellComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](0, "div", 0)(1, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵlistener"]("click", function TechniqueCellComponent_Template_div_click_1_listener($event) { + return ctx.onLeftClick($event); + })("contextmenu", function TechniqueCellComponent_Template_div_contextmenu_1_listener($event) { + return ctx.onRightClick($event); + })("mouseenter", function TechniqueCellComponent_Template_div_mouseenter_1_listener() { + return ctx.onMouseEnter(); + })("mouseleave", function TechniqueCellComponent_Template_div_mouseleave_1_listener() { + return ctx.onMouseLeave(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementStart"](2, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](3, TechniqueCellComponent_ng_container_3_Template, 2, 1, "ng-container", 2)(4, TechniqueCellComponent_div_4_Template, 1, 0, "div", 3)(5, TechniqueCellComponent_ng_container_5_Template, 2, 1, "ng-container", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](6, TechniqueCellComponent_ng_container_6_Template, 2, 1, "ng-container", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵtemplate"](7, TechniqueCellComponent_app_tooltip_7_Template, 1, 3, "app-tooltip", 4)(8, TechniqueCellComponent_app_contextmenu_8_Template, 1, 3, "app-contextmenu", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵelementEnd"](); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngStyle", ctx.getTechniqueBackground())("ngClass", ctx.getClass()); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵstyleProp"]("border-color", ctx.getTechniqueUnderlineColor())("color", ctx.getTechniqueTextColor()); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showID); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showID && ctx.viewModel.layout.showName); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showName); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx.technique.subtechniques.length > 0); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx.showTooltip); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵproperty"]("ngIf", ctx.showContextmenu); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_7__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_7__.NgIf, _angular_common__WEBPACK_IMPORTED_MODULE_7__.NgStyle, _tooltip_tooltip_component__WEBPACK_IMPORTED_MODULE_4__.TooltipComponent, _contextmenu_contextmenu_component__WEBPACK_IMPORTED_MODULE_5__.ContextmenuComponent], + styles: ["@charset \"UTF-8\";\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.matrix {\n border-collapse: collapse;\n line-height: 14px;\n}\n\n@media print {\n .matrix {\n border-collapse: collapse;\n line-height: 12px;\n }\n}\n.technique-cell {\n cursor: pointer;\n height: 100%;\n display: flex;\n align-items: center;\n position: relative;\n font-size: 13px;\n line-height: 14px;\n min-width: 14px;\n min-height: 14px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell {\n background-color: white;\n }\n}\n.theme-override-light .technique-cell {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .technique-cell {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell {\n color: black;\n }\n}\n.theme-override-light .technique-cell {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell {\n color: white;\n }\n}\n.theme-override-dark .technique-cell {\n color: white;\n}\n@media print {\n .technique-cell {\n font-size: 7px;\n }\n}\n.technique-cell > div {\n padding: 7px 3px;\n box-sizing: border-box;\n display: block;\n width: 100%;\n height: 100%;\n}\n.technique-cell.showID:not(.showName) {\n text-align: center;\n}\n.technique-cell .id-name-break {\n outline-offset: -0.5px;\n outline: 1px solid rgba(223, 223, 223, 0.5);\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #dfdfdf inset;\n }\n}\n.theme-override-light .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #dfdfdf inset;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #42424f inset;\n }\n}\n.theme-override-dark .technique-cell:not(.editing):not(.colored):not(.supertechniquecell) {\n box-shadow: 0 0 0 1px #42424f inset;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell.editing {\n box-shadow: 0 0 0 1px black inset;\n }\n}\n.theme-override-light .technique-cell.editing {\n box-shadow: 0 0 0 1px black inset;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell.editing {\n box-shadow: 0 0 0 1px #464dff inset;\n }\n}\n.theme-override-dark .technique-cell.editing {\n box-shadow: 0 0 0 1px #464dff inset;\n}\n.technique-cell.underlined.mini div:before {\n position: absolute;\n content: \"i\";\n font-size: 13px;\n text-align: center;\n width: 100%;\n top: 0;\n left: 0;\n}\n.technique-cell.underlined div span {\n border-bottom: 2px solid transparent;\n}\n.technique-cell.mini.disabled div:before {\n position: absolute;\n content: \"\u2715\";\n font-size: 14px -1px;\n text-align: center;\n width: 100%;\n top: 0;\n left: 0;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .technique-cell.highlight {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .technique-cell.highlight {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .technique-cell.highlight {\n background: #464dff;\n }\n}\n.theme-override-dark .technique-cell.highlight {\n background: #464dff;\n}\n.technique-cell.highlight .id-name-break {\n outline: 1px solid rgba(0, 0, 0, 0.5);\n}\n.technique-cell.unannotated .sub {\n color: gray;\n}\n\n.sub {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n bottom: -0.5em;\n}\n@media print {\n .sub {\n display: none;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L3RlY2huaXF1ZS1jZWxsL3RlY2huaXF1ZS1jZWxsLmNvbXBvbmVudC5zY3NzIiwid2VicGFjazovLy4vc3JjL2NvbG9ycy5zY3NzIiwid2VicGFjazovLy4vc3JjL2FwcC9tYXRyaXgvbWF0cml4LWNvbW1vbi5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQjtBQ1NoQjs7Ozs7Ozs7RUFBQTtBQ0pBO0VBQ0kseUJBQUE7RUFDQSxpQkFMTztBRldYOztBRUhBO0VBQ0k7SUFDSSx5QkFBQTtJQUNBLGlCQVZTO0VGZ0JmO0FBQ0Y7QUFsQkE7RUFHSSxlQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSxtQkFBQTtFQUVBLGtCQUFBO0VBRUEsZUFBQTtFQUNBLGlCRVhPO0VGYVAsZUViTztFRmNQLGdCRWRPO0FGNkJYO0FDMkpRO0VBSEo7SUFJUSx1QkR4TG9DO0VBZ0M5QztBQUNGO0FDMEpJO0VBR0ksdUJEOUx3QztBQW9DaEQ7QUNzS1E7RUFISjtJQUlRLHlCRDNNMkM7RUF3Q3JEO0FBQ0Y7QUNxS0k7RUFHSSx5QkRqTitDO0FBNEN2RDtBQzJJUTtFQUhKO0lBSVEsWUR2THlCO0VBK0NuQztBQUNGO0FDMElJO0VBR0ksWUQ3TDZCO0FBbURyQztBQ3NKUTtFQUhKO0lBSVEsWUQxTWdDO0VBdUQxQztBQUNGO0FDcUpJO0VBR0ksWURoTm9DO0FBMkQ1QztBQTlDSTtFQWZKO0lBZ0JRLGNBQUE7RUFpRE47QUFDRjtBQS9DSTtFQUNJLGdCQUFBO0VBQ0Esc0JBQUE7RUFDQSxjQUFBO0VBQ0EsV0FBQTtFQUNBLFlBQUE7QUFpRFI7QUE5Q0k7RUFDSSxrQkFBQTtBQWdEUjtBQTdDSTtFQUNJLHNCQUFBO0VBQ0EsMkNBQUE7QUErQ1I7QUN3R1E7RUFISjtJQUlRLG1DRHBKa0M7RUErQzVDO0FBQ0Y7QUN1R0k7RUFHSSxtQ0QxSnNDO0FBbUQ5QztBQ21IUTtFQUhKO0lBSVEsbUNEdktzRTtFQXVEaEY7QUFDRjtBQ2tISTtFQUdJLG1DRDdLMEU7QUEyRGxGO0FDd0ZRO0VBSEo7SUFJUSxpQ0RoSmtDO0VBMkQ1QztBQUNGO0FDdUZJO0VBR0ksaUNEdEpzQztBQStEOUM7QUNtR1E7RUFISjtJQUlRLG1DRG5LeUQ7RUFtRW5FO0FBQ0Y7QUNrR0k7RUFHSSxtQ0R6SzZEO0FBdUVyRTtBQW5FUTtFQUNJLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtBQXFFWjtBQW5FUTtFQUNJLG9DQUFBO0FBcUVaO0FBakVJO0VBQ0ksa0JBQUE7RUFDQSxZQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLFdBQUE7RUFDQSxNQUFBO0VBQ0EsT0FBQTtBQW1FUjtBQ21EUTtFQUhKO0lBSVEsNkJEbkhrQztFQW1FNUM7QUFDRjtBQ2tESTtFQUdJLDZCRHpIc0M7QUF1RTlDO0FDOERRO0VBSEo7SUFJUSxtQkR0SStEO0VBMkV6RTtBQUNGO0FDNkRJO0VBR0ksbUJENUltRTtBQStFM0U7QUE5RVE7RUFDSSxxQ0FBQTtBQWdGWjtBQTNFUTtFQUNJLFdBQUE7QUE2RVo7O0FBeEVBO0VBQ0ksa0JBQUE7RUFDQSxjQUFBO0VBQ0EsY0FBQTtFQUNBLHdCQUFBO0VBQ0EsY0FBQTtBQTJFSjtBQTFFSTtFQU5KO0lBT1EsYUFBQTtFQTZFTjtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnc2FzczptYXRoJyBhcyBtYXRoO1xuQGltcG9ydCAnLi4vbWF0cml4LWNvbW1vbi5zY3NzJztcbi50ZWNobmlxdWUtY2VsbCB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCB3aGl0ZSwgY29sb3IoZGFyay0yKSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2NvbG9yJywgYmxhY2ssIG9uLWNvbG9yKGRhcmstMykpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgZm9udC1zaXplOiAkc2l6ZXVuaXQgLSAxcHg7XG4gICAgbGluZS1oZWlnaHQ6ICRzaXpldW5pdDtcblxuICAgIG1pbi13aWR0aDogJHNpemV1bml0O1xuICAgIG1pbi1oZWlnaHQ6ICRzaXpldW5pdDtcbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICBmb250LXNpemU6ICRzaXpldW5pdF9wcmludCAtIDVweDtcbiAgICB9XG5cbiAgICA+IGRpdiB7XG4gICAgICAgIHBhZGRpbmc6IG1hdGguZGl2KCRzaXpldW5pdCwgMikgM3B4O1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICB9XG5cbiAgICAmLnNob3dJRDpub3QoLnNob3dOYW1lKSB7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuaWQtbmFtZS1icmVhayB7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMC41cHg7XG4gICAgICAgIG91dGxpbmU6IDFweCBzb2xpZCByZ2JhKGJvcmRlci1jb2xvcihib2R5KSwgMC41KTtcbiAgICB9XG5cbiAgICAmOm5vdCguZWRpdGluZyk6bm90KC5jb2xvcmVkKTpub3QoLnN1cGVydGVjaG5pcXVlY2VsbCkge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm94LXNoYWRvdycsIDAgMCAwIDFweCBib3JkZXItY29sb3IoYm9keSkgaW5zZXQsIDAgMCAwIDFweCBib3JkZXItY29sb3IoZGFyay0yKSBpbnNldCk7XG4gICAgfVxuXG4gICAgJi5lZGl0aW5nIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JveC1zaGFkb3cnLCAwIDAgMCAxcHggYmxhY2sgaW5zZXQsIDAgMCAwIDFweCBjb2xvcihjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yKSBpbnNldCk7XG4gICAgfVxuXG4gICAgJi51bmRlcmxpbmVkIHtcbiAgICAgICAgJi5taW5pIGRpdjpiZWZvcmUge1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgY29udGVudDogJ2knO1xuICAgICAgICAgICAgZm9udC1zaXplOiAkc2l6ZXVuaXQgLSAxcHg7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIH1cbiAgICAgICAgZGl2IHNwYW4ge1xuICAgICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJi5taW5pLmRpc2FibGVkIGRpdjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGNvbnRlbnQ6ICdcXDI3MTUnO1xuICAgICAgICBmb250LXNpemU6ICRzaXpldW5pdCAtMXB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgfVxuXG4gICAgJi5oaWdobGlnaHQge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWNvbG9yKSwgY29sb3IoY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcikpO1xuICAgICAgICAuaWQtbmFtZS1icmVhayB7XG4gICAgICAgICAgICBvdXRsaW5lOiAxcHggc29saWQgcmdiYShibGFjaywgMC41KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICYudW5hbm5vdGF0ZWQge1xuICAgICAgICAuc3ViIHtcbiAgICAgICAgICAgIGNvbG9yOiBncmF5O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4uc3ViIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZm9udC1zaXplOiA3NSU7XG4gICAgbGluZS1oZWlnaHQ6IDA7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIGJvdHRvbTogLTAuNWVtO1xuICAgIEBtZWRpYSBwcmludCB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuIiwiJGNvbHVtbi1ob3Zlci1jb2xvcjogcmdiKDIzNSwgMjM1LCAyMzUpO1xuJGRpc2FibGVkLWNvbG9yOiBkYXJrZW4oJGNvbHVtbi1ob3Zlci1jb2xvciwgMjAlKTtcblxuLy8gQVRUJkNLIEJyYW5kIGNvbG9yc1xuJGF0dGFjay1jb2xvcnM6IChcbiAgICBhdHRhY2stb3JhbmdlOiAjYzYzZjFmLFxuICAgIGF0dGFjay1ibHVlOiAjMDYyZjRmLFxuKTtcblxuLyoqXG4gKiBDb2xvcnMgdXNlZCBhY3Jvc3MgdGhlIE5hdmlnYXRvci4gU2hhcmVkIGJ5IHRoZSBBVFQmQ0sgV2Vic2l0ZS5cbiAqIEZvciBlYWNoIGNvbG9yLXBhaXI6XG4gKiAgIC0gXCJjb2xvclwiIHJlZmVycyB0byB0aGUgY29sb3IgaXRzZWxmXG4gKiAgIC0gXCJvbi1jb2xvclwiIHJlZmVycyB0byB0aGUgbW9zdCByZWFkYWJsZSB0ZXh0LWNvbG9yIHRvIGFwcGVhciBvbiB0b3Agb2YgdGhlIGNvbG9yLlxuICogTm90ZTogc29tZSBjb2xvcnMgZG9uJ3QgZGVmaW5lIG9uLWNvbG9ycy4gVGhpcyBpcyBiZWNhdXNlLCBmb3IgdGhlc2UgY29sb3JzLCB0aGV5IGFyZW4ndCBpbnRlbmRlZCB0b1xuICogYXBwZWFyIHdpdGggaW5uZXIgY29udGVudC4gRm9yIGV4YW1wbGUsIFwibGlua1wiIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgbGluayB0ZXh0LCB3aGljaCBpbmhlcmVudGx5XG4gKiBjYW5ub3QgaGF2ZSBpbm5lciB0ZXh0LlxuICovXG4kY29sb3JzOiAoXG4gICAgcHJpbWFyeTogKFxuICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLW9yYW5nZSksXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vdXNlZCBmb3IgaGVhZGVyIGFuZCBzb21lIG5hdiBlbGVtZW50c1xuICAgIHNlY29uZGFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1ibHVlKSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvL3VzZWQgZm9yIGZvb3RlciBhbmQgc29tZSBidXR0b25zXG4gICAgYm9keTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgLy9wcmltYXJ5IHBhZ2UgYm9keVxuICAgIGxpZ2h0OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICBkYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjMDgwODBiLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvLyBkYXJrIHRoZW1lIGNvbG9ycyB2YXJpYXRpb25zIDAtMyAoZnJvbSBkYXJrZXN0IHRvIGxpZ2h0ZXN0KVxuICAgIGRhcmstMTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMxYTFhMjMsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay0yOiAoXG4gICAgICAgIGNvbG9yOiAjMmUyZTNmLFxuICAgICAgICBvbi1jb2xvcjogI2ZhNjM0MSxcbiAgICApLFxuICAgIC8vIGFjY2VudCBkYXJrIGNvbG9yIHNjaGVtZSAodXNlZCBmb3IgOmhvdmVyIHNlbGVjdG9ycylcbiAgICBkYXJrLTM6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjM2YzZjU2LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstNDogKFxuICAgICAgICBjb2xvcjogIzRjNGM2OCxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgZGFyay1kaXNhYmxlZDogKFxuICAgICAgICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gMjUlKSxcbiAgICApLFxuICAgIGRhcmstbGluazogKFxuICAgICAgICBjb2xvcjogIzc1ODhlOCxcbiAgICApLFxuICAgIGRhcmstbGluay1hY3RpdmU6IChcbiAgICAgICAgY29sb3I6ICNlODQ3ZTgsXG4gICAgKSxcbiAgICBsaW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNGY3Y2FjLFxuICAgICksXG4gICAgLy8gaHlwZXJsaW5rc1xuICAgIG1hdHJpeC1oZWFkZXI6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBncmF5LFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vIGNvbG9yIG9mIG1hdHJpeCBoZWFkZXJzXG4gICAgY2VsbC1oaWdobGlnaHQtY29sb3I6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoOTYsIDE5NywgMjU1KSxcbiAgICAgICAgKSxcbiAgICBjZWxsLWhpZ2hsaWdodC1kYXJrLWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNDY0ZGZmLFxuICAgICksXG4gICAgaG92ZXItY2VsbC1mb250LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMCwgMCwgMCksXG4gICAgKSxcbiAgICBwYW5lbC1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjZGRkLFxuICAgICksXG4gICAgcGFuZWwtbGlnaHQ6IChcbiAgICAgICAgY29sb3I6IGxpZ2h0ZW4oI2RkZCwgOCUpLFxuICAgICksXG4gICAgdGFiLXRleHQtY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM1NTUsXG4gICAgKSxcbiAgICBidXR0b24tZGFyazogKFxuICAgICAgICBjb2xvcjogI2I4YjhiOCxcbiAgICApLFxuICAgIC8vYm9vdHN0cmFwIGNvbG9yc1xuICAgIGJvb3RzdHJhcC1wcmltYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzQyOGJjYSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBib290c3RyYXAtc3VjY2VzczogKFxuICAgICAgICBjb2xvcjogIzVjYjg1YyxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWRhbmdlcjogKFxuICAgICAgICBjb2xvcjogI2Q5NTM0ZixcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLXdhcm5pbmc6IChcbiAgICAgICAgY29sb3I6ICNmMGFkNGUsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1pbmZvOiAoXG4gICAgICAgIGNvbG9yOiAjNWJjMGRlLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbik7XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBjb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ2NvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgZ2V0IGFuIGFsdGVybmF0ZSB2ZXJzaW9uIG9mIHRoZSBjb2xvciwgZm9yIHBhdHRlcm5pbmdcbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGRhcmssIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBsaWdodGVyLlxuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgbGlnaHQsIHRoZSBhbHRlcm5hdGUgd2lsbCBiZSBzbGlnaHRseSBkYXJrZXIuXG4vLyBjb250cmFzdCwgYW4gb3B0aW9uYWwgYXJndW1lbnQsIG11bHRpcGxpZXMgdG8gY3JlYXRlIGEgbW9yZSBkaXN0YW50IG9yIHNpbWlsYXIgY29sb3IuID4xIGlzIG1vcmUgZGlzdGFudCwgPDEgaXMgbW9yZSBzaW1pbGFyLlxuQGZ1bmN0aW9uIGNvbG9yLWFsdGVybmF0ZSgkbmFtZSwgJGNvbnRyYXN0OiAxKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgJHdlaWdodDogJGNvbnRyYXN0ICogNSUpO1xufVxuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIG9uLWNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gb24tY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdvbi1jb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbGVzcyBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIG9uLWNvbG9yKCRuYW1lKSk7XG59XG4vLyBnaXZlbiBhIGNvbG9yLW5hbWUsIGdldCBhbiBkZWVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZGVlbXBoYXNpemVkIG9uLWNvbG9yIGlzIG1vcmUgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1kZWVtcGhhc2lzKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoY29sb3IoJG5hbWUpLCBvbi1jb2xvcigkbmFtZSksIDI1JSk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3IgbmFtZSwgY29tcHV0ZSBhIGJvcmRlciBjb2xvciBmb3IgdGhlIGNvbG9yXG5AZnVuY3Rpb24gYm9yZGVyLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtaXgoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIGNvbG9yKCRuYW1lKSwgMTIuNSUpO1xuICAgIC8vIEByZXR1cm4gcmdiYShpbnZlcnQoY29sb3IoJG5hbWUpKSwgMC4xMjUpO1xufVxuXG4vLyBJTVBPUlRBTlQgVVNBR0UgTk9URTpcbi8vIHRvIHVzZSBhZGFwdGl2ZSBjb2xvcnMsIHlvdSBNVVNUIGRpc2FibGUgdmlldyBlbmNhcHN1bGF0aW9uIG9uIHRoZSBjb21wb25lbnRcbi8vIHlvdSdyZSBhcHBseWluZyB0aGUgc3R5bGVzIHdpdGhpbi4gT3RoZXJ3aXNlIGFuY2VzdG9yIGNsYXNzZXMgY2Fubm90IGJlIGFzc2Vzc2VkXG4vLyBieSB0aGUgbWl4aW5zIHRvIGRldGVybWluZSB0aGUgYXBwIHRoZW1lIGNvbmZpZ3VyYXRpb24uXG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgbGlnaHQgYW5kIGRhcmsgdGhlbWVzXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvcigkcHJvcGVydHksICRsaWdodC12YWx1ZSwgJGRhcmstdmFsdWUpIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSk7XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1saWdodCAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBsaWdodCB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICB9XG59XG5cbi8vLyBhc3NpZ24gdGhlIHByb3BlcnR5IHdpdGggdGhlIGdpdmVuIHZhbHVlIG9ubHkgd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpIHtcbiAgICAudGhlbWUtdXNlLXN5c3RlbSAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBzeXN0ZW0gdGhlbWUsXG4gICAgICAgIC8vIHVzZSBhIG1lZGlhIHF1ZXJ5IHRvIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC50aGVtZS1vdmVycmlkZS1kYXJrICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGRhcmsgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgZGFyayB2YWx1ZVxuICAgICAgICAjeyRwcm9wZXJ0eX06ICRkYXJrLXZhbHVlO1xuICAgIH1cbn1cbiIsIkBpbXBvcnQgJy4uLy4uL2NvbG9ycy5zY3NzJztcblxuJHNpemV1bml0OiAxNHB4O1xuJHNpemV1bml0X3ByaW50OiAxMnB4O1xuXG4ubWF0cml4IHtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZXVuaXQ7XG59XG5cbkBtZWRpYSBwcmludCB7XG4gICAgLm1hdHJpeCB7XG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkc2l6ZXVuaXRfcHJpbnQ7XG4gICAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 58892: +/*!********************************************************************!*\ + !*** ./src/app/matrix/technique-cell/tooltip/tooltip.component.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TooltipComponent: () => (/* binding */ TooltipComponent) +/* harmony export */ }); +/* harmony import */ var _cell_popover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../cell-popover */ 84144); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../services/data.service */ 28490); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); + + + + + + + +function TooltipComponent_span_6_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "span", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function TooltipComponent_span_6_Template_span_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r1.unpin()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "push_pin"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } +} +function TooltipComponent_tr_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "Disabled"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } +} +function TooltipComponent_tr_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "Score:"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r1.techniqueVM.score); + } +} +function TooltipComponent_tr_9_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("Aggregate Score (", ctx_r1.viewModel.layout.aggregateFunction, "):"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r1.techniqueVM.aggregateScore); + } +} +function TooltipComponent_tr_10_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "Comment:"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](ctx_r1.techniqueVM.comment); + } +} +function TooltipComponent_tr_11_td_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "td", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const note_r3 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("", note_r3.abstract, ":"); + } +} +function TooltipComponent_tr_11_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, TooltipComponent_tr_11_td_1_Template, 2, 1, "td", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](2, "td", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const note_r3 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", note_r3.abstract); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵattribute"]("colspan", note_r3.abstract ? "1" : "2"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](note_r3.content); + } +} +function TooltipComponent_tr_12_td_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "td", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](1, "hr"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } +} +function TooltipComponent_tr_12_td_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const metadata_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("", metadata_r4.name, ":"); + } +} +function TooltipComponent_tr_12_td_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "td"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const metadata_r4 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](metadata_r4.value); + } +} +function TooltipComponent_tr_12_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, TooltipComponent_tr_12_td_1_Template, 2, 0, "td", 9)(2, TooltipComponent_tr_12_td_2_Template, 2, 1, "td", 3)(3, TooltipComponent_tr_12_td_3_Template, 2, 1, "td", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const metadata_r4 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", metadata_r4.divider); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !metadata_r4.divider); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !metadata_r4.divider); + } +} +class TooltipComponent extends _cell_popover__WEBPACK_IMPORTED_MODULE_0__.CellPopover { + get isCellPinned() { + return this.viewModelsService.pinnedCell === this.techniqueVM.technique_tactic_union_id; + } + get techniqueVM() { + return this.viewModel.getTechniqueVM(this.technique, this.tactic); + } + constructor(element, dataService, viewModelsService) { + super(element); + this.element = element; + this.dataService = dataService; + this.viewModelsService = viewModelsService; + } + ngOnInit() { + this.placement = this.getPlacement(); + let domain = this.dataService.getDomain(this.viewModel.domainVersionID); + this.notes = domain.notes.filter(note => { + return note.object_refs.includes(this.technique.id); + }); + } + getPlacement() { + return this.getPosition(); + } + unpin() { + this.viewModelsService.pinnedCell = ''; + } + static #_ = this.ɵfac = function TooltipComponent_Factory(t) { + return new (t || TooltipComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_core__WEBPACK_IMPORTED_MODULE_3__.ElementRef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_1__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({ + type: TooltipComponent, + selectors: [["app-tooltip"]], + inputs: { + technique: "technique", + tactic: "tactic", + viewModel: "viewModel" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵInheritDefinitionFeature"]], + decls: 13, + vars: 12, + consts: [[3, "ngClass"], ["colspan", "2", 1, "technique-name"], ["class", "pin", "matTooltip", "unpin", "matTooltipPosition", "above", 3, "click", 4, "ngIf"], [4, "ngIf"], [4, "ngFor", "ngForOf"], ["matTooltip", "unpin", "matTooltipPosition", "above", 1, "pin", 3, "click"], ["colspan", "2"], ["class", "wrap", 4, "ngIf"], [1, "wrap"], ["class", "divider", "colspan", "2", 4, "ngIf"], ["colspan", "2", 1, "divider"]], + template: function TooltipComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 0)(1, "table")(2, "tr")(3, "td", 1)(4, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](6, TooltipComponent_span_6_Template, 3, 0, "span", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](7, TooltipComponent_tr_7_Template, 3, 0, "tr", 3)(8, TooltipComponent_tr_8_Template, 5, 1, "tr", 3)(9, TooltipComponent_tr_9_Template, 5, 2, "tr", 3)(10, TooltipComponent_tr_10_Template, 5, 1, "tr", 3)(11, TooltipComponent_tr_11_Template, 4, 3, "tr", 4)(12, TooltipComponent_tr_12_Template, 4, 3, "tr", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵstyleProp"]("width", ctx.isCellPinned ? "200ch" : ""); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngClass", "tooltip " + ctx.placement); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate2"]("", ctx.technique.name, " (", ctx.technique.attackID, ")"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.isCellPinned); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !ctx.techniqueVM.enabled); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.techniqueVM.score); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.viewModel.layout.showAggregateScores && ctx.techniqueVM.aggregateScore); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx.techniqueVM.comment); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.notes); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.techniqueVM.metadata); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_4__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_4__.NgIf, _angular_material_icon__WEBPACK_IMPORTED_MODULE_5__.MatIcon, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_6__.MatTooltip], + styles: ["@charset \"UTF-8\";\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.tooltip {\n position: absolute;\n padding: 6px;\n z-index: 100;\n min-width: 150px;\n max-width: 300px;\n text-align: left;\n white-space: normal;\n border-radius: 3px;\n font-size: 8pt;\n color: white;\n max-height: 45vh;\n overflow: scroll;\n padding-bottom: 1em;\n z-index: 1000;\n cursor: default;\n}\n.tooltip:not(.top) {\n top: 0;\n}\n.tooltip.bottom.right {\n /* ------------------\n * | |\n * | X XXXX |\n * | XXXX |\n * ------------------\n */\n transform: translateX(10px);\n}\n.tooltip.bottom.right:before {\n left: -9.5px;\n transform: rotate(90deg);\n}\n.tooltip.bottom.left {\n /* ------------------\n * | |\n * | XXXX X |\n * | XXXX |\n * ------------------\n */\n transform: translateX(-10px);\n right: 100%;\n}\n.tooltip.bottom.left:before {\n right: -9px;\n transform: rotate(-90deg);\n}\n.tooltip.top.right {\n /* ------------------\n * | XXXX |\n * | XXXX |\n * | X |\n * | |\n * ------------------\n */\n transform: translateY(-10px);\n bottom: 100%;\n left: 0;\n}\n.tooltip.top.right:before {\n bottom: -9px;\n}\n.tooltip.top.left {\n /* ------------------\n * | XXXX |\n * | XXXX |\n * | X |\n * | |\n * ------------------\n */\n transform: translateY(-10px);\n bottom: 100%;\n right: 0;\n}\n.tooltip.top.left:before {\n bottom: -9px;\n right: 6px;\n}\n.tooltip:before {\n position: absolute;\n font-size: 12px;\n content: \"\u25BC\";\n color: rgba(80, 80, 80, 0.75);\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tooltip {\n background: rgba(80, 80, 80, 0.75);\n }\n}\n.theme-override-light .tooltip {\n background: rgba(80, 80, 80, 0.75);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tooltip {\n background: rgba(70, 77, 255, 0.75);\n }\n}\n.theme-override-dark .tooltip {\n background: rgba(70, 77, 255, 0.75);\n}\n.tooltip table {\n width: 100%;\n border-collapse: collapse;\n}\n.tooltip table td {\n padding: 3px;\n vertical-align: top;\n white-space: pre-line !important;\n}\n.tooltip table td:first-child {\n white-space: nowrap;\n padding-bottom: 3px !important;\n}\n.tooltip table td.wrap {\n white-space: normal;\n}\n.tooltip table tr:nth-child(2) td {\n border-top: 1px solid white;\n}\n.tooltip table tr .divider {\n margin: 0;\n padding: 0;\n}\n.tooltip table tr .divider hr {\n margin: 0;\n padding: 0;\n}\n.tooltip table .technique-name span {\n vertical-align: middle;\n}\n.tooltip table .pin {\n border-radius: 4px;\n float: right;\n cursor: pointer;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tooltip table .pin {\n background-color: rgba(160, 160, 160, 0.75);\n }\n}\n.theme-override-light .tooltip table .pin {\n background-color: rgba(160, 160, 160, 0.75);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tooltip table .pin {\n background-color: rgba(143, 146, 254, 0.75);\n }\n}\n.theme-override-dark .tooltip table .pin {\n background-color: rgba(143, 146, 254, 0.75);\n}\n.tooltip table .pin .mat-icon {\n font-size: 16px;\n height: 20px;\n width: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L3RlY2huaXF1ZS1jZWxsL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvbWF0cml4L3RlY2huaXF1ZS1jZWxsL2NlbGwtcG9wb3Zlci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdCQUFnQjtBQ1NoQjs7Ozs7Ozs7RUFBQTtBRE5BO0VFRkksa0JBQUE7RUFDQSxZQUFBO0VBSUEsWUFBQTtFQUNBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLG1CQUFBO0VBRUEsa0JBQUE7RUFDQSxjQUFBO0VBQ0EsWUFBQTtFRlJBLGdCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxtQkFBQTtFQUNBLGFBQUE7RUFDQSxlQUFBO0FBZ0JKO0FFdkJJO0VBQ0ksTUFBQTtBRnlCUjtBRWRJO0VBQ0k7Ozs7O0lBQUE7RUFNQSwyQkFBQTtBRmdCUjtBRWZRO0VBQ0ksWUFBQTtFQUNBLHdCQUFBO0FGaUJaO0FFZEk7RUFDSTs7Ozs7SUFBQTtFQU1BLDRCQUFBO0VBQ0EsV0FBQTtBRmdCUjtBRWZRO0VBQ0ksV0FBQTtFQUNBLHlCQUFBO0FGaUJaO0FFZEk7RUFDSTs7Ozs7O0lBQUE7RUFPQSw0QkFBQTtFQUNBLFlBQUE7RUFDQSxPQUFBO0FGZ0JSO0FFZlE7RUFDSSxZQUFBO0FGaUJaO0FFYkk7RUFDSTs7Ozs7O0lBQUE7RUFPQSw0QkFBQTtFQUNBLFlBQUE7RUFDQSxRQUFBO0FGZVI7QUVkUTtFQUNJLFlBQUE7RUFDQSxVQUFBO0FGZ0JaO0FFWkk7RUFDSSxrQkFBQTtFQUNBLGVBQUE7RUFDQSxZQUFBO0VBQ0EsNkJBQUE7QUZjUjtBQzZGUTtFQUhKO0lBSVEsa0NEdEw4QjtFQTRGeEM7QUFDRjtBQzRGSTtFQUdJLGtDRDVMa0M7QUFnRzFDO0FDd0dRO0VBSEo7SUFJUSxtQ0R6TXNEO0VBb0doRTtBQUNGO0FDdUdJO0VBR0ksbUNEL00wRDtBQXdHbEU7QUFsR0k7RUFDSSxXQUFBO0VBQ0EseUJBQUE7QUFvR1I7QUFuR1E7RUFDSSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxnQ0FBQTtBQXFHWjtBQW5HUTtFQUNJLG1CQUFBO0VBQ0EsOEJBQUE7QUFxR1o7QUFuR1E7RUFDSSxtQkFBQTtBQXFHWjtBQW5HUTtFQUNJLDJCQUFBO0FBcUdaO0FBbkdRO0VBQ0ksU0FBQTtFQUNBLFVBQUE7QUFxR1o7QUFwR1k7RUFDSSxTQUFBO0VBQ0EsVUFBQTtBQXNHaEI7QUFuR1E7RUFDSSxzQkFBQTtBQXFHWjtBQW5HUTtFQUVJLGtCQUFBO0VBQ0EsWUFBQTtFQUNBLGVBQUE7QUFvR1o7QUMwQ1E7RUFISjtJQUlRLDJDRGxKNEM7RUEyR3REO0FBQ0Y7QUN5Q0k7RUFHSSwyQ0R4SmdEO0FBK0d4RDtBQ3FEUTtFQUhKO0lBSVEsMkNEckt1RTtFQW1IakY7QUFDRjtBQ29ESTtFQUdJLDJDRDNLMkU7QUF1SG5GO0FBbEhZO0VBQ0ksZUFBQTtFQUNBLFlBQUE7RUFDQSxXQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUFvSGhCIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnLi4vY2VsbC1wb3BvdmVyLnNjc3MnO1xuQGltcG9ydCAnLi4vLi4vLi4vLi4vY29sb3JzJztcblxuLnRvb2x0aXAge1xuICAgIEBpbmNsdWRlIGNlbGwtcG9wb3ZlcigwLjc1KTtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIHJnYmEoODAsIDgwLCA4MCwgMC43NSksIHJnYmEoIzQ2NGRmZiwgMC43NSkpO1xuICAgIG1heC1oZWlnaHQ6IDQ1dmg7XG4gICAgb3ZlcmZsb3c6IHNjcm9sbDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMWVtO1xuICAgIHotaW5kZXg6IDEwMDA7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIHRhYmxlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgIHRkIHtcbiAgICAgICAgICAgIHBhZGRpbmc6IDNweDtcbiAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgICB0ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDNweCAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgICAgIHRkLndyYXAge1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgfVxuICAgICAgICB0cjpudGgtY2hpbGQoMikgdGQge1xuICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlO1xuICAgICAgICB9XG4gICAgICAgIHRyIC5kaXZpZGVyIHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICBociB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLnRlY2huaXF1ZS1uYW1lIHNwYW4ge1xuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgICAgfVxuICAgICAgICAucGluIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kLWNvbG9yJywgcmdiYSgxNjAsIDE2MCwgMTYwLCAwLjc1KSwgcmdiYSgjOGY5MmZlLCAwLjc1KSk7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG5cbiAgICAgICAgICAgIC5tYXQtaWNvbiB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICAgICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIkY29sdW1uLWhvdmVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7XG4kZGlzYWJsZWQtY29sb3I6IGRhcmtlbigkY29sdW1uLWhvdmVyLWNvbG9yLCAyMCUpO1xuXG4vLyBBVFQmQ0sgQnJhbmQgY29sb3JzXG4kYXR0YWNrLWNvbG9yczogKFxuICAgIGF0dGFjay1vcmFuZ2U6ICNjNjNmMWYsXG4gICAgYXR0YWNrLWJsdWU6ICMwNjJmNGYsXG4pO1xuXG4vKipcbiAqIENvbG9ycyB1c2VkIGFjcm9zcyB0aGUgTmF2aWdhdG9yLiBTaGFyZWQgYnkgdGhlIEFUVCZDSyBXZWJzaXRlLlxuICogRm9yIGVhY2ggY29sb3ItcGFpcjpcbiAqICAgLSBcImNvbG9yXCIgcmVmZXJzIHRvIHRoZSBjb2xvciBpdHNlbGZcbiAqICAgLSBcIm9uLWNvbG9yXCIgcmVmZXJzIHRvIHRoZSBtb3N0IHJlYWRhYmxlIHRleHQtY29sb3IgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgY29sb3IuXG4gKiBOb3RlOiBzb21lIGNvbG9ycyBkb24ndCBkZWZpbmUgb24tY29sb3JzLiBUaGlzIGlzIGJlY2F1c2UsIGZvciB0aGVzZSBjb2xvcnMsIHRoZXkgYXJlbid0IGludGVuZGVkIHRvXG4gKiBhcHBlYXIgd2l0aCBpbm5lciBjb250ZW50LiBGb3IgZXhhbXBsZSwgXCJsaW5rXCIgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBsaW5rIHRleHQsIHdoaWNoIGluaGVyZW50bHlcbiAqIGNhbm5vdCBoYXZlIGlubmVyIHRleHQuXG4gKi9cbiRjb2xvcnM6IChcbiAgICBwcmltYXJ5OiAoXG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stb3JhbmdlKSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy91c2VkIGZvciBoZWFkZXIgYW5kIHNvbWUgbmF2IGVsZW1lbnRzXG4gICAgc2Vjb25kYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLWJsdWUpLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vdXNlZCBmb3IgZm9vdGVyIGFuZCBzb21lIGJ1dHRvbnNcbiAgICBib2R5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICAvL3ByaW1hcnkgcGFnZSBib2R5XG4gICAgbGlnaHQ6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIGRhcms6IChcbiAgICAgICAgY29sb3I6ICMwODA4MGIsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vIGRhcmsgdGhlbWUgY29sb3JzIHZhcmlhdGlvbnMgMC0zIChmcm9tIGRhcmtlc3QgdG8gbGlnaHRlc3QpXG4gICAgZGFyay0xOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzFhMWEyMyxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTI6IChcbiAgICAgICAgY29sb3I6ICMyZTJlM2YsXG4gICAgICAgIG9uLWNvbG9yOiAjZmE2MzQxLFxuICAgICksXG4gICAgLy8gYWNjZW50IGRhcmsgY29sb3Igc2NoZW1lICh1c2VkIGZvciA6aG92ZXIgc2VsZWN0b3JzKVxuICAgIGRhcmstMzpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMzZjNmNTYsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay00OiAoXG4gICAgICAgIGNvbG9yOiAjNGM0YzY4LFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBkYXJrLWRpc2FibGVkOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyAyNSUpLFxuICAgICksXG4gICAgZGFyay1saW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNzU4OGU4LFxuICAgICksXG4gICAgZGFyay1saW5rLWFjdGl2ZTogKFxuICAgICAgICBjb2xvcjogI2U4NDdlOCxcbiAgICApLFxuICAgIGxpbms6IChcbiAgICAgICAgY29sb3I6ICM0ZjdjYWMsXG4gICAgKSxcbiAgICAvLyBoeXBlcmxpbmtzXG4gICAgbWF0cml4LWhlYWRlcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IGdyYXksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy8gY29sb3Igb2YgbWF0cml4IGhlYWRlcnNcbiAgICBjZWxsLWhpZ2hsaWdodC1jb2xvcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHJnYig5NiwgMTk3LCAyNTUpLFxuICAgICAgICApLFxuICAgIGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM0NjRkZmYsXG4gICAgKSxcbiAgICBob3Zlci1jZWxsLWZvbnQtY29sb3I6IChcbiAgICAgICAgY29sb3I6IHJnYigwLCAwLCAwKSxcbiAgICApLFxuICAgIHBhbmVsLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNkZGQsXG4gICAgKSxcbiAgICBwYW5lbC1saWdodDogKFxuICAgICAgICBjb2xvcjogbGlnaHRlbigjZGRkLCA4JSksXG4gICAgKSxcbiAgICB0YWItdGV4dC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzU1NSxcbiAgICApLFxuICAgIGJ1dHRvbi1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjYjhiOGI4LFxuICAgICksXG4gICAgLy9ib290c3RyYXAgY29sb3JzXG4gICAgYm9vdHN0cmFwLXByaW1hcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjNDI4YmNhLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGJvb3RzdHJhcC1zdWNjZXNzOiAoXG4gICAgICAgIGNvbG9yOiAjNWNiODVjLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBib290c3RyYXAtZGFuZ2VyOiAoXG4gICAgICAgIGNvbG9yOiAjZDk1MzRmLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtd2FybmluZzogKFxuICAgICAgICBjb2xvcjogI2YwYWQ0ZSxcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWluZm86IChcbiAgICAgICAgY29sb3I6ICM1YmMwZGUsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuKTtcblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBjb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIGNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBnZXQgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGNvbG9yLCBmb3IgcGF0dGVybmluZ1xuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgZGFyaywgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGxpZ2h0ZXIuXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBsaWdodCwgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGRhcmtlci5cbi8vIGNvbnRyYXN0LCBhbiBvcHRpb25hbCBhcmd1bWVudCwgbXVsdGlwbGllcyB0byBjcmVhdGUgYSBtb3JlIGRpc3RhbnQgb3Igc2ltaWxhciBjb2xvci4gPjEgaXMgbW9yZSBkaXN0YW50LCA8MSBpcyBtb3JlIHNpbWlsYXIuXG5AZnVuY3Rpb24gY29sb3ItYWx0ZXJuYXRlKCRuYW1lLCAkY29udHJhc3Q6IDEpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAkd2VpZ2h0OiAkY29udHJhc3QgKiA1JSk7XG59XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgb24tY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBvbi1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ29uLWNvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZW1waGFzaXplZCBvbi1jb2xvciBpcyBsZXNzIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgb24tY29sb3IoJG5hbWUpKTtcbn1cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGRlZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBkZWVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbW9yZSBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWRlZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChjb2xvcigkbmFtZSksIG9uLWNvbG9yKCRuYW1lKSwgMjUlKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBjb21wdXRlIGEgYm9yZGVyIGNvbG9yIGZvciB0aGUgY29sb3JcbkBmdW5jdGlvbiBib3JkZXItY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAxMi41JSk7XG4gICAgLy8gQHJldHVybiByZ2JhKGludmVydChjb2xvcigkbmFtZSkpLCAwLjEyNSk7XG59XG5cbi8vIElNUE9SVEFOVCBVU0FHRSBOT1RFOlxuLy8gdG8gdXNlIGFkYXB0aXZlIGNvbG9ycywgeW91IE1VU1QgZGlzYWJsZSB2aWV3IGVuY2Fwc3VsYXRpb24gb24gdGhlIGNvbXBvbmVudFxuLy8geW91J3JlIGFwcGx5aW5nIHRoZSBzdHlsZXMgd2l0aGluLiBPdGhlcndpc2UgYW5jZXN0b3IgY2xhc3NlcyBjYW5ub3QgYmUgYXNzZXNzZWRcbi8vIGJ5IHRoZSBtaXhpbnMgdG8gZGV0ZXJtaW5lIHRoZSBhcHAgdGhlbWUgY29uZmlndXJhdGlvbi5cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBsaWdodCBhbmQgZGFyayB0aGVtZXNcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yKCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlLCAkZGFyay12YWx1ZSkge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKTtcbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWxpZ2h0ICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGxpZ2h0IHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgIH1cbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWRhcmsgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgZGFyayB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgfVxufVxuIiwiQG1peGluIGNlbGwtcG9wb3Zlcigkb3BhY2l0eSkge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBwYWRkaW5nOiA2cHg7XG4gICAgJjpub3QoLnRvcCkge1xuICAgICAgICB0b3A6IDA7XG4gICAgfVxuICAgIHotaW5kZXg6IDEwMDtcbiAgICBtaW4td2lkdGg6IDE1MHB4O1xuICAgIG1heC13aWR0aDogMzAwcHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuXG4gICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgIGZvbnQtc2l6ZTogOHB0O1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAmLmJvdHRvbS5yaWdodCB7XG4gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgKiB8ICAgICAgICAgICAgICAgIHxcbiAgICAgICAgICogfCAgICAgICBYIFhYWFggICB8XG4gICAgICAgICAqIHwgICAgICAgICBYWFhYICAgfFxuICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICovXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMHB4KTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgbGVmdDogLTkuNXB4O1xuICAgICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB9XG4gICAgfVxuICAgICYuYm90dG9tLmxlZnQge1xuICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgICogfCAgICAgICAgICAgICAgICB8XG4gICAgICAgICAqIHwgIFhYWFggWCAgICAgICAgfFxuICAgICAgICAgKiB8ICBYWFhYICAgICAgICAgIHxcbiAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwcHgpO1xuICAgICAgICByaWdodDogMTAwJTtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgcmlnaHQ6IC05cHg7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpO1xuICAgICAgICB9XG4gICAgfVxuICAgICYudG9wLnJpZ2h0IHtcbiAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAqIHwgICAgICAgIFhYWFggIHxcbiAgICAgICAgICogfCAgICAgICAgWFhYWCAgfFxuICAgICAgICAgKiB8ICAgICAgIFggICAgICB8XG4gICAgICAgICAqIHwgICAgICAgICAgICAgIHxcbiAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgICAqL1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpO1xuICAgICAgICBib3R0b206IDEwMCU7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvdHRvbTogLTlweDtcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJi50b3AubGVmdCB7XG4gICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgKiB8ICAgIFhYWFggICAgICB8XG4gICAgICAgICAqIHwgICAgWFhYWCAgICAgIHxcbiAgICAgICAgICogfCAgICAgICBYICAgICAgfFxuICAgICAgICAgKiB8ICAgICAgICAgICAgICB8XG4gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAgKi9cbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTtcbiAgICAgICAgYm90dG9tOiAxMDAlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgJjpiZWZvcmUge1xuICAgICAgICAgICAgYm90dG9tOiAtOXB4O1xuICAgICAgICAgICAgcmlnaHQ6IDZweDtcbiAgICAgICAgICAgIC8vIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgY29udGVudDogJ1xcMjVCQyc7XG4gICAgICAgIGNvbG9yOiByZ2JhKDgwLCA4MCwgODAsICRvcGFjaXR5KTtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 38514: +/*!****************************************************************************!*\ + !*** ./src/app/search-and-multiselect/search-and-multiselect.component.ts ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SearchAndMultiselectComponent: () => (/* binding */ SearchAndMultiselectComponent) +/* harmony export */ }); +/* harmony import */ var _classes_stix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../classes/stix */ 54448); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/viewmodels.service */ 57833); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/material/form-field */ 24950); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/material/input */ 95541); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @angular/material/expansion */ 19322); +/* harmony import */ var _angular_material_card__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @angular/material/card */ 53777); +/* harmony import */ var _angular_material_divider__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/material/divider */ 14102); + + + + + + + + + + + + + +function SearchAndMultiselectComponent_div_12_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 18)(1, "input", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_div_12_Template_input_click_1_listener() { + const field_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r1).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.toggleFieldEnabled(field_r2.field)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](2, "label", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const field_r2 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("id", field_r2.field)("checked", field_r2.enabled); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("for", field_r2.field); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate"](field_r2.label); + } +} +function SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_span_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const result_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("", result_r6.parent.name, " :"); + } +} +function SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("mouseenter", function SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_td_mouseenter_1_listener() { + const result_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r5).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.mouseEnter(result_r6)); + })("mouseleave", function SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_td_mouseleave_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r5); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.mouseLeave()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](2, SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_span_2_Template, 2, 1, "span", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](4, "td")(5, "a", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](6, "view"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](7, "td")(8, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_button_click_8_listener() { + const result_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r5).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.select(result_r6)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](9, "select"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](10, "td")(11, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_button_click_11_listener() { + const result_r6 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r5).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.deselect(result_r6)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](12, "deselect"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const result_r6 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", result_r6.isSubtechnique); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", result_r6.name, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpropertyInterpolate"]("href", result_r6.url, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsanitizeUrl"]); + } +} +function SearchAndMultiselectComponent_ng_template_22_table_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "table", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template, 13, 3, "tr", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx_r2.techniqueResults); + } +} +function SearchAndMultiselectComponent_ng_template_22_ng_template_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1, "no results for techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } +} +function SearchAndMultiselectComponent_ng_template_22_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div")(1, "div", 21)(2, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_22_Template_button_click_2_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r4); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.selectAll(ctx_r2.techniqueResults)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](3, "select all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](4, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_22_Template_button_click_4_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r4); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.deselectAll(ctx_r2.techniqueResults)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](5, "deselect all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](6, "div", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](7, SearchAndMultiselectComponent_ng_template_22_table_7_Template, 2, 1, "table", 24)(8, SearchAndMultiselectComponent_ng_template_22_ng_template_8_Template, 2, 0, "ng-template", null, 0, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const noTechniquesResults_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵreference"](9); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx_r2.techniqueResults.length > 0)("ngIfElse", noTechniquesResults_r7); + } +} +function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template(rf, ctx) { + if (rf & 1) { + const _r11 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("mouseenter", function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_td_mouseenter_1_listener() { + const stixObject_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r11).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.mouseEnter(stixObject_r12, false)); + })("mouseleave", function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_td_mouseleave_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r11); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.mouseLeave()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "td")(4, "a", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](5, "view"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](6, "td")(7, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_button_click_7_listener() { + const stixObject_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r11).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.select(stixObject_r12, false)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](8, "select"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](9, "td")(10, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_button_click_10_listener() { + const stixObject_r12 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r11).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](4); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.deselect(stixObject_r12, false)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](11, "deselect"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const stixObject_r12 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", stixObject_r12.name, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpropertyInterpolate"]("href", stixObject_r12.url, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsanitizeUrl"]); + } +} +function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "table"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template, 12, 2, "tr", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const stixType_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", stixType_r10.objects); + } +} +function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_ng_template_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const stixType_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2).$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("no results for ", stixType_r10.label, ""); + } +} +function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template(rf, ctx) { + if (rf & 1) { + const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 21)(1, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r9); + const stixType_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.selectAll(stixType_r10.objects, false)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "select all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template_button_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r9); + const stixType_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.deselectAll(stixType_r10.objects, false)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4, "deselect all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](5, "div", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](6, SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_Template, 2, 1, "table", 32)(7, SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_ng_template_7_Template, 2, 1, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const noResults_r13 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵreference"](8); + const stixType_r10 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", stixType_r10.objects.length > 0)("ngIfElse", noResults_r13); + } +} +function SearchAndMultiselectComponent_mat_expansion_panel_23_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "mat-expansion-panel", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_mat_expansion_panel_23_Template_mat_expansion_panel_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r8); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.userClickedExpand = true); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](1, "mat-expansion-panel-header")(2, "mat-panel-title")(3, "h4"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpipe"](5, "titlecase"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](6, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](7, SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template, 9, 2, "ng-template", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const stixType_r10 = ctx.$implicit; + const i_r14 = ctx.index; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("expanded", ctx_r2.expandedPanels[i_r14 + 1]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate2"]("", _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpipeBind1"](5, 3, stixType_r10.label), " (", stixType_r10.objects.length, ")"); + } +} +function SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template(rf, ctx) { + if (rf & 1) { + const _r16 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "tr")(1, "td", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("mouseenter", function SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_td_mouseenter_1_listener() { + const label_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r16).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.mouseEnterAll(ctx_r2.stixDataComponents.get(label_r17).objects)); + })("mouseleave", function SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_td_mouseleave_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r16); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.mouseLeave()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "td")(4, "a", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](5, "view"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](6, "td")(7, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_button_click_7_listener() { + const label_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r16).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.selectAll(ctx_r2.stixDataComponents.get(label_r17).objects, true)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](8, "select"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](9, "td")(10, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_button_click_10_listener() { + const label_r17 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r16).$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.deselectAll(ctx_r2.stixDataComponents.get(label_r17).objects, true)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](11, "deselect"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const label_r17 = ctx.$implicit; + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" ", label_r17, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵpropertyInterpolate"]("href", ctx_r2.stixDataComponents.get(label_r17).url, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵsanitizeUrl"]); + } +} +function SearchAndMultiselectComponent_ng_template_30_table_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "table"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](1, SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template, 12, 2, "tr", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx_r2.stixDataComponentLabels); + } +} +function SearchAndMultiselectComponent_ng_template_30_ng_template_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1, "no results for data sources"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } +} +function SearchAndMultiselectComponent_ng_template_30_Template(rf, ctx) { + if (rf & 1) { + const _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 21)(1, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_30_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r15); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.selectAll(ctx_r2.stixDataComponentsResults, true)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "select all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "button", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_ng_template_30_Template_button_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵrestoreView"](_r15); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵresetView"](ctx_r2.deselectAll(ctx_r2.stixDataComponentsResults, true)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](4, "deselect all"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](5, "div", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](6, SearchAndMultiselectComponent_ng_template_30_table_6_Template, 2, 1, "table", 32)(7, SearchAndMultiselectComponent_ng_template_30_ng_template_7_Template, 2, 0, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplateRefExtractor"]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const noResults_r18 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵreference"](8); + const ctx_r2 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", ctx_r2.stixDataComponentLabels.length > 0)("ngIfElse", noResults_r18); + } +} +class SearchAndMultiselectComponent { + // query setter + set query(newQuery) { + this._query = newQuery; + if (!this.debounceFunction) { + this.debounceFunction = setTimeout(() => { + this.getResults(this._query); + this.debounceFunction = null; + this.previousQuery = this._query; + }, 300); + } + } + // get query length + get queryLength() { + return this._query.length; + } + // get techniques matching label + get stixDataComponentsResults() { + let results = []; + this.stixDataComponentLabels.forEach(label => { + results = results.concat(this.stixDataComponents.get(label).objects); + }); + return results; + } + constructor(dataService, viewModelsService) { + this.dataService = dataService; + this.viewModelsService = viewModelsService; + this.stixTypes = []; + this.techniqueResults = []; + // Data Components is a map mainly because it is a collection of labels that map to + // an array of techniques, where we want to filter/sort by label name + this.stixDataComponents = new Map(); + this.stixDataComponentLabels = []; + this.userClickedExpand = false; + this.expandedPanels = { + 0: true, + // techniques panel + 1: false, + // groups panel + 2: false, + // software panel + 3: false, + // campaign panel + 4: false, + // mitigations panel + 5: false, + // data components panel + 6: false // assets panel + }; + this.fields = [{ + label: 'name', + field: 'name', + enabled: true + }, { + label: 'ATT&CK ID', + field: 'attackID', + enabled: true + }, { + label: 'description', + field: 'description', + enabled: true + }, { + label: 'data sources', + field: 'datasources', + enabled: true + }]; + this.previousQuery = ''; + this._query = ''; + // intentionally left blank + } + ngOnInit() { + this.getResults(); + } + /** + * Takes an array of items and does the following: + * 1) if the query is empty, then it sorts the array + * 2) if the query is not empty, then it filters the already sorted array until nothing is left, or until + * the query is cleared out and empty again + * @param items StixObject[] or Technique[] objects to be filtered and sorted + * @param query user-input query in search bar + * @param sortTechniquesAndSubtechniques will be true if called from getTechniqueResults(), + * to sort techniques and all its subtechniques, + * otherwise just sort StixObject items by name + */ + filterAndSort(items, query = '', sortTechniquesAndSubtechniques = false) { + let self = this; + let results = items.filter(t => !t.deprecated && !t.revoked); + if (query.trim() === '') { + // sort the array + if (sortTechniquesAndSubtechniques) { + results.sort((tA, tB) => { + let c1 = tA.isSubtechnique ? tA.parent.name : tA.name; + let c2 = tB.isSubtechnique ? tB.parent.name : tB.name; + return c1.localeCompare(c2); + }); + } else { + results.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())); + } + } else { + // deconflict IDs for cross-tactic techniques + let seenIDs = new Set(); + results = results.filter(function (technique) { + if (seenIDs.has(technique.id)) return false; + for (let field of self.fields) { + if (field.enabled) { + // query in this field + if (technique[field.field]?.toLowerCase().includes(query.trim().toLowerCase())) { + seenIDs.add(technique.id); + return true; + } + } + } + return false; + }); + } + return results; + } + /** + * Filters and sorts data component labels + * @param labels list of data component labels + * @param query user-input query in search bar + */ + filterAndSortLabels(labels, query) { + let results = labels; + if (query.trim() === '') { + return results.sort(); + } else { + return results.filter(r => r.toLowerCase().includes(query.trim().toLowerCase())); + } + } + /** + * Checks if the query is: + * 1) valid, and + * 2) part of last query, otherwise call getTechniques() and getStixData() to search all objects again + **/ + getResults(query = '', fieldToggled = false) { + if (query.trim() != '' && query.includes(this.previousQuery) && !fieldToggled) { + this.techniqueResults = this.filterAndSort(this.techniqueResults, query, true); + this.stixTypes.forEach(item => item['objects'] = this.filterAndSort(item['objects'], query)); + } else { + this.getTechniques(); + this.getStixData(); + } + this.stixDataComponentLabels = this.filterAndSortLabels(this.stixDataComponentLabels, query); + this.expandPanels(); + } + /** + * Update expanded panels based on query and results + */ + expandPanels() { + if (!this.userClickedExpand) { + this.expandedPanels[0] = this.techniqueResults.length > 0; + let isPrevExpanded = this.expandedPanels[0]; + if (!isPrevExpanded) { + this.stixTypes.forEach((s, i) => { + this.expandedPanels[i + 1] = !isPrevExpanded && s.objects.length > 0; + isPrevExpanded = s.isExpanded; + }); + } + this.expandedPanels[4] = !isPrevExpanded && this.stixDataComponentLabels.length > 0; + } else { + let isAllCollapsed = false; + for (const isPanelExpanded in this.expandedPanels) { + if (isPanelExpanded) { + isAllCollapsed = true; + break; + } + } + this.userClickedExpand = isAllCollapsed; + } + } + /** + * Retrieve master list of techniques and sub-techniques + */ + getTechniques() { + let allTechniques = this.dataService.getDomain(this.viewModel.domainVersionID).techniques; + for (let technique of allTechniques) { + allTechniques = allTechniques.concat(technique.subtechniques); + } + this.techniqueResults = this.filterAndSort(allTechniques, this._query, true); + } + /** + * Retrieve master list of STIX objects + */ + getStixData() { + let domain = this.dataService.getDomain(this.viewModel.domainVersionID); + this.stixTypes = [{ + label: 'threat groups', + objects: this.filterAndSort(domain.groups, this._query) + }, { + label: 'software', + objects: this.filterAndSort(domain.software, this._query) + }, { + label: 'mitigations', + objects: this.filterAndSort(domain.mitigations, this._query) + }, { + label: 'campaigns', + objects: this.filterAndSort(domain.campaigns, this._query) + }, { + label: 'assets', + objects: this.filterAndSort(domain.assets, this._query) + }]; + domain.dataComponents.forEach(c => { + const source = c.source(this.viewModel.domainVersionID); + const label = `${source.name}: ${c.name}`; + const obj = { + objects: c.techniques(this.viewModel.domainVersionID), + url: source.url + }; + this.stixDataComponents.set(label, obj); + }); + this.stixDataComponentLabels = this.filterAndSortLabels(Array.from(this.stixDataComponents.keys()), this._query); + } + toggleFieldEnabled(field) { + for (let thefield of this.fields) { + if (thefield.field == field) { + thefield.enabled = !thefield.enabled; + // set query to empty string to trigger getResults() in the case that: + // 1) a field was toggled, and + // 2) the query did not change + this.getResults('', true); + break; + } + } + } + mouseEnterAll(techniques) { + techniques.forEach(t => this.mouseEnter(t)); + } + mouseEnter(technique, isTechnique = true) { + if (!isTechnique) { + for (let t of this.getRelated(technique)) { + this.viewModel.selectTechniqueAcrossTactics(t, true, true); + } + } else { + this.viewModel.highlightTechnique(technique); + } + } + mouseLeave() { + this.viewModel.clearHighlight(); + } + select(stixObject, isTechnique = true) { + if (isTechnique) { + this.viewModel.selectTechniqueAcrossTactics(stixObject); + } else if (!isTechnique) { + for (let technique of this.getRelated(stixObject)) { + this.viewModel.selectTechniqueAcrossTactics(technique); + } + } + this.viewModelsService.onSelectionChange.emit(); // emit selection change + } + deselect(stixObject, isTechnique = true) { + if (isTechnique) { + this.viewModel.unselectTechniqueAcrossTactics(stixObject); + } else if (!isTechnique) { + for (let technique of this.getRelated(stixObject)) { + this.viewModel.unselectTechniqueAcrossTactics(technique); + } + } + this.viewModelsService.onSelectionChange.emit(); // emit selection change + } + selectAll(items, isTechniqueArray = true) { + if (isTechniqueArray) { + for (let result of items) this.select(result, isTechniqueArray); + } else if (!isTechniqueArray) { + for (let stixObject of items) this.select(stixObject, isTechniqueArray); + } + this.viewModelsService.onSelectionChange.emit(); // emit selection change + } + deselectAll(items, isTechniqueArray = true) { + if (isTechniqueArray) { + for (let result of items) this.deselect(result, isTechniqueArray); + } else if (!isTechniqueArray) { + for (let stixObject of items) this.deselect(stixObject, isTechniqueArray); + } + this.viewModelsService.onSelectionChange.emit(); // emit selection change + } + getRelated(stixObject) { + // master list of all techniques and sub-techniques + let techniques = this.dataService.getDomain(this.viewModel.domainVersionID).techniques; + let allTechniques = techniques.concat(this.dataService.getDomain(this.viewModel.domainVersionID).subtechniques); + let domainVersionID = this.viewModel.domainVersionID; + if (stixObject instanceof _classes_stix__WEBPACK_IMPORTED_MODULE_0__.Group) { + return allTechniques.filter(technique => stixObject.relatedTechniques(domainVersionID).includes(technique.id)); + } else if (stixObject instanceof _classes_stix__WEBPACK_IMPORTED_MODULE_0__.Software) { + return allTechniques.filter(technique => stixObject.relatedTechniques(domainVersionID).includes(technique.id)); + } else if (stixObject instanceof _classes_stix__WEBPACK_IMPORTED_MODULE_0__.Mitigation) { + return allTechniques.filter(technique => stixObject.relatedTechniques(domainVersionID).includes(technique.id)); + } else if (stixObject instanceof _classes_stix__WEBPACK_IMPORTED_MODULE_0__.Campaign) { + return allTechniques.filter(technique => stixObject.relatedTechniques(domainVersionID).includes(technique.id)); + } else if (stixObject instanceof _classes_stix__WEBPACK_IMPORTED_MODULE_0__.Asset) { + return allTechniques.filter(technique => stixObject.relatedTechniques(domainVersionID).includes(technique.id)); + } + } + static #_ = this.ɵfac = function SearchAndMultiselectComponent_Factory(t) { + return new (t || SearchAndMultiselectComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_1__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_2__.ViewModelsService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({ + type: SearchAndMultiselectComponent, + selectors: [["app-search-and-multiselect"]], + inputs: { + viewModel: "viewModel" + }, + decls: 35, + vars: 7, + consts: [["noTechniquesResults", ""], ["noResults", ""], [1, "search-and-multiselect"], [1, "sidebar-content"], ["appearance", "outlined"], [1, "settings"], ["appearance", "outline"], ["matInput", "", "placeholder", "Search", 3, "ngModelChange", "ngModel"], ["matPrefix", ""], [1, "title"], [1, "fields"], ["class", "field", 4, "ngFor", "ngForOf"], ["multi", ""], [3, "click", "expanded"], ["matExpansionPanelContent", ""], ["class", "stixType", 3, "expanded", "click", 4, "ngFor", "ngForOf"], [1, "button-container", "sidebar-content"], ["mat-raised-button", "", 3, "click"], [1, "field"], ["type", "checkbox", 1, "checkbox-custom", 3, "click", "id", "checked"], [1, "checkbox-custom-label", "noselect", 3, "for"], [1, "allresults-buttons"], [1, "button", 3, "click"], [1, "results"], ["class", "results", 4, "ngIf", "ngIfElse"], [4, "ngFor", "ngForOf"], [3, "mouseenter", "mouseleave"], [4, "ngIf"], ["target", "_blank", "rel", "noopener noreferrer", 3, "href"], [1, "no-results"], [1, "stixType", 3, "click", "expanded"], [1, "results", "objects"], [4, "ngIf", "ngIfElse"]], + template: function SearchAndMultiselectComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 2)(1, "div", 3)(2, "mat-card", 4)(3, "div", 5)(4, "mat-card-content")(5, "mat-form-field", 6)(6, "input", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtwoWayListener"]("ngModelChange", function SearchAndMultiselectComponent_Template_input_ngModelChange_6_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtwoWayBindingSet"](ctx.query, $event) || (ctx.query = $event); + return $event; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](7, "mat-icon", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](8, "search"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](9, "span", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](10, "Search Settings"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](11, "div", 10); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](12, SearchAndMultiselectComponent_div_12_Template, 4, 4, "div", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](13, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](14, "div", 3)(15, "mat-accordion", 12)(16, "mat-expansion-panel", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_Template_mat_expansion_panel_click_16_listener() { + return ctx.userClickedExpand = true; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](17, "mat-expansion-panel-header")(18, "mat-panel-title")(19, "h4"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](20); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](21, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](22, SearchAndMultiselectComponent_ng_template_22_Template, 10, 2, "ng-template", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](23, SearchAndMultiselectComponent_mat_expansion_panel_23_Template, 8, 5, "mat-expansion-panel", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](24, "mat-expansion-panel", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_Template_mat_expansion_panel_click_24_listener() { + return ctx.userClickedExpand = true; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](25, "mat-expansion-panel-header")(26, "mat-panel-title")(27, "h4"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](28); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](29, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](30, SearchAndMultiselectComponent_ng_template_30_Template, 9, 2, "ng-template", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelement"](31, "mat-divider"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](32, "div", 16)(33, "button", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function SearchAndMultiselectComponent_Template_button_click_33_listener() { + return ctx.viewModel.sidebarOpened = !ctx.viewModel.sidebarOpened; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](34, "Close"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtwoWayProperty"]("ngModel", ctx.query); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.fields); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("expanded", ctx.expandedPanels[0]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("Techniques (", ctx.techniqueResults.length, ")"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngForOf", ctx.stixTypes); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("expanded", ctx.expandedPanels[4]); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"]("Data Sources (", ctx.stixDataComponentLabels.length, ")"); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_4__.NgForOf, _angular_common__WEBPACK_IMPORTED_MODULE_4__.NgIf, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_5__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_5__.MatPrefix, _angular_forms__WEBPACK_IMPORTED_MODULE_6__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_6__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_6__.NgModel, _angular_material_input__WEBPACK_IMPORTED_MODULE_7__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_8__.MatButton, _angular_material_icon__WEBPACK_IMPORTED_MODULE_9__.MatIcon, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__.MatAccordion, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__.MatExpansionPanel, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__.MatExpansionPanelHeader, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__.MatExpansionPanelTitle, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__.MatExpansionPanelDescription, _angular_material_expansion__WEBPACK_IMPORTED_MODULE_10__.MatExpansionPanelContent, _angular_material_card__WEBPACK_IMPORTED_MODULE_11__.MatCard, _angular_material_card__WEBPACK_IMPORTED_MODULE_11__.MatCardContent, _angular_material_divider__WEBPACK_IMPORTED_MODULE_12__.MatDivider, _angular_common__WEBPACK_IMPORTED_MODULE_4__.TitleCasePipe], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.search-and-multiselect mat-label {\n padding-left: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect .mat-mdc-form-field {\n color: white;\n }\n}\n.theme-override-dark .search-and-multiselect .mat-mdc-form-field {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect .mat-mdc-input-element,\n .theme-use-system .search-and-multiselect .mat-mdc-input-element::placeholder {\n color: white;\n }\n}\n.theme-override-dark .search-and-multiselect .mat-mdc-input-element,\n.theme-override-dark .search-and-multiselect .mat-mdc-input-element::placeholder {\n color: white;\n}\n.search-and-multiselect .mat-form-field-appearance-outline {\n width: 100%;\n}\n.search-and-multiselect .sidebar-content {\n margin: 1rem 0;\n}\n.search-and-multiselect .mat-content {\n display: block;\n}\n.search-and-multiselect .settings .title {\n font-size: 14px;\n margin: 0 0 0 5px;\n}\n.search-and-multiselect .fields {\n text-align: left;\n margin: 8px 0;\n}\n.search-and-multiselect .fields .field {\n display: inline-block;\n}\n.search-and-multiselect h1 {\n font-size: 14px;\n background: #f1f1f1;\n padding: 5px;\n margin: 0;\n text-align: center;\n}\n.search-and-multiselect .allresults-buttons {\n display: flex;\n justify-content: space-around;\n}\n.search-and-multiselect .allresults-buttons button {\n width: 48.5%;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect button {\n background-color: #4c4c68;\n }\n}\n.theme-override-dark .search-and-multiselect button {\n background-color: #4c4c68;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect button {\n color: white;\n }\n}\n.theme-override-dark .search-and-multiselect button {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .search-and-multiselect button:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .search-and-multiselect button:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect button:hover {\n background: #7588e8;\n }\n}\n.theme-override-dark .search-and-multiselect button:hover {\n background: #7588e8;\n}\n.search-and-multiselect .results {\n max-height: 150px;\n overflow-y: auto;\n}\n.search-and-multiselect .results table {\n border-collapse: collapse;\n width: 100%;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .search-and-multiselect .results table tr + tr {\n border-top: 1px solid #f1f1f1;\n }\n}\n.theme-override-light .search-and-multiselect .results table tr + tr {\n border-top: 1px solid #f1f1f1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect .results table tr + tr {\n border-top: 1px solid #4c4c68;\n }\n}\n.theme-override-dark .search-and-multiselect .results table tr + tr {\n border-top: 1px solid #4c4c68;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .search-and-multiselect .results table tr:hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .search-and-multiselect .results table tr:hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .search-and-multiselect .results table tr:hover {\n background: #464dff;\n }\n}\n.theme-override-dark .search-and-multiselect .results table tr:hover {\n background: #464dff;\n}\n.search-and-multiselect .results table td:first-of-type {\n width: 200px;\n}\n.search-and-multiselect .results table td {\n text-align: left;\n}\n.search-and-multiselect .results table td + td {\n width: 1px;\n}\n.search-and-multiselect .results .no-results {\n padding: 5px;\n text-align: center;\n}\n.search-and-multiselect mat-panel-description {\n align-items: center;\n}\n.search-and-multiselect .button-container {\n display: flex;\n justify-content: flex-end;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvc2VhcmNoLWFuZC1tdWx0aXNlbGVjdC9zZWFyY2gtYW5kLW11bHRpc2VsZWN0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDTkk7RUFDSSxpQkFBQTtBQU9SO0FEa01RO0VBSEo7SUFJUSxZQ3RNdUM7RUFPakQ7QUFDRjtBRGlNSTtFQUdJLFlDNU0yQztBQVduRDtBRDBMUTtFQUhKOztJQUlRLFlDak11QztFQVdqRDtBQUNGO0FEd0xJOztFQUdJLFlDdk0yQztBQWdCbkQ7QUFiSTtFQUNJLFdBQUE7QUFlUjtBQVpJO0VBQ0ksY0FBQTtBQWNSO0FBWEk7RUFDSSxjQUFBO0FBYVI7QUFWSTtFQUNJLGVBQUE7RUFDQSxpQkFBQTtBQVlSO0FBVEk7RUFDSSxnQkFBQTtFQUNBLGFBQUE7QUFXUjtBQVZRO0VBQ0kscUJBQUE7QUFZWjtBQVJJO0VBQ0ksZUFBQTtFQUNBLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLFNBQUE7RUFDQSxrQkFBQTtBQVVSO0FBUEk7RUFDSSxhQUFBO0VBQ0EsNkJBQUE7QUFTUjtBQVBRO0VBQ0ksWUFBQTtBQVNaO0FEOElRO0VBSEo7SUFJUSx5QkNuSmtEO0VBUTVEO0FBQ0Y7QUQ2SUk7RUFHSSx5QkN6SnNEO0FBWTlEO0FEc0lRO0VBSEo7SUFJUSxZQ2xKdUM7RUFlakQ7QUFDRjtBRHFJSTtFQUdJLFlDeEoyQztBQW1CbkQ7QUQyR1E7RUFISjtJQUlRLDZCQzNIa0M7RUFtQjVDO0FBQ0Y7QUQwR0k7RUFHSSw2QkNqSXNDO0FBdUI5QztBRHNIUTtFQUhKO0lBSVEsbUJDOUkrRDtFQTJCekU7QUFDRjtBRHFISTtFQUdJLG1CQ3BKbUU7QUErQjNFO0FBNUJJO0VBQ0ksaUJBQUE7RUFDQSxnQkFBQTtBQThCUjtBQTVCUTtFQUNJLHlCQUFBO0VBQ0EsV0FBQTtBQThCWjtBRG1GUTtFQUhKO0lBSVEsNkJDL0cwQztFQStCcEQ7QUFDRjtBRGtGSTtFQUdJLDZCQ3JIOEM7QUFtQ3REO0FEOEZRO0VBSEo7SUFJUSw2QkNsSXdFO0VBdUNsRjtBQUNGO0FENkZJO0VBR0ksNkJDeEk0RTtBQTJDcEY7QURtRVE7RUFISjtJQUlRLDZCQzNHMEM7RUEyQ3BEO0FBQ0Y7QURrRUk7RUFHSSw2QkNqSDhDO0FBK0N0RDtBRDhFUTtFQUhKO0lBSVEsbUJDOUh1RTtFQW1EakY7QUFDRjtBRDZFSTtFQUdJLG1CQ3BJMkU7QUF1RG5GO0FBcERZO0VBQ0ksWUFBQTtBQXNEaEI7QUFuRFk7RUFDSSxnQkFBQTtBQXFEaEI7QUFuRGdCO0VBQ0ksVUFBQTtBQXFEcEI7QUFoRFE7RUFDSSxZQUFBO0VBQ0Esa0JBQUE7QUFrRFo7QUE5Q0k7RUFDSSxtQkFBQTtBQWdEUjtBQTdDSTtFQUNJLGFBQUE7RUFDQSx5QkFBQTtBQStDUiIsInNvdXJjZXNDb250ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi9jb2xvcnMuc2Nzcyc7XG5cbi5zZWFyY2gtYW5kLW11bHRpc2VsZWN0IHtcbiAgICBtYXQtbGFiZWwge1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICB9XG5cbiAgICAubWF0LW1kYy1mb3JtLWZpZWxkIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspKTtcbiAgICB9XG5cbiAgICAubWF0LW1kYy1pbnB1dC1lbGVtZW50LFxuICAgIC5tYXQtbWRjLWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspKTtcbiAgICB9XG5cbiAgICAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuXG4gICAgLnNpZGViYXItY29udGVudCB7XG4gICAgICAgIG1hcmdpbjogMXJlbSAwO1xuICAgIH1cblxuICAgIC5tYXQtY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgIC5zZXR0aW5ncyAudGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIG1hcmdpbjogMCAwIDAgNXB4O1xuICAgIH1cblxuICAgIC5maWVsZHMge1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBtYXJnaW46IDhweCAwO1xuICAgICAgICAuZmllbGQge1xuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaDEge1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yKHBhbmVsLWxpZ2h0KTtcbiAgICAgICAgcGFkZGluZzogNXB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuYWxscmVzdWx0cy1idXR0b25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgIHdpZHRoOiA0OC41JTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1dHRvbiB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKGRhcmstNCkpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xuICAgIH1cblxuICAgIGJ1dHRvbjpob3ZlciB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdiYWNrZ3JvdW5kJywgY29sb3IoY2VsbC1oaWdobGlnaHQtY29sb3IpLCBjb2xvcihkYXJrLWxpbmspKTtcbiAgICB9XG5cbiAgICAucmVzdWx0cyB7XG4gICAgICAgIG1heC1oZWlnaHQ6IDE1MHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gICAgICAgIHRhYmxlIHtcbiAgICAgICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICAgICAgdHIgKyB0ciB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JvcmRlci10b3AnLCAxcHggc29saWQgY29sb3IocGFuZWwtbGlnaHQpLCAxcHggc29saWQgY29sb3IoZGFyay00KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWNvbG9yKSwgY29sb3IoY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZDpmaXJzdC1vZi10eXBlIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMjAwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRkIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuXG4gICAgICAgICAgICAgICAgJiArIHRkIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAubm8tcmVzdWx0cyB7XG4gICAgICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtYXQtcGFuZWwtZGVzY3JpcHRpb24ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cblxuICAgIC5idXR0b24tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 43696: +/*!********************************************!*\ + !*** ./src/app/services/config.service.ts ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ConfigService: () => (/* binding */ ConfigService) +/* harmony export */ }); +/* harmony import */ var _classes_context_menu_item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../classes/context-menu-item */ 59294); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rxjs/operators */ 70271); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rxjs/operators */ 36647); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rxjs/operators */ 98764); +/* harmony import */ var rxjs_operators__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rxjs/operators */ 61318); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rxjs */ 59452); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/common/http */ 46443); + + + + + +class ConfigService { + get subtechniquesEnabled() { + return this.features.get('subtechniques'); + } + constructor(http) { + this.http = http; + this.versions = { + enabled: false, + entries: [] + }; + this.contextMenuItems = []; + this.commentColor = 'yellow'; + this.linkColor = 'blue'; + this.metadataColor = 'purple'; + this.featureList = []; + this.customizefeatureList = []; + this.features = new Map(); + this.featureGroups = new Map(); + // intentionally left blank + } + /** + * Checks if the feature is enabled + * @param featureName feature name + * @returns true if the feature is enabled, false otherwise + */ + getFeature(featureName) { + return this.features.get(featureName); + } + /** + * Checks if any/all features in the group are enabled + * @param featureGroup feature group name + * @param type 'any' or 'all' for logical or/and + * @returns true iff any/all are enabled, false otherwise + */ + getFeatureGroup(featureGroup, type) { + if (!this.featureGroups.has(featureGroup)) return true; + let subFeatures = this.featureGroups.get(featureGroup); + let count = this.getFeatureGroupCount(featureGroup); + return type == 'any' ? count > 0 : count === subFeatures.length; + } + /** + * Get the number of enabled features in the group + * @param featureGroup feature group name + * @returns the number of enabled features in the group, or -1 if + * the group does not exist + */ + getFeatureGroupCount(featureGroup) { + if (!this.featureGroups.has(featureGroup)) return -1; + let subFeatures = this.featureGroups.get(featureGroup); + let enabled = subFeatures.filter(f => this.getFeature(f)); + return enabled.length; + } + /** + * Recursively search an object for boolean properties, set these as features + * Take a key:value pair of an object. If the value is a boolean, set the + * feature[key] to value. Otherwise recursively walk value to find boolean + * options. + * + * Additionally, if the given feature grouping (where value is an obj) + * has been previously defined, boolean properties assigned to the grouping + * name will apply to all subfeatures of the grouping. + * + * @param featureName string, the fieldname the value was found in + * @param value boolean:object the value of the field. If a boolean, + * sets feature[featureName] = value, otherwise walks recursively + */ + setFeature(featureName, value) { + let self = this; + if (typeof value == 'boolean') { + //base case + if (this.featureGroups.has(featureName)) { + //feature group, assign to all subfeatures + this.featureGroups.get(featureName).forEach(function (subFeatureName) { + self.setFeature(subFeatureName, value); + }); + } else { + //single feature + this.features.set(featureName, value); + } + return [featureName]; + } + if (typeof value == 'object') { + //keep walking + let subfeatures = []; + Object.keys(value).forEach(function (fieldname) { + subfeatures = Array.prototype.concat(subfeatures, self.setFeature(fieldname, value[fieldname])); + }); + this.featureGroups.set(featureName, subfeatures); + return subfeatures; + } + } + /** + * given a set of feature objects, set the enabledness of that object and all subobjects + * + * @param featureObject {name: string, enabled: boolean, subfeatures?: featureObject[] } + * Of enabled is false and it has subfeatures, they will all be forced to be false too + * @param override Set all subfeatures, and their subfeatures, values to + * this value + */ + setFeature_object(featureObject, override = null) { + let self = this; + // base case + if (!featureObject.hasOwnProperty('subfeatures')) { + let enabled = override !== null ? override : featureObject.enabled; + this.features.set(featureObject.name, enabled); + return [featureObject.name]; + } else { + // has subfeatures + if (!override) { + override = !featureObject.enabled ? false : null; + } + let subfeatures = []; + featureObject.subfeatures.forEach(function (subfeature) { + subfeatures = Array.prototype.concat(subfeatures, self.setFeature_object(subfeature, override)); + }); + this.featureGroups.set(featureObject.name, subfeatures); + return subfeatures; + } + } + /** + * Return if the given string corresponds to a defined feature + * @param featureName the name of the feature + * @return true if the feature exists, false otherwise + */ + isFeature(featureName) { + return this.features.has(featureName); + } + /** + * return if the given string corresponds to a defined feature group + * @param featureGroupName the name of the feature group + * @return true if it is a feature group, false otherwise + */ + isFeatureGroup(featureGroupName) { + return this.featureGroups.has(featureGroupName); + } + /** + * Get all url fragments + * @param url optional, url to parse instead of window location href + * @return all fragments as key-value pairs + */ + getAllFragments(url) { + if (!url) url = window.location.href; + let fragments = new Map(); + let regex = /[#&](\w+)=(\w+)/g; + let match; + while (match = regex.exec(url)) { + fragments.set(match[1], match[2]); + } + return fragments; + } + /** + * Validate that the configuration file specifies a collection index URL + * or a list of versions/domains + * @param config the configuration to validate + * @returns the configuration, if valid, otherwise throws an error + */ + validateConfig(config) { + if (!config.collection_index_url && !config.versions?.entries?.length) { + throw new Error(`'collection_index_url' or 'versions' must be defined`); + } + if (config.collection_index_url && typeof config.collection_index_url !== typeof 'string') { + throw new Error(`'collection_index_url' must be a string`); + } + return config; + } + /** + * Load the configuration file + * Note: this is done at startup + */ + loadConfig() { + return this.http.get('mitre/assets/config.json').pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_1__.map)(config => this.validateConfig(config)), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_2__.switchMap)(config => { + console.debug('loaded app configuration settings'); + config['custom_context_menu_items'].forEach(item => { + this.contextMenuItems.push(new _classes_context_menu_item__WEBPACK_IMPORTED_MODULE_0__.ContextMenuItem(item.label, item.url, item.subtechnique_url)); + }); + this.defaultLayers = config['default_layers']; + this.commentColor = config['comment_color']; + this.linkColor = config['link_color']; + this.metadataColor = config['metadata_color']; + this.banner = config['banner']; + // parse feature preferences + this.featureList = config['features']; + this.customizefeatureList = config['customize_features']; + config['features'].forEach(feature => { + this.setFeature_object(feature); + }); + config['customize_features'].forEach(feature => { + this.setFeature_object(feature); + }); + // override preferences with preferences from URL fragments + this.getAllFragments().forEach((value, key) => { + if (this.isFeature(key) || this.isFeatureGroup(key)) { + this.setFeature(key, value == 'true'); + } + }); + // parse configured domains and versions + this.versions = config['versions']; + if (config['collection_index_url']) { + return this.http.get(config['collection_index_url']).pipe((0,rxjs_operators__WEBPACK_IMPORTED_MODULE_3__.tap)(_ => console.log('loaded collection index from', config['collection_index_url'])), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.catchError)(err => { + throw new Error('collection index failed to load. ' + err.message); + })); + } + return (0,rxjs__WEBPACK_IMPORTED_MODULE_5__.of)(null); + }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_1__.map)(collectionIndex => { + if (collectionIndex) this.collectionIndex = collectionIndex; + }), (0,rxjs_operators__WEBPACK_IMPORTED_MODULE_4__.catchError)(err => { + alert(`ERROR the configuration file failed to parse. See the javascript console for more details.`); + throw err; + })).toPromise(); + } + static #_ = this.ɵfac = function ConfigService_Factory(t) { + return new (t || ConfigService)(_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_7__.HttpClient)); + }; + static #_2 = this.ɵprov = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_6__["ɵɵdefineInjectable"]({ + token: ConfigService, + factory: ConfigService.ɵfac, + providedIn: 'root' + }); +} + +/***/ }), + +/***/ 28490: +/*!******************************************!*\ + !*** ./src/app/services/data.service.ts ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DataService: () => (/* binding */ DataService) +/* harmony export */ }); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/common/http */ 46443); +/* harmony import */ var buffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! buffer */ 163); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rxjs */ 61873); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs */ 95429); +/* harmony import */ var _classes_stix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../classes/stix */ 54448); +/* harmony import */ var _utils_taxii2lib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/taxii2lib */ 30374); +/* harmony import */ var _classes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../classes */ 47557); +/* harmony import */ var _utils_globals__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/globals */ 98552); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _config_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config.service */ 43696); + + + + + + + + + + +class DataService { + constructor(http, configService) { + this.http = http; + this.configService = configService; + this.domain_backwards_compatibility = { + 'mitre-enterprise': 'enterprise-attack', + 'mitre-mobile': 'mobile-attack' + }; + this.domains = []; + this.versions = []; + console.debug('initializing data service'); + if (configService.versions?.enabled) { + // parse versions structure from configuration file + // support for workbench integration, taxii and custom data + this.setUpDomains(configService.versions.entries); + } + if (configService.collectionIndex) { + // parse versions from collection index + this.parseCollectionIndex(configService.collectionIndex); + } + this.versions.sort((a, b) => +a.number > +b.number ? -1 : 1); + this.latestVersion = this.versions[0]; + } + /** + * Callback functions passed to this function will be called after data is loaded + * @param {string} domainVersionID the ID of the domain and version to load + * @param {*} callback callback function to call when data is done loading + */ + onDataLoad(domainVersionID, callback) { + this.getDomain(domainVersionID).dataLoadedCallbacks.push(callback); + } + /** + * Parse the given stix bundles into the relevant data holders + * @param domain + * @param stixBundles + */ + parseBundles(domain, stixBundles) { + let platforms = new Set(); + let seenIDs = new Set(); + let matrixSDOs = []; + let idToTacticSDO = new Map(); + let matrixToTechniqueSDOs = new Map(); + for (let bundle of stixBundles) { + let techniqueSDOs = []; + let bundleMatrices = []; + let idToTechniqueSDO = new Map(); + // iterate through stix domain objects in the bundle + for (let sdo of bundle.objects) { + // filter out duplicates, except for matrices + // which are needed to properly build the datatables + if (sdo.type != 'x-mitre-matrix') { + if (seenIDs.has(sdo.id)) continue; + seenIDs.add(sdo.id); + } + // parse according to type + switch (sdo.type) { + case 'x-mitre-data-component': + domain.dataComponents.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.DataComponent(sdo, this)); + break; + case 'x-mitre-data-source': + domain.dataSources.set(sdo.id, { + name: sdo.name, + external_references: sdo.external_references + }); + break; + case 'intrusion-set': + domain.groups.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Group(sdo, this)); + break; + case 'malware': + case 'tool': + domain.software.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Software(sdo, this)); + break; + case 'campaign': + domain.campaigns.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Campaign(sdo, this)); + break; + case 'x-mitre-asset': + domain.assets.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Asset(sdo, this)); + break; + case 'course-of-action': + domain.mitigations.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Mitigation(sdo, this)); + break; + case 'relationship': + this.parseRelationship(sdo, domain); + break; + case 'attack-pattern': + idToTechniqueSDO.set(sdo.id, sdo); + if (!sdo.x_mitre_is_subtechnique) { + techniqueSDOs.push(sdo); + } + break; + case 'x-mitre-tactic': + idToTacticSDO.set(sdo.id, sdo); + break; + case 'x-mitre-matrix': + matrixSDOs.push(sdo); + bundleMatrices.push(sdo); + break; + case 'note': + domain.notes.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Note(sdo)); + break; + } + } + // create techniques + this.createTechniques(techniqueSDOs, idToTechniqueSDO, domain); + // create map of matrices to techniques + for (let matrixSDO of bundleMatrices) { + if (!matrixToTechniqueSDOs.get(matrixSDO.id)) { + matrixToTechniqueSDOs.set(matrixSDO.id, techniqueSDOs); + } else { + matrixToTechniqueSDOs.get(matrixSDO.id).push(...techniqueSDOs); + } + } + // parse platforms + this.parsePlatforms(domain).forEach(platforms.add, platforms); + } + // create matrices + this.createMatrices(matrixSDOs, idToTacticSDO, matrixToTechniqueSDOs, domain); + domain.platforms = Array.from(platforms); // convert to array + // data loading complete; update watchers + domain.dataLoaded = true; + domain.executeCallbacks(); + } + /** + * Creates techniques and sub-techniques from the given technique SDOs + * @param techniqueSDOs list of parent-level technique SDOs to create + * @param idToTechniqueSDO map of all technique IDs to SDOs (incl. sub-techniques) + * @param domain the domain to add the techniques to + */ + createTechniques(techniqueSDOs, idToTechniqueSDO, domain) { + for (let techniqueSDO of techniqueSDOs) { + let subtechniques = []; + if (this.configService.subtechniquesEnabled) { + if (domain.relationships.subtechniques_of.has(techniqueSDO.id)) { + domain.relationships.subtechniques_of.get(techniqueSDO.id).forEach(sub_id => { + if (idToTechniqueSDO.has(sub_id)) { + let subtechnique = new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Technique(idToTechniqueSDO.get(sub_id), [], this); + subtechniques.push(subtechnique); + domain.subtechniques.push(subtechnique); + } + // else the target was revoked or deprecated and we can skip honoring the relationship + }); + } + } + domain.techniques.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Technique(techniqueSDO, subtechniques, this)); + } + } + /** + * Creates the matrices, which also creates its tactics and filters the techniques + * @param matricesList list of matrix SDOs to create + * @param tacticsList list of tactic SDOs + * @param domain the domain to add the matrix/tactics to + */ + createMatrices(matrixSDOs, idToTacticSDO, matrixToTechniqueSDOs, domain) { + let createdMatrixIDs = []; + for (let matrixSDO of matrixSDOs) { + // check if matrix was already created + if (createdMatrixIDs.includes(matrixSDO.id)) continue; + // check if matrix is deprecated + if (matrixSDO.x_mitre_deprecated) continue; + // retrieve relevant matrix techniques + let techniqueSDOs = matrixToTechniqueSDOs.get(matrixSDO.id); + let techniqueIDs = techniqueSDOs.map(t => t.id); + let techniques = domain.techniques.filter(t => techniqueIDs.includes(t.id)); + domain.matrices.push(new _classes_stix__WEBPACK_IMPORTED_MODULE_1__.Matrix(matrixSDO, idToTacticSDO, techniques, this)); + // add to list of created matrices + createdMatrixIDs.push(matrixSDO.id); + } + } + /** + * Extracts the set of platforms from the list of techniques + * in the given domain + * @param domain the domain for which to parse the platforms + * @returns the set of platforms found + */ + parsePlatforms(domain) { + let platforms = new Set(); + let allTechniques = domain.techniques.concat(domain.subtechniques); + // parse platforms + allTechniques.forEach(technique => { + if (!technique.deprecated && !technique.revoked) { + technique.platforms?.forEach(platforms.add, platforms); + } + }); + return platforms; + } + /** + * Parses the given SRO into the domain relationship map + * @param sro the SRO to parse + * @param domain the domain to add the relationship to + */ + parseRelationship(sro, domain) { + // for existing keys, add the given value to the list of values + // otherwise, add the key with the value as the first item in the list + let addRelationshipToMap = function (map, key, value) { + if (map.has(key)) map.get(key).push(value);else map.set(key, [value]); + }; + switch (sro.relationship_type) { + case 'subtechnique-of': + if (!this.configService.subtechniquesEnabled) return; + // record subtechnique:technique relationship + addRelationshipToMap(domain.relationships['subtechniques_of'], sro.target_ref, sro.source_ref); + break; + case 'uses': + if (sro.source_ref.startsWith('intrusion-set') && sro.target_ref.startsWith('attack-pattern')) { + // record group:technique relationship + addRelationshipToMap(domain.relationships['group_uses'], sro.source_ref, sro.target_ref); + } else if ((sro.source_ref.startsWith('malware') || sro.source_ref.startsWith('tool')) && sro.target_ref.startsWith('attack-pattern')) { + // record software:technique relationship + addRelationshipToMap(domain.relationships['software_uses'], sro.source_ref, sro.target_ref); + } else if (sro.source_ref.startsWith('campaign') && sro.target_ref.startsWith('attack-pattern')) { + // record campaign:technique relationship + addRelationshipToMap(domain.relationships['campaign_uses'], sro.source_ref, sro.target_ref); + } + break; + case 'mitigates': + // record mitigation:technique relationship + addRelationshipToMap(domain.relationships['mitigates'], sro.source_ref, sro.target_ref); + break; + case 'revoked-by': + // record stix object: stix object relationship + domain.relationships['revoked_by'].set(sro.source_ref, sro.target_ref); + break; + case 'detects': + // record data component: technique relationship + addRelationshipToMap(domain.relationships['component_rel'], sro.source_ref, sro.target_ref); + break; + case 'attributed-to': + // record campaign:group relationship + addRelationshipToMap(domain.relationships['campaigns_attributed_to'], sro.target_ref, sro.source_ref); + break; + case 'targets': + // record technique:asset relationship + addRelationshipToMap(domain.relationships['targeted_assets'], sro.target_ref, sro.source_ref); + break; + } + } + /** + * Set up the URLs for domains in the list defined in the config file + * @param {versions} list of versions and domains + */ + setUpDomains(versions) { + versions.forEach(version => { + let v = this.addVersion(version['name'], version['version'].match(/\d+/g)[0]); + version['domains'].forEach(domain => { + let identifier = domain['identifier']; + let domainObject = new _classes__WEBPACK_IMPORTED_MODULE_3__.Domain(identifier, domain['name'], v); + if (version['authentication']) domainObject.authentication = version['authentication']; + if (domain['taxii_url'] && domain['taxii_collection']) { + domainObject.taxii_url = domain['taxii_url']; + domainObject.taxii_collection = domain['taxii_collection']; + } else { + domainObject.urls = domain['data']; + } + this.domains.push(domainObject); + }); + }); + } + /** + * Parses the collection index for domains/versions + * @param collectionIndex the collection index + */ + parseCollectionIndex(collectionIndex) { + for (let collection of collectionIndex.collections) { + let domainIdentifier = this.getDomainIdentifier(collection.name); + // only most recent minor versions of a major release + let minorVersionMap = collection.versions.reduce((acc, version) => { + const [major, minor] = version.version.split('.').map(Number); + if (!acc[major] || acc[major].minor < minor) { + acc[major] = { + version: version.version, + url: version.url + }; + } + return acc; + }, {}); + let versions = Object.values(minorVersionMap); + for (let version of versions) { + let versionNumber = version.version.split('.')[0]; // major version only + let versionName = `${collectionIndex.name} v${versionNumber}`; + if (+versionNumber < +_utils_globals__WEBPACK_IMPORTED_MODULE_4__.minimumSupportedVersion) { + console.debug(`version ${versionNumber} is not supported, skipping ${collection.name} v${versionNumber}`); + continue; + } + // create version & domain + let v = this.addVersion(versionName, versionNumber); + this.domains.push(new _classes__WEBPACK_IMPORTED_MODULE_3__.Domain(domainIdentifier, collection.name, v, [version.url])); + } + } + } + /** + * Retrieves the domain identifier from the domain name + * Helper function for parseCollectionIndex() + * @param domainName the name of the domain + * @returns the domain identifier (e.g. 'enterprise-attack') + */ + getDomainIdentifier(domainName) { + return domainName.replace(/ /g, '-').replace(/&/g, 'a').toLowerCase(); + } + /** + * Adds a new version to the list of versions, checking if + * one already exists. + * @param versionName the name of the version + * @param versionNumber the version number + * @returns the existing or created Version object + */ + addVersion(versionName, versionNumber) { + // check if version already exists + let existingVersion = this.versions.find(v => v.name === versionName && v.number === versionNumber); + if (!existingVersion) { + // create and add new version + let version = new _classes__WEBPACK_IMPORTED_MODULE_3__.Version(versionName, versionNumber); + this.versions.push(version); + return version; + } + return existingVersion; + } + /** + * Fetch the domain data from the endpoint + */ + getDomainData(domain, refresh = false) { + if (domain.taxii_collection && domain.taxii_url) { + console.debug('fetching data from TAXII server'); + let conn = new _utils_taxii2lib__WEBPACK_IMPORTED_MODULE_2__.TaxiiConnect(domain.taxii_url, '', ''); + let collectionInfo = { + id: domain.taxii_collection, + title: domain.name, + description: '', + can_read: true, + can_write: false + }; + const collection = new _utils_taxii2lib__WEBPACK_IMPORTED_MODULE_2__.Collection(collectionInfo, domain.taxii_url, conn); + this.domainData$ = (0,rxjs__WEBPACK_IMPORTED_MODULE_6__.forkJoin)((0,rxjs__WEBPACK_IMPORTED_MODULE_7__.from)(collection.getObjects('', undefined))); + } else if (refresh || !this.domainData$) { + console.debug('retrieving data', domain.urls); + let bundleData = []; + const httpOptions = { + headers: undefined + }; + if (domain.authentication && domain.authentication.enabled) { + // include authorization header, if configured (integrations) + let token = `${domain.authentication.serviceName}:${domain.authentication.apiKey}`; + httpOptions.headers = new _angular_common_http__WEBPACK_IMPORTED_MODULE_8__.HttpHeaders({ + Authorization: 'Basic ' + buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.from(token).toString('base64') + }); + } + domain.urls.forEach(url => { + bundleData.push(this.http.get(url, httpOptions)); + }); + this.domainData$ = (0,rxjs__WEBPACK_IMPORTED_MODULE_6__.forkJoin)(bundleData); + } + return this.domainData$; + } + /** + * Load and parse domain data + */ + loadDomainData(domainVersionID, refresh = false) { + let dataPromise = new Promise((resolve, reject) => { + let domain = this.getDomain(domainVersionID); + if (domain) { + if (domain.dataLoaded && !refresh) resolve(null); + let subscription; + subscription = this.getDomainData(domain, refresh).subscribe({ + next: data => { + this.parseBundles(domain, data); + resolve(null); + }, + complete: () => { + if (subscription) subscription.unsubscribe(); + } //prevent memory leaks + }); + } else if (!domain) { + // domain not defined in config + reject(new Error("'" + domainVersionID + "' is not a valid domain & version.")); + } + }); + return dataPromise; + } + /** + * Get domain object by domain ID + */ + getDomain(domainVersionID) { + return this.domains.find(d => d.id === domainVersionID); + } + /** + * Get the ID from domain name & version + */ + getDomainVersionID(domain, versionNumber) { + if (!versionNumber) { + // layer with no specified version defaults to current version + versionNumber = this.versions[0].number; + } + return domain + '-' + versionNumber; + } + /** + * Retrieve the technique object with the given attackID in the given domain/version + */ + getTechnique(attackID, domainVersionID) { + let domain = this.getDomain(domainVersionID); + let all_techniques = domain.techniques.concat(domain.subtechniques); + return all_techniques.find(t => t.attackID == attackID); + } + /** + * Is the given version supported? + */ + isSupported(version) { + let supported = this.versions.map(v => v.number); + let match = version.match(/\d+/g)[0]; + return supported.includes(match); + } + /** + * Compares techniques between two ATT&CK versions and returns a set of object changes + * @param oldDomainVersionID imported layer domain & version to upgrade from + * @param newDomainVersionID latest ATT&CK domain & version to upgrade to + */ + compareVersions(oldDomainVersionID, newDomainVersionID) { + let changelog = new _classes__WEBPACK_IMPORTED_MODULE_3__.VersionChangelog(oldDomainVersionID, newDomainVersionID); + let oldDomain = this.getDomain(oldDomainVersionID); + let newDomain = this.getDomain(newDomainVersionID); + let previousTechniques = oldDomain.techniques.concat(oldDomain.subtechniques); + let latestTechniques = newDomain.techniques.concat(newDomain.subtechniques); + // object lookup to increase efficiency + let objectLookup = new Map(latestTechniques.map(technique => [technique.id, previousTechniques.find(p => p.id == technique.id)])); + for (let latestTechnique of latestTechniques) { + if (!latestTechnique) continue; + let prevTechnique = objectLookup.get(latestTechnique.id); + if (!prevTechnique) { + if (latestTechnique.deprecated || latestTechnique.revoked) { + // object doesn't exist in previous version, but is deprecated or revoked + // in the latest version + // this case is unlikely to occur and indicates that something has + // gone wrong in the data, such as the case in which a sub-technique + // was deprecated, had its ties erroneously severed with its parent + // and therefore, cannot be parsed correctly + continue; + } + // object doesn't exist in previous version, added to latest version + changelog.additions.push(latestTechnique.attackID); + } else if (latestTechnique.modified == prevTechnique.modified) { + if (prevTechnique.revoked || prevTechnique.deprecated) { + // object is revoked or deprecated, ignore + continue; + } else { + // no changes made to the object + changelog.unchanged.push(latestTechnique.attackID); + } + } else { + // changes were made to the object + if (latestTechnique.revoked && !prevTechnique.revoked) { + // object was revoked since the previous version + changelog.revocations.push(latestTechnique.attackID); + } else if (latestTechnique.revoked && prevTechnique.revoked) { + // both objects are revoked, ignore + continue; + } else if (latestTechnique.deprecated && !prevTechnique.deprecated) { + // object was deprecated since the previous version + changelog.deprecations.push(latestTechnique.attackID); + } else if (latestTechnique.deprecated && prevTechnique.deprecated) { + // both objects are deprecated, ignore + continue; + } else if (latestTechnique.compareVersion(prevTechnique) != 0) { + // version number changed + changelog.changes.push(latestTechnique.attackID); + } else { + // minor change + changelog.minor_changes.push(latestTechnique.attackID); + } + } + } + return changelog; + } + static #_ = this.ɵfac = function DataService_Factory(t) { + return new (t || DataService)(_angular_core__WEBPACK_IMPORTED_MODULE_9__["ɵɵinject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_8__.HttpClient), _angular_core__WEBPACK_IMPORTED_MODULE_9__["ɵɵinject"](_config_service__WEBPACK_IMPORTED_MODULE_5__.ConfigService)); + }; + static #_2 = this.ɵprov = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_9__["ɵɵdefineInjectable"]({ + token: DataService, + factory: DataService.ɵfac, + providedIn: 'root' + }); +} + +/***/ }), + +/***/ 87936: +/*!*******************************************!*\ + !*** ./src/app/services/icons.service.ts ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Icons: () => (/* binding */ Icons), +/* harmony export */ IconsService: () => (/* binding */ IconsService) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _angular_material_icon__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/material/icon */ 93840); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/platform-browser */ 80436); + + + +class IconsService { + constructor(matIconRegistry, domSanitizer) { + this.matIconRegistry = matIconRegistry; + this.domSanitizer = domSanitizer; + // intentionally left blank + } + registerIcons() { + this.loadIcons(Object.values(Icons), 'mitre/assets/icons'); + } + loadIcons(iconKeys, iconUrl) { + iconKeys.forEach(key => { + this.matIconRegistry.addSvgIcon(key, this.domSanitizer.bypassSecurityTrustResourceUrl(`${iconUrl}/${key}.svg`)); + }); + } + static #_ = this.ɵfac = function IconsService_Factory(t) { + return new (t || IconsService)(_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_material_icon__WEBPACK_IMPORTED_MODULE_1__.MatIconRegistry), _angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵinject"](_angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__.DomSanitizer)); + }; + static #_2 = this.ɵprov = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_0__["ɵɵdefineInjectable"]({ + token: IconsService, + factory: IconsService.ɵfac, + providedIn: 'root' + }); +} +var Icons; +(function (Icons) { + Icons["SORT_ALPHABETICAL_ASC"] = "ic_sort_alphabetically_ascending"; + Icons["SORT_ALPHABETICAL_DESC"] = "ic_sort_alphabetically_descending"; + Icons["SORT_NUMERICAL_ASC"] = "ic_sort_numerically_ascending"; + Icons["SORT_NUMERICAL_DESC"] = "ic_sort_numerically_descending"; + Icons["UNFOLD_MORE_ALT"] = "ic_unfold_more_alt"; + Icons["NON_STICKY_TOOLBAR"] = "ic_push_pin_gray"; +})(Icons || (Icons = {})); + +/***/ }), + +/***/ 57833: +/*!************************************************!*\ + !*** ./src/app/services/viewmodels.service.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ViewModelsService: () => (/* binding */ ViewModelsService) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _classes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../classes */ 47557); +/* harmony import */ var mathjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mathjs */ 35096); +/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/utils */ 37709); +/* harmony import */ var _data_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data.service */ 28490); + + + + + + +class ViewModelsService { + constructor(dataService) { + this.dataService = dataService; + this.onSelectionChange = new _angular_core__WEBPACK_IMPORTED_MODULE_3__.EventEmitter(); + this.viewModels = []; + this.pinnedCell = ''; + this.nonce = 0; + // intentionally left blank + } + /* Emit event when technique selection changes */ + selectionChanged() { + this.onSelectionChange.emit(); + } + /** + * Create and return a new viewModel + * @param {string} name the viewmodel name + * @param {string} domainVersionID the ID of the domain & version + * @return {ViewModel} the created ViewModel + */ + newViewModel(name, domainVersionID) { + let vm = new _classes__WEBPACK_IMPORTED_MODULE_0__.ViewModel(name, 'vm' + this.getNonce(), domainVersionID, this.dataService); + this.viewModels.push(vm); + return vm; + } + /** + * Get a nonce. + * @return a number that will never be regenerated by sequential calls to getNonce. + * Note: this applies on a session-by-session basis, nonces are not + * unique between app instances. + */ + getNonce() { + return this.nonce++; + } + /** + * Destroy the viewmodel + * @param vm viewmodel to destroy. + */ + destroyViewModel(vm) { + for (let i = 0; i < this.viewModels.length; i++) { + if (this.viewModels[i] == vm) { + this.viewModels.splice(i, 1); + return; + } + } + } + /** + * Layer combination operation + * @param scoreVariables variables in math expression, mapping to viewmodel they correspond to + * @param layerName the name of the new layer + * @param opSettings the settings for view model inheritance + * - `domain`: the domain & version + * - `gradientVM`: the view model to inherit gradient from + * - `coloringVM`: the view model to inherit manual colors from + * - `commentVM`: the view model to inherit comments from + * - `linkVM`: the view model to inherit links from + * - `metadataVM`: the view model to inherit metadata from + * - `enabledVM`: the view model to inherit enabled state from + * - `filterVM`: the view model to inherit filters from + * - `scoreExpression`: math equation of score expression + * - `legendVM`: the view model to inherit legend items from + * @return new viewmodel inheriting above properties + */ + layerOperation(scoreVariables, layerName, opSettings) { + let newViewModel = new _classes__WEBPACK_IMPORTED_MODULE_0__.ViewModel('layer by operation', 'vm' + this.getNonce(), opSettings.domain, this.dataService); + if (opSettings.scoreExpression) { + opSettings.scoreExpression = opSettings.scoreExpression.toLowerCase(); // should be enforced by input, but just in case + let minScore = Infinity; + let maxScore = -Infinity; + // get list of all technique IDs used in the VMs + let techniqueIDs = new Set(); + scoreVariables.forEach(vm => { + vm.techniqueVMs.forEach(function (techniqueVM, techniqueID) { + techniqueIDs.add(techniqueID); + }); + }); + // attempt to evaluate without a scope to catch the case of a static assignment + try { + // evaluate with an empty scope + let result = (0,mathjs__WEBPACK_IMPORTED_MODULE_4__.evaluate)(opSettings.scoreExpression, {}); + // if it didn't except after this, it evaluated to a single result + console.debug('score expression evaluated to single result to be applied to all techniques'); + if ((0,_utils_utils__WEBPACK_IMPORTED_MODULE_1__.isBoolean)(result)) { + // boolean to binary + result = result ? '1' : '0'; + } else if (!(0,_utils_utils__WEBPACK_IMPORTED_MODULE_1__.isNumber)(result)) { + // unexpected user input + throw Error('math result ( ' + result + ' ) is not a number'); + } + // apply result to all techniques + newViewModel.initializeScoresTo = String(result); + minScore = result; + maxScore = result; + } catch (err) { + //couldn't evaluate with empty scope, build scope for each technique + // compute the score of each techniqueID + techniqueIDs.forEach(techniqueID => { + let newTechniqueVM = new _classes__WEBPACK_IMPORTED_MODULE_0__.TechniqueVM(techniqueID); + let scope = {}; + let misses = 0; // number of times a VM is missing the value + scoreVariables.forEach(function (vm, key) { + let scoreValue; + if (!vm.hasTechniqueVM_id(techniqueID)) { + // missing technique + scoreValue = 0; + misses++; + } else { + // technique exists + let score = vm.getTechniqueVM_id(techniqueID).score; + if (score == '' || isNaN(Number(score))) { + scoreValue = 0; + misses++; + } else { + scoreValue = Number(score); + } + } + scope[key] = scoreValue; + }); + // did at least one technique have a score for this technique? + if (misses < scoreVariables.size) { + let mathResult = (0,mathjs__WEBPACK_IMPORTED_MODULE_4__.evaluate)(opSettings.scoreExpression, scope); + if ((0,_utils_utils__WEBPACK_IMPORTED_MODULE_1__.isBoolean)(mathResult)) { + // boolean to binary + mathResult = mathResult ? '1' : '0'; + } else if (!(0,_utils_utils__WEBPACK_IMPORTED_MODULE_1__.isNumber)(mathResult)) { + // unexpected user input + throw Error('math result ( ' + mathResult + ' ) is not a number'); + } + newTechniqueVM.score = String(mathResult); + newViewModel.techniqueVMs.set(techniqueID, newTechniqueVM); + minScore = Math.min(minScore, mathResult); + maxScore = Math.max(maxScore, mathResult); + } + // don't record a result if none of VMs had a score for this technique + }); + } + // gradient doesn't apply if there is no range of values + if (minScore != maxScore) { + // set up gradient according to result range + if (minScore != Infinity) newViewModel.gradient.minValue = minScore; + if (maxScore != -Infinity) newViewModel.gradient.maxValue = maxScore; + // if binary range, set to transparentblue gradient + if (minScore == 0 && maxScore == 1) newViewModel.gradient.setGradientPreset('transparentblue'); + } + } + /** + * Inherit a field from a vm + * @param {ViewModel} inheritVM the viewModel to inherit from + * @param {string} fieldName the field to inherit from the viewmodel + */ + function inherit(inheritVM, fieldName) { + inheritVM.techniqueVMs.forEach(techniqueVM => { + let tvm = newViewModel.hasTechniqueVM_id(techniqueVM.technique_tactic_union_id) ? newViewModel.getTechniqueVM_id(techniqueVM.technique_tactic_union_id) : new _classes__WEBPACK_IMPORTED_MODULE_0__.TechniqueVM(techniqueVM.technique_tactic_union_id); + tvm[fieldName] = techniqueVM[fieldName]; + newViewModel.techniqueVMs.set(techniqueVM.technique_tactic_union_id, tvm); + }); + } + if (opSettings.commentVM) inherit(opSettings.commentVM, 'comment'); + if (opSettings.linkVM) inherit(opSettings.linkVM, 'links'); + if (opSettings.metadataVM) inherit(opSettings.metadataVM, 'metadata'); + if (opSettings.coloringVM) inherit(opSettings.coloringVM, 'color'); + if (opSettings.enabledVM) inherit(opSettings.enabledVM, 'enabled'); + if (opSettings.filterVM) { + //copy filter settings + newViewModel.filters.deserialize(JSON.parse(opSettings.filterVM.filters.serialize())); + } + if (opSettings.legendVM) { + newViewModel.legendItems = JSON.parse(JSON.stringify(opSettings.legendVM.legendItems)); + } + if (opSettings.gradientVM) { + newViewModel.gradient = new _classes__WEBPACK_IMPORTED_MODULE_0__.Gradient(); + newViewModel.gradient.deserialize(opSettings.gradientVM.gradient.serialize()); + } + newViewModel.name = layerName; + this.viewModels.push(newViewModel); + newViewModel.updateGradient(); + return newViewModel; + } + static #_ = this.ɵfac = function ViewModelsService_Factory(t) { + return new (t || ViewModelsService)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵinject"](_data_service__WEBPACK_IMPORTED_MODULE_2__.DataService)); + }; + static #_2 = this.ɵprov = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineInjectable"]({ + token: ViewModelsService, + factory: ViewModelsService.ɵfac, + providedIn: 'root' + }); +} + +/***/ }), + +/***/ 7244: +/*!**********************************************!*\ + !*** ./src/app/sidebar/sidebar.component.ts ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SidebarComponent: () => (/* binding */ SidebarComponent) +/* harmony export */ }); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _search_and_multiselect_search_and_multiselect_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../search-and-multiselect/search-and-multiselect.component */ 38514); +/* harmony import */ var _layer_upgrade_layer_upgrade_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../layer-upgrade/layer-upgrade.component */ 34048); +/* harmony import */ var _layer_settings_layer_settings_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../layer-settings/layer-settings.component */ 89616); + + + + + + +function SidebarComponent_div_1_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelement"](1, "app-search-and-multiselect", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("viewModel", ctx_r0.viewModel); + } +} +function SidebarComponent_div_1_div_2_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelement"](1, "layer-upgrade", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵnextContext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("viewModel", ctx_r0.viewModel); + } +} +function SidebarComponent_div_1_div_2_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtemplate"](1, SidebarComponent_div_1_div_2_div_1_Template, 2, 1, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("ngIf", ctx_r0.viewModel.versionChangelog && ctx_r0.viewModel.compareTo); + } +} +function SidebarComponent_div_1_div_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelement"](1, "app-layer-settings", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("viewModel", ctx_r0.viewModel); + } +} +function SidebarComponent_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtemplate"](1, SidebarComponent_div_1_div_1_Template, 2, 1, "div", 1)(2, SidebarComponent_div_1_div_2_Template, 2, 1, "div", 1)(3, SidebarComponent_div_1_div_3_Template, 2, 1, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("ngIf", ctx_r0.viewModel.sidebarContentType === "search"); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("ngIf", ctx_r0.viewModel.sidebarContentType === "layerUpgrade" && ctx_r0.reloadToggle); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("ngIf", ctx_r0.viewModel.sidebarContentType === "layerSettings"); + } +} +class SidebarComponent { + constructor(dataService) { + this.dataService = dataService; + this.reloadToggle = true; + } + ngOnChanges() { + this.reloadToggle = false; + setTimeout(() => this.reloadToggle = true); + } + static #_ = this.ɵfac = function SidebarComponent_Factory(t) { + return new (t || SidebarComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_0__.DataService)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵdefineComponent"]({ + type: SidebarComponent, + selectors: [["sidebar"]], + inputs: { + viewModel: "viewModel" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵNgOnChangesFeature"]], + decls: 2, + vars: 1, + consts: [[1, "sidebar"], [4, "ngIf"], [3, "viewModel"]], + template: function SidebarComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementStart"](0, "div", 0); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵtemplate"](1, SidebarComponent_div_1_Template, 4, 3, "div", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵelementEnd"](); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_4__["ɵɵproperty"]("ngIf", ctx.viewModel); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_5__.NgIf, _search_and_multiselect_search_and_multiselect_component__WEBPACK_IMPORTED_MODULE_1__.SearchAndMultiselectComponent, _layer_upgrade_layer_upgrade_component__WEBPACK_IMPORTED_MODULE_2__.LayerUpgradeComponent, _layer_settings_layer_settings_component__WEBPACK_IMPORTED_MODULE_3__.LayerSettingsComponent], + styles: [".sidebar[_ngcontent-%COMP%] {\n width: 38em;\n padding: 16px;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvc2lkZWJhci9zaWRlYmFyLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksV0FBQTtFQUNBLGFBQUE7QUFDSiIsInNvdXJjZXNDb250ZW50IjpbIi5zaWRlYmFyIHtcbiAgICB3aWR0aDogMzhlbTtcbiAgICBwYWRkaW5nOiAxNnB4O1xufSJdLCJzb3VyY2VSb290IjoiIn0= */"] + }); +} + +/***/ }), + +/***/ 61180: +/*!********************************************************!*\ + !*** ./src/app/svg-export/renderable-objects/index.ts ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RenderableMatrix: () => (/* reexport safe */ _renderable_matrix__WEBPACK_IMPORTED_MODULE_0__.RenderableMatrix), +/* harmony export */ RenderableTactic: () => (/* reexport safe */ _renderable_tactic__WEBPACK_IMPORTED_MODULE_1__.RenderableTactic), +/* harmony export */ RenderableTechnique: () => (/* reexport safe */ _renderable_technique__WEBPACK_IMPORTED_MODULE_2__.RenderableTechnique) +/* harmony export */ }); +/* harmony import */ var _renderable_matrix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderable-matrix */ 12906); +/* harmony import */ var _renderable_tactic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderable-tactic */ 98735); +/* harmony import */ var _renderable_technique__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderable-technique */ 44353); + + + + +/***/ }), + +/***/ 12906: +/*!********************************************************************!*\ + !*** ./src/app/svg-export/renderable-objects/renderable-matrix.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RenderableMatrix: () => (/* binding */ RenderableMatrix) +/* harmony export */ }); +/* harmony import */ var _renderable_tactic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderable-tactic */ 98735); + +class RenderableMatrix { + get height() { + let heights = this.tactics.map(function (tactic) { + return tactic.height; + }); + return Math.max(...heights); + } + constructor(matrix, viewModel, renderConfig) { + this.tactics = []; + this.matrix = matrix; + let filteredTactics = viewModel.filterTactics(matrix.tactics, matrix); + for (let tactic of filteredTactics) { + this.tactics.push(new _renderable_tactic__WEBPACK_IMPORTED_MODULE_0__.RenderableTactic(tactic, matrix, viewModel, renderConfig)); + } + } +} + +/***/ }), + +/***/ 98735: +/*!********************************************************************!*\ + !*** ./src/app/svg-export/renderable-objects/renderable-tactic.ts ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RenderableTactic: () => (/* binding */ RenderableTactic) +/* harmony export */ }); +/* harmony import */ var _renderable_technique__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderable-technique */ 44353); + +class RenderableTactic { + constructor(tactic, matrix, viewModel, renderConfig) { + this.techniques = []; + this.subtechniques = []; + this.tactic = tactic; + let filteredTechniques = viewModel.sortTechniques(viewModel.filterTechniques(tactic.techniques, tactic, matrix), tactic); + let yPosition = 1; // start at 1 to make space for tactic label + for (let technique of filteredTechniques) { + let techniqueVM = viewModel.getTechniqueVM(technique, tactic); + let filteredSubtechniques = viewModel.filterTechniques(technique.subtechniques, tactic, matrix); + let showSubtechniques = renderConfig.showSubtechniques == 'all' || renderConfig.showSubtechniques == 'expanded' && techniqueVM.showSubtechniques; + this.techniques.push(new _renderable_technique__WEBPACK_IMPORTED_MODULE_0__.RenderableTechnique(yPosition++, technique, tactic, matrix, viewModel, showSubtechniques)); + if (filteredSubtechniques.length > 0 && showSubtechniques) { + for (let subtechnique of filteredSubtechniques) { + this.subtechniques.push(new _renderable_technique__WEBPACK_IMPORTED_MODULE_0__.RenderableTechnique(yPosition++, subtechnique, tactic, matrix, viewModel, renderConfig)); + } + } + } + this.height = yPosition; + } +} + +/***/ }), + +/***/ 44353: +/*!***********************************************************************!*\ + !*** ./src/app/svg-export/renderable-objects/renderable-technique.ts ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RenderableTechnique: () => (/* binding */ RenderableTechnique) +/* harmony export */ }); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tinycolor2 */ 62002); + +class RenderableTechnique { + constructor(yPosition, technique, tactic, matrix, viewModel, showSubtechniques = false) { + this.yPosition = yPosition; + this.technique = technique; + this.tactic = tactic; + this.matrix = matrix; + this.viewModel = viewModel; + this.showSubtechniques = showSubtechniques; + } + get fill() { + if (this.viewModel.hasTechniqueVM(this.technique, this.tactic)) { + let techniqueVM = this.viewModel.getTechniqueVM(this.technique, this.tactic); + if (!techniqueVM.enabled) return 'white'; + if (techniqueVM.color) return techniqueVM.color; + if (this.viewModel.layout.showAggregateScores && techniqueVM.aggregateScoreColor) return techniqueVM.aggregateScoreColor; + if (techniqueVM.score) return techniqueVM.scoreColor; + } + return null; //default + } + get textColor() { + if (this.viewModel.hasTechniqueVM(this.technique, this.tactic)) { + let techniqueVM = this.viewModel.getTechniqueVM(this.technique, this.tactic); + if (!techniqueVM.enabled) return '#aaaaaa'; + } + if (this.fill) { + return tinycolor2__WEBPACK_IMPORTED_MODULE_0__["default"].mostReadable(this.fill, ['white', 'black']); //default; + } + return null; + } + get text() { + let text = []; + if (this.viewModel.layout.showID) text.push(this.technique.attackID); + if (this.viewModel.layout.showName) text.push(this.technique.name); + return text.join(': '); + } +} + +/***/ }), + +/***/ 88688: +/*!****************************************************!*\ + !*** ./src/app/svg-export/svg-export.component.ts ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ SvgExportComponent: () => (/* binding */ SvgExportComponent) +/* harmony export */ }); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var _renderable_objects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./renderable-objects */ 61180); +/* harmony import */ var tinycolor2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tinycolor2 */ 62002); +/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/utils */ 37709); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/config.service */ 43696); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_form_field__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @angular/material/form-field */ 24950); +/* harmony import */ var _angular_material_select__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/material/select */ 25175); +/* harmony import */ var _angular_material_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @angular/material/core */ 74646); +/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @angular/forms */ 34456); +/* harmony import */ var _angular_material_input__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/material/input */ 95541); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @angular/material/button */ 84175); +/* harmony import */ var _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/tooltip */ 80640); +/* harmony import */ var ngx_color_picker__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ngx-color-picker */ 36245); + + + + + + + + + + + + + + + + + +const _c0 = a0 => [a0]; +const _c1 = a0 => ({ + "disabled-text": a0 +}); +const _c2 = () => ["#6B7279", "#aaaaaa", "#205B8F", "#B9482D", "#ffffff", "#000000"]; +function SvgExportComponent_li_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "li", 24); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, " Warning: this interface is not fully compatible with your browser. For best results please switch to Edge, Chrome, or Firefox. "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } +} +function SvgExportComponent_span_7_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "span", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "nightlight_round"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } +} +function SvgExportComponent_span_8_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "span", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](1, "wb_sunny"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + } +} +function SvgExportComponent_div_20_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 25)(1, "ul")(2, "li")(3, "mat-form-field")(4, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](5, "orientation"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "mat-select", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_20_Template_mat_select_ngModelChange_6_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.orientation, $event) || (ctx_r1.config.orientation = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("selectionChange", function SvgExportComponent_div_20_Template_mat_select_selectionChange_6_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](7, "mat-option", 27); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](8, "Portrait"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](9, "mat-option", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](10, "Landscape"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](11, "li")(12, "mat-form-field")(13, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](14, "size"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](15, "mat-select", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_20_Template_mat_select_ngModelChange_15_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.size, $event) || (ctx_r1.config.size = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("selectionChange", function SvgExportComponent_div_20_Template_mat_select_selectionChange_15_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](16, "mat-option", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](17, "Custom"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](18, "mat-option", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](19, "US Letter: 8.5x11"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](20, "mat-option", 32); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](21, "US Legal: 8.5x14"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](22, "mat-option", 33); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](23, "Small: 11x17"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](24, "mat-option", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](25, "Medium: 18x24"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](26, "mat-option", 35); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](27, "Large 24x36"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](28, "li")(29, "mat-form-field")(30, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](31, "width"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](32, "input", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_20_Template_input_ngModelChange_32_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.width, $event) || (ctx_r1.config.width = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_20_Template_input_input_32_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](33, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](34); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](35, "li")(36, "mat-form-field")(37, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](38, "height"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](39, "input", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_20_Template_input_ngModelChange_39_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.height, $event) || (ctx_r1.config.height = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_20_Template_input_input_39_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](40, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](41); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](42, "li")(43, "mat-form-field")(44, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](45, "header height"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](46, "input", 36); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_20_Template_input_ngModelChange_46_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.headerHeight, $event) || (ctx_r1.config.headerHeight = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_20_Template_input_input_46_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r1); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](47, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](48); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.orientation); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](9); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.size); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](17); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.size !== "custom"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.width); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](14, _c1, ctx_r1.config.size !== "custom")); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.size !== "custom"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.height); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](16, _c1, ctx_r1.config.size !== "custom")); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.headerHeight); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](18, _c1, !ctx_r1.config.showHeader)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + } +} +function SvgExportComponent_div_25_div_18_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 47)(1, "span", 48); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](2, "warning"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](3, "label", 49); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](4, "cell text is overflowing"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + } +} +function SvgExportComponent_div_25_Template(rf, ctx) { + if (rf & 1) { + const _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 38)(1, "ul")(2, "li")(3, "mat-form-field")(4, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](5, "font"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "mat-select", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_25_Template_mat_select_ngModelChange_6_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.font, $event) || (ctx_r1.config.font = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("selectionChange", function SvgExportComponent_div_25_Template_mat_select_selectionChange_6_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](7, "mat-option", 39); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](8, "serif"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](9, "mat-option", 40); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](10, "sans-serif"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](11, "mat-option", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](12, "monospace"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](13, "li")(14, "mat-form-field", 42)(15, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](16, "font size"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](17, "input", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_25_Template_input_ngModelChange_17_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.fontSize, $event) || (ctx_r1.config.fontSize = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_25_Template_input_input_17_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](18, SvgExportComponent_div_25_div_18_Template, 5, 0, "div", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](19, "li")(20, "input", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_25_Template_input_ngModelChange_20_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.autofitText, $event) || (ctx_r1.config.autofitText = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_25_Template_input_change_20_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](21, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](22, "auto-fit font size"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.font); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.autofitText); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.fontSize); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", !ctx_r1.config.autofitText && ctx_r1.config.fontSize > ctx_r1.config.maxTextSize); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "autofit"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.autofitText); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "autofit"); + } +} +function SvgExportComponent_div_30_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 50)(1, "ul")(2, "li")(3, "input", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_30_Template_input_ngModelChange_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.legendDocked, $event) || (ctx_r1.config.legendDocked = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_30_Template_input_change_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](5, "dock legend in header"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "li")(7, "mat-form-field")(8, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](9, "legend X position"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](10, "input", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_30_Template_input_ngModelChange_10_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.legendX, $event) || (ctx_r1.config.legendX = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_30_Template_input_input_10_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](11, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](13, "li")(14, "mat-form-field")(15, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](16, "legend Y position"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](17, "input", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_30_Template_input_ngModelChange_17_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.legendY, $event) || (ctx_r1.config.legendY = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_30_Template_input_input_17_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](18, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](19); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](20, "li")(21, "mat-form-field")(22, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](23, "legend width"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](24, "input", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_30_Template_input_ngModelChange_24_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.legendWidth, $event) || (ctx_r1.config.legendWidth = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_30_Template_input_input_24_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](25, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](26); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](27, "li")(28, "mat-form-field")(29, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](30, "legend height"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](31, "input", 43); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_30_Template_input_ngModelChange_31_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.legendHeight, $event) || (ctx_r1.config.legendHeight = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("input", function SvgExportComponent_div_30_Template_input_input_31_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r4); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](32, "span", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](33); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "legendDockedCheckbox"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.legendDocked); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "legendDockedCheckbox"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.legendDocked); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.legendX); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](19, _c1, ctx_r1.config.legendDocked)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.legendDocked); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.legendY); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](21, _c1, ctx_r1.config.legendDocked)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.legendDocked); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.legendWidth); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](23, _c1, ctx_r1.config.legendDocked)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("disabled", ctx_r1.config.legendDocked); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.legendHeight); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](25, _c1, ctx_r1.config.legendDocked)); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate"](ctx_r1.config.unit); + } +} +function SvgExportComponent_div_35_li_26_Template(rf, ctx) { + if (rf & 1) { + const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "li", 56)(1, "mat-form-field")(2, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](3, "sub-techniques"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "mat-select", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_li_26_Template_mat_select_ngModelChange_4_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r6); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showSubtechniques, $event) || (ctx_r1.config.showSubtechniques = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("selectionChange", function SvgExportComponent_div_35_li_26_Template_mat_select_selectionChange_4_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r6); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](5, "mat-option", 57); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](6, "show all"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](7, "mat-option", 58); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](8, "show expanded"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](9, "mat-option", 59); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](10, "show none"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showSubtechniques); + } +} +function SvgExportComponent_div_35_Template(rf, ctx) { + if (rf & 1) { + const _r5 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 51)(1, "ul")(2, "li")(3, "input", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_Template_input_ngModelChange_3_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showHeader, $event) || (ctx_r1.config.showHeader = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_35_Template_input_change_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](5, "show header"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](6, "li")(7, "input", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_Template_input_ngModelChange_7_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showAbout, $event) || (ctx_r1.config.showAbout = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_35_Template_input_change_7_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](8, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](9, " show about "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](10, "li")(11, "input", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_Template_input_ngModelChange_11_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showDomain, $event) || (ctx_r1.config.showDomain = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_35_Template_input_change_11_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](12, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](13, " show domain "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](14, "li")(15, "input", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_Template_input_ngModelChange_15_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showFilters, $event) || (ctx_r1.config.showFilters = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_35_Template_input_change_15_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](16, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](17, " show filters "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](18, "li")(19, "input", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_Template_input_ngModelChange_19_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showLegend, $event) || (ctx_r1.config.showLegend = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_35_Template_input_change_19_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](20, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](21, " show legend "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](22, "li")(23, "input", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("ngModelChange", function SvgExportComponent_div_35_Template_input_ngModelChange_23_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.showGradient, $event) || (ctx_r1.config.showGradient = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("change", function SvgExportComponent_div_35_Template_input_change_23_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](24, "label", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](25, " show gradient score "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](26, SvgExportComponent_div_35_li_26_Template, 11, 1, "li", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](27, "li")(28, "input", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayListener"]("colorPickerChange", function SvgExportComponent_div_35_Template_input_colorPickerChange_28_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayBindingSet"](ctx_r1.config.tableBorderColor, $event) || (ctx_r1.config.tableBorderColor = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("colorPickerSelect", function SvgExportComponent_div_35_Template_input_colorPickerSelect_28_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵrestoreView"](_r5); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵresetView"](ctx_r1.buildSVG()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](29, "label", 55); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](30, "cell border"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "checkboxheader"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "checkboxheader"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "checkboxAbout")("disabled", !ctx_r1.hasName && !ctx_r1.hasDescription || !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showAbout); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("disabled", !ctx_r1.hasName && !ctx_r1.hasDescription || !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "checkboxAbout"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "checkboxDomain")("disabled", !ctx_r1.hasDomain || !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showDomain); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("disabled", !ctx_r1.hasDomain || !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "checkboxDomain"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "checkboxfilters")("disabled", !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showFilters); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("disabled", !ctx_r1.config.showHeader); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "checkboxfilters"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "checkboxlegend")("disabled", !ctx_r1.hasLegendItems); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showLegend); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("disabled", !ctx_r1.hasLegendItems); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "checkboxlegend"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "checkboxGradient")("disabled", !ctx_r1.hasScores); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.config.showGradient); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵclassProp"]("disabled", !ctx_r1.hasScores); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "checkboxGradient"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx_r1.configService.getFeature("subtechniques")); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵstyleProp"]("background", ctx_r1.config.tableBorderColor); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", ctx_r1.uid + "tableBorderInput"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtwoWayProperty"]("colorPicker", ctx_r1.config.tableBorderColor); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("cpPresetColors", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction0"](43, _c2))("cpOKButton", true)("cpOKButtonText", "apply")("cpCancelButton", true); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("for", ctx_r1.uid + "tableBorderInput"); + } +} +class SvgExportComponent { + // browser compatibility + get isIE() { + return (0,_utils_utils__WEBPACK_IMPORTED_MODULE_2__.isIE)(); + } + // getters for visibility of SVG header sections + get hasName() { + return this.viewModel.name.length > 0; + } + get hasDomain() { + return this.viewModel.domainVersionID.length > 0; + } + get hasDescription() { + return this.viewModel.description.length > 0; + } + get hasLegendItems() { + return this.viewModel.legendItems.length > 0; + } + // getters for user preferences + get showName() { + return this.config.showAbout && this.hasName && this.config.showHeader; + } + get showDomain() { + return this.config.showDomain && this.hasDomain && this.config.showHeader; + } + get showAggregate() { + return this.viewModel.layout.showAggregateScores && this.config.showHeader; + } + get showDescription() { + return this.config.showAbout && this.hasDescription && this.config.showHeader; + } + get showFilters() { + return this.config.showFilters && this.config.showHeader; + } + get showGradient() { + return this.config.showGradient && this.hasScores && this.config.showHeader; + } + get showLegend() { + return this.config.showLegend && this.hasLegendItems; + } + get showLegendContainer() { + return this.showLegend || this.showGradient; + } + get showLegendInHeader() { + return this.config.legendDocked; + } + constructor(dialogRef, + // needed for mat-dialog-close + configService, dataService, data) { + this.dialogRef = dialogRef; + this.configService = configService; + this.dataService = dataService; + this.data = data; + // SVG configuration + this.config = {}; + this.svgConfigDefaults = { + width: 11, + height: 8.5, + headerHeight: 1, + unit: 'in', + orientation: 'landscape', + size: 'letter', + fontSize: 4, + autofitText: true, + maxTextSize: Infinity, + theme: 'light', + showSubtechniques: 'expanded', + font: 'sans-serif', + tableBorderColor: '#6B7279', + showHeader: true, + legendDocked: true, + legendX: 0, + legendY: 0, + legendWidth: 2, + legendHeight: 1, + showLegend: true, + showGradient: true, + showFilters: true, + showAbout: true, + showDomain: true, + showAggregate: false + }; + // SVG settings + this.currentDropdown = null; + this.svgElementID = 'svgInsert_tmp'; + this.buildSVGDebounce = false; + // counter for unit change ui element + this.unitEnum = 0; + // counter for theme change ui element + this.themeEnum = 0; + this.config = this.svgConfigDefaults; + } + ngOnInit() { + this.viewModel = this.data.vm; + this.svgElementID = 'svgInsert' + this.viewModel.uid; + let self = this; + //determine if the layer has any scores + let visibleTechniques = self.viewModel.getVisibleTechniquesList(); + for (let unionID of visibleTechniques) { + let techniqueVM = self.viewModel.getTechniqueVM_id(unionID); + if (techniqueVM.score != '') { + self.hasScores = true; + break; // at least one score found + } + } + // dynamic legend height according to content + let legendSectionCount = 0; + if (self.hasScores) legendSectionCount++; + if (self.hasLegendItems) legendSectionCount++; + self.config.legendHeight = 0.5 * legendSectionCount; + //initial legend position for undocked legend + this.config.legendX = this.config.width - this.config.legendWidth - 0.1; + this.config.legendY = this.config.height - this.config.legendHeight - 0.1; + if (this.config.showHeader) this.config.legendY -= this.config.headerHeight; + //initial table border color + if (this.config.theme === 'light') { + this.config.tableBorderColor = '#6B7279'; + } else if (this.config.theme === 'dark') { + this.config.tableBorderColor = '#4c4c68'; + } + // build SVG at end of fn queue so page can render before build + window.setTimeout(function () { + self.buildSVG(self); + }, 0); + } + /** build the SVG */ + buildSVG(self, bypassDebounce = false) { + if (!self) self = this; // called from somewhere other than ngOnInit + // debounce + if (self.buildSVGDebounce && !bypassDebounce) return; + if (!bypassDebounce) { + self.buildSVGDebounce = true; + window.setTimeout(function () { + self.buildSVG(self, true); + }, 500); + return; + } + self.buildSVGDebounce = false; + // set svg size + this.setSize(self, self.config.size, self.config.orientation); + // calculate svg height and width + let margin = { + top: 5, + right: 5, + bottom: 5, + left: 5 + }; + let width = Math.max(self.toPx(self.config.width, self.config.unit) - (margin.right + margin.left), 10); + let svgWidth = width + margin.left + margin.right; + let height = Math.max(self.toPx(self.config.height, self.config.unit) - (margin.top + margin.bottom), 10); + let svgHeight = height + margin.top + margin.bottom; + let headerHeight = Math.max(self.toPx(self.config.headerHeight, self.config.unit), 1); + // remove previous graphic + let svgElement = document.getElementById(self.svgElementID); + svgElement.innerHTML = ''; + // create new SVG + let svg = d3.select('#' + self.svgElementID).append('svg').attr('width', svgWidth).attr('height', svgHeight).attr('xmlns', 'http://www.w3.org/2000/svg').attr('id', 'svg' + self.viewModel.uid) // SVG download tag + .append('g').attr('transform', 'translate(' + margin.left + ',' + margin.top + ')').style('font-family', self.config.font); + // ----------------------------------------------------------------------------- + // LEGEND + // ----------------------------------------------------------------------------- + let legendSection = { + title: 'legend', + contents: [] + }; + // scores and gradient + if (self.hasScores && self.showGradient) { + legendSection.contents.push({ + label: 'gradient', + data: self.buildGradient() + }); + } + // legend items + if (self.showLegend) { + legendSection.contents.push({ + label: 'legend', + data: self.buildLegend() + }); + } + // ----------------------------------------------------------------------------- + // HEADER + // ----------------------------------------------------------------------------- + if (self.config.showHeader) { + let headerSections = []; + // about section + if (self.showName || self.showDescription) { + let aboutSection = { + title: 'about', + contents: [] + }; + if (self.showName) aboutSection.contents.push({ + label: 'name', + data: this.viewModel.name + }); + if (self.showDescription) aboutSection.contents.push({ + label: 'description', + data: this.viewModel.description + }); + headerSections.push(aboutSection); + } + // domain section + let domainSection = { + title: 'domain', + contents: [] + }; + if (self.showDomain) { + let domain = this.dataService.getDomain(this.viewModel.domainVersionID); + domainSection.contents.push({ + label: 'domain', + data: `${domain.name} v${domain.version.number}` + }); + } + // platform section + let platformSection = { + title: 'platforms', + contents: [] + }; + if (self.showFilters) { + let filterData = { + label: 'platforms', + data: this.viewModel.filters.platforms.selection.join(', ') + }; + // domain + platforms + if (self.showAggregate) { + domainSection.title = 'domain & platforms'; + domainSection.contents.push(filterData); + } else { + platformSection.contents.push(filterData); + } + } + // add relevant sections to header + if (domainSection.contents.length > 0) headerSections.push(domainSection); + if (platformSection.contents.length > 0) headerSections.push(platformSection); + // aggregate scores + if (self.showAggregate) { + let aggregateSection = { + title: 'aggregate', + contents: [] + }; + aggregateSection.contents.push({ + label: 'function', + data: 'showing aggregate scores using the ' + this.viewModel.layout.aggregateFunction + ' aggregate function' + }); + if (this.viewModel.layout.countUnscored) { + aggregateSection.contents.push({ + label: 'unscored', + data: 'includes unscored techniques as having a score of 0' + }); + } + headerSections.push(aggregateSection); + } + // legend section + if (self.showLegendContainer && self.showLegendInHeader) headerSections.push(legendSection); + // build header + let headerGroup = svg.append('g'); + let headerX = d3.scaleBand().paddingInner(0.05).domain(headerSections.map(section => section.title)).range([0, width]); + // build header sections + for (let section of headerSections) { + let sectionGroup = headerGroup.append('g'); + if (headerSections.length > 1) { + sectionGroup.attr('transform', `translate(${headerX(section.title)}, 0)`); + } + let headerWidth = headerSections.length == 1 ? width : headerX.bandwidth(); + self.buildHeaderSection(this, sectionGroup, section, headerWidth, headerHeight); + } + if (headerSections.length == 0) headerHeight = 0; // no header sections + } else { + //no header + headerHeight = 0; + } + // ----------------------------------------------------------------------------- + // MATRIX + // ----------------------------------------------------------------------------- + // build data model + let datatable = svg.append('g').attr('transform', 'translate(0,' + (headerHeight + 1) + ')'); + let domain = self.dataService.getDomain(self.viewModel.domainVersionID); + let matrices = domain.matrices.map(m => new _renderable_objects__WEBPACK_IMPORTED_MODULE_0__.RenderableMatrix(m, self.viewModel, self.config)); + // get flattened list of tactics + let tactics = []; + for (let matrix of matrices) { + tactics = tactics.concat(matrix.tactics); + } + // build tactic columns + let xRange = d3.scaleBand().domain(tactics.map(t => t.tactic.id)).range([0, width]); + let yRange = d3.scaleLinear().domain([d3.max(tactics, function (tactic) { + return tactic.height; + }), 0]).range([height - headerHeight, 0]); + // tactic row background + let subtechniqueIndent = Math.min(2 * yRange(1), 15); + if (self.viewModel.showTacticRowBackground) { + datatable.append('rect').attr('class', 'tactic-header-background').attr('width', width).attr('height', yRange(1)).attr('fill', self.viewModel.tacticRowBackground).attr('stroke', self.config.tableBorderColor); + } + // tactic names + let tacticGroups = datatable.append('g').selectAll('g').data(tactics).enter().append('g').attr('class', function (tactic) { + return 'tactic ' + tactic.tactic.shortname; + }).attr('transform', function (tactic) { + return `translate(${xRange(tactic.tactic.id)}, 0)`; + }); + // add technique groups to tactic column + let techniqueGroups = tacticGroups.append('g').attr('class', 'techniques').selectAll('g').data(function (tactic) { + return tactic.techniques; + }).enter().append('g').attr('class', function (technique) { + return 'technique ' + technique.technique.attackID; + }).attr('transform', function (technique) { + return `translate(0, ${yRange(technique.yPosition)})`; + }); + // add sub-technique groups to tactic column + let subtechniqueGroups = tacticGroups.append('g').attr('class', 'subtechniques').selectAll('g').data(function (tactic) { + return tactic.subtechniques; + }).enter().append('g').attr('class', function (subtechnique) { + return 'subtechnique ' + subtechnique.technique.attackID; + }).attr('transform', function (subtechnique) { + return `translate(${subtechniqueIndent}, ${yRange(subtechnique.yPosition)})`; + }); + // add cell style to techniques + techniqueGroups.append('rect').attr('class', 'cell').attr('height', yRange(1)).attr('width', xRange.bandwidth()).attr('fill', function (technique) { + if (technique.fill !== null) { + return technique.fill; + } else { + if (self.config.theme === 'light') { + return '#ffffff'; + } else { + return '#2e2e3f'; + } + } + }).attr('stroke', self.config.tableBorderColor); + // add cell style to sub-techniques + subtechniqueGroups.append('rect').attr('class', 'cell').attr('height', yRange(1)).attr('width', xRange.bandwidth() - subtechniqueIndent).attr('fill', function (subtechnique) { + if (subtechnique.fill !== null) { + return subtechnique.fill; + } else { + if (self.config.theme === 'light') { + return '#ffffff'; + } else { + return '#2e2e3f'; + } + } + }).attr('stroke', self.config.tableBorderColor); + // add styling for sub-technique sidebar + let sidebarWidth = 3; + subtechniqueGroups.append('rect').attr('class', 'cell').attr('height', yRange(1)).attr('width', sidebarWidth).attr('transform', `translate(${-sidebarWidth}, 0)`).attr('fill', self.config.tableBorderColor).attr('stroke', self.config.tableBorderColor); + techniqueGroups.append('polygon').attr('class', 'sidebar').attr('transform', `translate(0, ${yRange(1)})`).attr('points', function (technique) { + return ['0,0', `${subtechniqueIndent - sidebarWidth},0`, `${subtechniqueIndent - sidebarWidth},${Math.min(subtechniqueIndent - sidebarWidth, yRange(self.viewModel.filterTechniques(technique.technique.subtechniques, technique.tactic, technique.matrix).length))}`].join(' '); + }).attr('fill', self.config.tableBorderColor).attr('visibility', function (technique) { + return technique.technique.subtechniques.length > 0 && technique.showSubtechniques ? 'visible' : 'hidden'; + }); + // ----------------------------------------------------------------------------- + // CELL TEXT + // ----------------------------------------------------------------------------- + // track smallest optimal font size + let minFontSize = Infinity; + // set technique font size + techniqueGroups.append('text').text(function (technique) { + return technique.text; + }).attr('font-size', function (technique) { + const fontSize = self.optimalFontSize(this, technique.text, xRange.bandwidth(), yRange(1), false); + if (fontSize < minFontSize) minFontSize = fontSize; + return fontSize; + }).attr('fill', function (technique) { + if (technique.textColor !== null) { + return technique.textColor; + } else { + if (self.config.theme === 'light') { + return '#000000'; + } else { + return '#ffffff'; + } + } + }).each(function () { + self.verticalAlignCenter(this); + }); + // set sub-technique font size + subtechniqueGroups.append('text').text(function (subtechnique) { + return subtechnique.text; + }).attr('font-size', function (subtechnique) { + const fontSize = self.optimalFontSize(this, subtechnique.text, xRange.bandwidth() - subtechniqueIndent, yRange(1), false); + if (fontSize < minFontSize) minFontSize = fontSize; + return fontSize; + }).attr('fill', function (subtechnique) { + if (subtechnique.textColor !== null) { + return subtechnique.textColor; + } else { + if (self.config.theme === 'light') { + return '#000000'; + } else { + return '#ffffff'; + } + } + }).each(function () { + self.verticalAlignCenter(this); + }); + // set technique and sub-technique groups to the same font size + this.config.maxTextSize = minFontSize; + if (this.config.autofitText) { + this.config.fontSize = minFontSize.toFixed(2); + } + if (this.config.autofitText) { + techniqueGroups.select('text').attr('font-size', minFontSize); + subtechniqueGroups.select('text').attr('font-size', minFontSize); + } else { + techniqueGroups.select('text').attr('font-size', this.config.fontSize); + subtechniqueGroups.select('text').attr('font-size', this.config.fontSize); + } + // track the smallest optimal font size for tactics + let minTacticFontSize = Infinity; + // set tactic font size + let tacticLabels = tacticGroups.append('g').attr('class', 'tactic-label'); + tacticLabels.append('text').text(function (tactic) { + return tactic.tactic.name; + }).attr('font-size', function (tactic) { + const fontSize = self.optimalFontSize(this, tactic.tactic.name, xRange.bandwidth(), yRange(1), true); + if (fontSize < minTacticFontSize) minTacticFontSize = fontSize; + return fontSize; + }).attr('fill', function (tactic) { + if (self.viewModel.showTacticRowBackground) return tinycolor2__WEBPACK_IMPORTED_MODULE_1__["default"].mostReadable(self.viewModel.tacticRowBackground, ['white', 'black']);else return self.config.theme === 'light' ? 'black' : 'white'; + }).attr('font-weight', 'bold').each(function () { + self.verticalAlignCenter(this); + }); + // set tactic labels to same font size + tacticLabels.select('text').attr('font-size', minTacticFontSize); + // ----------------------------------------------------------------------------- + // UNDOCKED LEGEND + // ----------------------------------------------------------------------------- + if (self.showLegendContainer && !self.showLegendInHeader) { + // calculate legend height and width + let legendX = Math.max(self.toPx(self.config.legendX, self.config.unit), 0); + let legendY = Math.max(self.toPx(self.config.legendY, self.config.unit), 0); + let legendWidth = Math.max(self.toPx(self.config.legendWidth, self.config.unit), 10); + let legendHeight = Math.max(self.toPx(self.config.legendHeight, self.config.unit), 10); + let legendGroup = datatable.append('g').attr('transform', `translate(${legendX}, ${legendY})`); + self.buildHeaderSection(this, legendGroup, legendSection, legendWidth, legendHeight); + } + } + /** + * Build the box for the given header section + * @param self this DOM node + * @param group outer group element + * @param section header section + * @param width width of the cell + * @param height height of the cell + */ + buildHeaderSection(self, group, section, width, height) { + let padding = 5; + height -= 2 * padding; // adjust height for padding + // header section group + let boxGroup = group.append('g').attr('transform', `translate(0,${padding})`); + // create outer box + boxGroup.append('rect').attr('class', 'header-box').attr('width', width).attr('height', height).attr('stroke', self.config.theme === 'light' ? 'black' : '#4c4c68').attr('fill', self.config.theme === 'light' ? 'white' : '#1a1a23').attr('rx', padding); // rounded corner + // box title + let boxTitle = boxGroup.append('text').attr('class', 'header-box-label').text(section.title).attr('x', 2 * padding).attr('font-size', 12).attr('fill', self.config.theme === 'light' ? 'black' : 'white').each(function () { + self.verticalAlignCenter(this); + }); + // add cover mask so that the box lines crop around the text + let bbox = boxTitle.node().getBBox(); + let coverPadding = 2; + boxGroup.append('rect').attr('class', 'label-cover').attr('x', bbox.x - coverPadding).attr('y', bbox.y - coverPadding).attr('width', bbox.width + 2 * coverPadding).attr('height', bbox.height + 2 * coverPadding).attr('fill', self.config.theme === 'light' ? 'white' : '#1a1a23').attr('rx', padding); // rounded corner + boxTitle.raise(); // push title to front + // add content to box + let boxContentGroup = boxGroup.append('g').attr('class', 'header-box-content').attr('fill', self.config.theme === 'light' ? 'black' : 'white').attr('transform', `translate(${padding}, 0)`); + let yRange = d3.scaleBand().padding(0.05).align(0.5).domain(section.contents.map(function (content) { + return content.label; + })).range([0, height]); + // add each subsection to box + let contentWidth = width - 2 * padding; + for (let i = 0; i < section.contents.length; i++) { + let subsection = section.contents[i]; + let contentGroup = boxContentGroup.append('g').attr('transform', `translate(0, ${yRange(subsection.label)})`); + if (typeof subsection.data == 'string') { + // add text to contentGroup + contentGroup.append('text').text(subsection).attr('font-size', function () { + return self.optimalFontSize(this, subsection.data, contentWidth, yRange.bandwidth(), false, 12); + }).each(function () { + self.verticalAlignCenter(this); + }); + } else { + // call callback to add complex data to contentGroup + subsection.data(self, contentGroup, contentWidth); + } + if (i != section.contents.length - 1) { + // add dividing line + contentGroup.append('line').attr('x1', 0).attr('x2', contentWidth).attr('y1', yRange.bandwidth()).attr('y2', yRange.bandwidth()).attr('stroke', '#dddddd'); + } + } + } + /** Callback function to build the legend section */ + buildLegend() { + return function (self, group, width) { + // legend colors + let colorScale = d3.scaleOrdinal().domain(self.viewModel.legendItems.map(function (item) { + return item.label; + })).range(self.viewModel.legendItems.map(function (item) { + return item.color; + })); + // legend svg group + group.append('g').attr('transform', 'translate(0, 5)').call(d3.legendColor().shapeWidth(width / self.viewModel.legendItems.length).shapePadding(0).shape('rect').orient('horizontal').scale(colorScale).labelOffset(2)); + }; + } + /** Callback function to build the gradient section */ + buildGradient() { + return function (self, group, width) { + // build gradient + let gradient = []; + for (let i = 0; i < self.viewModel.gradient.colors.length; i++) { + let percent = i / (self.viewModel.gradient.colors.length - 1); + gradient.push(d3.interpolateNumber(self.viewModel.gradient.minValue, self.viewModel.gradient.maxValue)(percent)); + } + // build color scale + let colorScale = d3.scaleLinear().domain(gradient).range(self.viewModel.gradient.colors.map(color => color.color)); + // gradient svg group + let nCells = gradient.length * 2; + group.append('g').attr('transform', 'translate(0, 5)').call(d3.legendColor().shapeWidth(width / nCells).shapePadding(0).cells(nCells).shape('rect').orient('horizontal').scale(colorScale).labelOffset(2).labelFormat(d3.format('0.02r'))); + }; + } + /** + * Set width and height based on selected size and orientaiton + * @param {any} self this DOM node + * @param {string} size dimensions + * @param {string} orientation portrait or landscape + */ + setSize(self, size, orientation) { + const ratioMap = { + letter: { + portrait: [8.5, 11], + landscape: [11, 8.5] + }, + legal: { + portrait: [8.5, 14], + landscape: [14, 8.5] + }, + small: { + portrait: [11, 17], + landscape: [17, 11] + }, + medium: { + portrait: [18, 24], + landscape: [24, 18] + }, + large: { + portrait: [24, 36], + landscape: [36, 24] + } + }; + if (size !== 'custom') { + const [w, h] = ratioMap[size][orientation]; + self.config.width = w; + self.config.height = h; + } + } + /** + * Set the vertical alignment of the given node to center + * @param self this DOM node + * @param fontSize the font size of the node + */ + verticalAlignCenter(self, fontSize = null) { + if (self.children && self.children.length > 0) { + for (let child of self.children) { + this.verticalAlignCenter(child, self.getAttribute('font-size')); + } + } else { + // transform by half the font size - 1/2px for proper centering + fontSize = fontSize ? fontSize : self.getAttribute('font-size'); + if (fontSize.endsWith('px')) fontSize = Number(fontSize.split('px')[0]); + let yPosition = self.hasAttribute('y') ? Number(self.getAttribute('y')) : 0; + let newYPosition = yPosition + Math.floor(fontSize * 0.3); + d3.select(self).attr('y', newYPosition); + } + } + /** + * Divide distance into divisions equidistant anchor points S.T they all have equal + * padding from each other and the beginning and end of the distance + * @param distance distance to divide + * @param divisions number of divisions + * @return number[] where each number corresponds to a division-center offset + */ + getSpacing(distance, divisions) { + let res = []; + let spacing = (distance - 1) / (divisions * 2); + for (let i = 1; i <= divisions * 2; i += 2) { + res.push(1 + spacing * i); + } + return res; + } + /** + * Insert line breaks + * @param self this DOM node + * @param words array of words to space + * @param padding element padding + * @param spacing distance to space text inside element + * @param center center the text? + * @param width width of the cell + * @param height height of the cell + */ + insertLineBreaks(self, words, padding, spacing, center, width, height) { + let element = d3.select(self); + // clear previous content + element.text(''); + while (self.firstChild) self.removeChild(self.firstChild); + let division = this.getSpacing(spacing, words.length); + for (let i = 0; i < words.length; i++) { + let tspan = element.append('tspan').text(words[i]); + if (center) tspan.attr('text-anchor', 'middle'); + tspan.attr('x', center ? width / 2 : padding).attr('y', (height - spacing) / 2 + division[i]); + } + } + /** + * Find the font size for the given array of words to be broken onto + * 1 line each + * @param self this DOM node + * @param text text to render + * @param width width of the cell + * @param height height of the cell + * @param center center the text? + * @param maxFontSize maximum font size, default 12 + * @returns the largest possible font size + */ + findSize(self, words, width, height, center, maxFontSize = 12) { + let padding = 4; + if (!this.config.autofitText) { + padding = 1; + } + // break into multiple lines + let distance = Math.min(height, (maxFontSize + 3) * words.length); + this.insertLineBreaks(self, words, padding, distance, center, width, height); + // find text size to fit height of cell + let textHeight = Math.min(distance / words.length, height) * 0.8; + // find text size to fit width of cell + let longestWordLength = -Infinity; + for (let word of words) { + longestWordLength = Math.max(longestWordLength, word.length); + } + let textWidth = (width - 2 * padding) / longestWordLength * 1.45; + return Math.min(maxFontSize, textHeight, textWidth); + } + /** + * Calculate the optimal font size for the given text in the given + * sizing parameters + * @param self this DOM node + * @param text text to render + * @param width width of the cell + * @param height height of the cell + * @param center center the text? + * @param maxFontSize maximum font size, default 12 + * @returns the size in pixels + */ + optimalFontSize(self, text, width, height, center, maxFontSize = 12) { + let words = text.split(' '); + let optimalSize = -Infinity; + let wordArrangement = []; + // too many combinations causes page lagging + let num_breaks = 1; + if (words.length < 20) num_breaks = 3;else if (words.length < 50) num_breaks = 2; + let breaks = Array.from(this.findBreaks(words.length, num_breaks)); + for (let b of breaks) { + // find the best option for proposed placements generated + // b is the binary representation of newline locations (e.g. 001011) + // where 1 is a newline and 0 is a space + let wordList = []; + for (let i = 0; i < b.length; i++) { + if (b[i] === '0') { + // join with space + if (wordList.length == 0) wordList.push(words[i]);else wordList[wordList.length - 1] = wordList[wordList.length - 1] + ' ' + words[i]; + } else { + // join with newline + wordList.push(words[i]); + } + } + let size = this.findSize(self, wordList, width, height, center, maxFontSize); + if (size > optimalSize) { + optimalSize = size; + wordArrangement = wordList; + } + if (size == maxFontSize) break; // max font size found, stop search + } + this.findSize(self, wordArrangement, width, height, center, maxFontSize); + return optimalSize; + } + /** + * Determine placement of line breaks + * @param spaces number of spaces in the words + * @param breaks number of breaks to insert + * @returns the placement of line breaks represented as [01]+ where 1=break and 0=space + */ + findBreaks(spaces, breaks) { + let placement = new Set(); + let initial_breaks = []; + while (initial_breaks.length < spaces) initial_breaks.push(0); + placement.add(initial_breaks.join('')); + function recurse(currPlacement, depth, breaks) { + for (let i = 0; i < currPlacement.length; i++) { + let p = JSON.parse(JSON.stringify(currPlacement)); + p[i] = 1; + placement.add(p.join('')); + if (depth < breaks - 1) recurse(p, depth + 1, breaks); + } + } + recurse(initial_breaks, 0, breaks); + return placement; + } + /** + * Convert any length in various units to pixels + * @param quantity what length + * @param unit which unit system (in, cm, px, em, pt) + * @return that length in pixels + */ + toPx(quantity, unit) { + let factor; + if (unit == 'in') factor = 96;else if (unit == 'cm') factor = 3.779375 * 10;else if (unit == 'px') factor = 1;else if (unit == 'em') factor = 16;else if (unit == 'pt') factor = 1.33;else { + console.error('unknown unit', unit); + factor = 0; + } + return quantity * factor; + } + /** Download the SVG */ + downloadSVG() { + // get SVG element + let svgElement = document.getElementById('svg' + this.viewModel.uid); + svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg'); + // generate filename + let filename = this.viewModel.name.split(' ').join('_'); + // remove all non alphanumeric characters + filename = filename.replace(/\W/g, '') + '.svg'; + // build SVG blob + const preface = '\r\n'; + const svgData = new XMLSerializer().serializeToString(svgElement); + const svgBlob = new Blob([preface, svgData], { + type: 'image/svg+xml;charset=utf-8' + }); + // download + if (this.isIE) { + const nav = window.navigator; + nav.msSaveOrOpenBlob(svgBlob, filename); + } else { + const downloadLink = document.createElement('a'); + downloadLink.download = filename; + downloadLink.href = URL.createObjectURL(svgBlob); + document.body.appendChild(downloadLink); + downloadLink.click(); + document.body.removeChild(downloadLink); + } + } + static #_ = this.ɵfac = function SvgExportComponent_Factory(t) { + return new (t || SvgExportComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_6__.MatDialogRef), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_3__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_4__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_6__.MAT_DIALOG_DATA)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵdefineComponent"]({ + type: SvgExportComponent, + selectors: [["app-svg-export"]], + decls: 46, + vars: 15, + consts: [[1, "mat-dialog"], [1, "controlsContainer"], [1, "control-sections"], ["class", "iewarning", 4, "ngIf"], [1, "control-row-item", "noselect"], ["matTooltipPosition", "below", "matTooltip", "theme", 1, "control-row-button", 3, "click"], ["class", "material-icons", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "toggle measurement unit", 1, "control-row-button", 3, "click"], ["fill", "currentColor", "height", "24", "viewBox", "0 0 24 24", "width", "24", "xmlns", "http://www.w3.org/2000/svg"], ["x", "4px", "y", "50%", "dominant-baseline", "middle", 2, "font-size", "14px", "font-weight", "bold", "font-family", "monospace"], [1, "control-row-item"], ["matTooltipPosition", "below", "matTooltip", "image size", 1, "control-row-button", "dropdown", "noselect", 3, "click"], [1, "material-icons"], ["class", "dropdown-container size left", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "text", 1, "control-row-button", "dropdown", "noselect", 3, "click"], ["class", "dropdown-container font left", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "legend", 1, "control-row-button", "dropdown", "noselect", 3, "click"], ["class", "dropdown-container legend left", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "display settings", 1, "control-row-button", "dropdown", "noselect", 3, "click"], ["class", "dropdown-container visibility left", 4, "ngIf"], ["matTooltipPosition", "below", "matTooltip", "download SVG", 1, "control-row-button", "noselect", 3, "click", "id"], ["alt", "save layer", 1, "material-icons"], [3, "ngClass", "id"], ["mat-button", "", "mat-dialog-close", ""], [1, "iewarning"], [1, "dropdown-container", "size", "left"], [3, "ngModelChange", "selectionChange", "ngModel"], ["value", "portrait"], ["value", "landscape"], ["matSelect", "", 3, "ngModelChange", "selectionChange", "ngModel"], ["value", "custom"], ["value", "letter"], ["value", "legal"], ["value", "small"], ["value", "medium"], ["value", "large"], ["matInput", "", "type", "number", "step", "0.01", 1, "has-suffix", 3, "ngModelChange", "input", "disabled", "ngModel"], ["matTextSuffix", "", 3, "ngClass"], [1, "dropdown-container", "font", "left"], ["value", "serif"], ["value", "sans-serif"], ["value", "monospace"], [1, "hide-subscript"], ["matInput", "", "type", "number", "step", "1", 1, "has-suffix", 3, "ngModelChange", "input", "disabled", "ngModel"], ["class", "warning", 4, "ngIf"], ["type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "change", "id", "ngModel"], [1, "checkbox-custom-label", "noselect", 3, "for"], [1, "warning"], ["alt", "warning", 1, "material-icons", 2, "padding-right", "5px"], [1, "warning-label", 2, "font-size", "12px"], [1, "dropdown-container", "legend", "left"], [1, "dropdown-container", "visibility", "left"], ["type", "checkbox", 1, "checkbox-custom", 3, "ngModelChange", "change", "id", "disabled", "ngModel"], ["style", "padding: 0 5px", 4, "ngIf"], ["cpPosition", "bottom", 1, "colorpicker", 2, "width", "14px", "margin", "5px 0 0 5px", 3, "colorPickerChange", "colorPickerSelect", "id", "colorPicker", "cpPresetColors", "cpOKButton", "cpOKButtonText", "cpCancelButton"], [1, "noselect", 3, "for"], [2, "padding", "0 5px"], ["value", "all"], ["value", "expanded"], ["value", "none"]], + template: function SvgExportComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](0, "div", 0)(1, "div", 1)(2, "ul", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](3, SvgExportComponent_li_3_Template, 2, 0, "li", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](4, "li")(5, "div", 4)(6, "div", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_6_listener() { + ctx.themeEnum = (ctx.themeEnum + 1) % 2; + ctx.config.theme = ["light", "dark"][ctx.themeEnum]; + return ctx.buildSVG(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](7, SvgExportComponent_span_7_Template, 2, 0, "span", 6)(8, SvgExportComponent_span_8_Template, 2, 0, "span", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](9, "li")(10, "div", 4)(11, "div", 7); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_11_listener() { + ctx.unitEnum = (ctx.unitEnum + 1) % 3; + ctx.config.unit = ["in", "cm", "px"][ctx.unitEnum]; + return ctx.buildSVG(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnamespaceSVG"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](12, "svg", 8)(13, "text", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](14); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵnamespaceHTML"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](15, "li")(16, "div", 10)(17, "div", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_17_listener() { + return ctx.currentDropdown = ctx.currentDropdown !== "imgsize" ? "imgsize" : null; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](18, "span", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](19, "photo_size_select_large"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](20, SvgExportComponent_div_20_Template, 49, 20, "div", 13); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](21, "div", 10)(22, "div", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_22_listener() { + return ctx.currentDropdown = ctx.currentDropdown !== "font" ? "font" : null; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](23, "span", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](24, "format_size"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](25, SvgExportComponent_div_25_Template, 23, 7, "div", 15); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](26, "div", 10)(27, "div", 16); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_27_listener() { + return ctx.showLegendContainer ? ctx.currentDropdown = ctx.currentDropdown !== "legend" ? "legend" : null : null; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](28, "span", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](29, "view_list"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](30, SvgExportComponent_div_30_Template, 34, 27, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](31, "div", 10)(32, "div", 18); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_32_listener() { + return ctx.currentDropdown = ctx.currentDropdown !== "visibility" ? "visibility" : null; + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](33, "span", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](34, "visibility"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtemplate"](35, SvgExportComponent_div_35_Template, 31, 44, "div", 19); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](36, "li")(37, "div", 10)(38, "div", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵlistener"]("click", function SvgExportComponent_Template_div_click_38_listener() { + return ctx.downloadSVG(); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](39, "span", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](40, "file_download"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](41, "div", 22); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](42, "loading..."); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementStart"](43, "mat-dialog-actions")(44, "button", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtext"](45, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.isIE); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.config.theme === "light"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.config.theme === "dark"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵtextInterpolate1"](" ", ctx.config.unit, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.currentDropdown === "imgsize"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.currentDropdown === "font"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵstyleProp"]("color", ctx.showLegendContainer ? "inherit" : "#aaaaaa"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.currentDropdown === "legend"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngIf", ctx.currentDropdown === "visibility"); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("id", "download-button" + ctx.viewModel.uid); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_5__["ɵɵpureFunction1"](13, _c0, ctx.config.theme === "light" ? "svgcontainer" : "svgcontainer dark-mode"))("id", "svgInsert" + ctx.viewModel.uid); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_7__.NgClass, _angular_common__WEBPACK_IMPORTED_MODULE_7__.NgIf, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_8__.MatFormField, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_8__.MatLabel, _angular_material_form_field__WEBPACK_IMPORTED_MODULE_8__.MatSuffix, _angular_material_select__WEBPACK_IMPORTED_MODULE_9__.MatSelect, _angular_material_core__WEBPACK_IMPORTED_MODULE_10__.MatOption, _angular_forms__WEBPACK_IMPORTED_MODULE_11__.DefaultValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_11__.NumberValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_11__.CheckboxControlValueAccessor, _angular_forms__WEBPACK_IMPORTED_MODULE_11__.NgControlStatus, _angular_forms__WEBPACK_IMPORTED_MODULE_11__.NgModel, _angular_material_input__WEBPACK_IMPORTED_MODULE_12__.MatInput, _angular_material_button__WEBPACK_IMPORTED_MODULE_13__.MatButton, _angular_material_tooltip__WEBPACK_IMPORTED_MODULE_14__.MatTooltip, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_6__.MatDialogClose, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_6__.MatDialogActions, ngx_color_picker__WEBPACK_IMPORTED_MODULE_15__.ColorPickerDirective], + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.svgcontainer {\n overflow-x: auto;\n text-align: center;\n min-height: 60vh;\n max-height: 60vh;\n min-width: 75vw;\n max-width: 75vw;\n padding: 25px;\n}\n.svgcontainer.dark-mode {\n background-color: #1a1a23 !important;\n}\n\n.dropdown-container {\n padding: 10px;\n top: 34px;\n}\n.dropdown-container ul {\n padding-left: 0;\n}\n.dropdown-container ul li {\n list-style: none;\n text-align: left;\n}\n\n.iewarning {\n color: red;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvc3ZnLWV4cG9ydC9zdmctZXhwb3J0LmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDUEE7RUFDSSxnQkFBQTtFQUNBLGtCQUFBO0VBQ0EsZ0JBQUE7RUFDQSxnQkFBQTtFQUNBLGVBQUE7RUFDQSxlQUFBO0VBQ0EsYUFBQTtBQVFKO0FBTkk7RUFDSSxvQ0FBQTtBQVFSOztBQUpBO0VBQ0ksYUFBQTtFQUNBLFNBQUE7QUFPSjtBQU5JO0VBQ0ksZUFBQTtBQVFSO0FBUFE7RUFDSSxnQkFBQTtFQUNBLGdCQUFBO0FBU1o7O0FBSkE7RUFDSSxVQUFBO0FBT0oiLCJzb3VyY2VzQ29udGVudCI6WyIkY29sdW1uLWhvdmVyLWNvbG9yOiByZ2IoMjM1LCAyMzUsIDIzNSk7XG4kZGlzYWJsZWQtY29sb3I6IGRhcmtlbigkY29sdW1uLWhvdmVyLWNvbG9yLCAyMCUpO1xuXG4vLyBBVFQmQ0sgQnJhbmQgY29sb3JzXG4kYXR0YWNrLWNvbG9yczogKFxuICAgIGF0dGFjay1vcmFuZ2U6ICNjNjNmMWYsXG4gICAgYXR0YWNrLWJsdWU6ICMwNjJmNGYsXG4pO1xuXG4vKipcbiAqIENvbG9ycyB1c2VkIGFjcm9zcyB0aGUgTmF2aWdhdG9yLiBTaGFyZWQgYnkgdGhlIEFUVCZDSyBXZWJzaXRlLlxuICogRm9yIGVhY2ggY29sb3ItcGFpcjpcbiAqICAgLSBcImNvbG9yXCIgcmVmZXJzIHRvIHRoZSBjb2xvciBpdHNlbGZcbiAqICAgLSBcIm9uLWNvbG9yXCIgcmVmZXJzIHRvIHRoZSBtb3N0IHJlYWRhYmxlIHRleHQtY29sb3IgdG8gYXBwZWFyIG9uIHRvcCBvZiB0aGUgY29sb3IuXG4gKiBOb3RlOiBzb21lIGNvbG9ycyBkb24ndCBkZWZpbmUgb24tY29sb3JzLiBUaGlzIGlzIGJlY2F1c2UsIGZvciB0aGVzZSBjb2xvcnMsIHRoZXkgYXJlbid0IGludGVuZGVkIHRvXG4gKiBhcHBlYXIgd2l0aCBpbm5lciBjb250ZW50LiBGb3IgZXhhbXBsZSwgXCJsaW5rXCIgaXMgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBsaW5rIHRleHQsIHdoaWNoIGluaGVyZW50bHlcbiAqIGNhbm5vdCBoYXZlIGlubmVyIHRleHQuXG4gKi9cbiRjb2xvcnM6IChcbiAgICBwcmltYXJ5OiAoXG4gICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stb3JhbmdlKSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy91c2VkIGZvciBoZWFkZXIgYW5kIHNvbWUgbmF2IGVsZW1lbnRzXG4gICAgc2Vjb25kYXJ5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogbWFwLWdldCgkYXR0YWNrLWNvbG9ycywgYXR0YWNrLWJsdWUpLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIC8vdXNlZCBmb3IgZm9vdGVyIGFuZCBzb21lIGJ1dHRvbnNcbiAgICBib2R5OlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogd2hpdGUsXG4gICAgICAgICAgICBvbi1jb2xvcjogIzM5NDM0YyxcbiAgICAgICAgKSxcbiAgICAvL3ByaW1hcnkgcGFnZSBib2R5XG4gICAgbGlnaHQ6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIGRhcms6IChcbiAgICAgICAgY29sb3I6ICMwODA4MGIsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIC8vIGRhcmsgdGhlbWUgY29sb3JzIHZhcmlhdGlvbnMgMC0zIChmcm9tIGRhcmtlc3QgdG8gbGlnaHRlc3QpXG4gICAgZGFyay0xOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzFhMWEyMyxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTI6IChcbiAgICAgICAgY29sb3I6ICMyZTJlM2YsXG4gICAgICAgIG9uLWNvbG9yOiAjZmE2MzQxLFxuICAgICksXG4gICAgLy8gYWNjZW50IGRhcmsgY29sb3Igc2NoZW1lICh1c2VkIGZvciA6aG92ZXIgc2VsZWN0b3JzKVxuICAgIGRhcmstMzpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICMzZjNmNTYsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgZGFyay00OiAoXG4gICAgICAgIGNvbG9yOiAjNGM0YzY4LFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBkYXJrLWRpc2FibGVkOiAoXG4gICAgICAgIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyAyNSUpLFxuICAgICksXG4gICAgZGFyay1saW5rOiAoXG4gICAgICAgIGNvbG9yOiAjNzU4OGU4LFxuICAgICksXG4gICAgZGFyay1saW5rLWFjdGl2ZTogKFxuICAgICAgICBjb2xvcjogI2U4NDdlOCxcbiAgICApLFxuICAgIGxpbms6IChcbiAgICAgICAgY29sb3I6ICM0ZjdjYWMsXG4gICAgKSxcbiAgICAvLyBoeXBlcmxpbmtzXG4gICAgbWF0cml4LWhlYWRlcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IGdyYXksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy8gY29sb3Igb2YgbWF0cml4IGhlYWRlcnNcbiAgICBjZWxsLWhpZ2hsaWdodC1jb2xvcjpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHJnYig5NiwgMTk3LCAyNTUpLFxuICAgICAgICApLFxuICAgIGNlbGwtaGlnaGxpZ2h0LWRhcmstY29sb3I6IChcbiAgICAgICAgY29sb3I6ICM0NjRkZmYsXG4gICAgKSxcbiAgICBob3Zlci1jZWxsLWZvbnQtY29sb3I6IChcbiAgICAgICAgY29sb3I6IHJnYigwLCAwLCAwKSxcbiAgICApLFxuICAgIHBhbmVsLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNkZGQsXG4gICAgKSxcbiAgICBwYW5lbC1saWdodDogKFxuICAgICAgICBjb2xvcjogbGlnaHRlbigjZGRkLCA4JSksXG4gICAgKSxcbiAgICB0YWItdGV4dC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzU1NSxcbiAgICApLFxuICAgIGJ1dHRvbi1kYXJrOiAoXG4gICAgICAgIGNvbG9yOiAjYjhiOGI4LFxuICAgICksXG4gICAgLy9ib290c3RyYXAgY29sb3JzXG4gICAgYm9vdHN0cmFwLXByaW1hcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjNDI4YmNhLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGJvb3RzdHJhcC1zdWNjZXNzOiAoXG4gICAgICAgIGNvbG9yOiAjNWNiODVjLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICBib290c3RyYXAtZGFuZ2VyOiAoXG4gICAgICAgIGNvbG9yOiAjZDk1MzRmLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtd2FybmluZzogKFxuICAgICAgICBjb2xvcjogI2YwYWQ0ZSxcbiAgICAgICAgb24tY29sb3I6IGJsYWNrLFxuICAgICksXG4gICAgYm9vdHN0cmFwLWluZm86IChcbiAgICAgICAgY29sb3I6ICM1YmMwZGUsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuKTtcblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBjb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIGNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBnZXQgYW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgdGhlIGNvbG9yLCBmb3IgcGF0dGVybmluZ1xuLy8gaWYgdGhlIGJhc2UgY29sb3IgaXMgZGFyaywgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGxpZ2h0ZXIuXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBsaWdodCwgdGhlIGFsdGVybmF0ZSB3aWxsIGJlIHNsaWdodGx5IGRhcmtlci5cbi8vIGNvbnRyYXN0LCBhbiBvcHRpb25hbCBhcmd1bWVudCwgbXVsdGlwbGllcyB0byBjcmVhdGUgYSBtb3JlIGRpc3RhbnQgb3Igc2ltaWxhciBjb2xvci4gPjEgaXMgbW9yZSBkaXN0YW50LCA8MSBpcyBtb3JlIHNpbWlsYXIuXG5AZnVuY3Rpb24gY29sb3ItYWx0ZXJuYXRlKCRuYW1lLCAkY29udHJhc3Q6IDEpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAkd2VpZ2h0OiAkY29udHJhc3QgKiA1JSk7XG59XG5cbi8vIGFjY2Vzc29yIGhlbHBlciBmb3IgJGNvbG9ycy4gR2V0cyB0aGUgb24tY29sb3Igb2YgdGhlIG5hbWVkIHBhaXJcbkBmdW5jdGlvbiBvbi1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChtYXAtZ2V0KCRjb2xvcnMsICRuYW1lKSwgJ29uLWNvbG9yJyk7XG59XG5cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGVtcGhhc2l6ZWQgdmVyc2lvbiBvZiB0aGUgb24tY29sb3IuXG4vLyBUaGUgZW1waGFzaXplZCBvbi1jb2xvciBpcyBsZXNzIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgb24tY29sb3IoJG5hbWUpKTtcbn1cbi8vIGdpdmVuIGEgY29sb3ItbmFtZSwgZ2V0IGFuIGRlZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBkZWVtcGhhc2l6ZWQgb24tY29sb3IgaXMgbW9yZSBsaWtlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuQGZ1bmN0aW9uIG9uLWNvbG9yLWRlZW1waGFzaXMoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChjb2xvcigkbmFtZSksIG9uLWNvbG9yKCRuYW1lKSwgMjUlKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvciBuYW1lLCBjb21wdXRlIGEgYm9yZGVyIGNvbG9yIGZvciB0aGUgY29sb3JcbkBmdW5jdGlvbiBib3JkZXItY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1peChpbnZlcnQoY29sb3IoJG5hbWUpKSwgY29sb3IoJG5hbWUpLCAxMi41JSk7XG4gICAgLy8gQHJldHVybiByZ2JhKGludmVydChjb2xvcigkbmFtZSkpLCAwLjEyNSk7XG59XG5cbi8vIElNUE9SVEFOVCBVU0FHRSBOT1RFOlxuLy8gdG8gdXNlIGFkYXB0aXZlIGNvbG9ycywgeW91IE1VU1QgZGlzYWJsZSB2aWV3IGVuY2Fwc3VsYXRpb24gb24gdGhlIGNvbXBvbmVudFxuLy8geW91J3JlIGFwcGx5aW5nIHRoZSBzdHlsZXMgd2l0aGluLiBPdGhlcndpc2UgYW5jZXN0b3IgY2xhc3NlcyBjYW5ub3QgYmUgYXNzZXNzZWRcbi8vIGJ5IHRoZSBtaXhpbnMgdG8gZGV0ZXJtaW5lIHRoZSBhcHAgdGhlbWUgY29uZmlndXJhdGlvbi5cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIGluIHRoZSBsaWdodCBhbmQgZGFyayB0aGVtZXNcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yKCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlLCAkZGFyay12YWx1ZSkge1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWxpZ2h0LW9ubHkoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKTtcbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBsaWdodCB2YWx1ZVxuICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWxpZ2h0ICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIGxpZ2h0IHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGxpZ2h0LXZhbHVlO1xuICAgIH1cbn1cblxuLy8vIGFzc2lnbiB0aGUgcHJvcGVydHkgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgb25seSB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkZGFyay12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJHByb3BlcnR5LCAkZGFyay12YWx1ZSkge1xuICAgIC50aGVtZS11c2Utc3lzdGVtICYge1xuICAgICAgICAvLyB3aGVuIHRoZSBhbmNlc3RvciBjbGFzcyBzaG93cyB0aGF0IHRoZSBhcHAgaXMgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSB0aGVtZSxcbiAgICAgICAgLy8gdXNlIGEgbWVkaWEgcXVlcnkgdG8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLnRoZW1lLW92ZXJyaWRlLWRhcmsgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgZGFyayB0aGVtZSxcbiAgICAgICAgLy8gYXNzaWduIHRoZSBkYXJrIHZhbHVlXG4gICAgICAgICN7JHByb3BlcnR5fTogJGRhcmstdmFsdWU7XG4gICAgfVxufVxuIiwiQGltcG9ydCAnLi4vLi4vY29sb3JzLnNjc3MnO1xuXG4uc3ZnY29udGFpbmVyIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiA2MHZoO1xuICAgIG1heC1oZWlnaHQ6IDYwdmg7XG4gICAgbWluLXdpZHRoOiA3NXZ3O1xuICAgIG1heC13aWR0aDogNzV2dztcbiAgICBwYWRkaW5nOiAyNXB4O1xuXG4gICAgJi5kYXJrLW1vZGUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihkYXJrLTEpICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4uZHJvcGRvd24tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAxMHB4O1xuICAgIHRvcDogMzRweDtcbiAgICB1bCB7XG4gICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgbGkge1xuICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi5pZXdhcm5pbmcge1xuICAgIGNvbG9yOiByZWQ7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */"], + encapsulation: 2 + }); +} +class HeaderSectionContent {} +class HeaderSection {} + +/***/ }), + +/***/ 10154: +/*!****************************************!*\ + !*** ./src/app/tabs/tabs.component.ts ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ TabsComponent: () => (/* binding */ TabsComponent) +/* harmony export */ }); +/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js */ 81890); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _classes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../classes */ 47557); +/* harmony import */ var _version_upgrade_version_upgrade_component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../version-upgrade/version-upgrade.component */ 96412); +/* harmony import */ var _help_help_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../help/help.component */ 12492); +/* harmony import */ var _svg_export_svg_export_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../svg-export/svg-export.component */ 88688); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../services/viewmodels.service */ 57833); +/* harmony import */ var _changelog_changelog_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../changelog/changelog.component */ 88492); +/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! rxjs */ 61873); +/* harmony import */ var _utils_globals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/globals */ 98552); +/* harmony import */ var _layer_information_layer_information_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../layer-information/layer-information.component */ 20880); +/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/utils */ 37709); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @angular/common/http */ 46443); +/* harmony import */ var _services_config_service__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../services/config.service */ 43696); +/* harmony import */ var _angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @angular/material/snack-bar */ 3347); + + + + + + + + + + + + + + + + + + + +const _c0 = ["safariWarning"]; +const _c1 = ["versionWarning"]; +const _c2 = a0 => ({ + "help-dropdown-open": a0 +}); +const _c3 = a0 => ({ + disabled: a0 +}); +function TabsComponent_div_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 19)(1, "div", 20); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](2, "span", 21); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "div", 22)(4, "a", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "MITRE ATT&CK\u00AE"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("innerHTML", ctx_r1.bannerContent, _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵsanitizeHtml"]); + } +} +function TabsComponent_div_7_Template(rf, ctx) { + if (rf & 1) { + const _r3 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 24)(1, "button", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_div_7_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openDialog("help")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "help"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "button", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_div_7_Template_button_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r3); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openDialog("changelog")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "changelog"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } +} +function TabsComponent_a_10_button_2_Template(rf, ctx) { + if (rf & 1) { + const _r6 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "button", 29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_a_10_button_2_Template_button_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r6); + const tab_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.closeTab(tab_r5)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](1, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } +} +function TabsComponent_a_10_span_3_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "span", 30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const $i_r7 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", ctx_r1.indexToChar($i_r7), " "); + } +} +function TabsComponent_a_10_Template(rf, ctx) { + if (rf & 1) { + const _r4 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "a", 26); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_a_10_Template_a_click_0_listener() { + const tab_r5 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r4).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleTabClick(tab_r5)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](2, TabsComponent_a_10_button_2_Template, 3, 0, "button", 27)(3, TabsComponent_a_10_span_3_Template, 2, 1, "span", 28); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tab_r5 = ctx.$implicit; + const $i_r7 = ctx.index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵclassProp"]("active", ctx_r1.activeTab === tab_r5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("active", ctx_r1.activeTab === tab_r5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", tab_r5.isDataTable ? tab_r5.viewModel.name : tab_r5.title, " "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", tab_r5.isCloseable); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.activeTab.showScoreVariables && tab_r5.isDataTable && (!ctx_r1.domain || tab_r5.domain === ctx_r1.domain) && ctx_r1.isAlphabetical(ctx_r1.indexToChar($i_r7))); + } +} +function TabsComponent_a_11_Template(rf, ctx) { + if (rf & 1) { + const _r8 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "a", 31); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_a_11_Template_a_click_0_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r8); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.newBlankTab()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](1, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "add"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } +} +function TabsComponent_div_14_Template(rf, ctx) { + if (rf & 1) { + const _r9 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 32)(1, "button", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_div_14_Template_button_click_1_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r9); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.newBlankTab()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "Start"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } +} +function TabsComponent_ng_template_15_Template(rf, ctx) { + if (rf & 1) { + const _r10 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 33)(1, "h3"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2, "WARNING"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](3, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, " We\u2019ve detected that you are using the Safari browser. As of Navigator version "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](6, "4.3"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](7, " , Safari versions 13 and below are not supported due to an unfixable freeze that can occur when selecting a layer tab. "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](8, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](9, " We recommend you use Chrome or Firefox instead. You can continue to use the Navigator in Safari (versions 13 and below), but you may lose work if the application freezes. "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](10, "button", 34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_15_Template_button_click_10_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r10); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.safariDialogRef.close()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](11, "Dismiss"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } +} +function TabsComponent_ng_template_17_Template(rf, ctx) { + if (rf & 1) { + const _r11 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 35)(1, "div")(2, "h3", 36)(3, "u"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](4, "WARNING:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, " Outdated Layer "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "mat-dialog-content")(7, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](9, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](10, "View the latest Layer File Format specification and the changelog for more information:"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](11, "p")(12, "a", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_17_Template_a_click_12_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r11); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openDialog("layers")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](13); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](14, "p")(15, "a", 25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_17_Template_a_click_15_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r11); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openDialog("changelog")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](16, "Changelog"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](17, "button", 37); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_17_Template_button_click_17_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r11); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.versionDialogRef.close()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](18, "Dismiss"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + } + if (rf & 2) { + const data_r12 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate2"](" The uploaded layer version (", data_r12.objVersion, ") does not match Navigator's layer version (", data_r12.globalVersion, "). The layer configuration may not be fully restored. "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"]("Layer File Format v", data_r12.globalVersion, ""); + } +} +function TabsComponent_ng_template_19_button_34_Template(rf, ctx) { + if (rf & 1) { + const _r15 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "button", 63); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_button_34_Template_button_click_0_listener() { + const domain_r16 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r15).$implicit; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.newLayer(domain_r16.id)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const domain_r16 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", domain_r16.name, " "); + } +} +function TabsComponent_ng_template_19_mat_option_47_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const nVersion_r17 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", nVersion_r17); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", nVersion_r17.name, " "); + } +} +function TabsComponent_ng_template_19_mat_option_54_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const nDomain_r18 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", nDomain_r18); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", nDomain_r18.name, " "); + } +} +function TabsComponent_ng_template_19_mat_option_120_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const domain_r19 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", domain_r19.id); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate2"](" ", domain_r19.name, " ", domain_r19.version.name, " "); + } +} +function TabsComponent_ng_template_19_ul_140_li_1_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "li")(1, "span", 90); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r19 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + const tab_r21 = ctx_r19.$implicit; + const $i_r22 = ctx_r19.index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](ctx_r1.indexToChar($i_r22)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" (", tab_r21.isDataTable ? tab_r21.viewModel.name : tab_r21.title, ") "); + } +} +function TabsComponent_ng_template_19_ul_140_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "ul"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, TabsComponent_ng_template_19_ul_140_li_1_Template, 4, 2, "li", 89); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const tab_r21 = ctx.$implicit; + const $i_r22 = ctx.index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.activeTab.showScoreVariables && tab_r21.isDataTable && (!ctx_r1.opSettings.domain || tab_r21.domain === ctx_r1.opSettings.domain) && ctx_r1.isAlphabetical(ctx_r1.indexToChar($i_r22))); + } +} +function TabsComponent_ng_template_19_mat_option_149_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r23 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r23); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r23.name); + } +} +function TabsComponent_ng_template_19_mat_option_162_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r24 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r24); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r24.name); + } +} +function TabsComponent_ng_template_19_mat_option_175_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r25 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r25); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r25.name); + } +} +function TabsComponent_ng_template_19_mat_option_188_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r26 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r26); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r26.name); + } +} +function TabsComponent_ng_template_19_mat_option_201_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r27 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r27); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r27.name); + } +} +function TabsComponent_ng_template_19_mat_option_214_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r28 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r28); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r28.name); + } +} +function TabsComponent_ng_template_19_mat_option_227_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r29 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r29); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r29.name); + } +} +function TabsComponent_ng_template_19_mat_option_240_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const vm_r30 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", vm_r30); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](vm_r30.name); + } +} +function TabsComponent_ng_template_19_li_261_Template(rf, ctx) { + if (rf & 1) { + const _r31 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "li")(1, "mat-form-field")(2, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "input", 60); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_li_261_Template_input_ngModelChange_4_listener($event) { + const i_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r31).index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.layerLinkURLs[i_r32], $event) || (ctx_r1.layerLinkURLs[i_r32] = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "button", 91); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_li_261_Template_button_click_5_listener() { + const i_r32 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r31).index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.removeLayerLink(i_r32)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](7, "close"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + } + if (rf & 2) { + const i_r32 = ctx.index; + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"]("default layer ", i_r32 + 1, ""); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.layerLinkURLs[i_r32]); + } +} +function TabsComponent_ng_template_19_ng_container_272_div_1_Template(rf, ctx) { + if (rf & 1) { + const _r33 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 93)(1, "div", 94)(2, "mat-checkbox", 95); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_ng_container_272_div_1_Template_mat_checkbox_ngModelChange_2_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r33); + const feature_r34 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](feature_r34.enabled, $event) || (feature_r34.enabled = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](4, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](5, "div", 84)(6, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](7); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + const feature_r34 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"]().$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", feature_r34.enabled); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" ", feature_r34.name.split("_").join(" "), " "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](feature_r34.description); + } +} +function TabsComponent_ng_template_19_ng_container_272_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerStart"](0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, TabsComponent_ng_template_19_ng_container_272_div_1_Template, 8, 3, "div", 92); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementContainerEnd"](); + } + if (rf & 2) { + const feature_r34 = ctx.$implicit; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", !feature_r34.subfeatures); + } +} +function TabsComponent_ng_template_19_mat_hint_281_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "mat-hint"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](1, "copied"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } +} +function TabsComponent_ng_template_19_Template(rf, ctx) { + if (rf & 1) { + const _r13 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 32)(1, "div", 38)(2, "div", 39)(3, "h1")(4, "a", 23); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](5, "MITRE ATT&CK\u00AE Navigator"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](6, "div")(7, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](8, " The ATT&CK Navigator is a web-based tool for annotating and exploring ATT&CK matrices. It can be used to visualize defensive coverage, red/blue team planning, the frequency of detected techniques, and more. "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](9, "div", 40)(10, "button", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_10_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openDialog("help")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](11, "help"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](12, "button", 41); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_12_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openDialog("changelog")); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](13, "changelog"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](14, "button", 42); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_14_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const select_r14 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](18); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](select_r14.open()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](15, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](16, "theme \u25BE"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](17, "mat-select", 43, 3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("selectionChange", function TabsComponent_ng_template_19_Template_mat_select_selectionChange_17_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.handleUserThemeChange($event.value)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](19, "mat-option", 44); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](20, "dark"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](21, "mat-option", 45); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](22, "light"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](23, "mat-option", 46); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](24, "use system"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](25, "mat-accordion", 47)(26, "mat-expansion-panel", null, 4)(28, "mat-expansion-panel-header")(29, "mat-panel-title"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](30, "Create New Layer"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](31, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](32, "Create a new empty layer"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](33, "div", 48); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](34, TabsComponent_ng_template_19_button_34_Template, 2, 1, "button", 49); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](35, "mat-expansion-panel")(36, "mat-expansion-panel-header")(37, "mat-panel-title"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](38, "More Options"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](39, "div", 50)(40, "div", 51)(41, "mat-form-field")(42, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](43, "Select a version"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](44, "mat-select", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_44_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.nVersion, $event) || (ctx_r1.nVersion = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](45, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](46, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](47, TabsComponent_ng_template_19_mat_option_47_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](48, "mat-form-field")(49, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](50, "Select a domain"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](51, "mat-select", 55); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_51_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.nDomain, $event) || (ctx_r1.nDomain = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](52, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](53, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](54, TabsComponent_ng_template_19_mat_option_54_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](55, "span", 56); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](56); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](57, "div", 57)(58, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](59, "OR"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](60, "div", 51)(61, "mat-form-field")(62, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](63, "Collection or STIX bundle URL"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](64, "input", 58); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_input_ngModelChange_64_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.loadData.url, $event) || (ctx_r1.loadData.url = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](65, "mat-form-field")(66, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](67, "Bundle version number"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](68, "input", 59); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_input_ngModelChange_68_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.loadData.version, $event) || (ctx_r1.loadData.version = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](69, "mat-hint"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](70, "ATT&CK version (e.g. 12)"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](71, "mat-form-field")(72, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](73, "Bundle domain"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](74, "input", 60); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_input_ngModelChange_74_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.loadData.identifier, $event) || (ctx_r1.loadData.identifier = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](75, "mat-hint"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](76, "Domain identifier (e.g. defending-iaas)"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](77, "div", 50)(78, "div", 51)(79, "button", 61); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_79_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.newLayer(ctx_r1.nDomain.id)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](80, " Create layer from version "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](81, "div", 62); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](82, "div", 51)(83, "button", 61); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_83_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.newLayerFromURL(ctx_r1.loadData)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](84, " Create layer from bundle "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](85, "mat-expansion-panel")(86, "mat-expansion-panel-header")(87, "mat-panel-title"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](88, "Open Existing Layer"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](89, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](90, "Load a layer from your computer or a URL"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](91, "div", 50)(92, "div", 51)(93, "button", 63); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_93_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.openUploadPrompt()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](94, "Upload from local"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](95, "input", 64); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("change", function TabsComponent_ng_template_19_Template_input_change_95_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.loadLayerFromFile()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](96, "div", 57)(97, "b"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](98, "OR"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](99, "div", 51)(100, "mat-form-field", 65)(101, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](102, "Load from URL"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](103, "input", 60); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_input_ngModelChange_103_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.loadURL, $event) || (ctx_r1.loadURL = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](104, "button", 66); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_104_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.loadLayerFromURL(ctx_r1.loadURL, true)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](105, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](106, "chevron_right"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](107, "mat-expansion-panel", 67); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("opened", function TabsComponent_ng_template_19_Template_mat_expansion_panel_opened_107_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.activeTab.showScoreVariables = true); + })("closed", function TabsComponent_ng_template_19_Template_mat_expansion_panel_closed_107_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.activeTab.showScoreVariables = false); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](108, "mat-expansion-panel-header")(109, "mat-panel-title"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](110, "Create Layer from Other Layers"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](111, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](112, "Select layers to inherit properties from"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](113, "div", 68)(114, "div", 69)(115, "div", 51)(116, "mat-form-field")(117, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](118, "domain"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](119, "mat-select", 52); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_119_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.domain, $event) || (ctx_r1.opSettings.domain = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](120, TabsComponent_ng_template_19_mat_option_120_Template, 2, 3, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](121, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](122, "div", 71)(123, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](124, "Select the domain for the new layer. Only layers of the same domain and version can be merged."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](125, "div", 69)(126, "div", 51)(127, "mat-form-field")(128, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](129, "score expression"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](130, "input", 72); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_input_ngModelChange_130_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.scoreExpression, $event) || (ctx_r1.opSettings.scoreExpression = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("keyup", function TabsComponent_ng_template_19_Template_input_keyup_130_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.opSettings.scoreExpression = ctx_r1.opSettings.scoreExpression.toLowerCase()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](131, "mat-hint", 73); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](132); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](133, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](134, "div", 74)(135, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](136, " Use constants (numbers) and layer variables (yellow, above) to write an expression for the initial value of scores in the new layer. A full list of supported operations can be found "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](137, "a", 75); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](138, "here"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](139, " . Leave blank to initialize scores to 0. Here's a list of available layer variables: "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](140, TabsComponent_ng_template_19_ul_140_Template, 2, 1, "ul", 76); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](141, "div", 69)(142, "div", 51)(143, "mat-form-field")(144, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](145, "gradient"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](146, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_146_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.gradientVM, $event) || (ctx_r1.opSettings.gradientVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](147, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](148, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](149, TabsComponent_ng_template_19_mat_option_149_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](150, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](151, "div", 74)(152, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](153, " Select which layer to import the scoring gradient from. Leave blank to initialize with the default scoring gradient. "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](154, "div", 69)(155, "div", 51)(156, "mat-form-field")(157, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](158, "coloring"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](159, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_159_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.coloringVM, $event) || (ctx_r1.opSettings.coloringVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](160, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](161, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](162, TabsComponent_ng_template_19_mat_option_162_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](163, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](164, "div", 74)(165, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](166, "Select which layer to import manually assigned colors from. Leave blank to initialize with no colors."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](167, "div", 69)(168, "div", 51)(169, "mat-form-field")(170, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](171, "comments"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](172, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_172_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.commentVM, $event) || (ctx_r1.opSettings.commentVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](173, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](174, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](175, TabsComponent_ng_template_19_mat_option_175_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](176, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](177, "div", 74)(178, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](179, "Select which layer to import comments from. Leave blank to initialize with no comments."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](180, "div", 69)(181, "div", 51)(182, "mat-form-field")(183, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](184, "links"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](185, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_185_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.linkVM, $event) || (ctx_r1.opSettings.linkVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](186, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](187, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](188, TabsComponent_ng_template_19_mat_option_188_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](189, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](190, "div", 74)(191, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](192, "Select which layer to import technique links from. Leave blank to initialize without links."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](193, "div", 69)(194, "div", 51)(195, "mat-form-field")(196, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](197, "metadata"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](198, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_198_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.metadataVM, $event) || (ctx_r1.opSettings.metadataVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](199, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](200, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](201, TabsComponent_ng_template_19_mat_option_201_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](202, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](203, "div", 74)(204, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](205, "Select which layer to import technique metadata from. Leave blank to initialize without metadata."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](206, "div", 69)(207, "div", 51)(208, "mat-form-field")(209, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](210, "states"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](211, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_211_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.enabledVM, $event) || (ctx_r1.opSettings.enabledVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](212, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](213, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](214, TabsComponent_ng_template_19_mat_option_214_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](215, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](216, "div", 74)(217, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](218, "Select which layer to import enabled/disabled states from. Leave blank to initialize all to enabled."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](219, "div", 69)(220, "div", 51)(221, "mat-form-field")(222, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](223, "filters"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](224, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_224_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.filterVM, $event) || (ctx_r1.opSettings.filterVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](225, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](226, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](227, TabsComponent_ng_template_19_mat_option_227_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](228, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](229, "div", 74)(230, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](231, "Select which layer to import filters from. Leave blank to initialize with no filters."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](232, "div", 69)(233, "div", 51)(234, "mat-form-field")(235, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](236, "legend"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](237, "mat-select", 77); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayListener"]("ngModelChange", function TabsComponent_ng_template_19_Template_mat_select_ngModelChange_237_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayBindingSet"](ctx_r1.opSettings.legendVM, $event) || (ctx_r1.opSettings.legendVM = $event); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"]($event); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](238, "mat-option", 53); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](239, "none"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](240, TabsComponent_ng_template_19_mat_option_240_Template, 2, 2, "mat-option", 54); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](241, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](242, "div", 74)(243, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](244, "Select which layer to import the legend from. Leave blank to initialize with an empty legend."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](245, "div", 78)(246, "button", 61); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_246_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + ctx_r1.layerByOperation(); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.showScoreVariables = false); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](247, " Create layer "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](248, "mat-expansion-panel")(249, "mat-expansion-panel-header")(250, "mat-panel-title"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](251, "Create Customized Navigator"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](252, "mat-panel-description"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](253, "Create a hyperlink to a customized ATT&CK Navigator"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](254, "div", 79)(255, "div", 80)(256, "h2"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](257, "Default Layers"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](258, "div", 81)(259, "div", 51)(260, "ul", 82); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](261, TabsComponent_ng_template_19_li_261_Template, 8, 2, "li", 83); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](262, "li")(263, "button", 63); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_263_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.addLayerLink()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](264); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](265, "div", 70); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](266, "div", 84)(267, "span"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](268, "Enter the URLs of layers hosted on the web. The custom navigator will open these layers by default."); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](269, "div", 80)(270, "h2"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](271, "Navigator Features"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](272, TabsComponent_ng_template_19_ng_container_272_Template, 2, 1, "ng-container", 76); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](273, "div", 85)(274, "mat-form-field", 86)(275, "mat-label"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](276, "custom navigator url"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](277, "input", 87); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_input_click_277_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.selectLayerLink()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](278, "button", 88); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_ng_template_19_Template_button_click_278_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r13); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.copyLayerLink()); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](279, "mat-icon"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtext"](280, "content_copy"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](281, TabsComponent_ng_template_19_mat_hint_281_Template, 2, 0, "mat-hint", 89); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()()()()(); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](34); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.latestDomains); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](10); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.nVersion); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.dataService.versions); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.nDomain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.nVersion); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.filterDomains(ctx_r1.nVersion)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate2"](" *Note: ATT&CK Versions prior to v", ctx_r1.minimumSupportedVersion, " are not supported by Navigator v", ctx_r1.navVersion, ". "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.loadData.url); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.loadData.version); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.loadData.identifier); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.nVersion || !ctx_r1.nDomain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.loadData.url || !ctx_r1.loadData.version || !ctx_r1.loadData.identifier); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](20); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.loadURL); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.loadURL); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](15); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.dataService.domains); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](10); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.scoreExpression); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate"](ctx_r1.getScoreExpressionError()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](71, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.layerTabs); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.gradientVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](73, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.coloringVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](75, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.commentVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](77, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.linkVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](79, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.metadataVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](81, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.enabledVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](83, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.filterVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](85, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtwoWayProperty"]("ngModel", ctx_r1.opSettings.legendVM); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", null); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.getFilteredVMs()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](87, _c3, !ctx_r1.opSettings.domain)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("disabled", ctx_r1.getScoreExpressionError() || !ctx_r1.opSettings.domain); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](15); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.layerLinkURLs)("ngForTrackBy", ctx_r1.trackByFunction); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtextInterpolate1"](" add ", ctx_r1.layerLinkURLs.length > 0 ? "another" : "a", " default layer "); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx_r1.configService.customizefeatureList); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("value", ctx_r1.getLayerLink()); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx_r1.copiedRecently); + } +} +function TabsComponent_ng_template_20_Template(rf, ctx) { + if (rf & 1) { + const _r35 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "DataTable", 96); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("dropdownChange", function TabsComponent_ng_template_20_Template_DataTable_dropdownChange_0_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r35); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.dropdownEnabled = $event); + })("onScroll", function TabsComponent_ng_template_20_Template_DataTable_onScroll_0_listener($event) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r35); + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx_r1.adjustHeader($event)); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("viewModel", ctx_r1.activeTab.viewModel)("currentDropdown", ctx_r1.dropdownEnabled); + } +} +class TabsComponent { + get latestDomains() { + return this.filterDomains(this.dataService.versions[0]); + } + get minimumSupportedVersion() { + return _utils_globals__WEBPACK_IMPORTED_MODULE_7__.minimumSupportedVersion; + } + get navVersion() { + return _utils_globals__WEBPACK_IMPORTED_MODULE_7__.navVersion; + } + constructor(dialog, viewModelsService, dataService, http, configService, snackBar) { + this.dialog = dialog; + this.viewModelsService = viewModelsService; + this.dataService = dataService; + this.http = http; + this.configService = configService; + this.snackBar = snackBar; + this.onUserThemeChange = new _angular_core__WEBPACK_IMPORTED_MODULE_12__.EventEmitter(); + this.activeTab = null; + this.dropdownEnabled = ''; + this.layerTabs = []; + this.adjustedHeaderHeight = 0; + this.showHelpDropDown = false; + this.loadURL = ''; + this.layerLinkURLs = []; + this.copiedRecently = false; // true if copyLayerLink is called, reverts to false after 2 seconds + this.loadData = { + url: undefined, + version: undefined, + identifier: undefined + }; + // user input for layer-layer operations + this.opSettings = { + domain: '', + gradientVM: null, + coloringVM: null, + commentVM: null, + linkVM: null, + metadataVM: null, + enabledVM: null, + filterVM: null, + scoreExpression: '', + legendVM: null + }; + console.debug('initializing tabs component'); + this.newBlankTab(); + this.loadTabs(configService.defaultLayers).then(() => { + // failed to load from URL, create a new blank layer + if (this.layerTabs.length == 0) this.newLayer(this.dataService.domains[0].id); + // if there is no active tab set, activate the first + if (!this.activeTab) this.selectTab(this.layerTabs[0]); + }); + this.bannerContent = this.configService.banner; + } + ngAfterViewInit() { + if ((0,_utils_utils__WEBPACK_IMPORTED_MODULE_9__.isSafari)('<=13')) { + // open safari version incompatibility warning + this.safariDialogRef = this.dialog.open(this.safariWarning, { + width: '350px', + disableClose: true, + panelClass: this.userTheme + }); + } + } + /** + * Adjust the header height on scroll event + */ + adjustHeader(newHeight) { + this.adjustedHeaderHeight = newHeight; + } + /** + * Open initial tabs on application load + * @param defaultLayers any default layers defined in the config file + */ + loadTabs(defaultLayers) { + var _this = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + let bundleURL = _this.getNamedFragmentValue('bundleURL')[0]; + let bundleVersion = _this.getNamedFragmentValue('version')[0]; + let bundleDomain = _this.getNamedFragmentValue('domain')[0]; + let layerURLs = _this.getNamedFragmentValue('layerURL'); + let self = _this; + if (bundleURL?.length && bundleVersion && bundleDomain?.length) { + // load base data from URL + self.newLayerFromURL({ + url: bundleURL, + version: bundleVersion, + identifier: bundleDomain + }); + } else if (layerURLs?.length) { + // load layer from URL + let first = true; + for (let url of layerURLs) { + yield self.loadLayerFromURL(url, first, true); + first = false; + } + } else if (defaultLayers['enabled']) { + // load default layers from config file + let first = true; + for (let url of defaultLayers['urls']) { + //yield self.loadLayerFromURL(url, first, true); + yield self.loadLayerFromLocalStorage() + first = false; + } + } + })(); + } + /** + * Open a new tab + * @param {string} title title of new tab + * @param {ViewModel} viewModel the view model for the template + * @param {Boolean} isCloseable is the tab closeable, default false + * @param {Boolean} replace replace the current tab with the new tab, default false + * @param {Boolean} forceNew force open a new tab even if a tab of that name already exists, default false + * @param {Boolean} isDataTable is the tab a data table, if so tab text should be editable, default false + */ + openTab(title, viewModel, isCloseable = false, replace = true, forceNew = false, isDataTable = false) { + if (!forceNew) { + // if tab is already open, change to that tab + let tab = this.layerTabs.find(t => t.title === title); + this.selectTab(tab); + return; + } + // create a new tab + let domain = viewModel ? viewModel.domainVersionID : ''; + let tab = new _classes__WEBPACK_IMPORTED_MODULE_1__.Tab(title, isCloseable, false, domain, isDataTable); + tab.viewModel = viewModel; + // select new tab + if (!replace || this.layerTabs.length === 0) { + this.layerTabs.push(tab); // don't replace + this.selectTab(this.layerTabs[this.layerTabs.length - 1]); + } else { + // find active tab index + for (let i = 0; i < this.layerTabs.length; i++) { + if (this.layerTabs[i] == this.activeTab) { + if (this.layerTabs[i].title == 'new tab') { + // close current and don't let it create a replacement tab + this.closeActiveTab(true); + } + this.layerTabs.splice(i, 0, tab); // replace + this.selectTab(this.layerTabs[i]); + return; + } + } + } + // reset dropdown + this.dropdownEnabled = ''; + } + /** + * Open a new "blank" tab with new layer options + * @param {boolean} replace replace the current tab with this blank tab, default false + */ + newBlankTab(replace = false) { + this.openTab('new tab', null, true, replace, true, false); + } + /** + * Select the specified tab, deselect other tabs + * @param {Tab} tab the tab to select + */ + selectTab(tab) { + this.activeTab = tab; + // close search sidebar + this.viewModelsService.viewModels.forEach(viewModel => { + if (viewModel.sidebarContentType === 'search') { + viewModel.sidebarOpened = false; + viewModel.sidebarContentType = ''; + } + }); + } + /** + * Close the specified tab + * @param {Tab} tab the tab to close + * @param {boolean} allowNoTab if true, doesn't select another tab, and won't open a new tab if there are none, default false + */ + closeTab(tab, allowNoTab = false) { + let action = 0; // controls post close-tab behavior + // destroy tab viewmodel + this.viewModelsService.destroyViewModel(tab.viewModel); + // check if the tab we're closing is the active tab + let i = this.layerTabs.findIndex(t => t === tab); + if (tab == this.activeTab) { + if (i == 0 && this.layerTabs.length > 1) action = 1; // closing first tab, first tab is active, and more tabs exist + else if (i > 0) action = 2; // not closing first tab, implicitly more tabs exist + else action = 3; // closing first tab and no other tabs exist + } + // remove the tab + this.layerTabs.splice(i, 1); + // handle post close-tab behavior + if (allowNoTab) return; + switch (action) { + case 0: + // should only occur if the active tab is not closed, don't select another tab + break; + case 1: + // closing the first tab and more tabs exist + this.selectTab(this.layerTabs[0]); // select first tab + break; + case 2: + // closing any tab other than the first + this.selectTab(this.layerTabs[0]); // select first tab + break; + case 3: + // closing first tab and no other tab exist + this.newBlankTab(); // create a new blank tab, automatically opens this tab + break; + default: + // should never occur + console.error('post closetab action not specified (this should never happen)'); + } + } + /** + * Close the currently selected tab + * @param {boolean} allowNoTab if true, doesn't select another tab, and won't open a new tab if there are none, default false + */ + closeActiveTab(allowNoTab = false) { + if (this.activeTab) this.closeTab(this.activeTab, allowNoTab); + } + /** + * Handle tab click event + * @param {Tab} tab the selected tab + */ + handleTabClick(tab) { + if (this.activeTab !== tab) { + this.activeTab = tab; + this.dropdownEnabled = ''; + } else this.dropdownEnabled = this.dropdownEnabled !== 'description' ? 'description' : ''; + } + /** + * Filter domains on version + * @param {Version} version the version to filter by + * @returns list of domains in the given version + */ + filterDomains(version) { + return this.dataService.domains.filter(d => d.version == version); + } + /** + * Check if the given feature is defined in the config file + * @param {string} featureName the name of the feature + * @returns true, if the feature is defined, false otherwise + */ + hasFeature(featureName) { + return this.configService.getFeature(featureName); + } + /** + * Handle theme change + * @param {string} theme the selected theme + */ + handleUserThemeChange(theme) { + this.onUserThemeChange.emit(theme); + } + /** + * Open the selected dialog + * @param {string} dialogName {"changelog"|"help"} the dialog to open + */ + openDialog(dialogName) { + const settings = { + maxWidth: '75ch', + panelClass: this.userTheme, + autoFocus: false, + data: { + theme: this.userTheme + } + }; + if (dialogName == 'changelog') { + this.dialog.open(_changelog_changelog_component__WEBPACK_IMPORTED_MODULE_6__.ChangelogComponent, settings); + } else if (dialogName == 'help') { + this.dialog.open(_help_help_component__WEBPACK_IMPORTED_MODULE_3__.HelpComponent, settings); + } else if (dialogName == 'layers') { + this.dialog.open(_layer_information_layer_information_component__WEBPACK_IMPORTED_MODULE_8__.LayerInformationComponent, settings); + } + } + /** + * Open the SVG exporter dialog + * @param {ViewModel} viewModel the viewModel to render + */ + openSVGDialog(viewModel) { + this.dialog.open(_svg_export_svg_export_component__WEBPACK_IMPORTED_MODULE_4__.SvgExportComponent, { + data: { + vm: viewModel + }, + panelClass: ['dialog-custom', this.userTheme], + autoFocus: false + }); + } + /** + * Given a unique root, get a layer name that does not conflict any existing layers, e.g 'new layer' -> 'new layer 1' + * @param {string} root the root string to get the non-conflicting version of + * @return {string} non-conflicted version + */ + getUniqueLayerName(root) { + let id = 0; + function isInteger(str) { + let n = Math.floor(Number(str)); + return String(n) === str; + } + for (let viewModel of this.viewModelsService.viewModels) { + if (!viewModel.name.startsWith(root)) continue; + if (viewModel.name === root) { + // case where it's "layer" aka "layer0" + id = Math.max(id, 1); + continue; + } + // find the lowest number higher than existing number + let substr = viewModel.name.substring(root.length, viewModel.name.length); + if (isInteger(substr)) { + id = Math.max(id, Number(substr) + 1); + } + } + // if no layers of this name exist (id == 0) just return root + if (id != 0) root = root + id; + return root; + } + /** + * Create a new layer from URL + */ + newLayerFromURL(loadData, obj = undefined) { + let domainID = loadData.identifier.toLowerCase(); + let domainVersionID = this.dataService.getDomainVersionID(domainID, loadData.version); + // validate input data + let valid = this.validateInput(loadData, domainVersionID); + if (!valid) return; + // load from URL + let url = new URL(loadData.url).toString(); + let subscription; + subscription = this.http.get(url).subscribe({ + next: res => { + // check for custom domain + let exists = this.dataService.domains.find(d => d.isCustom && d.id === domainVersionID); + if (!exists) { + // create or retrieve version + let v = this.dataService.versions.find(v => v.number == loadData.version); + if (!v) { + v = new _classes__WEBPACK_IMPORTED_MODULE_1__.Version(`ATT&CK v${loadData.version}`, String(loadData.version)); + this.dataService.versions.push(v); + } + // create new custom domain object + let domainObject = new _classes__WEBPACK_IMPORTED_MODULE_1__.Domain(domainID, domainID, v, [url]); + domainObject.isCustom = true; + this.dataService.domains.push(domainObject); + } + this.newLayer(domainVersionID, obj); + }, + error: err => { + console.error(err); + alert('ERROR retrieving data from ' + url + ', check the javascript console for more information.'); + }, + complete: () => { + if (subscription) subscription.unsubscribe(); + } // prevent memory leaks + }); + } + /** + * Validate user input data before loading data from collection or STIX bundle URL + * @param {any} loadData the user input + * @param {string} domainVersionID the domain and version + * @returns true if user input is valid, false otherwise + */ + validateInput(loadData, domainVersionID) { + try { + // validate URL + let url = new URL(loadData.url); + // validate version + if (isNaN(loadData.version)) { + throw Error('version is not a number'); + } + // validate domainVersionID is unique + let exists = this.dataService.domains.find(d => d.id == domainVersionID); + // Note: if a user inputs the same domain, version, AND url, do not check for collisions, just reload the custom dataset + if (exists && !(exists.isCustom && exists.urls[0] == url.toString())) { + throw Error(`the domain and version specified conflict with an existing set of ATT&CK data (${exists.name} ${exists.version.name})`); + } + return true; // passed validation + } catch (err) { + console.error(err); + if (err instanceof TypeError) { + alert('ERROR: invalid url, check the javascript console for more information.'); + } else { + alert('ERROR ' + err.message); + } + return false; // failed validation + } + } + /** + * Create a new layer in the given domain and version + */ + newLayer(domainVersionID, obj = undefined) { + // load domain data, if not yet loaded + let domain = this.dataService.getDomain(domainVersionID); + if (!domain.dataLoaded) { + this.dataService.loadDomainData(domainVersionID, true); + } + // find non conflicting name + let name; + if (obj && 'name' in obj && obj['name']) { + name = obj['name']; + } else name = this.getUniqueLayerName('layer'); + // create and open the view model + let viewModel = this.viewModelsService.newViewModel(name, domainVersionID); + if (obj) { + // restore view model from the given string + viewModel.deserialize(obj); + } + viewModel.loadVMData(); + this.openTab(name, viewModel, true, true, true, true); + } + /** + * Get the layer score expression variable for the tab at the given index + * @param {number} index the index of the tab + * @return {string} the score expression character + */ + indexToChar(index) { + let viewModelIndex = 0; + for (let i = 0; i < index; i++) { + // check if tab has a view model + if (this.layerTabs[i].viewModel) viewModelIndex++; + } + return String.fromCharCode(97 + viewModelIndex); + } + /** + * Inverse of indextoChar, maps the character to the tab it corresponds to + * @param {string} char the score expression character + * @return {number} the index of the tab + */ + charToIndex(char) { + let viewModelIndex = 0; + for (let i = 0; i < this.layerTabs.length; i++) { + if (this.layerTabs[i].viewModel) { + let currChar = String.fromCharCode(97 + viewModelIndex); + viewModelIndex++; + if (currChar == char) return i; + } + } + } + /** + * Create a new layer by operation based on user input + */ + layerByOperation() { + // build score expression map, mapping inline variables to their actual VMs + let scoreVariables = new Map(); + let regex = /\b[a-z]\b/g; // \b matches word boundary + let matches = this.opSettings.scoreExpression.match(regex); + let self = this; + if (matches) { + matches.forEach(function (match) { + let index = self.charToIndex(match); + let vm = self.layerTabs[index].viewModel; + scoreVariables.set(match, vm); + }); + } + let layerName = this.getUniqueLayerName('layer by operation'); + try { + // all layers must be of the same domain/version + let vms = Array.from(scoreVariables.values()); + if (vms && !vms.every(vm => vm.domainVersionID === vms[0].domainVersionID)) { + throw Error('cannot apply operations to layers of different domains'); + } + // execute the layer operation + let vm = this.viewModelsService.layerOperation(scoreVariables, layerName, this.opSettings); + // load domain data and open new layer operation tab + if (!this.dataService.getDomain(this.opSettings.domain).dataLoaded) { + this.dataService.loadDomainData(this.opSettings.domain, true).then(() => { + vm.loadVMData(); + vm.updateGradient(); + this.openTab(layerName, vm, true, true, true, true); + }); + } else { + vm.loadVMData(); + vm.updateGradient(); + this.openTab(layerName, vm, true, true, true, true); + } + } catch (err) { + console.error(err); + alert('Layer Layer operation error: ' + err.message); + } + } + /** + * Check if there's an error in the score expression (syntax, etc) + * @return {string} error or null if no error + */ + getScoreExpressionError() { + let self = this; + try { + // build fake scope + let regex = /\b[a-z]\b/g; // \b matches word boundary + let scope = {}; + let matches = self.opSettings.scoreExpression.match(regex); + if (matches) { + let noMatch = ''; + matches.forEach(function (match) { + scope[match] = 0; + // check if letter is too large + if (typeof self.charToIndex(match) == 'undefined') { + noMatch = 'Variable ' + match + ' does not match any layers'; + } else if (self.opSettings.domain && self.layerTabs[self.charToIndex(match)].viewModel.domainVersionID !== self.opSettings.domain) { + noMatch = 'Layer ' + match + ' does not match the chosen domain'; + } + }); + if (noMatch.length > 0) return noMatch; + } + return null; + } catch (err) { + return err.message; + } + } + /** + * Open prompt to upload a layer + */ + openUploadPrompt() { + let input = document.getElementById('uploader'); + input.click(); + } + /** + * Dialog to upgrade version if layer is not the latest version + */ + versionUpgradeDialog(viewModel) { + let dataPromise = new Promise((resolve, reject) => { + let currVersion = this.dataService.latestVersion.number; + if (viewModel.version !== currVersion) { + // ask to upgrade + let dialog = this.dialog.open(_version_upgrade_version_upgrade_component__WEBPACK_IMPORTED_MODULE_2__.VersionUpgradeComponent, { + data: { + layerName: viewModel.name, + vmVersion: viewModel.version, + currVersion: currVersion + }, + disableClose: true, + width: '25%', + panelClass: this.userTheme, + autoFocus: false + }); + this.subscription = dialog.afterClosed().subscribe({ + next: result => { + if (!result.upgrade && !this.dataService.isSupported(viewModel.version)) { + reject(new Error(`Uploaded layer version (${String(viewModel.version)}) is not supported by Navigator v${this.navVersion}`)); + } + if (result.upgrade) { + let newDomainVersionID = this.dataService.getDomainVersionID(viewModel.domain, currVersion); + resolve({ + oldID: viewModel.domainVersionID, + newID: newDomainVersionID + }); + } + resolve(null); + }, + complete: () => { + if (this.subscription) this.subscription.unsubscribe(); + } //prevent memory leaks + }); + } else resolve(null); // layer is already current version + }); + return dataPromise; + } + /** + * Checks if the layer can be upgraded and initializes the layer upgrade process + * @param {ViewModel} oldViewModel viewmodel to upgrade + * @param {any} serialized the viewmodel's raw serialized JSON string + * @param {boolean} replace replace if true, replace the current active tab with the layer + * @param {boolean} defaultLayers is this a layer being loaded by default (from the config or query string)? + * if so, will act as if the user decided not to upgrade the layer + */ + upgradeLayer(oldViewModel, serialized, replace, defaultLayers = false) { + return new Promise((resolve, reject) => { + if (!defaultLayers) { + this.versionUpgradeDialog(oldViewModel).then(versions => { + if (versions) { + // user upgraded to latest version + // create and open the latest version + let newViewModel = this.viewModelsService.newViewModel(oldViewModel.name, versions.newID); + newViewModel.version = this.dataService.latestVersion.number; // update version to new ID + newViewModel.deserialize(serialized, false); // restore layer data, except for technique annotations + newViewModel.loadVMData(); + newViewModel.compareTo = oldViewModel; + this.openTab('new layer', newViewModel, true, replace, true, true); + newViewModel.openSidebar('layerUpgrade'); + newViewModel.selectTechniquesAcrossTactics = false; + // load layer version & latest ATT&CK version + let loads = {}; + let dataSubscription; + if (!this.dataService.getDomain(versions.oldID).dataLoaded) loads.old = this.dataService.loadDomainData(versions.oldID, true); + if (!this.dataService.getDomain(versions.newID).dataLoaded) loads.new = this.dataService.loadDomainData(versions.newID, true); + dataSubscription = (0,rxjs__WEBPACK_IMPORTED_MODULE_13__.forkJoin)(loads).subscribe({ + complete: () => { + newViewModel.versionChangelog = this.dataService.compareVersions(versions.oldID, versions.newID); + // load vm for uploaded layer + oldViewModel.deserialize(serialized); + oldViewModel.loadVMData(); + newViewModel.initCopyAnnotations(); + resolve(null); + if (dataSubscription) dataSubscription.unsubscribe(); + } + }); + } else { + // user did not upgrade, keep the old version + this.openTab('new layer', oldViewModel, true, replace, true, true); + if (!this.dataService.getDomain(oldViewModel.domainVersionID).dataLoaded) { + this.dataService.loadDomainData(oldViewModel.domainVersionID, true).then(() => { + oldViewModel.deserialize(serialized); + oldViewModel.loadVMData(); + resolve(null); + }); + } else { + oldViewModel.deserialize(serialized); + oldViewModel.loadVMData(); + resolve(null); + } + } + }).catch(err => { + console.error(err); + alert('ERROR parsing file, check the javascript console for more information.'); + resolve(null); + }); + } else { + // default layer, do not upgrade + this.openTab('new layer', oldViewModel, true, replace, true, true); + if (!this.dataService.getDomain(oldViewModel.domainVersionID).dataLoaded) { + this.dataService.loadDomainData(oldViewModel.domainVersionID, true).then(() => { + oldViewModel.deserialize(serialized); + oldViewModel.loadVMData(); + resolve(null); + }); + } else { + oldViewModel.deserialize(serialized); + oldViewModel.loadVMData(); + resolve(null); + } + } + }); + } + /** + * Load a layer from file + */ + loadLayerFromFile() { + let input = document.getElementById('uploader'); + if (input.files.length < 1) { + alert('You must select a file to upload!'); + return; + } + console.log(input.files[0]); + this.readJSONFile(input.files[0]); + } + loadLayerFromLocalStorage() { + let layer = localStorage.getItem('layer'); + if (layer) { + // create input file and put the layer into it + let blob = new Blob([layer], { + type: 'application/json' + }); + let file = new File([blob], 'layer.json'); + this.readJSONFile(file); + } + } + /** + * Reads the JSON file, adds the properties to a view model, and + * loads the view model into a new layer + */ + readJSONFile(file) { + var _this2 = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + return new Promise((resolve, reject) => { + let reader = new FileReader(); + let self = _this2; + reader.onload = /*#__PURE__*/function () { + var _ref = (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* (e) { + let loadObjAsLayer = /*#__PURE__*/function () { + var _ref2 = (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* (layerObj) { + let viewModel = self.viewModelsService.newViewModel('loading layer...', undefined); + try { + let layerVersionStr = viewModel.deserializeDomainVersionID(layerObj); + yield self.versionMismatchWarning(layerVersionStr); + self.versionMismatchWarning(layerVersionStr); + if (!self.dataService.getDomain(viewModel.domainVersionID)) { + throw new Error(`Error: '${viewModel.domain}' (v${viewModel.version}) is an invalid domain.`); + } + let isCustom = ('customDataURL' in layerObj); + if (!isCustom) { + yield self.upgradeLayer(viewModel, layerObj, true); + console.debug(`loaded layer "${viewModel.name}"`); + } else { + // load as custom data + viewModel.deserialize(layerObj); + let url = layerObj['customDataURL']; + self.newLayerFromURL({ + url: url, + version: viewModel.version, + identifier: viewModel.domain + }, layerObj); + } + } catch (err) { + console.error(err); + alert(`ERROR parsing layer, check the javascript console for more information.`); + self.viewModelsService.destroyViewModel(viewModel); + resolve(null); // continue + } + }); + return function loadObjAsLayer(_x2) { + return _ref2.apply(this, arguments); + }; + }(); + let result = String(reader.result); + let layerFile = typeof result == 'string' ? JSON.parse(result) : result; + if (layerFile?.length) { + console.debug('loading file with multiple layers'); + for (let layer of layerFile) { + yield loadObjAsLayer(layer); + } + } else { + yield loadObjAsLayer(layerFile); + } + }); + return function (_x) { + return _ref.apply(this, arguments); + }; + }(); + reader.readAsText(file); + }); + })(); + } + /** + * Check if uploaded layer version is out of date and display + * a snackbar warning message (for minor mismatches) or a dialog warning + * (for major mismatches) + * @param {string} layerVersionStr the uploaded layer version + */ + versionMismatchWarning(layerVersionStr) { + var _this3 = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + return new Promise((resolve, reject) => { + let globalVersionSplit = _utils_globals__WEBPACK_IMPORTED_MODULE_7__.layerVersion.split('.'); + let layerVersion = layerVersionStr.split('.'); + // if minor version change, snackbar will be displayed + if (layerVersion[0] === globalVersionSplit[0] && layerVersion[1] !== globalVersionSplit[1]) { + let snackMessage = `Uploaded layer version (${layerVersionStr}) is out of date. Please update to v${_utils_globals__WEBPACK_IMPORTED_MODULE_7__.layerVersion} for optimal compatibility.`; + _this3.versionMinorSnackbarRef = _this3.snackBar.open(snackMessage, 'CHANGELOG', { + duration: 6500 + }); + _this3.versionMinorSnackbarRef.onAction().subscribe(() => { + _this3.openDialog('changelog'); + }); + resolve(true); + } + // if major version change, keep the dialog open until user dismisses it + else if (layerVersion[0] !== globalVersionSplit[0]) { + _this3.versionDialogRef = _this3.dialog.open(_this3.versionWarning, { + width: '30em', + disableClose: true, + panelClass: _this3.userTheme, + data: { + objVersion: layerVersionStr, + globalVersion: _utils_globals__WEBPACK_IMPORTED_MODULE_7__.layerVersion + } + }); + _this3.versionDialogRef.afterClosed().subscribe(_ => { + resolve(true); + }); + } else { + resolve(true); + } + }); + })(); + } + /** + * Load layer from URL + * @param {string} loadURL the url to load + * @param {boolean} replace replace the current active with the loaded layer? + * @param {boolean} defaultLayers is this loading reflecting a set of default layers (from the config file or from the query string)? + * + */ + loadLayerFromURL(loadURL, replace, defaultLayers = false) { + var _this4 = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + return new Promise( /*#__PURE__*/function () { + var _ref3 = (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* (resolve, reject) { + let subscription; + let self = _this4; + subscription = self.http.get(loadURL).subscribe({ + next: function () { + var _ref4 = (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* (res) { + let loadLayerAsync = /*#__PURE__*/function () { + var _ref5 = (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* (layerObj) { + let viewModel = self.viewModelsService.newViewModel('loading layer...', undefined); + try { + let layerVersionStr = viewModel.deserializeDomainVersionID(layerObj); + yield self.versionMismatchWarning(layerVersionStr); + if (!self.dataService.getDomain(viewModel.domainVersionID)) { + throw new Error(`Error: '${viewModel.domain}' (v${viewModel.version}) is an invalid domain.`); + } + yield self.upgradeLayer(viewModel, layerObj, replace, defaultLayers); + console.debug(`loaded layer "${viewModel.name}" from ${loadURL}`); + } catch (err) { + console.error(err); + alert(`ERROR parsing layer from ${loadURL}, check the javascript console for more information.`); + self.viewModelsService.destroyViewModel(viewModel); + resolve(null); // continue + } + }); + return function loadLayerAsync(_x6) { + return _ref5.apply(this, arguments); + }; + }(); + let layerFile = typeof res == 'string' ? JSON.parse(res) : res; + if (layerFile?.length) { + console.debug('loading file with multiple layers'); + for (let layer of layerFile) { + yield loadLayerAsync(layer); + } + } else { + yield loadLayerAsync(layerFile); + } + resolve(null); //continue + }); + return function next(_x5) { + return _ref4.apply(this, arguments); + }; + }(), + error: err => { + console.error(err); + alert(`ERROR retrieving layer from ${loadURL}, check the javascript console for more information.`); + resolve(null); // continue + }, + complete: () => { + if (subscription) subscription.unsubscribe(); + } // prevent memory leaks + }); + }); + return function (_x3, _x4) { + return _ref3.apply(this, arguments); + }; + }()); + })(); + } + /** + * Helper function to track which layerLinkURLs have been added or removed + */ + trackByFunction(index) { + return index; + } + /** + * Add a new empty layer link to the layerLinkURLs array + */ + addLayerLink() { + this.layerLinkURLs.push(''); + } + /** + * Remove the given layer link URL from layerLinkURLs + * @param {number} index the index to remove + */ + removeLayerLink(index) { + this.layerLinkURLs.splice(index, 1); + } + /** + * Convert layerLinkURL to a query string value for layerURL query string + * @return URL such that when opened will create navigator instance with a query String + * specifying layerLinkURL as the URL to fetch the default layer from + */ + getLayerLink() { + let str = window.location.href.split('#')[0]; + let join = '#'; // hash first, then ampersand + for (let layerLinkURL of this.layerLinkURLs) { + str += join + 'layerURL=' + encodeURIComponent(layerLinkURL); + join = '&'; + } + for (let feature of this.configService.customizefeatureList) { + if (feature.subfeatures) { + for (let subfeature of feature.subfeatures) { + if (!subfeature.enabled) { + str += join + subfeature.name + '=false'; + join = '&'; + } + } + } else if (!feature.enabled) { + str += join + feature.name + '=false'; + join = '&'; + } + } + return str; + } + /** + * Select the layer link field text + */ + selectLayerLink() { + let copyText = document.getElementById('layerLink'); + console.debug('copied', copyText.value); + copyText.select(); + } + /** + * Copy the created layer link to clipboard + */ + copyLayerLink() { + this.selectLayerLink(); + document.execCommand('Copy'); + this.copiedRecently = true; + let self = this; + window.setTimeout(function () { + self.copiedRecently = false; + }, 2000); + } + /** + * Return true if the text is only letters a-z, false otherwise + * @param text text to eval + * @return true if a-z, false otherwise + */ + isAlphabetical(text) { + return /^[a-z]+$/.test(text); + } + /** + * Get a key=value fragment value by key + * @param {string} name name of param to get the value of + * @param {string} url optional, if unspecified searches in current window location. Otherwise searches this string + * @return {string} fragment param value + */ + getNamedFragmentValue(name, url) { + if (!url) url = window.location.href; + name = name.replace(/[[\]]/g, '\\$&'); + let regex = new RegExp('[#&]' + name + '(?:=([^&#]*)|&|#|$)', 'g'); + // match as many results as exist under the name + let results = []; + let match = regex.exec(url); + while (match != null) { + results.push(decodeURIComponent(match[1].replace(/\+/g, ' '))); + match = regex.exec(url); + } + return results; + } + /** Get all view models in the same domain/version */ + getFilteredVMs() { + return this.viewModelsService.viewModels.filter(vm => vm.domainVersionID == this.opSettings.domain); + } + static #_ = this.ɵfac = function TabsComponent_Factory(t) { + return new (t || TabsComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_14__.MatDialog), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_5__.ViewModelsService), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_10__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_angular_common_http__WEBPACK_IMPORTED_MODULE_15__.HttpClient), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_services_config_service__WEBPACK_IMPORTED_MODULE_11__.ConfigService), _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdirectiveInject"](_angular_material_snack_bar__WEBPACK_IMPORTED_MODULE_16__.MatSnackBar)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵdefineComponent"]({ + type: TabsComponent, + selectors: [["tabs"]], + viewQuery: function TabsComponent_Query(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵviewQuery"](_c0, 5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵviewQuery"](_c1, 5); + } + if (rf & 2) { + let _t; + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵloadQuery"]()) && (ctx.safariWarning = _t.first); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵqueryRefresh"](_t = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵloadQuery"]()) && (ctx.versionWarning = _t.first); + } + }, + inputs: { + userTheme: "userTheme" + }, + outputs: { + onUserThemeChange: "onUserThemeChange" + }, + features: [_angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵProvidersFeature"]([_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_5__.ViewModelsService])], + decls: 21, + vars: 13, + consts: [["tabPanel", ""], ["safariWarning", ""], ["versionWarning", ""], ["select", ""], ["newlayer", ""], [1, "header-wrapper"], ["class", "header", 4, "ngIf"], [1, "header", "help-header"], ["matTooltip", "help", 1, "help-button", 3, "click", "ngClass"], ["xmlns", "http://www.w3.org/2000/svg", "height", "24px", "viewBox", "0 0 24 24", "width", "24px", "fill", "#9aa0a6"], ["d", "M0 0h24v24H0z", "fill", "none"], ["d", "M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"], ["class", "dropdown-container", 4, "ngIf"], [1, "tabs-container", "scroll"], ["mat-tab-nav-bar", "", "backgroundColor", "undefined", 1, "tabs", 3, "tabPanel"], ["mat-tab-link", "", "class", "tab-title", 3, "active", "click", 4, "ngFor", "ngForOf"], ["mat-tab-link", "", "class", "add-tab", 3, "click", 4, "ngIf"], ["class", "new-tab", 4, "ngIf"], [3, "ngIf"], [1, "header"], [1, "banner"], ["role", "alert", 1, "bannerContent", 3, "innerHTML"], [1, "bannerLinks"], ["href", "http://attack.mitre.org"], [1, "dropdown-container"], [3, "click"], ["mat-tab-link", "", 1, "tab-title", 3, "click", "active"], ["mat-icon-button", "", "class", "tab-close icon-button-scale-down", 3, "click", 4, "ngIf"], ["class", "tab-enumerator", 4, "ngIf"], ["mat-icon-button", "", 1, "tab-close", "icon-button-scale-down", 3, "click"], [1, "tab-enumerator"], ["mat-tab-link", "", 1, "add-tab", 3, "click"], [1, "new-tab"], [1, "safari-warning"], ["mat-button", "", 3, "click"], [1, "version-warning"], ["mat-dialog-title", ""], ["mat-button", "", "mat-dialog-close", "", 3, "click"], [1, "description"], [1, "logo"], [1, "help-links-container"], ["mat-flat-button", "", 3, "click"], ["mat-flat-button", "", 1, "theme-select-container", 3, "click"], ["panelWidth", "", 1, "hide-select", 3, "selectionChange"], ["value", "dark"], ["value", "light"], ["value", "system"], [1, "headers-align"], [1, "button-group"], ["mat-raised-button", "", 3, "click", 4, "ngFor", "ngForOf"], [1, "multi-column", "multi-column-container"], [1, "md-column"], ["required", "", 3, "ngModelChange", "ngModel"], [3, "value"], [3, "value", 4, "ngFor", "ngForOf"], ["required", "", 3, "ngModelChange", "ngModel", "disabled"], [1, "text-deemphasis"], [1, "or-column"], ["type", "url", "matInput", "", 3, "ngModelChange", "ngModel"], ["type", "number", "matInput", "", 3, "ngModelChange", "ngModel"], ["type", "text", "matInput", "", 3, "ngModelChange", "ngModel"], ["mat-flat-button", "", 3, "click", "disabled"], [1, "sm-column"], ["mat-raised-button", "", 3, "click"], ["id", "uploader", "type", "file", 2, "display", "none", 3, "change"], [1, "hide-subscript"], ["matSuffix", "", "mat-icon-button", "", "aria-label", "go", 1, "icon-button-scale-down", 3, "click", "disabled"], [3, "opened", "closed"], [1, "multi-column-container", "hide-subscript"], [1, "multi-column"], [1, "spacer"], [1, "lg-column", "align-center"], ["type", "text", "matInput", "", 2, "letter-spacing", "2px", 3, "ngModelChange", "keyup", "disabled", "ngModel"], ["align", "start", 2, "color", "red"], [1, "lg-column", "align-center", 3, "ngClass"], ["href", "http://mathjs.org/docs/expressions/syntax.html#operators"], [4, "ngFor", "ngForOf"], [3, "ngModelChange", "ngModel", "disabled"], [2, "margin-top", "16px"], [1, "multi-column-container"], [1, "section"], [1, "multi-column", "left-align"], [1, "layer-links"], [4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "lg-column"], [2, "text-align", "center"], ["id", "layerlinkfield"], ["id", "layerLink", "type", "text", "matInput", "", "readonly", "", 3, "click", "value"], ["matSuffix", "", "mat-icon-button", "", "aria-label", "copy", "matTooltip", "copy", 1, "icon-button-scale-down", 3, "click"], [4, "ngIf"], [1, "tab-enumerator-highlight"], ["matSuffix", "", "mat-icon-button", "", "aria-label", "remove", 1, "icon-button-scale-down", 3, "click"], ["class", "feature-row multi-column left-align", 4, "ngIf"], [1, "feature-row", "multi-column", "left-align"], [1, "md-column", "align-center"], [1, "adaptive-checkbox", 3, "ngModelChange", "ngModel"], [3, "dropdownChange", "onScroll", "viewModel", "currentDropdown"]], + template: function TabsComponent_Template(rf, ctx) { + if (rf & 1) { + const _r1 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵgetCurrentView"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](0, "div", 5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](1, TabsComponent_div_1_Template, 6, 1, "div", 6); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](2, "div", 7)(3, "div", 8); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵlistener"]("click", function TabsComponent_Template_div_click_3_listener() { + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵrestoreView"](_r1); + return _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵresetView"](ctx.showHelpDropDown = !ctx.showHelpDropDown); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnamespaceSVG"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](4, "svg", 9); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](5, "path", 10)(6, "path", 11); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](7, TabsComponent_div_7_Template, 5, 0, "div", 12); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵnamespaceHTML"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementStart"](8, "div", 13)(9, "nav", 14); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](10, TabsComponent_a_10_Template, 4, 6, "a", 15)(11, TabsComponent_a_11_Template, 3, 0, "a", 16); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelement"](12, "mat-tab-nav-panel", null, 0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](14, TabsComponent_div_14_Template, 3, 0, "div", 17); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplate"](15, TabsComponent_ng_template_15_Template, 12, 0, "ng-template", null, 1, _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplateRefExtractor"])(17, TabsComponent_ng_template_17_Template, 19, 3, "ng-template", null, 2, _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵtemplateRefExtractor"])(19, TabsComponent_ng_template_19_Template, 282, 89, "ng-template", 18)(20, TabsComponent_ng_template_20_Template, 1, 2, "ng-template", 18); + } + if (rf & 2) { + const tabPanel_r36 = _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵreference"](13); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵstyleProp"]("margin-top", ctx.adjustedHeaderHeight + "px"); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.hasFeature("header") && ctx.bannerContent); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngClass", _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵpureFunction1"](11, _c2, ctx.showHelpDropDown)); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](4); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.showHelpDropDown && ctx.adjustedHeaderHeight >= 0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](2); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("tabPanel", tabPanel_r36); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngForOf", ctx.layerTabs); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.hasFeature("tabs") && ctx.layerTabs.length < 12); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](3); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.layerTabs.length == 0); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.activeTab && !ctx.activeTab.isDataTable); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_12__["ɵɵproperty"]("ngIf", ctx.activeTab && ctx.activeTab.isDataTable); + } + }, + styles: ["/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n.header-wrapper {\n transition: margin-top 300ms 0ms cubic-bezier(0.4, 0, 0.6, 1), opacity 0s 300ms;\n}\n@media print {\n .header-wrapper {\n display: none;\n }\n}\n\n.tabs-container {\n display: flex;\n}\n.tabs-container .mdc-tab-indicator__content--underline {\n border: none;\n}\n.tabs-container .mat-mdc-tab-header-pagination {\n display: none !important;\n}\n.tabs-container .tabs .tab-title.active {\n opacity: 1 !important;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n color: black;\n }\n}\n.theme-override-light .tabs-container .tabs .tab-title.active {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n color: white;\n }\n}\n.theme-override-dark .tabs-container .tabs .tab-title.active {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n border-color: #ddd;\n }\n}\n.theme-override-light .tabs-container .tabs .tab-title.active {\n border-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n border-color: #1a1a23;\n }\n}\n.theme-override-dark .tabs-container .tabs .tab-title.active {\n border-color: #1a1a23;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n background-color: #ddd;\n }\n}\n.theme-override-light .tabs-container .tabs .tab-title.active {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .tabs-container .tabs .tab-title.active {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs-container .tabs .tab-title.active {\n border: none;\n }\n}\n.theme-override-dark .tabs-container .tabs .tab-title.active {\n border: none;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs-container .tabs .tab-title:not(.active) {\n border-color: #ddd;\n }\n}\n.theme-override-light .tabs-container .tabs .tab-title:not(.active) {\n border-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs-container .tabs .tab-title:not(.active) {\n border-color: #4c4c68;\n }\n}\n.theme-override-dark .tabs-container .tabs .tab-title:not(.active) {\n border-color: #4c4c68;\n}\n\n.scroll {\n overflow: auto;\n width: 95.5vw;\n}\n\n.tabs .tab-title {\n font-size: 14px;\n text-decoration: none;\n display: flex;\n justify-content: space-around;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .tab-title {\n color: black;\n }\n}\n.theme-override-light .tabs .tab-title {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title {\n color: white;\n }\n}\n.theme-override-dark .tabs .tab-title {\n color: white;\n}\n.tabs .tab-title:hover:not(.active), .tabs .tab-title:focus:not(.active) {\n text-decoration: none;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .tab-title:hover:not(.active), .theme-use-system .tabs .tab-title:focus:not(.active) {\n color: black;\n }\n}\n.theme-override-light .tabs .tab-title:hover:not(.active), .theme-override-light .tabs .tab-title:focus:not(.active) {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title:hover:not(.active), .theme-use-system .tabs .tab-title:focus:not(.active) {\n color: #7588e8;\n }\n}\n.theme-override-dark .tabs .tab-title:hover:not(.active), .theme-override-dark .tabs .tab-title:focus:not(.active) {\n color: #7588e8;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .tab-title:hover:not(.active), .theme-use-system .tabs .tab-title:focus:not(.active) {\n opacity: 0.6;\n }\n}\n.theme-override-light .tabs .tab-title:hover:not(.active), .theme-override-light .tabs .tab-title:focus:not(.active) {\n opacity: 0.6;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title:hover:not(.active), .theme-use-system .tabs .tab-title:focus:not(.active) {\n opacity: 0.8;\n }\n}\n.theme-override-dark .tabs .tab-title:hover:not(.active), .theme-override-dark .tabs .tab-title:focus:not(.active) {\n opacity: 0.8;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .tab-title:hover:not(.active), .theme-use-system .tabs .tab-title:focus:not(.active) {\n background-color: #f1f1f1;\n }\n}\n.theme-override-light .tabs .tab-title:hover:not(.active), .theme-override-light .tabs .tab-title:focus:not(.active) {\n background-color: #f1f1f1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title:hover:not(.active), .theme-use-system .tabs .tab-title:focus:not(.active) {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .tabs .tab-title:hover:not(.active), .theme-override-dark .tabs .tab-title:focus:not(.active) {\n background-color: #2e2e3f;\n}\n.tabs .tab-title:hover:not(.active):not(.add-tab), .tabs .tab-title:focus:not(.active):not(.add-tab) {\n border-color: #ddd;\n}\n.tabs .tab-title .tab-enumerator {\n position: absolute;\n top: 4px;\n right: -4px;\n padding: 2px 4px;\n background: rgb(255, 255, 0);\n border-radius: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title .tab-enumerator {\n color: #1a1a23;\n }\n}\n.theme-override-dark .tabs .tab-title .tab-enumerator {\n color: #1a1a23;\n}\n.tabs .tab-title.active {\n cursor: default;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .tab-title.active {\n background-color: #ddd;\n }\n}\n.theme-override-light .tabs .tab-title.active {\n background-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title.active {\n background-color: #0a0a0e;\n }\n}\n.theme-override-dark .tabs .tab-title.active {\n background-color: #0a0a0e;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .tab-title.active {\n color: #555;\n }\n}\n.theme-override-light .tabs .tab-title.active {\n color: #555;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .tab-title.active {\n color: #ddd;\n }\n}\n.theme-override-dark .tabs .tab-title.active {\n color: #ddd;\n}\n.tabs .add-tab {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.tabs .add-tab .mat-icon {\n color: gray;\n}\n.tabs .add-tab:hover {\n border-color: #ddd #ddd #f1f1f1 #ddd;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .add-tab:hover {\n background-color: #f1f1f1;\n }\n}\n.theme-override-light .tabs .add-tab:hover {\n background-color: #f1f1f1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .add-tab:hover {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .tabs .add-tab:hover {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .tabs .add-tab:hover .mat-icon {\n color: black;\n }\n}\n.theme-override-light .tabs .add-tab:hover .mat-icon {\n color: black;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tabs .add-tab:hover .mat-icon {\n color: white;\n }\n}\n.theme-override-dark .tabs .add-tab:hover .mat-icon {\n color: white;\n}\n\n.tab-close {\n color: gray;\n text-align: right;\n cursor: pointer;\n}\n\n.icon-button-scale-down {\n transform: scale(0.75);\n}\n\n.new-tab {\n border-width: 1px;\n border-style: solid;\n height: 90%;\n display: block;\n overflow-y: scroll;\n box-sizing: border-box;\n position: absolute;\n padding: 5% 20%;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .new-tab {\n background-color: white;\n }\n}\n.theme-override-light .new-tab {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .new-tab {\n background-color: #1a1a23;\n }\n}\n.theme-override-dark .new-tab {\n background-color: #1a1a23;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .new-tab {\n color: #39434c;\n }\n}\n.theme-override-light .new-tab {\n color: #39434c;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .new-tab {\n color: white;\n }\n}\n.theme-override-dark .new-tab {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .new-tab {\n border-color: #ddd;\n }\n}\n.theme-override-light .new-tab {\n border-color: #ddd;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .new-tab {\n border-color: #1a1a23;\n }\n}\n.theme-override-dark .new-tab {\n border-color: #1a1a23;\n}\n.new-tab .description {\n display: flex;\n flex-flow: column wrap;\n align-items: center;\n}\n.new-tab .description div p {\n max-width: 75ch;\n font-size: 1.2em;\n}\n.new-tab .logo {\n text-align: center;\n font-size: 1em;\n}\n.new-tab .logo a {\n text-decoration: none;\n color: rgb(176, 26, 26);\n font-weight: 500;\n}\n\n.tab-enumerator-highlight {\n padding: 2px 4px;\n background: rgb(255, 255, 0);\n border-radius: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .tab-enumerator-highlight {\n color: #1a1a23;\n }\n}\n.theme-override-dark .tab-enumerator-highlight {\n color: #1a1a23;\n}\n\n.hide-select .mat-mdc-select-value {\n visibility: hidden !important;\n}\n\n.hide-select .mat-mdc-select-value, .hide-select .mat-mdc-select-arrow-wrapper {\n visibility: hidden !important;\n}\n\n@media (prefers-color-scheme: light) {\n .theme-use-system .mat-expansion-panel {\n background-color: white;\n }\n}\n.theme-override-light .mat-expansion-panel {\n background-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .mat-expansion-panel {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel {\n color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-indicator::after {\n color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-indicator::after {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-header,\n .theme-use-system .mat-expansion-panel button.mat-mdc-raised-button {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-header,\n.theme-override-dark .mat-expansion-panel button.mat-mdc-raised-button {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-header,\n .theme-use-system .mat-expansion-panel button.mat-mdc-raised-button {\n color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-header,\n.theme-override-dark .mat-expansion-panel button.mat-mdc-raised-button {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-header,\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-content .mat-mdc-raised-button:not([class*=mat-elevation-z]) {\n border-top: 1px solid rgba(255, 255, 255, 0.1294117647);\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-content .mat-expansion-panel-header,\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-content .mat-mdc-raised-button:not([class*=mat-elevation-z]) {\n border-top: 1px solid rgba(255, 255, 255, 0.1294117647);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-header:hover:not([aria-disabled=true]):not(.mat-expanded) {\n background-color: #7588e8;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-header:hover:not([aria-disabled=true]):not(.mat-expanded) {\n background-color: #7588e8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-body {\n color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-body {\n color: white;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-body button:not(:disabled):hover {\n background: rgb(96, 197, 255);\n }\n}\n.theme-override-light .mat-expansion-panel .mat-expansion-panel-body button:not(:disabled):hover {\n background: rgb(96, 197, 255);\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-expansion-panel-body button:not(:disabled):hover {\n background: #7588e8;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-expansion-panel-body button:not(:disabled):hover {\n background: #7588e8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-select-arrow,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-select-value-text,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-input-element,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-form-field-icon-suffix .mat-mdc-button-base, .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-select-arrow,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-select-value-text,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-input-element,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-form-field-icon-suffix .mat-mdc-button-base {\n color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-select-arrow,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-select-value-text,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-input-element,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mat-mdc-form-field-icon-suffix .mat-mdc-button-base, .theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-floating-label,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-select-arrow,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-select-value-text,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-input-element,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mat-mdc-form-field-icon-suffix .mat-mdc-button-base {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field.mat-form-field-disabled .mat-mdc-floating-label,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field.mat-form-field-disabled .mat-mdc-select-arrow,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field .layerOpTable td.disabled .mat-mdc-floating-label,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field .layerOpTable td.disabled .mat-mdc-select-arrow, .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover.mat-form-field-disabled .mat-mdc-floating-label,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover.mat-form-field-disabled .mat-mdc-select-arrow,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover .layerOpTable td.disabled .mat-mdc-floating-label,\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover .layerOpTable td.disabled .mat-mdc-select-arrow {\n color: #bfbfbf;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field.mat-form-field-disabled .mat-mdc-floating-label,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field.mat-form-field-disabled .mat-mdc-select-arrow,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field .layerOpTable td.disabled .mat-mdc-floating-label,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field .layerOpTable td.disabled .mat-mdc-select-arrow, .theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover.mat-form-field-disabled .mat-mdc-floating-label,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover.mat-form-field-disabled .mat-mdc-select-arrow,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover .layerOpTable td.disabled .mat-mdc-floating-label,\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover .layerOpTable td.disabled .mat-mdc-select-arrow {\n color: #bfbfbf;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before, .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover.mat-form-field-disabled .mdc-line-ripple::before {\n border-bottom-color: #bfbfbf;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before, .theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover.mat-form-field-disabled .mdc-line-ripple::before {\n border-bottom-color: #bfbfbf;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mdc-line-ripple::before, .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mdc-line-ripple::before {\n border-bottom-color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field:not(.mat-form-field-disabled) .mdc-line-ripple::before, .theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover:not(.mat-form-field-disabled) .mdc-line-ripple::before {\n border-bottom-color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-form-field .mat-mdc-form-field-hint, .theme-use-system .mat-expansion-panel .mat-mdc-form-field:hover .mat-mdc-form-field-hint {\n color: white;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-form-field .mat-mdc-form-field-hint, .theme-override-dark .mat-expansion-panel .mat-mdc-form-field:hover .mat-mdc-form-field-hint {\n color: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-unelevated-button:not(:disabled) {\n background-color: #2e2e3f;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-unelevated-button:not(:disabled) {\n background-color: #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-unelevated-button:not(:disabled) {\n color: #fa6341;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-unelevated-button:not(:disabled) {\n color: #fa6341;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-unelevated-button:disabled {\n background-color: #1a1a23;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-unelevated-button:disabled {\n background-color: #1a1a23;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-unelevated-button:disabled {\n border: #2e2e3f 2px solid;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-unelevated-button:disabled {\n border: #2e2e3f 2px solid;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel .mat-mdc-unelevated-button:disabled {\n color: gray;\n }\n}\n.theme-override-dark .mat-expansion-panel .mat-mdc-unelevated-button:disabled {\n color: gray;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel a {\n color: #7588e8;\n }\n}\n.theme-override-dark .mat-expansion-panel a {\n color: #7588e8;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .mat-expansion-panel a:visited,\n .theme-use-system .mat-expansion-panel a:active {\n color: #e847e8;\n }\n}\n.theme-override-dark .mat-expansion-panel a:visited,\n.theme-override-dark .mat-expansion-panel a:active {\n color: #e847e8;\n}\n\n.headers-align .mat-expansion-panel-header-title,\n.headers-align .mat-expansion-panel-header-description {\n flex-basis: 0;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .headers-align .mat-expansion-panel-header-title,\n .theme-use-system .headers-align .mat-expansion-panel-header-description {\n color: #39434c;\n }\n}\n.theme-override-light .headers-align .mat-expansion-panel-header-title,\n.theme-override-light .headers-align .mat-expansion-panel-header-description {\n color: #39434c;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .headers-align .mat-expansion-panel-header-title,\n .theme-use-system .headers-align .mat-expansion-panel-header-description {\n color: #e6e6e6;\n }\n}\n.theme-override-dark .headers-align .mat-expansion-panel-header-title,\n.theme-override-dark .headers-align .mat-expansion-panel-header-description {\n color: #e6e6e6;\n}\n\n.headers-align .mat-expansion-panel-header-description {\n justify-content: space-between;\n align-items: center;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .headers-align .mat-expansion-panel-header-description {\n color: #d9d9d9;\n }\n}\n.theme-override-dark .headers-align .mat-expansion-panel-header-description {\n color: #d9d9d9;\n}\n\ninput[type=file] {\n padding: 5px;\n margin: 5px;\n width: 300px;\n background-color: #f1f1f1;\n border-radius: 0px;\n}\ninput[type=file]:hover {\n background-color: #ddd;\n}\n\n.help-links-container {\n display: flex;\n justify-content: center;\n margin-bottom: 1em;\n width: 100%;\n gap: 10px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .help-links-container button.mdc-button {\n background-color: #1a1a23;\n }\n}\n.theme-override-dark .help-links-container button.mdc-button {\n background-color: #1a1a23;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .help-links-container button.mdc-button {\n color: white;\n }\n}\n.theme-override-dark .help-links-container button.mdc-button {\n color: white;\n}\n\n.theme-select-container .mat-mdc-select {\n position: absolute;\n margin-left: -85px;\n top: 20px;\n}\n\n.header {\n text-align: right;\n right: 0;\n z-index: 10 !important;\n}\n.header div {\n display: inline-block;\n cursor: pointer;\n}\n.header.help-header {\n position: absolute;\n}\n.header .help-button {\n position: absolute;\n top: 10px;\n right: 15px;\n text-align: center;\n width: 4ex;\n height: 3ex;\n padding: 5px;\n z-index: 10;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-button svg {\n fill: white;\n }\n}\n.theme-override-dark .header .help-button svg {\n fill: white;\n}\n.header .help-button:hover svg {\n fill: #505050;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-button:hover svg {\n fill: white;\n }\n}\n.theme-override-dark .header .help-button:hover svg {\n fill: white;\n}\n.header .help-dropdown-open {\n border-radius: 50% 50% 0 0;\n border: solid #ddd 1px;\n border-bottom: solid 1px white;\n background: white;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open {\n background: #3f3f56;\n }\n}\n.theme-override-dark .header .help-dropdown-open {\n background: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open {\n border: solid #2e2e3f 1px;\n }\n}\n.theme-override-dark .header .help-dropdown-open {\n border: solid #2e2e3f 1px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open {\n box-shadow: 1px 2px #2e2e3f;\n }\n}\n.theme-override-dark .header .help-dropdown-open {\n box-shadow: 1px 2px #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open {\n z-index: 1;\n }\n}\n.theme-override-dark .header .help-dropdown-open {\n z-index: 1;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open {\n border-bottom: #3f3f56;\n }\n}\n.theme-override-dark .header .help-dropdown-open {\n border-bottom: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open {\n color: #7588e8;\n }\n}\n.theme-override-dark .header .help-dropdown-open {\n color: #7588e8;\n}\n.header .help-dropdown-open svg {\n fill: #505050;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .help-dropdown-open svg {\n fill: white;\n }\n}\n.theme-override-dark .header .help-dropdown-open svg {\n fill: white;\n}\n.header .dropdown-container {\n position: absolute;\n right: 16px;\n display: flex;\n justify-content: center;\n flex-flow: column;\n background: white;\n border-style: solid;\n border-color: #ddd;\n border-width: 1px 0 1px 1px;\n box-shadow: 2px 1px 1px #ddd;\n border-radius: 0 0 5px 5px;\n padding: 10px;\n top: 40px;\n z-index: 9;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .dropdown-container {\n background: #3f3f56;\n }\n}\n.theme-override-dark .header .dropdown-container {\n background: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .dropdown-container {\n border-color: #3f3f56;\n }\n}\n.theme-override-dark .header .dropdown-container {\n border-color: #3f3f56;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .dropdown-container {\n box-shadow: 2px 1px 1px #2e2e3f;\n }\n}\n.theme-override-dark .header .dropdown-container {\n box-shadow: 2px 1px 1px #2e2e3f;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .dropdown-container {\n color: #7588e8;\n }\n}\n.theme-override-dark .header .dropdown-container {\n color: #7588e8;\n}\n.header .dropdown-container button {\n border: none;\n background-color: transparent;\n text-align: right;\n padding-bottom: 5px;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .header .dropdown-container button {\n color: white;\n }\n}\n.theme-override-dark .header .dropdown-container button {\n color: white;\n}\n.header .dropdown-container button:hover {\n text-decoration: underline;\n cursor: pointer;\n}\n.header .banner {\n background-color: #c63f1f;\n margin-bottom: 1em;\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 15px;\n text-align: left;\n color: white;\n font-size: 14px;\n font-family: Roboto, \"Helvetica Neue\", sans-serif;\n cursor: initial;\n}\n.header .banner .bannerContent {\n padding-right: 15px;\n}\n.header .banner .bannerLinks {\n display: flex;\n align-items: center;\n border-left: 2px solid rgba(255, 255, 255, 0.6784313725);\n padding-left: 15px;\n cursor: initial;\n}\n.header .banner a {\n display: inline;\n color: white;\n text-decoration-color: white;\n}\n.header .banner a:hover,\n.header .banner .helpIcon:hover {\n color: #ddd;\n opacity: 0.8;\n}\n\n.button-group {\n display: flex;\n justify-content: center;\n padding: 0 24px;\n}\n.button-group .mat-mdc-raised-button {\n width: 100%;\n margin: 0 6px 12px;\n}\n\n.multi-column-container {\n padding: 0 24px;\n}\n\n.multi-column-container + .multi-column-container {\n margin-top: 20px;\n}\n\n.multi-column + .multi-column {\n margin-top: 16px;\n}\n\n.multi-column {\n display: flex;\n}\n.multi-column:not(.left-align) {\n justify-content: center;\n align-items: center;\n}\n.multi-column div.disabled {\n color: gray;\n}\n.multi-column .mat-mdc-form-field {\n width: 100%;\n}\n.multi-column .mat-mdc-raised-button {\n width: 100%;\n}\n.multi-column .md-column {\n width: 40%;\n}\n.multi-column .lg-column {\n width: 100%;\n}\n.multi-column .spacer {\n width: 10%;\n}\n.multi-column .sm-column {\n width: 20%;\n}\n.multi-column .or-column {\n display: flex;\n width: 20%;\n font-size: 8pt;\n justify-content: center;\n align-items: center;\n}\n\n.feature-row {\n margin-bottom: 4px;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .feature-row:hover {\n background-color: #f2f2f2;\n }\n}\n.theme-override-light .feature-row:hover {\n background-color: #f2f2f2;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .feature-row:hover {\n background-color: #3f3f56;\n }\n}\n.theme-override-dark .feature-row:hover {\n background-color: #3f3f56;\n}\n.feature-row .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:checked ~ .mdc-checkbox__background {\n background-color: #c63f1f !important;\n border-color: #c63f1f !important;\n}\n.theme-override-dark .feature-row .mat-mdc-checkbox .mdc-checkbox__native-control:enabled:not(:checked) ~ .mdc-checkbox__background {\n border-color: white !important;\n}\n@media (prefers-color-scheme: light) {\n .theme-use-system .feature-row .mat-mdc-checkbox.adaptive-checkbox .mdc-form-field {\n color: #1a1a23;\n }\n}\n.theme-override-light .feature-row .mat-mdc-checkbox.adaptive-checkbox .mdc-form-field {\n color: #1a1a23;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system .feature-row .mat-mdc-checkbox.adaptive-checkbox .mdc-form-field {\n color: white;\n }\n}\n.theme-override-dark .feature-row .mat-mdc-checkbox.adaptive-checkbox .mdc-form-field {\n color: white;\n}\n\n.feature-row + .feature-row {\n margin: 0 !important;\n}\n\n.align-center {\n display: flex;\n align-items: center;\n}\n\n.section {\n padding-bottom: 12px;\n}\n\n.capitalize {\n text-transform: capitalize;\n}\n\n.subfeature-section {\n padding-left: 16px;\n border-left: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n margin-bottom: 5px;\n}\n\n#layerlinkfield {\n min-width: 35%;\n color: rgba(0, 0, 0, 0.42);\n}\n#layerlinkfield #layerLink {\n cursor: pointer;\n}\n#layerlinkfield .mdc-line-ripple::before {\n background: none;\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.42) 0, rgba(0, 0, 0, 0.42) 33%, transparent 0);\n background-size: 4px 1px;\n background-repeat: repeat-x;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system #layerlinkfield .mdc-line-ripple::before {\n background: none;\n }\n}\n.theme-override-dark #layerlinkfield .mdc-line-ripple::before {\n background: none;\n}\n@media (prefers-color-scheme: dark) {\n .theme-use-system #layerlinkfield .mdc-line-ripple::before {\n border-bottom: white dotted 2px;\n }\n}\n.theme-override-dark #layerlinkfield .mdc-line-ripple::before {\n border-bottom: white dotted 2px;\n}\n\n.layer-links {\n list-style: none;\n padding-left: 0;\n margin: 0;\n}\n\n.safari-warning {\n text-align: center;\n}\n.safari-warning h3 {\n color: red;\n}\n\n.version-warning {\n text-align: center;\n}\n.version-warning a {\n cursor: pointer;\n color: blue;\n text-decoration: underline;\n}\n\n.cdk-overlay-backdrop-showing {\n z-index: unset;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9jb2xvcnMuc2NzcyIsIndlYnBhY2s6Ly8uL3NyYy9hcHAvdGFicy90YWJzLmNvbXBvbmVudC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBOzs7Ozs7OztFQUFBO0FDUEE7RUFDSSwrRUFDSTtBQU9SO0FBTEk7RUFKSjtJQUtRLGFBQUE7RUFRTjtBQUNGOztBQUxBO0VBQ0ksYUFBQTtBQVFKO0FBUEk7RUFDSSxZQUFBO0FBU1I7QUFQSTtFQUNJLHdCQUFBO0FBU1I7QUFQSTtFQUNJLHFCQUFBO0FBU1I7QUQ2SlE7RUFISjtJQUlRLFlDdEs2QjtFQVl2QztBQUNGO0FENEpJO0VBR0ksWUM1S2lDO0FBZ0J6QztBRHdLUTtFQUhKO0lBSVEsWUN6TG9DO0VBb0I5QztBQUNGO0FEdUtJO0VBR0ksWUMvTHdDO0FBd0JoRDtBRDZJUTtFQUhKO0lBSVEsa0JDcktvQztFQTJCOUM7QUFDRjtBRDRJSTtFQUdJLGtCQzNLd0M7QUErQmhEO0FEd0pRO0VBSEo7SUFJUSxxQkN4THVEO0VBbUNqRTtBQUNGO0FEdUpJO0VBR0kscUJDOUwyRDtBQXVDbkU7QUQ2SFE7RUFISjtJQUlRLHNCQ3BLd0M7RUEwQ2xEO0FBQ0Y7QUQ0SEk7RUFHSSxzQkMxSzRDO0FBOENwRDtBRHdJUTtFQUhKO0lBSVEseUJDdkwyRDtFQWtEckU7QUFDRjtBRHVJSTtFQUdJLHlCQzdMK0Q7QUFzRHZFO0FEZ0lRO0VBSEo7SUFJUSxZQ3RMd0M7RUF5RGxEO0FBQ0Y7QUQrSEk7RUFHSSxZQzVMNEM7QUE2RHBEO0FEcUdRO0VBSEo7SUFJUSxrQkNoS29DO0VBOEQ5QztBQUNGO0FEb0dJO0VBR0ksa0JDdEt3QztBQWtFaEQ7QURnSFE7RUFISjtJQUlRLHFCQ25MdUQ7RUFzRWpFO0FBQ0Y7QUQrR0k7RUFHSSxxQkN6TDJEO0FBMEVuRTs7QUF0RUE7RUFDSSxjQUFBO0VBQ0EsYUFBQTtBQXlFSjs7QUFyRUk7RUFHSSxlQUFBO0VBQ0EscUJBQUE7RUFDQSxhQUFBO0VB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ZW50IjpbIiRjb2x1bW4taG92ZXItY29sb3I6IHJnYigyMzUsIDIzNSwgMjM1KTtcbiRkaXNhYmxlZC1jb2xvcjogZGFya2VuKCRjb2x1bW4taG92ZXItY29sb3IsIDIwJSk7XG5cbi8vIEFUVCZDSyBCcmFuZCBjb2xvcnNcbiRhdHRhY2stY29sb3JzOiAoXG4gICAgYXR0YWNrLW9yYW5nZTogI2M2M2YxZixcbiAgICBhdHRhY2stYmx1ZTogIzA2MmY0Zixcbik7XG5cbi8qKlxuICogQ29sb3JzIHVzZWQgYWNyb3NzIHRoZSBOYXZpZ2F0b3IuIFNoYXJlZCBieSB0aGUgQVRUJkNLIFdlYnNpdGUuXG4gKiBGb3IgZWFjaCBjb2xvci1wYWlyOlxuICogICAtIFwiY29sb3JcIiByZWZlcnMgdG8gdGhlIGNvbG9yIGl0c2VsZlxuICogICAtIFwib24tY29sb3JcIiByZWZlcnMgdG8gdGhlIG1vc3QgcmVhZGFibGUgdGV4dC1jb2xvciB0byBhcHBlYXIgb24gdG9wIG9mIHRoZSBjb2xvci5cbiAqIE5vdGU6IHNvbWUgY29sb3JzIGRvbid0IGRlZmluZSBvbi1jb2xvcnMuIFRoaXMgaXMgYmVjYXVzZSwgZm9yIHRoZXNlIGNvbG9ycywgdGhleSBhcmVuJ3QgaW50ZW5kZWQgdG9cbiAqIGFwcGVhciB3aXRoIGlubmVyIGNvbnRlbnQuIEZvciBleGFtcGxlLCBcImxpbmtcIiBpcyBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgZm9yIGxpbmsgdGV4dCwgd2hpY2ggaW5oZXJlbnRseVxuICogY2Fubm90IGhhdmUgaW5uZXIgdGV4dC5cbiAqL1xuJGNvbG9yczogKFxuICAgIHByaW1hcnk6IChcbiAgICAgICAgY29sb3I6IG1hcC1nZXQoJGF0dGFjay1jb2xvcnMsIGF0dGFjay1vcmFuZ2UpLFxuICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgKSxcbiAgICAvL3VzZWQgZm9yIGhlYWRlciBhbmQgc29tZSBuYXYgZWxlbWVudHNcbiAgICBzZWNvbmRhcnk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiBtYXAtZ2V0KCRhdHRhY2stY29sb3JzLCBhdHRhY2stYmx1ZSksXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgLy91c2VkIGZvciBmb290ZXIgYW5kIHNvbWUgYnV0dG9uc1xuICAgIGJvZHk6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiB3aGl0ZSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiAjMzk0MzRjLFxuICAgICAgICApLFxuICAgIC8vcHJpbWFyeSBwYWdlIGJvZHlcbiAgICBsaWdodDpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlLFxuICAgICAgICAgICAgb24tY29sb3I6ICMzOTQzNGMsXG4gICAgICAgICksXG4gICAgZGFyazogKFxuICAgICAgICBjb2xvcjogIzA4MDgwYixcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4gICAgLy8gZGFyayB0aGVtZSBjb2xvcnMgdmFyaWF0aW9ucyAwLTMgKGZyb20gZGFya2VzdCB0byBsaWdodGVzdClcbiAgICBkYXJrLTE6XG4gICAgICAgIChcbiAgICAgICAgICAgIGNvbG9yOiAjMWExYTIzLFxuICAgICAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICAgICApLFxuICAgIGRhcmstMjogKFxuICAgICAgICBjb2xvcjogIzJlMmUzZixcbiAgICAgICAgb24tY29sb3I6ICNmYTYzNDEsXG4gICAgKSxcbiAgICAvLyBhY2NlbnQgZGFyayBjb2xvciBzY2hlbWUgKHVzZWQgZm9yIDpob3ZlciBzZWxlY3RvcnMpXG4gICAgZGFyay0zOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogIzNmM2Y1NixcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICBkYXJrLTQ6IChcbiAgICAgICAgY29sb3I6ICM0YzRjNjgsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGRhcmstZGlzYWJsZWQ6IChcbiAgICAgICAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDI1JSksXG4gICAgKSxcbiAgICBkYXJrLWxpbms6IChcbiAgICAgICAgY29sb3I6ICM3NTg4ZTgsXG4gICAgKSxcbiAgICBkYXJrLWxpbmstYWN0aXZlOiAoXG4gICAgICAgIGNvbG9yOiAjZTg0N2U4LFxuICAgICksXG4gICAgbGluazogKFxuICAgICAgICBjb2xvcjogIzRmN2NhYyxcbiAgICApLFxuICAgIC8vIGh5cGVybGlua3NcbiAgICBtYXRyaXgtaGVhZGVyOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogZ3JheSxcbiAgICAgICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICAgICAgKSxcbiAgICAvLyBjb2xvciBvZiBtYXRyaXggaGVhZGVyc1xuICAgIGNlbGwtaGlnaGxpZ2h0LWNvbG9yOlxuICAgICAgICAoXG4gICAgICAgICAgICBjb2xvcjogcmdiKDk2LCAxOTcsIDI1NSksXG4gICAgICAgICksXG4gICAgY2VsbC1oaWdobGlnaHQtZGFyay1jb2xvcjogKFxuICAgICAgICBjb2xvcjogIzQ2NGRmZixcbiAgICApLFxuICAgIGhvdmVyLWNlbGwtZm9udC1jb2xvcjogKFxuICAgICAgICBjb2xvcjogcmdiKDAsIDAsIDApLFxuICAgICksXG4gICAgcGFuZWwtZGFyazogKFxuICAgICAgICBjb2xvcjogI2RkZCxcbiAgICApLFxuICAgIHBhbmVsLWxpZ2h0OiAoXG4gICAgICAgIGNvbG9yOiBsaWdodGVuKCNkZGQsIDglKSxcbiAgICApLFxuICAgIHRhYi10ZXh0LWNvbG9yOiAoXG4gICAgICAgIGNvbG9yOiAjNTU1LFxuICAgICksXG4gICAgYnV0dG9uLWRhcms6IChcbiAgICAgICAgY29sb3I6ICNiOGI4YjgsXG4gICAgKSxcbiAgICAvL2Jvb3RzdHJhcCBjb2xvcnNcbiAgICBib290c3RyYXAtcHJpbWFyeTpcbiAgICAgICAgKFxuICAgICAgICAgICAgY29sb3I6ICM0MjhiY2EsXG4gICAgICAgICAgICBvbi1jb2xvcjogd2hpdGUsXG4gICAgICAgICksXG4gICAgYm9vdHN0cmFwLXN1Y2Nlc3M6IChcbiAgICAgICAgY29sb3I6ICM1Y2I4NWMsXG4gICAgICAgIG9uLWNvbG9yOiB3aGl0ZSxcbiAgICApLFxuICAgIGJvb3RzdHJhcC1kYW5nZXI6IChcbiAgICAgICAgY29sb3I6ICNkOTUzNGYsXG4gICAgICAgIG9uLWNvbG9yOiBibGFjayxcbiAgICApLFxuICAgIGJvb3RzdHJhcC13YXJuaW5nOiAoXG4gICAgICAgIGNvbG9yOiAjZjBhZDRlLFxuICAgICAgICBvbi1jb2xvcjogYmxhY2ssXG4gICAgKSxcbiAgICBib290c3RyYXAtaW5mbzogKFxuICAgICAgICBjb2xvcjogIzViYzBkZSxcbiAgICAgICAgb24tY29sb3I6IHdoaXRlLFxuICAgICksXG4pO1xuXG4vLyBhY2Nlc3NvciBoZWxwZXIgZm9yICRjb2xvcnMuIEdldHMgdGhlIGNvbG9yIG9mIHRoZSBuYW1lZCBwYWlyXG5AZnVuY3Rpb24gY29sb3IoJG5hbWUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobWFwLWdldCgkY29sb3JzLCAkbmFtZSksICdjb2xvcicpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGdldCBhbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiB0aGUgY29sb3IsIGZvciBwYXR0ZXJuaW5nXG4vLyBpZiB0aGUgYmFzZSBjb2xvciBpcyBkYXJrLCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgbGlnaHRlci5cbi8vIGlmIHRoZSBiYXNlIGNvbG9yIGlzIGxpZ2h0LCB0aGUgYWx0ZXJuYXRlIHdpbGwgYmUgc2xpZ2h0bHkgZGFya2VyLlxuLy8gY29udHJhc3QsIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCBtdWx0aXBsaWVzIHRvIGNyZWF0ZSBhIG1vcmUgZGlzdGFudCBvciBzaW1pbGFyIGNvbG9yLiA+MSBpcyBtb3JlIGRpc3RhbnQsIDwxIGlzIG1vcmUgc2ltaWxhci5cbkBmdW5jdGlvbiBjb2xvci1hbHRlcm5hdGUoJG5hbWUsICRjb250cmFzdDogMSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksICR3ZWlnaHQ6ICRjb250cmFzdCAqIDUlKTtcbn1cblxuLy8gYWNjZXNzb3IgaGVscGVyIGZvciAkY29sb3JzLiBHZXRzIHRoZSBvbi1jb2xvciBvZiB0aGUgbmFtZWQgcGFpclxuQGZ1bmN0aW9uIG9uLWNvbG9yKCRuYW1lKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KG1hcC1nZXQoJGNvbG9ycywgJG5hbWUpLCAnb24tY29sb3InKTtcbn1cblxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZW1waGFzaXplZCB2ZXJzaW9uIG9mIHRoZSBvbi1jb2xvci5cbi8vIFRoZSBlbXBoYXNpemVkIG9uLWNvbG9yIGlzIGxlc3MgbGlrZSB0aGUgYmFja2dyb3VuZCBjb2xvci5cbkBmdW5jdGlvbiBvbi1jb2xvci1lbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBvbi1jb2xvcigkbmFtZSkpO1xufVxuLy8gZ2l2ZW4gYSBjb2xvci1uYW1lLCBnZXQgYW4gZGVlbXBoYXNpemVkIHZlcnNpb24gb2YgdGhlIG9uLWNvbG9yLlxuLy8gVGhlIGRlZW1waGFzaXplZCBvbi1jb2xvciBpcyBtb3JlIGxpa2UgdGhlIGJhY2tncm91bmQgY29sb3IuXG5AZnVuY3Rpb24gb24tY29sb3ItZGVlbXBoYXNpcygkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGNvbG9yKCRuYW1lKSwgb24tY29sb3IoJG5hbWUpLCAyNSUpO1xufVxuXG4vLyBnaXZlbiBhIGNvbG9yIG5hbWUsIGNvbXB1dGUgYSBib3JkZXIgY29sb3IgZm9yIHRoZSBjb2xvclxuQGZ1bmN0aW9uIGJvcmRlci1jb2xvcigkbmFtZSkge1xuICAgIEByZXR1cm4gbWl4KGludmVydChjb2xvcigkbmFtZSkpLCBjb2xvcigkbmFtZSksIDEyLjUlKTtcbiAgICAvLyBAcmV0dXJuIHJnYmEoaW52ZXJ0KGNvbG9yKCRuYW1lKSksIDAuMTI1KTtcbn1cblxuLy8gSU1QT1JUQU5UIFVTQUdFIE5PVEU6XG4vLyB0byB1c2UgYWRhcHRpdmUgY29sb3JzLCB5b3UgTVVTVCBkaXNhYmxlIHZpZXcgZW5jYXBzdWxhdGlvbiBvbiB0aGUgY29tcG9uZW50XG4vLyB5b3UncmUgYXBwbHlpbmcgdGhlIHN0eWxlcyB3aXRoaW4uIE90aGVyd2lzZSBhbmNlc3RvciBjbGFzc2VzIGNhbm5vdCBiZSBhc3Nlc3NlZFxuLy8gYnkgdGhlIG1peGlucyB0byBkZXRlcm1pbmUgdGhlIGFwcCB0aGVtZSBjb25maWd1cmF0aW9uLlxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIGxpZ2h0IGFuZCBkYXJrIHRoZW1lc1xuLy8vIEBwYXJhbSB7cHJvcGVydHl9ICRwcm9wZXJ0eSB0aGUgcHJvcGVydHkgeW91IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZSBvZlxuLy8vIEBwYXJhbSB7dmFsdWV9ICRsaWdodC12YWx1ZSB0aGUgdmFsdWUgdG8gYXNzaWduIHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGRhcmstdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBkYXJrIHRoZW1lXG5AbWl4aW4gYWRhcHRpdmUtY29sb3IoJHByb3BlcnR5LCAkbGlnaHQtdmFsdWUsICRkYXJrLXZhbHVlKSB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItbGlnaHQtb25seSgkcHJvcGVydHksICRsaWdodC12YWx1ZSk7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCRwcm9wZXJ0eSwgJGRhcmstdmFsdWUpO1xufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGxpZ2h0IHRoZW1lXG4vLy8gQHBhcmFtIHtwcm9wZXJ0eX0gJHByb3BlcnR5IHRoZSBwcm9wZXJ0eSB5b3Ugd2FudCB0byBzZXQgdGhlIHZhbHVlIG9mXG4vLy8gQHBhcmFtIHt2YWx1ZX0gJGxpZ2h0LXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgbGlnaHQgdGhlbWVcbkBtaXhpbiBhZGFwdGl2ZS1jb2xvci1saWdodC1vbmx5KCRwcm9wZXJ0eSwgJGxpZ2h0LXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGxpZ2h0IHZhbHVlXG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICRsaWdodC12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtbGlnaHQgJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgbGlnaHQgdGhlbWUsXG4gICAgICAgIC8vIGFzc2lnbiB0aGUgbGlnaHQgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkbGlnaHQtdmFsdWU7XG4gICAgfVxufVxuXG4vLy8gYXNzaWduIHRoZSBwcm9wZXJ0eSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBvbmx5IHdoZW4gaW4gdGhlIGRhcmsgdGhlbWVcbi8vLyBAcGFyYW0ge3Byb3BlcnR5fSAkcHJvcGVydHkgdGhlIHByb3BlcnR5IHlvdSB3YW50IHRvIHNldCB0aGUgdmFsdWUgb2Zcbi8vLyBAcGFyYW0ge3ZhbHVlfSAkbGlnaHQtdmFsdWUgdGhlIHZhbHVlIHRvIGFzc2lnbiB3aGVuIGluIHRoZSBsaWdodCB0aGVtZVxuLy8vIEBwYXJhbSB7dmFsdWV9ICRkYXJrLXZhbHVlIHRoZSB2YWx1ZSB0byBhc3NpZ24gd2hlbiBpbiB0aGUgZGFyayB0aGVtZVxuQG1peGluIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgkcHJvcGVydHksICRkYXJrLXZhbHVlKSB7XG4gICAgLnRoZW1lLXVzZS1zeXN0ZW0gJiB7XG4gICAgICAgIC8vIHdoZW4gdGhlIGFuY2VzdG9yIGNsYXNzIHNob3dzIHRoYXQgdGhlIGFwcCBpcyBjb25maWd1cmVkIHRvIHVzZSB0aGUgc3lzdGVtIHRoZW1lLFxuICAgICAgICAvLyB1c2UgYSBtZWRpYSBxdWVyeSB0byBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykge1xuICAgICAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAudGhlbWUtb3ZlcnJpZGUtZGFyayAmIHtcbiAgICAgICAgLy8gd2hlbiB0aGUgYW5jZXN0b3IgY2xhc3Mgc2hvd3MgdGhhdCB0aGUgYXBwIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBkYXJrIHRoZW1lLFxuICAgICAgICAvLyBhc3NpZ24gdGhlIGRhcmsgdmFsdWVcbiAgICAgICAgI3skcHJvcGVydHl9OiAkZGFyay12YWx1ZTtcbiAgICB9XG59XG4iLCJAaW1wb3J0ICcuLi8uLi9jb2xvcnMuc2Nzcyc7XG5cbi5oZWFkZXItd3JhcHBlciB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgbWFyZ2luLXRvcCAzMDBtcyAwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSxcbiAgICAgICAgb3BhY2l0eSAwcyAzMDBtcztcbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cblxuLnRhYnMtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC5tZGMtdGFiLWluZGljYXRvcl9fY29udGVudC0tdW5kZXJsaW5lIHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgIH1cbiAgICAubWF0LW1kYy10YWItaGVhZGVyLXBhZ2luYXRpb24ge1xuICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC50YWJzIC50YWItdGl0bGUuYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50O1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCBibGFjaywgb24tY29sb3IoZGFyaykpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm9yZGVyLWNvbG9yJywgY29sb3IocGFuZWwtZGFyayksIGNvbG9yKGRhcmstMSkpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKHBhbmVsLWRhcmspLCBjb2xvcihkYXJrLTIpKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXInLCBub25lKTtcbiAgICB9XG4gICAgLnRhYnMgLnRhYi10aXRsZTpub3QoLmFjdGl2ZSkge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYm9yZGVyLWNvbG9yJywgY29sb3IocGFuZWwtZGFyayksIGNvbG9yKGRhcmstNCkpO1xuICAgIH1cbn1cblxuLnNjcm9sbCB7XG4gICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgd2lkdGg6IDk1LjV2dztcbn1cblxuLnRhYnMge1xuICAgIC50YWItdGl0bGUge1xuICAgICAgICAvLyBub24tZGF0YXRhYmxlIHRhYiBuYW1lc1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCBibGFjaywgd2hpdGUpO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG5cbiAgICAgICAgJjpob3ZlcixcbiAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICAvLyB3aGVuIHRoZSBtb3VzZSBpcyBvdmVyIGEgbm9uLXNlbGVjdGVkIHRhYlxuICAgICAgICAgICAgJjpub3QoLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCBibGFjaywgY29sb3IoZGFyay1saW5rKSk7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ29wYWNpdHknLCAwLjYsIDAuOCk7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihwYW5lbC1saWdodCksIGNvbG9yKGRhcmstMikpO1xuICAgICAgICAgICAgICAgICY6bm90KC5hZGQtdGFiKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogY29sb3IocGFuZWwtZGFyayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGFiIG51bWJlciBmb3IgbGF5ZXIgb3BlcmF0aW9uc1xuICAgICAgICAudGFiLWVudW1lcmF0b3Ige1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIGNvbG9yKGRhcmstMSkpO1xuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgdG9wOiA0cHg7XG4gICAgICAgICAgICByaWdodDogLTRweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDJweCA0cHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDApO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgJi5hY3RpdmUge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihwYW5lbC1kYXJrKSwgbGlnaHRlbihjb2xvcihkYXJrKSwgMSUpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsIGNvbG9yKHRhYi10ZXh0LWNvbG9yKSwgY29sb3IocGFuZWwtZGFyaykpO1xuICAgICAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmFkZC10YWIge1xuICAgICAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgICAubWF0LWljb24ge1xuICAgICAgICAgICAgY29sb3I6IGdyYXk7XG4gICAgICAgIH1cbiAgICAgICAgJjpob3ZlciB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZC1jb2xvcicsICNmMWYxZjEsIGNvbG9yKGRhcmstMikpO1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGRkICNkZGQgI2YxZjFmMSAjZGRkO1xuICAgICAgICAgICAgLm1hdC1pY29uIHtcbiAgICAgICAgICAgICAgICAvLyBvdmVycmlkZSBtYXQgaWNvbiBjb2xvciBvbiBob3ZlclxuICAgICAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsIGJsYWNrLCB3aGl0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi50YWItY2xvc2Uge1xuICAgIGNvbG9yOiBncmF5O1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cbi5pY29uLWJ1dHRvbi1zY2FsZS1kb3duIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xufVxuXG4ubmV3LXRhYiB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihsaWdodCksIGNvbG9yKGRhcmstMSkpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsIG9uLWNvbG9yKGxpZ2h0KSwgb24tY29sb3IoZGFyaykpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdib3JkZXItY29sb3InLCBjb2xvcihwYW5lbC1kYXJrKSwgY29sb3IoZGFyay0xKSk7XG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBoZWlnaHQ6IDkwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcGFkZGluZzogNSUgMjAlO1xuXG4gICAgLmRlc2NyaXB0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiBjb2x1bW4gd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG5cbiAgICAuZGVzY3JpcHRpb24gZGl2IHAge1xuICAgICAgICBtYXgtd2lkdGg6IDc1Y2g7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgfVxuXG4gICAgLmxvZ28ge1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGZvbnQtc2l6ZTogMWVtO1xuICAgICAgICBhIHtcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAgICAgICAgIGNvbG9yOiByZ2IoMTc2LCAyNiwgMjYpO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnRhYi1lbnVtZXJhdG9yLWhpZ2hsaWdodCB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIGNvbG9yKGRhcmstMSkpO1xuICAgIHBhZGRpbmc6IDJweCA0cHg7XG4gICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAwKTtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbi5oaWRlLXNlbGVjdCAubWF0LW1kYy1zZWxlY3QtdmFsdWUge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuLmhpZGUtc2VsZWN0IHtcbiAgICAubWF0LW1kYy1zZWxlY3QtdmFsdWUsIC5tYXQtbWRjLXNlbGVjdC1hcnJvdy13cmFwcGVyIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4ubWF0LWV4cGFuc2lvbi1wYW5lbCB7XG4gICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihsaWdodCksIGNvbG9yKGRhcmstMikpO1xuICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrLTMpKTtcblxuICAgIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXIge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyay0zKSk7XG4gICAgfVxuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLFxuICAgIGJ1dHRvbi5tYXQtbWRjLXJhaXNlZC1idXR0b24ge1xuICAgICAgICAvLyBuZXN0ZWQgaXRlbXMgaW5zaWRlIHBhcmVudCBleHBhbnNpb24gcGFuZWxcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IoZGFyay0yKSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrLTMpKTtcbiAgICB9XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50IHtcbiAgICAgICAgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLFxuICAgICAgICAubWF0LW1kYy1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPSdtYXQtZWxldmF0aW9uLXonXSkge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItdG9wJywgMXB4IHNvbGlkICNmZmZmZmYyMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPSd0cnVlJ10pOm5vdCgubWF0LWV4cGFuZGVkKSB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKGRhcmstbGluaykpO1xuICAgIH1cblxuICAgIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWJvZHkge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyay0zKSk7XG4gICAgfVxuXG4gICAgLm1hdC1leHBhbnNpb24tcGFuZWwtYm9keSBidXR0b246bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignYmFja2dyb3VuZCcsIGNvbG9yKGNlbGwtaGlnaGxpZ2h0LWNvbG9yKSwgY29sb3IoZGFyay1saW5rKSk7XG4gICAgfVxuXG4gICAgLm1hdC1tZGMtZm9ybS1maWVsZCwgLm1hdC1tZGMtZm9ybS1maWVsZDpob3ZlciB7XG4gICAgICAgICY6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkge1xuICAgICAgICAgICAgLm1hdC1tZGMtZmxvYXRpbmctbGFiZWwsXG4gICAgICAgICAgICAubWF0LW1kYy1zZWxlY3QtYXJyb3csXG4gICAgICAgICAgICAubWF0LW1kYy1zZWxlY3QtdmFsdWUtdGV4dCxcbiAgICAgICAgICAgIC5tYXQtbWRjLWlucHV0LWVsZW1lbnQsXG4gICAgICAgICAgICAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4IC5tYXQtbWRjLWJ1dHRvbi1iYXNlIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgb24tY29sb3IoZGFyaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCxcbiAgICAgICAgLmxheWVyT3BUYWJsZSB0ZC5kaXNhYmxlZCB7XG4gICAgICAgICAgICAubWF0LW1kYy1mbG9hdGluZy1sYWJlbCxcbiAgICAgICAgICAgIC5tYXQtbWRjLXNlbGVjdC1hcnJvdyB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIGRhcmtlbihvbi1jb2xvcihkYXJrLTEpLCAyNSUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAmLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlci1ib3R0b20tY29sb3InLCBkYXJrZW4ob24tY29sb3IoZGFyay0xKSwgMjUlKSk7XG4gICAgICAgIH1cbiAgICAgICAgJjpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWRjLWxpbmUtcmlwcGxlOjpiZWZvcmUge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItYm90dG9tLWNvbG9yJywgb24tY29sb3IoZGFyay0zKSk7XG4gICAgICAgIH1cblxuICAgICAgICAubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdjb2xvcicsIG9uLWNvbG9yKGRhcmspKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5tYXQtbWRjLXVuZWxldmF0ZWQtYnV0dG9uIHtcbiAgICAgICAgJjpub3QoOmRpc2FibGVkKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQtY29sb3InLCBjb2xvcihkYXJrLTIpKTtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrLTIpKTtcbiAgICAgICAgfVxuICAgICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZC1jb2xvcicsIGNvbG9yKGRhcmstMSkpO1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXInLCBjb2xvcihkYXJrLTIpIDJweCBzb2xpZCk7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgZGFya2VuKG9uLWNvbG9yKGRhcmstMSksIDUwJSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBjb2xvcihkYXJrLWxpbmspKTtcbiAgICB9XG5cbiAgICBhOnZpc2l0ZWQsXG4gICAgYTphY3RpdmUge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgY29sb3IoZGFyay1saW5rLWFjdGl2ZSkpO1xuICAgIH1cbn1cblxuLmhlYWRlcnMtYWxpZ24gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLFxuLmhlYWRlcnMtYWxpZ24gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvcignY29sb3InLCBvbi1jb2xvcihsaWdodCksIGRhcmtlbihvbi1jb2xvcihkYXJrKSwgMTAlKSk7XG4gICAgZmxleC1iYXNpczogMDtcbn1cblxuLmhlYWRlcnMtYWxpZ24gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uIHtcbiAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgZGFya2VuKG9uLWNvbG9yKGRhcmspLCAxNSUpKTtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuaW5wdXRbdHlwZT0nZmlsZSddIHtcbiAgICBwYWRkaW5nOiA1cHg7XG4gICAgbWFyZ2luOiA1cHg7XG4gICAgd2lkdGg6IDMwMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKHBhbmVsLWxpZ2h0KTtcbiAgICBib3JkZXItcmFkaXVzOiAwcHg7XG4gICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yKHBhbmVsLWRhcmspO1xuICAgIH1cbn1cblxuLy8gaGVscCBidXR0b24gb24gbmV3IHRhYiBwYWdlXG4uaGVscC1saW5rcy1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGdhcDogMTBweDtcblxuICAgIGJ1dHRvbi5tZGMtYnV0dG9uIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdiYWNrZ3JvdW5kLWNvbG9yJywgY29sb3IoZGFyay0xKSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrLTMpKTtcbiAgICB9XG59XG5cbi8vIHRoZW1lIGJ1dHRvbiBvbiBuZXcgdGFiIHBhZ2Vcbi50aGVtZS1zZWxlY3QtY29udGFpbmVyIHtcbiAgICAubWF0LW1kYy1zZWxlY3Qge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtODVweDtcbiAgICAgICAgdG9wOiAyMHB4O1xuICAgIH1cbn1cblxuLmhlYWRlciB7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgei1pbmRleDogMTAgIWltcG9ydGFudDtcblxuICAgIGRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cblxuICAgICYuaGVscC1oZWFkZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgLmhlbHAtYnV0dG9uIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDEwcHg7XG4gICAgICAgIHJpZ2h0OiAxNXB4O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiA0ZXg7XG4gICAgICAgIGhlaWdodDogM2V4O1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgICAgIHotaW5kZXg6IDEwO1xuXG4gICAgICAgIHN2ZyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2ZpbGwnLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgIH1cblxuICAgICAgICAmOmhvdmVyIHN2ZyB7XG4gICAgICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2ZpbGwnLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgICAgICBmaWxsOiAjNTA1MDUwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmhlbHAtZHJvcGRvd24tb3BlbiB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYmFja2dyb3VuZCcsIGNvbG9yKGRhcmstMykpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JvcmRlcicsIHNvbGlkIGNvbG9yKGRhcmstMikgMXB4KTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3gtc2hhZG93JywgMXB4IDJweCBjb2xvcihkYXJrLTIpKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCd6LWluZGV4JywgMSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnYm9yZGVyLWJvdHRvbScsIGNvbG9yKGRhcmstMykpO1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2NvbG9yJywgY29sb3IoZGFyay1saW5rKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJSA1MCUgMCAwO1xuICAgICAgICBib3JkZXI6IHNvbGlkIGNvbG9yKHBhbmVsLWRhcmspIDFweDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IHdoaXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcblxuICAgICAgICBzdmcge1xuICAgICAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdmaWxsJywgb24tY29sb3IoZGFyaykpO1xuICAgICAgICAgICAgZmlsbDogIzUwNTA1MDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5kcm9wZG93bi1jb250YWluZXIge1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQnLCBjb2xvcihkYXJrLTMpKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItY29sb3InLCBjb2xvcihkYXJrLTMpKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3gtc2hhZG93JywgMnB4IDFweCAxcHggY29sb3IoZGFyay0yKSk7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBjb2xvcihkYXJrLWxpbmspKTtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtZmxvdzogY29sdW1uO1xuICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGRkO1xuICAgICAgICBib3JkZXItd2lkdGg6IDFweCAwIDFweCAxcHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDJweCAxcHggMXB4ICNkZGQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMCA1cHggNXB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICB0b3A6IDQwcHg7XG4gICAgICAgIHotaW5kZXg6IDk7XG5cbiAgICAgICAgYnV0dG9uIHtcbiAgICAgICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yLWRhcmstb25seSgnY29sb3InLCBvbi1jb2xvcihkYXJrKSk7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDVweDtcbiAgICAgICAgICAgICY6aG92ZXIge1xuICAgICAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5iYW5uZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihwcmltYXJ5KTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMWVtO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgY29sb3I6IG9uLWNvbG9yKHByaW1hcnkpO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sICdIZWx2ZXRpY2EgTmV1ZScsIHNhbnMtc2VyaWY7XG4gICAgICAgIGN1cnNvcjogaW5pdGlhbDtcbiAgICAgICAgLmJhbm5lckNvbnRlbnQge1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMTVweDtcbiAgICAgICAgfVxuICAgICAgICAuYmFubmVyTGlua3Mge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkICNmZmZmZmZhZDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICAgICAgICAgIGN1cnNvcjogaW5pdGlhbDtcbiAgICAgICAgfVxuICAgICAgICBhIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgICAgIGNvbG9yOiBvbi1jb2xvcihwcmltYXJ5KTtcbiAgICAgICAgICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogb24tY29sb3IocHJpbWFyeSk7XG4gICAgICAgIH1cbiAgICAgICAgYTpob3ZlcixcbiAgICAgICAgLmhlbHBJY29uOmhvdmVyIHtcbiAgICAgICAgICAgIGNvbG9yOiBjb2xvcihwYW5lbC1kYXJrKTtcbiAgICAgICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmJ1dHRvbi1ncm91cCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAwIDI0cHg7XG4gICAgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXJnaW46IDAgNnB4IDEycHg7XG4gICAgfVxufVxuXG4ubXVsdGktY29sdW1uLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMCAyNHB4O1xufVxuLm11bHRpLWNvbHVtbi1jb250YWluZXIgKyAubXVsdGktY29sdW1uLWNvbnRhaW5lciB7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbn1cbi5tdWx0aS1jb2x1bW4gKyAubXVsdGktY29sdW1uIHtcbiAgICBtYXJnaW4tdG9wOiAxNnB4O1xufVxuLm11bHRpLWNvbHVtbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICAmOm5vdCgubGVmdC1hbGlnbikge1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICB9XG4gICAgZGl2LmRpc2FibGVkIHtcbiAgICAgICAgY29sb3I6IGdyYXk7XG4gICAgfVxuICAgIC5tYXQtbWRjLWZvcm0tZmllbGQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gICAgLm1hdC1tZGMtcmFpc2VkLWJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAubWQtY29sdW1uIHtcbiAgICAgICAgd2lkdGg6IDQwJTtcbiAgICB9XG4gICAgLmxnLWNvbHVtbiB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAuc3BhY2VyIHtcbiAgICAgICAgd2lkdGg6IDEwJTtcbiAgICB9XG4gICAgLnNtLWNvbHVtbiB7XG4gICAgICAgIHdpZHRoOiAyMCU7XG4gICAgfVxuICAgIC5vci1jb2x1bW4ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB3aWR0aDogMjAlO1xuICAgICAgICBmb250LXNpemU6IDhwdDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgfVxufVxuXG4uZmVhdHVyZS1yb3cge1xuICAgIG1hcmdpbi1ib3R0b206IDRweDtcbiAgICAmOmhvdmVyIHtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3IoJ2JhY2tncm91bmQtY29sb3InLCBkYXJrZW4od2hpdGUsIDUlKSwgY29sb3IoZGFyay0zKSk7XG4gICAgfVxuICAgIC5tYXQtbWRjLWNoZWNrYm94IC5tZGMtY2hlY2tib3hfX25hdGl2ZS1jb250cm9sOmVuYWJsZWQ6Y2hlY2tlZH4ubWRjLWNoZWNrYm94X19iYWNrZ3JvdW5kIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3IocHJpbWFyeSkgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvcihwcmltYXJ5KSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAubWF0LW1kYy1jaGVja2JveCAubWRjLWNoZWNrYm94X19uYXRpdmUtY29udHJvbDplbmFibGVkOm5vdCg6Y2hlY2tlZCl+Lm1kYy1jaGVja2JveF9fYmFja2dyb3VuZCB7XG4gICAgICAgIC50aGVtZS1vdmVycmlkZS1kYXJrICYge1xuICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvcihib2R5KSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIC5tYXQtbWRjLWNoZWNrYm94LmFkYXB0aXZlLWNoZWNrYm94IC5tZGMtZm9ybS1maWVsZCB7XG4gICAgICAgIEBpbmNsdWRlIGFkYXB0aXZlLWNvbG9yKCdjb2xvcicsIGNvbG9yKGRhcmstMSksIGNvbG9yKGJvZHkpKTtcbiAgICB9XG59XG4uZmVhdHVyZS1yb3cgKyAuZmVhdHVyZS1yb3cge1xuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xufVxuXG4uYWxpZ24tY2VudGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uc2VjdGlvbiB7XG4gICAgcGFkZGluZy1ib3R0b206IDEycHg7XG59XG4uY2FwaXRhbGl6ZSB7XG4gICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG59XG5cbi5zdWJmZWF0dXJlLXNlY3Rpb24ge1xuICAgIHBhZGRpbmctbGVmdDogMTZweDtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkZGQ7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4O1xufVxuXG4jbGF5ZXJsaW5rZmllbGQge1xuICAgIG1pbi13aWR0aDogMzUlO1xuICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNDIpO1xuICAgICNsYXllckxpbmsge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5tZGMtbGluZS1yaXBwbGU6OmJlZm9yZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogNHB4IDFweDtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICAgICAgICBAaW5jbHVkZSBhZGFwdGl2ZS1jb2xvci1kYXJrLW9ubHkoJ2JhY2tncm91bmQnLCBub25lKTtcbiAgICAgICAgQGluY2x1ZGUgYWRhcHRpdmUtY29sb3ItZGFyay1vbmx5KCdib3JkZXItYm90dG9tJywgd2hpdGUgZG90dGVkIDJweCk7XG4gICAgfVxufVxuXG4ubGF5ZXItbGlua3Mge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnNhZmFyaS13YXJuaW5nIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgaDMge1xuICAgICAgICBjb2xvcjogcmVkO1xuICAgIH1cbn1cblxuLnZlcnNpb24td2FybmluZyB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGEge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGNvbG9yOiBibHVlO1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICB9XG59XG5cbi5jZGstb3ZlcmxheS1iYWNrZHJvcC1zaG93aW5nIHtcbiAgICB6LWluZGV4OiB1bnNldDtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */"], + encapsulation: 2 + }); +} + +/***/ }), + +/***/ 71555: +/*!**********************************!*\ + !*** ./src/app/utils/cookies.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ deleteCookie: () => (/* binding */ deleteCookie), +/* harmony export */ getCookie: () => (/* binding */ getCookie), +/* harmony export */ hasCookie: () => (/* binding */ hasCookie), +/* harmony export */ setCookie: () => (/* binding */ setCookie) +/* harmony export */ }); +// utilities for working with browser cookies +/** + * Set a cookie + * @param {string} key key to set under + * @param {string} value value to set under key + * @param {number} expirationDays when cookie expires in days + */ +const setCookie = function (key, value, expirationDays) { + let d = new Date(); + d.setTime(d.getTime() + expirationDays * 24 * 60 * 60 * 1000); + let expires = 'expires=' + d.toUTCString(); + document.cookie = key + '=' + value + ';' + expires + ';path=/;SameSite=Strict'; +}; +/** + * Get the value of the cookie under the given key + * @param {string} key to retrieve from + * @return {string} cookie value + */ +const getCookie = function (key) { + let name = key + '='; + let decodedCookie = decodeURIComponent(document.cookie); + let ca = decodedCookie.split(';'); + for (let c of ca) { + while (c.startsWith(' ')) { + c = c.substring(1); + } + if (c.indexOf(name) == 0) { + return c.substring(name.length, c.length); + } + } + return ''; +}; +/** + * Does a cookie exist under the given key? + * @param {string} key to check + * @return {boolean} true if cookie is stored under key, false otherwise + */ +const hasCookie = function (key) { + return getCookie(key) !== ''; +}; +/** + * Delete the given cookie + * @param {string} key to delete + */ +const deleteCookie = function (key) { + document.cookie = key + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;SameSite=Strict'; +}; + + +/***/ }), + +/***/ 98552: +/*!**********************************!*\ + !*** ./src/app/utils/globals.ts ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ layerVersion: () => (/* binding */ layerVersion), +/* harmony export */ minimumSupportedVersion: () => (/* binding */ minimumSupportedVersion), +/* harmony export */ navVersion: () => (/* binding */ navVersion) +/* harmony export */ }); +/* harmony import */ var _package_json__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../package.json */ 8330); + + + +const navVersion = _package_json__WEBPACK_IMPORTED_MODULE_0__.version; +const layerVersion = '4.5'; +const minimumSupportedVersion = '4.0'; + +/***/ }), + +/***/ 30374: +/*!************************************!*\ + !*** ./src/app/utils/taxii2lib.ts ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Collection: () => (/* binding */ Collection), +/* harmony export */ TaxiiConnect: () => (/* binding */ TaxiiConnect) +/* harmony export */ }); +/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js */ 81890); + +/** + * @fileoverview + * A TAXII 2.0 Javascript client library. + * Converted to Typescript by Isabel Tuson 24 May 2018. + * Added support for TAXII 2.1 by Charissa Miller 9 April 2024. + * + * @see https://github.com/workingDog/taxii2lib/ + * @see https://oasis-open.github.io/cti-documentation/ + * + * @author R. Wathelet, September 2017 + * @modified by I. Tuson 24 May 2018 + * @modified by C. Miller 9 April 2024 + * + * @version 0.3 + */ +/** + * Provide asynchronous network communications to a TAXII 2.0 or 2.1 server. + */ +class TaxiiConnect { + /** + * provide network communication to a Taxii 2.0 or 2.1 server. + * @param {String} url - the base url of the Taxii2 server, for example https://example.com/ + * @param {String} user - the user name required for authentication. + * @param {String} password - the user password required for authentication. + * @param {Integer} timeout - the connection timeout in millisec + */ + constructor(url, user, password, timeout = 10000) { + this.baseURL = TaxiiConnect.withoutLastSlash(url); + this.user = user; + this.password = password; + this.hash = btoa(this.user + ':' + this.password); + this.timeout = timeout; + this.version = '2.1'; + this.mediaType = `application/taxii+json;version=${this.version}`; + // backwards compatibility for STIX 2.0 + if (url.includes('cti-taxii.mitre.org')) { + this.version = '2.0'; + this.mediaType = 'application/vnd.oasis.stix+json'; + } + // default headers configurations + this.getConfig = { + method: 'get', + headers: new Headers({ + Accept: this.mediaType, + version: this.version, + Authorization: 'Basic ' + this.hash + }) + }; + this.getStixConfig = { + method: 'get', + headers: new Headers({ + Accept: this.mediaType, + version: this.version, + Authorization: 'Basic ' + this.hash + }) + }; + } + // original code from: https://github.com/jkomyno/fetch-timeout + timeoutPromise(promise, timeout, error) { + return new Promise((resolve, reject) => { + setTimeout(() => reject(error), timeout); + promise.then(resolve, reject); + }); + } + // original code from: https://github.com/jkomyno/fetch-timeout + fetchTimeout(url, options, timeout, error) { + error = error || 'Timeout error'; + options = options || {}; + timeout = timeout || 10000; + return this.timeoutPromise(fetch(url, options), timeout, error); + } + /** + * send an async request (GET or POST) to the taxii2 server. + * + * @param {String} path - the full path to connect to. + * @param {Object} config - the request configuration, see getConfig and postConfig for examples + * @param {Object} filter - the filter object describing the filtering requested, this is added to the path as a query string + * @returns {Promise} the server response in json. + */ + asyncFetch(path, config, filter) { + var _this = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + //CHANGED + let fullPath = !filter ? path : path + '?' + TaxiiConnect.asQueryString(filter); + return yield _this.fetchTimeout(fullPath, config, _this.timeout, 'connection timeout').then(res => res.json()).catch(err => { + throw new Error('fetch error: ' + err); + }); + })(); + } + /** + * send a GET async request to the taxii2 server. + * + * The server response is assigned to the cache attribute of the options object, and + * the options flag attribute is set to true if a server request was performed. + * Otherwise if the options.flag is initially true, the cached response (options.cache) is returned and + * no server request is performed. + * To force a server request used invalidate(), for example: server.invalidate() + * + * @param {String} path - the path to connect to. + * @param {Object} options - an option object of the form: { "cache": {}, "flag": false } + * @param {Object} filter - the filter object describing the filtering requested, this is added to the path as a query string + * @param {Object} config - the request configuration + * @returns {Promise} the server response object + */ + fetchThis(path, options, filter, config) { + var _this2 = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + //CHANGED + let conf = config === undefined ? _this2.getConfig : config; + if (!options.flag) { + options.cache = yield _this2.asyncFetch(path, conf, filter); + options.flag = true; + } + return options.cache; + })(); + } + /** + * return the url without the last slash. + * @param {String} url - the URL string to process. + * @returns {String} the url without the last slash. + */ + static withoutLastSlash(url) { + return url.substr(-1) === '/' ? url.substr(0, url.length - 1) : url; + } + /** + * return the url with a terminating slash. + * @param {String} url - the URL string to process. + * @returns {String} the url with a terminating slash. + */ + static withLastSlash(url) { + return url.substr(-1) === '/' ? url : url + '/'; + } + /** + * convert a filter object into a query string. + * @param {Object} filter - the filter object to process. + * @returns {String} the query string corresponding to the filter object. + */ + static asQueryString(filter) { + return Object.keys(filter).map(k => { + let value = k === 'added_after' ? k : 'match[' + k + ']'; + return encodeURIComponent(value) + '=' + encodeURIComponent(filter[k]); + }).join('&'); + } +} +/** + * A Collection resource endpoint. + */ +class Collection { + /** + * Collection resource endpoint. + * @param {CollectionInfoObject} collectionInfo - the collection object of this endpoint. + * @param {String} api_root_path - the full path to the desired api root endpoint. + * @param {TaxiiConnection} conn - a TaxiiConnection class instance. + */ + constructor(collectionInfo, api_root_path, conn) { + this.collectionInfo = collectionInfo; + this.api_root_path = TaxiiConnect.withLastSlash(api_root_path + 'api/v21'); + // backwards compatibility for STIX 2.0 + if (api_root_path.includes('cti-taxii.mitre.org')) { + // cont. support for stix 2.0 + this.api_root_path = TaxiiConnect.withLastSlash(api_root_path + 'stix'); + } + this.conn = conn; + // construct the path + this.path = this.api_root_path + 'collections/' + collectionInfo.id + '/'; + // cache represents the cached results and flag determines if it needs a re-fetch + this.colOptions = { + cache: {}, + flag: false + }; + this.objsOptions = { + cache: {}, + flag: false + }; + this.objOptions = { + cache: {}, + flag: false + }; + this.manOptions = { + cache: {}, + flag: false + }; + } + /** + * check that the collection allows reading, if true then return the function passed in + * else log an error + * @param {Function} func - the function to return if the collection allows reading it + * @returns {Function} the function if this collection allow reading else undefined + */ + ifCanRead(func) { + if (this.collectionInfo.can_read) { + return func; + } else { + console.log('this collection does not allow reading: \n' + JSON.stringify(this.collectionInfo)); + } + } + /** + * check that the collection allows writing, if true then return the function passed in else log an error + * @param {Function} func - the function to return if the collection allows writing it + * @returns {Function} the function if this collection allow writing else undefined + */ + ifCanWrite(func) { + if (this.collectionInfo.can_write) { + return func; + } else { + console.log('this collection does not allow writing: \n' + JSON.stringify(this.collectionInfo)); + } + } + /** + * retrieve a STIX-2 bundle from this Collection. + * + * @param {Object} filter - the filter object describing the filtering requested, this is added to the path as a query string. + * For example: {"added_after": "2016-02-01T00:00:01.000Z"} + * {"type": ["incident","ttp","actor"]} + * @param {String} range - a pagination range string, for example "0-10" + * @returns {Promise} the Bundle with the STIX-2 objects of this collection + */ + getObjects(filter, range) { + var _this3 = this; + return (0,WEBPACK_IMPORTED_MODULE_0["default"])(function* () { + let theConfig = _this3.conn.getStixConfig; + if (range !== undefined) { + theConfig = { + method: 'get', + headers: new Headers({ + Accept: _this3.conn.mediaType, + version: _this3.conn.version, + Authorization: 'Basic ' + _this3.conn.hash, + //CHANGED + Range: 'items=' + range + }) + }; + } + return _this3.ifCanRead(_this3.conn.fetchThis(_this3.path + 'objects/', _this3.objsOptions, filter, theConfig)); + })(); + } +} + +/***/ }), + +/***/ 37709: +/*!********************************!*\ + !*** ./src/app/utils/utils.ts ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ isBoolean: () => (/* binding */ isBoolean), +/* harmony export */ isIE: () => (/* binding */ isIE), +/* harmony export */ isNumber: () => (/* binding */ isNumber), +/* harmony export */ isSafari: () => (/* binding */ isSafari) +/* harmony export */ }); +/* harmony import */ var detect_browser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! detect-browser */ 24296); +// utils.ts + +let comparatorFn = { + '<': function (a, b) { + return a < b; + }, + '<=': function (a, b) { + return a <= b; + }, + '>': function (a, b) { + return a > b; + }, + '>=': function (a, b) { + return a >= b; + } +}; +function isBoolean(value) { + return typeof value === 'boolean'; +} +function isNumber(value) { + return typeof value === 'number'; +} +function isIE() { + const browser = (0,detect_browser__WEBPACK_IMPORTED_MODULE_0__.detect)(); + return browser.name == 'ie'; +} +function isSafari(compRange) { + function compare(version, comp) { + let str = comp + ''; + let n = +(/\d+/.exec(str) || NaN); + let op = /^[<>]=?/.exec(str)[0]; + return comparatorFn[op] ? comparatorFn[op](version, n) : version == n || Number.isNaN(n); + } + const browser = (0,detect_browser__WEBPACK_IMPORTED_MODULE_0__.detect)(); + return browser.name == 'safari' && compare(browser.version.split('.')[0], compRange); +} + +/***/ }), + +/***/ 96412: +/*!**************************************************************!*\ + !*** ./src/app/version-upgrade/version-upgrade.component.ts ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ VersionUpgradeComponent: () => (/* binding */ VersionUpgradeComponent) +/* harmony export */ }); +/* harmony import */ var _angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/material/dialog */ 12587); +/* harmony import */ var _services_viewmodels_service__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../services/viewmodels.service */ 57833); +/* harmony import */ var _utils_globals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/globals */ 98552); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _services_data_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/data.service */ 28490); +/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @angular/common */ 60316); +/* harmony import */ var _angular_material_button__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @angular/material/button */ 84175); + + + + + + + + + +function VersionUpgradeComponent_em_6_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "em"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + } + if (rf & 2) { + const ctx_r0 = _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵnextContext"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate1"](" This version is not supported by Navigator v", ctx_r0.navVersion, " and must be upgraded for use. "); + } +} +class VersionUpgradeComponent { + constructor(dialogRef, dataService, viewModelsService, data) { + this.dialogRef = dialogRef; + this.dataService = dataService; + this.viewModelsService = viewModelsService; + this.data = data; + this.navVersion = _utils_globals__WEBPACK_IMPORTED_MODULE_1__.navVersion; + } + ngOnInit() { + this.currVersion = this.data.currVersion; + this.vmVersion = this.data.vmVersion; + this.layerName = this.data.layerName; + } + upgradeVersion(upgrade) { + this.dialogRef.close({ + upgrade: upgrade + }); + } + static #_ = this.ɵfac = function VersionUpgradeComponent_Factory(t) { + return new (t || VersionUpgradeComponent)(_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MatDialogRef), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_data_service__WEBPACK_IMPORTED_MODULE_2__.DataService), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_0__.ViewModelsService), _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdirectiveInject"](_angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MAT_DIALOG_DATA)); + }; + static #_2 = this.ɵcmp = /*@__PURE__*/_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵdefineComponent"]({ + type: VersionUpgradeComponent, + selectors: [["app-version-upgrade"]], + features: [_angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵProvidersFeature"]([_services_viewmodels_service__WEBPACK_IMPORTED_MODULE_0__.ViewModelsService])], + decls: 12, + vars: 4, + consts: [[1, "mat-dialog"], ["mat-dialog-title", ""], [4, "ngIf"], ["mat-stroked-button", "", 3, "click"], ["mat-button", "", 3, "click"]], + template: function VersionUpgradeComponent_Template(rf, ctx) { + if (rf & 1) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](0, "div", 0)(1, "h3", 1); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](2, "Upgrade layer version?"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](3, "mat-dialog-content")(4, "p"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtemplate"](6, VersionUpgradeComponent_em_6_Template, 2, 1, "em", 2); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()(); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](7, "mat-dialog-actions")(8, "button", 3); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function VersionUpgradeComponent_Template_button_click_8_listener() { + return ctx.upgradeVersion(true); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](9, "Yes"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementStart"](10, "button", 4); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵlistener"]("click", function VersionUpgradeComponent_Template_button_click_10_listener() { + return ctx.upgradeVersion(false); + }); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtext"](11, "No"); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵelementEnd"]()()(); + } + if (rf & 2) { + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](5); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵtextInterpolate3"](" The layer \"", ctx.layerName, "\" uses an outdated version of ATT&CK (v", ctx.vmVersion, "). Do you want to open the workflow to upgrade this layer to ATT&CK v", ctx.currVersion, "? "); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵadvance"](); + _angular_core__WEBPACK_IMPORTED_MODULE_3__["ɵɵproperty"]("ngIf", !ctx.dataService.isSupported(ctx.vmVersion)); + } + }, + dependencies: [_angular_common__WEBPACK_IMPORTED_MODULE_5__.NgIf, _angular_material_button__WEBPACK_IMPORTED_MODULE_6__.MatButton, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MatDialogTitle, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MatDialogActions, _angular_material_dialog__WEBPACK_IMPORTED_MODULE_4__.MatDialogContent], + styles: [".mat-dialog[_ngcontent-%COMP%] {\n text-align: center;\n}\n.mat-dialog[_ngcontent-%COMP%] .mat-mdc-dialog-actions[_ngcontent-%COMP%] {\n display: inline-block;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9hcHAvdmVyc2lvbi11cGdyYWRlL3ZlcnNpb24tdXBncmFkZS5jb21wb25lbnQuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNJLGtCQUFBO0FBQ0o7QUFBSTtFQUNJLHFCQUFBO0FBRVIiLCJzb3VyY2VzQ29udGVudCI6WyIubWF0LWRpYWxvZyB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIC5tYXQtbWRjLWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0= */"] + }); +} + +/***/ }), + +/***/ 45312: +/*!*****************************************!*\ + !*** ./src/environments/environment.ts ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ environment: () => (/* binding */ environment) +/* harmony export */ }); +// The file contents for the current environment will overwrite these during build. +// The build system defaults to the dev environment which uses `environment.ts`, but if you do +// `ng build --env=prod` then `environment.prod.ts` will be used instead. +// The list of which env maps to which file can be found in `.angular-cli.json`. +const environment = { + production: false +}; + +/***/ }), + +/***/ 84429: +/*!*********************!*\ + !*** ./src/main.ts ***! + \*********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/platform-browser */ 80436); +/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ 37580); +/* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app/app.module */ 50635); +/* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./environments/environment */ 45312); + + + + +if (_environments_environment__WEBPACK_IMPORTED_MODULE_1__.environment.production) { + (0,_angular_core__WEBPACK_IMPORTED_MODULE_2__.enableProdMode)(); +} +_angular_platform_browser__WEBPACK_IMPORTED_MODULE_3__.platformBrowser().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_0__.AppModule).catch(err => console.log(err)); + +/***/ }), + +/***/ 41234: +/*!************************!*\ + !*** crypto (ignored) ***! + \************************/ +/***/ (() => { + +/* (ignored) */ + +/***/ }), + +/***/ 8330: +/*!**********************!*\ + !*** ./package.json ***! + \**********************/ +/***/ ((module) => { + +"use strict"; +module.exports = /*#__PURE__*/JSON.parse('{"name":"attack-navigator","description":"Web app that provides basic navigation and annotation of ATT&CK matrices","repository":{"type":"git","url":"https://github.com/mitre-attack/attack-navigator.git"},"version":"5.1.0","license":"Apache-2.0","scripts":{"ng":"ng","start":"ng serve --host 0.0.0.0","build":"ng build","test":"ng test","lint":"ng lint","e2e":"ng e2e"},"dependencies":{"@angular/animations":"^17.3.10","@angular/cdk":"^17.3.10","@angular/common":"^17.3.10","@angular/compiler":"^17.3.10","@angular/core":"^17.3.10","@angular/forms":"^17.3.10","@angular/material":"^17.3.10","@angular/platform-browser":"^17.3.10","@angular/platform-browser-dynamic":"^17.3.10","@angular/router":"^17.3.10","@babel/runtime":"^7.22.6","@fontsource/roboto":"^5.0.7","@fontsource/roboto-mono":"^5.0.7","@types/file-saver":"^2.0.1","classlist.js":"^1.1.20150312","core-js":"^3.31.1","d3":"^7.8.5","d3-svg-legend":"^2.25.6","detect-browser":"^5.3.0","file-saver":"^2.0.5","load-json-file":"^7.0.1","mathjs":"^12.4.2","ngx-color-picker":"^16.0.0","ngx-drag-drop":"^17.0.0","ngx-markdown":"^17.2.1","rxjs":"^7.8.1","rxjs-compat":"^6.6.7","tinycolor2":"^1.6.0","tinygradient":"^1.1.5","tslib":"^2.5.0","zone.js":"~0.14.6"},"devDependencies":{"@angular-builders/custom-webpack":"^17.0.2","@angular-devkit/build-angular":"^17.3.8","@angular/cli":"^17.3.8","@angular/compiler-cli":"^17.3.10","@angular/language-service":"^17.3.10","@types/jasmine":"^5.1.4","@types/jasminewd2":"^2.0.8","@types/node":"^18.15.12","codelyzer":"^6.0.0","exceljs":"^4.3.0","jasmine-core":"^5.1.0","jasmine-spec-reporter":"~7.0.0","karma":"~6.4.1","karma-chrome-launcher":"^3.2.0","karma-cli":"~2.0.0","karma-coverage":"^2.2.0","karma-coverage-istanbul-reporter":"~3.0.2","karma-jasmine":"^5.1.0","karma-jasmine-html-reporter":"^2.1.0","marked":"^12.0.2","prettier":"^3.2.5","ts-node":"^10.9.1","tslint":"~6.1.0","typescript":"^5.4.5"},"optionalDependencies":{"fsevents":"^2.3.2"}}'); + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ __webpack_require__.O(0, ["vendor"], () => (__webpack_exec__(84429))); +/******/ var __webpack_exports__ = __webpack_require__.O(); +/******/ } +]); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/site/mitre/main.js.map b/site/mitre/main.js.map new file mode 100644 index 0000000..985216b --- /dev/null +++ b/site/mitre/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","mappings":"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","sources":["./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.module.ts","./src/app/changelog/changelog.component.ts","./src/app/changelog/changelog.component.html","./src/app/classes/context-menu-item.ts","./src/app/classes/domain.ts","./src/app/classes/filter.ts","./src/app/classes/gradient.ts","./src/app/classes/index.ts","./src/app/classes/layout-options.ts","./src/app/classes/link.ts","./src/app/classes/metadata.ts","./src/app/classes/stix/asset.ts","./src/app/classes/stix/campaign.ts","./src/app/classes/stix/data-component.ts","./src/app/classes/stix/group.ts","./src/app/classes/stix/index.ts","./src/app/classes/stix/matrix.ts","./src/app/classes/stix/mitigation.ts","./src/app/classes/stix/note.ts","./src/app/classes/stix/software.ts","./src/app/classes/stix/stix-object.ts","./src/app/classes/stix/tactic.ts","./src/app/classes/stix/technique.ts","./src/app/classes/tab.ts","./src/app/classes/technique-vm.ts","./src/app/classes/version-changelog.ts","./src/app/classes/version.ts","./src/app/classes/view-model.ts","./src/app/datatable/data-table.component.ts","./src/app/datatable/data-table.component.html","./src/app/help/help.component.ts","./src/app/help/help.component.html","./src/app/layer-information/layer-information.component.ts","./src/app/layer-information/layer-information.component.html","./src/app/layer-settings/layer-settings.component.ts","./src/app/layer-settings/layer-settings.component.html","./src/app/layer-upgrade/changelog-cell/changelog-cell.component.ts","./src/app/layer-upgrade/changelog-cell/changelog-cell.component.html","./src/app/layer-upgrade/layer-upgrade.component.ts","./src/app/layer-upgrade/layer-upgrade.component.html","./src/app/list-input/list-input.component.ts","./src/app/list-input/list-input.component.html","./src/app/matrix/cell.ts","./src/app/matrix/matrix-common.ts","./src/app/matrix/matrix-flat/matrix-flat.component.ts","./src/app/matrix/matrix-flat/matrix-flat.component.html","./src/app/matrix/matrix-mini/matrix-mini.component.ts","./src/app/matrix/matrix-mini/matrix-mini.component.html","./src/app/matrix/matrix-side/matrix-side.component.ts","./src/app/matrix/matrix-side/matrix-side.component.html","./src/app/matrix/tactic-cell/tactic-cell.component.ts","./src/app/matrix/tactic-cell/tactic-cell.component.html","./src/app/matrix/technique-cell/cell-popover.ts","./src/app/matrix/technique-cell/contextmenu/contextmenu.component.ts","./src/app/matrix/technique-cell/contextmenu/contextmenu.component.html","./src/app/matrix/technique-cell/technique-cell.component.ts","./src/app/matrix/technique-cell/technique-cell.component.html","./src/app/matrix/technique-cell/tooltip/tooltip.component.ts","./src/app/matrix/technique-cell/tooltip/tooltip.component.html","./src/app/search-and-multiselect/search-and-multiselect.component.ts","./src/app/search-and-multiselect/search-and-multiselect.component.html","./src/app/services/config.service.ts","./src/app/services/data.service.ts","./src/app/services/icons.service.ts","./src/app/services/viewmodels.service.ts","./src/app/sidebar/sidebar.component.ts","./src/app/sidebar/sidebar.component.html","./src/app/svg-export/renderable-objects/index.ts","./src/app/svg-export/renderable-objects/renderable-matrix.ts","./src/app/svg-export/renderable-objects/renderable-tactic.ts","./src/app/svg-export/renderable-objects/renderable-technique.ts","./src/app/svg-export/svg-export.component.ts","./src/app/svg-export/svg-export.component.html","./src/app/tabs/tabs.component.ts","./src/app/tabs/tabs.component.html","./src/app/utils/cookies.ts","./src/app/utils/globals.ts","./src/app/utils/taxii2lib.ts","./src/app/utils/utils.ts","./src/app/version-upgrade/version-upgrade.component.ts","./src/app/version-upgrade/version-upgrade.component.html","./src/environments/environment.ts","./src/main.ts","ignored|mitre/nav-app/node_modules/seedrandom|crypto"],"sourcesContent":["import { Component, ViewChild, HostListener, OnInit } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { TabsComponent } from './tabs/tabs.component';\nimport { ConfigService } from './services/config.service';\nimport * as globals from './utils/globals';\nimport { IconsService } from './services/icons.service';\nimport { deleteCookie, getCookie, hasCookie, setCookie } from './utils/cookies';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss'],\n})\nexport class AppComponent implements OnInit {\n @ViewChild(TabsComponent) tabsComponent;\n\n navVersion: string = globals.navVersion;\n public user_theme: string;\n title = 'ATT&CK® Navigator';\n\n @HostListener('window:beforeunload', ['$event'])\n promptNavAway($event) {\n if (!this.configService.getFeature('leave_site_dialog')) return;\n //this text only shows in the data, not visible to user as far as I can tell\n //however, if it's not included the window doesn't open.\n $event.returnValue = 'Are you sure you want to navigate away? Your data may be lost!';\n }\n\n constructor(\n public configService: ConfigService,\n private iconsService: IconsService,\n public titleService: Title\n ) {\n Array.prototype.includes = function (value): boolean {\n for (let i = 0; i < this.length; i++) {\n if (this[i] === value) return true;\n }\n return false;\n };\n if (hasCookie('is_user_theme_dark') && getCookie('is_user_theme_dark') === 'true') {\n this.user_theme = 'theme-override-dark';\n } else if (getCookie('is_user_theme_dark') === 'false') {\n this.user_theme = 'theme-override-light';\n } else {\n this.user_theme = 'theme-use-system';\n }\n }\n\n ngOnInit() {\n this.iconsService.registerIcons();\n this.titleService.setTitle(this.title);\n }\n\n themeChangeHandler(theme: string) {\n if (theme === 'system') {\n if (hasCookie('is_user_theme_dark')) deleteCookie('is_user_theme_dark');\n this.user_theme = 'theme-use-system';\n } else {\n this.user_theme = theme === 'dark' ? 'theme-override-dark' : 'theme-override-light';\n setCookie('is_user_theme_dark', theme === 'dark' ? 'true' : 'false', 180);\n }\n }\n}\n","

\n
\n
\n \n \n
\n
\n
\n","import { BrowserModule, Title } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { APP_INITIALIZER, NgModule } from '@angular/core';\n\n// material\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { DndModule } from 'ngx-drag-drop';\nimport { HttpClientModule } from '@angular/common/http';\n\nimport { AppComponent } from './app.component';\nimport { DataTableComponent } from './datatable/data-table.component';\nimport { TabsComponent } from './tabs/tabs.component';\nimport { HelpComponent } from './help/help.component';\nimport { SvgExportComponent } from './svg-export/svg-export.component';\nimport { TechniqueCellComponent } from './matrix/technique-cell/technique-cell.component';\nimport { MatrixSideComponent } from './matrix/matrix-side/matrix-side.component';\nimport { MatrixFlatComponent } from './matrix//matrix-flat/matrix-flat.component';\nimport { MatrixMiniComponent } from './matrix//matrix-mini/matrix-mini.component';\nimport { TooltipComponent } from './matrix/technique-cell/tooltip/tooltip.component';\nimport { SearchAndMultiselectComponent } from './search-and-multiselect/search-and-multiselect.component';\nimport { ContextmenuComponent } from './matrix/technique-cell/contextmenu/contextmenu.component';\nimport { TacticCellComponent } from './matrix/tactic-cell/tactic-cell.component';\nimport { VersionUpgradeComponent } from './version-upgrade/version-upgrade.component';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport { LayerUpgradeComponent } from './layer-upgrade/layer-upgrade.component';\nimport { ChangelogCellComponent } from './layer-upgrade/changelog-cell/changelog-cell.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { LayerSettingsComponent } from './layer-settings/layer-settings.component';\n\nimport { MarkdownModule } from 'ngx-markdown';\nimport { LayerInformationComponent } from './layer-information/layer-information.component';\nimport { ChangelogComponent } from './changelog/changelog.component';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { ListInputComponent } from './list-input/list-input.component';\nimport { ConfigService } from './services/config.service';\n\n@NgModule({\n declarations: [\n AppComponent,\n DataTableComponent,\n TabsComponent,\n HelpComponent,\n SvgExportComponent,\n TechniqueCellComponent,\n MatrixSideComponent,\n MatrixFlatComponent,\n MatrixMiniComponent,\n TooltipComponent,\n SearchAndMultiselectComponent,\n ContextmenuComponent,\n TacticCellComponent,\n VersionUpgradeComponent,\n SidebarComponent,\n LayerUpgradeComponent,\n ChangelogCellComponent,\n LayerInformationComponent,\n ChangelogComponent,\n ListInputComponent,\n LayerSettingsComponent,\n ],\n imports: [\n BrowserModule,\n HttpClientModule,\n BrowserAnimationsModule,\n MatSelectModule,\n FormsModule,\n ReactiveFormsModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatMenuModule,\n MatExpansionModule,\n MatDialogModule,\n MatSnackBarModule,\n ColorPickerModule,\n DndModule,\n MatSidenavModule,\n MatCardModule,\n MatDividerModule,\n MatStepperModule,\n MatPaginatorModule,\n MarkdownModule.forRoot(),\n MatTabsModule,\n ],\n exports: [MatSelectModule, MatInputModule, MatButtonModule, MatIconModule, MatTooltipModule, MatMenuModule, MatExpansionModule, MatTabsModule],\n providers: [\n Title,\n ConfigService,\n {\n provide: APP_INITIALIZER,\n useFactory: (configService: ConfigService) => {\n return () => configService.loadConfig();\n },\n deps: [ConfigService],\n multi: true,\n },\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { Component, Inject, ViewChild } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { MarkdownComponent, MarkdownService } from 'ngx-markdown';\n\n@Component({\n selector: 'app-changelog',\n templateUrl: './changelog.component.html',\n})\nexport class ChangelogComponent {\n @ViewChild('markdownElement', { static: false }) public markdownElement: any;\n\n constructor(\n private dialog: MatDialog,\n private markdownService: MarkdownService,\n @Inject(MAT_DIALOG_DATA) public data\n ) {\n // intentionally left blank\n }\n}\n","
\n

Changelog

\n \n \n \n \n \n \n
","import { Tactic } from './stix/tactic';\nimport { Technique } from './stix/technique';\n\nexport class ContextMenuItem {\n public readonly label: string;\n private readonly url: string;\n private readonly subtechnique_url: string;\n\n constructor(label, url, subtechnique_url = null) {\n this.label = label;\n this.url = url;\n this.subtechnique_url = subtechnique_url;\n }\n\n public getReplacedURL(technique: Technique, tactic: Tactic): string {\n if (this.subtechnique_url && technique.isSubtechnique) {\n return this.subtechnique_url\n .replace(/{{parent_technique_attackID}}/g, technique.parent.attackID)\n .replace(/{{parent_technique_stixID}}/g, technique.parent.id)\n .replace(/{{parent_technique_name}}/g, technique.parent.name.replace(/ /g, '-').toLowerCase())\n\n .replace(/{{subtechnique_attackID}}/g, technique.attackID)\n .replace(/{{subtechnique_attackID_suffix}}/g, technique.attackID.split('.')[1])\n .replace(/{{subtechnique_stixID}}/g, technique.id)\n .replace(/{{subtechnique_name}}/g, technique.name.replace(/ /g, '-').toLowerCase())\n\n .replace(/{{tactic_attackID}}/g, tactic.attackID)\n .replace(/{{tactic_stixID}}/g, tactic.id)\n .replace(/{{tactic_name}}/g, tactic.shortname);\n } else {\n return this.url\n .replace(/{{technique_attackID}}/g, technique.attackID)\n .replace(/{{technique_stixID}}/g, technique.id)\n .replace(/{{technique_name}}/g, technique.name.replace(/ /g, '-').toLowerCase())\n\n .replace(/{{tactic_attackID}}/g, tactic.attackID)\n .replace(/{{tactic_stixID}}/g, tactic.id)\n .replace(/{{tactic_name}}/g, tactic.shortname);\n }\n }\n}\n","import { ServiceAuth } from '../services/data.service';\nimport { Campaign } from './stix/campaign';\nimport { DataComponent } from './stix/data-component';\nimport { Group } from './stix/group';\nimport { Matrix } from './stix/matrix';\nimport { Mitigation } from './stix/mitigation';\nimport { Note } from './stix/note';\nimport { Software } from './stix/software';\nimport { Tactic } from './stix/tactic';\nimport { Technique } from './stix/technique';\nimport { Version } from './version';\nimport { Asset } from './stix/asset';\n\nexport class Domain {\n public readonly id: string; // domain ID\n public readonly domain_identifier: string; //domain ID without the version suffix\n public readonly name: string; // domain display name\n public readonly version: Version; // ATT&CK version\n\n public urls: string[] = [];\n public taxii_url: string = '';\n public taxii_collection: string = '';\n public authentication: ServiceAuth;\n public dataLoaded: boolean = false;\n public dataLoadedCallbacks: any[] = [];\n\n // this should only be enabled if the user loads custom data via URL\n public isCustom: boolean = false;\n\n public matrices: Matrix[] = [];\n public get tactics(): Tactic[] {\n let tactics = [];\n for (let matrix of this.matrices) {\n tactics = tactics.concat(matrix.tactics);\n }\n return tactics;\n }\n public techniques: Technique[] = [];\n public platforms: string[] = []; // platforms defined on techniques and software of the domain\n public subtechniques: Technique[] = [];\n public software: Software[] = [];\n public campaigns: Campaign[] = [];\n public assets: Asset[] = [];\n public dataComponents: DataComponent[] = [];\n public dataSources = new Map(); // Map data source ID to name and urls to be used by data components\n public groups: Group[] = [];\n public mitigations: Mitigation[] = [];\n public notes: Note[] = [];\n public relationships: any = {\n // subtechnique subtechnique-of technique\n // ID of technique to [] of subtechnique IDs\n subtechniques_of: new Map(),\n // data component related to technique\n // ID of data component to [] of technique IDs\n component_rel: new Map(),\n // group uses technique\n // ID of group to [] of technique IDs\n group_uses: new Map(),\n // software uses technique\n // ID of software to [] of technique IDs\n software_uses: new Map(),\n // campaign uses technique\n // ID of campaign to [] of technique IDs\n campaign_uses: new Map(),\n // campaigns attributed to group\n // ID of group to [] of campaign IDs\n campaigns_attributed_to: new Map(),\n // mitigation mitigates technique\n // ID of mitigation to [] of technique IDs\n mitigates: new Map(),\n // object is revoked-by object\n // ID of object to ID of revoking object\n revoked_by: new Map(),\n // technique targets asset\n // ID of asset to [] of technique IDs\n targeted_assets: new Map(),\n };\n\n constructor(domain_identifier: string, name: string, version: Version, urls?: string[]) {\n this.id = `${domain_identifier}-${version.number}`;\n this.domain_identifier = domain_identifier;\n this.name = name;\n this.version = version;\n if (urls) this.urls = urls;\n }\n\n /**\n * Get the version number for this domain\n */\n public getVersion(): string {\n return this.version.number;\n }\n\n public executeCallbacks(): void {\n for (let callback of this.dataLoadedCallbacks) {\n callback();\n }\n }\n}\n","import { Domain } from './domain';\n\nexport class Filter {\n // the data for a specific filter\n private readonly domain: string;\n public platforms: {\n options: string[];\n selection: string[];\n };\n\n constructor() {\n this.platforms = {\n selection: [],\n options: [],\n };\n }\n\n /**\n * Initialize the platform options according to the data in the domain\n * @param {Domain} domain the domain to parse for platform options\n */\n public initPlatformOptions(domain: Domain): void {\n this.platforms.options = JSON.parse(JSON.stringify(domain.platforms));\n if (!this.platforms.selection.length) {\n // prevent overwriting current selection\n this.platforms.selection = JSON.parse(JSON.stringify(domain.platforms));\n }\n }\n\n /**\n * toggle the given value in the given filter\n * @param {*} filterName the name of the filter\n * @param {*} value the value to toggle\n */\n public toggleInFilter(filterName: string, value: string): void {\n if (!this[filterName].options.includes(value)) {\n console.error('not a valid option to toggle', value, this[filterName]);\n return;\n }\n if (this[filterName].selection.includes(value)) {\n let index = this[filterName].selection.indexOf(value);\n this[filterName].selection.splice(index, 1);\n } else {\n this[filterName].selection.push(value);\n }\n }\n\n /**\n * determine if the given value is active in the filter\n * @param {*} filterName the name of the filter\n * @param {*} value the value to determine\n * @returns {boolean} true if value is currently enabled in the filter\n */\n public inFilter(filterName, value): boolean {\n return this[filterName].selection.includes(value);\n }\n\n /**\n * Return the string representation of this filter\n * @return stringified filter\n */\n public serialize(): string {\n return JSON.stringify({ platforms: this.platforms.selection });\n }\n\n /**\n * Replace the properties of this object with those of the given serialized filter\n * @param rep filter object\n */\n public deserialize(rep: any): void {\n let isStringArray = function (arr): boolean {\n for (let item of arr) {\n if (typeof item !== 'string') {\n console.error('TypeError:', item, '(', typeof item, ')', 'is not a string');\n return false;\n }\n }\n return true;\n };\n\n if (rep.platforms) {\n if (isStringArray(rep.platforms)) {\n let backwards_compatibility_mappings = {\n //backwards compatibility with older layers\n android: 'Android',\n ios: 'iOS',\n\n windows: 'Windows',\n linux: 'Linux',\n mac: 'macOS',\n\n AWS: 'IaaS',\n GCP: 'IaaS',\n Azure: 'IaaS',\n };\n const selection = new Set();\n rep.platforms.forEach(function (platform) {\n if (platform in backwards_compatibility_mappings) selection.add(backwards_compatibility_mappings[platform]);\n else selection.add(platform);\n });\n this.platforms.selection = Array.from(selection);\n } else console.error('TypeError: filter platforms field is not a string[]');\n }\n }\n}\n","import tinycolor from 'tinycolor2';\nimport * as tinygradient from 'tinygradient';\n\nexport class Gradient {\n // gradient class used by ViewModels\n // official colors used in gradients:\n public colors: Gcolor[] = [new Gcolor('red'), new Gcolor('green')]; //current colors\n public options: string[] = ['#ffffff', '#ff6666', '#ffaf66', '#ffe766', '#8ec843', '#66b1ff', '#ff66f4']; //possible colors\n public minValue: number = 0;\n public maxValue: number = 100;\n public gradient: any;\n public gradientRGB: any;\n\n // presets in dropdown menu\n public presets = {\n redgreen: [new Gcolor('#ff6666'), new Gcolor('#ffe766'), new Gcolor('#8ec843')],\n greenred: [new Gcolor('#8ec843'), new Gcolor('#ffe766'), new Gcolor('#ff6666')],\n bluered: [new Gcolor('#66b1ff'), new Gcolor('#ff66f4'), new Gcolor('#ff6666')],\n redblue: [new Gcolor('#ff6666'), new Gcolor('#ff66f4'), new Gcolor('#66b1ff')],\n transparentblue: [new Gcolor('#ffffff00'), new Gcolor('#66b1ff')],\n transparentred: [new Gcolor('#ffffff00'), new Gcolor('#ff6666')],\n };\n\n constructor() {\n this.setGradientPreset('redgreen');\n }\n\n /**\n * Create a string version of this gradient\n * @return string version of gradient\n */\n public serialize(): string {\n let colorList: string[] = [];\n this.colors.forEach(function (gColor: Gcolor) {\n let hexstring = tinycolor(gColor.color).toHex8String(); // include the alpha channel\n colorList.push(hexstring);\n });\n\n let rep = {\n colors: colorList,\n minValue: this.minValue,\n maxValue: this.maxValue,\n };\n return JSON.stringify(rep, null, '\\t');\n }\n\n /**\n * Restore this gradient from the given serialized representation\n * @param rep serialized gradient\n */\n public deserialize(rep: string): void {\n let obj = JSON.parse(rep);\n let isColorStringArray = function (colors): boolean {\n for (let color of colors) {\n if (typeof color !== 'string' || !tinycolor(color).isValid()) {\n console.error('TypeError:', color, '(', typeof color, ')', 'is not a color-string');\n return false;\n }\n }\n return true;\n };\n\n if (isColorStringArray(obj.colors)) {\n this.colors = [];\n let self = this;\n obj.colors.forEach(function (hex: string) {\n self.colors.push(new Gcolor(hex));\n });\n } else console.error('TypeError: gradient colors field is not a color-string[]');\n this.minValue = obj.minValue;\n this.maxValue = obj.maxValue;\n this.updateGradient();\n }\n\n /**\n * Convert a preset to tinycolor array\n * @param preset preset name from preset array\n * @return [description]\n */\n public presetToTinyColor(preset) {\n let colorarray = [];\n this.presets[preset].forEach(function (gcolor: Gcolor) {\n colorarray.push(gcolor.color);\n });\n return tinygradient(colorarray).css('linear', 'to right');\n }\n\n /**\n * set this gradient to use the preset\n * @param preset preset to use\n */\n public setGradientPreset(preset: string): void {\n this.colors = this.presets[preset].map((color: Gcolor) => new Gcolor(color.color)); //deep copy gradient preset\n this.updateGradient();\n }\n\n /**\n * recompute gradient\n */\n public updateGradient(): void {\n let colorarray = [];\n this.colors.forEach(function (colorobj) {\n colorarray.push(colorobj.color);\n });\n this.gradient = tinygradient(colorarray);\n this.gradientRGB = this.gradient.rgb(100);\n }\n\n /**\n * Add a color to the end of the gradient\n */\n public addColor(): void {\n this.colors.push(new Gcolor(this.colors[this.colors.length - 1].color));\n }\n\n /**\n * Remove color at the given index\n * @param index index to remove color at\n */\n public removeColor(index): void {\n this.colors.splice(index, 1);\n }\n\n // get the gradient hex color for a given value in the scale. Value is string format number\n public getHexColor(valueString: string) {\n if (!this.gradient) this.updateGradient();\n\n let value: number;\n if (valueString.length == 0) return;\n else value = Number(valueString);\n\n if (value >= this.maxValue) {\n return this.gradientRGB[this.gradientRGB.length - 1].toHexString();\n }\n if (value <= this.minValue) {\n return this.gradientRGB[0].toHexString();\n }\n let index = ((value - this.minValue) / (this.maxValue - this.minValue)) * 100;\n return this.gradientRGB[Math.round(index)].toHexString();\n }\n}\n\n// a color in the gradient\nexport class Gcolor {\n color: string;\n\n constructor(color: string) {\n this.color = color;\n }\n}\n","export { VersionChangelog } from './version-changelog';\nexport { Version } from './version';\nexport { Domain } from './domain';\nexport { ContextMenuItem } from './context-menu-item';\nexport { Gradient, Gcolor } from './gradient';\nexport { Filter } from './filter';\nexport { LayoutOptions } from './layout-options';\nexport { Link } from './link';\nexport { Metadata } from './metadata';\nexport { TechniqueVM } from './technique-vm';\nexport { ViewModel } from './view-model';\nexport { Tab } from './tab';\n","export class LayoutOptions {\n // current layout selection\n public readonly layoutOptions: string[] = ['side', 'flat', 'mini'];\n private _layout = this.layoutOptions[0];\n public set layout(newLayout) {\n if (!this.layoutOptions.includes(newLayout)) {\n console.warn('invalid matrix layout', newLayout);\n return;\n }\n let oldLayout = this._layout;\n this._layout = newLayout;\n if (this._layout == 'mini') {\n // mini-table cannot show ID or name\n this.showID = false;\n this.showName = false;\n }\n if (oldLayout == 'mini' && newLayout != 'mini') {\n this.showName = true; // restore default show value for name\n }\n }\n public get layout(): string {\n return this._layout;\n }\n\n // aggregate function options\n public readonly aggregateFunctionOptions: string[] = ['average', 'min', 'max', 'sum'];\n private _aggregateFunction = this.aggregateFunctionOptions[0];\n public set aggregateFunction(newAggregateFunction) {\n if (!this.aggregateFunctionOptions.includes(newAggregateFunction)) {\n console.warn('invalid aggregate fx option', newAggregateFunction);\n return;\n }\n this._aggregateFunction = newAggregateFunction;\n }\n public get aggregateFunction(): string {\n return this._aggregateFunction;\n }\n\n // show technique/tactic IDs in the view?\n public _showID: boolean = false;\n public set showID(newval: boolean) {\n this._showID = newval;\n if (newval && this._layout == 'mini') this._layout = 'side';\n }\n public get showID(): boolean {\n return this._showID;\n }\n\n // show technique/tactic names in the view?\n public _showName: boolean = true;\n public set showName(newval: boolean) {\n this._showName = newval;\n if (newval && this._layout == 'mini') this._layout = 'side';\n }\n public get showName(): boolean {\n return this._showName;\n }\n\n // show aggregate scores?\n public _showAggregateScores: boolean = false;\n public set showAggregateScores(newval: boolean) {\n this._showAggregateScores = newval;\n }\n public get showAggregateScores(): boolean {\n return this._showAggregateScores;\n }\n\n public _countUnscored: boolean = false;\n public set countUnscored(newval: boolean) {\n this._countUnscored = newval;\n }\n public get countUnscored(): boolean {\n return this.aggregateFunction === 'average' ? this._countUnscored : false;\n }\n\n // how to display subtechniques\n public expandedSubtechniquesOptions: string[] = ['none', 'annotated', 'all'];\n private _expandedSubtechniques = this.expandedSubtechniquesOptions[0];\n public set expandedSubtechniques(newExpandedSubtechniques) {\n if (!this.expandedSubtechniquesOptions.includes(newExpandedSubtechniques)) {\n console.warn('invalid expand subtechnique option', newExpandedSubtechniques);\n return;\n }\n this._expandedSubtechniques = newExpandedSubtechniques;\n }\n public get expandedSubtechniques(): string {\n return this._expandedSubtechniques;\n }\n\n public serialize(): object {\n return {\n layout: this.layout,\n aggregateFunction: this.aggregateFunction,\n showID: this.showID,\n showName: this.showName,\n showAggregateScores: this.showAggregateScores,\n countUnscored: this.countUnscored,\n expandedSubtechniques: this.expandedSubtechniques,\n };\n }\n\n public deserialize(rep: any) {\n if ('showID' in rep) {\n if (typeof rep.showID === 'boolean') this.showID = rep.showID;\n else console.error(\"TypeError: layout field 'showID' is not a boolean:\", rep.showID, '(', typeof rep.showID, ')');\n }\n if ('showName' in rep) {\n if (typeof rep.showName === 'boolean') this.showName = rep.showName;\n else console.error(\"TypeError: layout field 'showName' is not a boolean:\", rep.showName, '(', typeof rep.showName, ')');\n }\n //make sure this one goes last so that it can override name and ID if layout == 'mini'\n if ('layout' in rep) {\n if (typeof rep.layout === 'string') this.layout = rep.layout;\n else console.error(\"TypeError: layout field 'layout' is not a string:\", rep.layout, '(', typeof rep.layout, ')');\n }\n if ('aggregateFunction' in rep) {\n if (typeof rep.aggregateFunction === 'string') this.aggregateFunction = rep.aggregateFunction;\n else\n console.error(\n \"TypeError: layout field 'aggregateFunction' is not a boolean:\",\n rep.aggregateFunction,\n '(',\n typeof rep.aggregateFunction,\n ')'\n );\n }\n if ('showAggregateScores' in rep) {\n if (typeof rep.showAggregateScores === 'boolean') this.showAggregateScores = rep.showAggregateScores;\n else\n console.error(\n \"TypeError: layout field 'showAggregateScores' is not a boolean:\",\n rep.showAggregateScores,\n '(',\n typeof rep.showAggregateScores,\n ')'\n );\n }\n if ('countUnscored' in rep) {\n if (typeof rep.countUnscored === 'boolean') this.countUnscored = rep.countUnscored;\n else console.error(\"TypeError: layout field 'countUnscored' is not a boolean:\", rep.countUnscored, '(', typeof rep.countUnscored, ')');\n }\n if ('expandedSubtechniques' in rep) {\n if (typeof rep.expandedSubtechniques === 'string') this.expandedSubtechniques = rep.expandedSubtechniques;\n else\n console.error(\n \"TypeError: layout field 'expandedSubtechniques' is not a string:\",\n rep.expandedSubtechniques,\n '(',\n typeof rep.expandedSubtechniques,\n ')'\n );\n }\n }\n}\n","export class Link {\n public label: string;\n public url: string;\n public divider: boolean;\n\n constructor() {\n // intentionally left blank\n }\n\n public serialize(): object {\n return this.label && this.url ? { label: this.label, url: this.url } : { divider: this.divider };\n }\n\n public deserialize(rep: any): void {\n let obj = typeof rep == 'string' ? JSON.parse(rep) : rep;\n if ('url' in obj) {\n // label & url object\n if (typeof obj.url === 'string') this.url = obj.url;\n else console.error(\"TypeError: Link field 'url' is not a string\");\n\n if ('label' in obj) {\n if (typeof obj.label === 'string') this.label = obj.label;\n else console.error(\"TypeError: Link field 'label' is not a string\");\n } else console.error(\"Error: Link required field 'label' not present\");\n } else if ('divider' in obj) {\n // divider object\n if (typeof obj.divider === 'boolean') this.divider = obj.divider;\n else console.error(\"TypeError: Link field 'divider' is not a boolean\");\n } else console.error(\"Error: Link required field 'url' or 'divider' not present\");\n }\n\n public valid(): boolean {\n return (this.label && this.label.length > 0 && this.url && this.url.length > 0) || this.divider !== undefined;\n }\n}\n","export class Metadata {\n public name: string;\n public value: string;\n public divider: boolean;\n\n public serialize(): object {\n return this.name && this.value ? { name: this.name, value: this.value } : { divider: this.divider };\n }\n\n public deserialize(rep: any): void {\n let obj = typeof rep == 'string' ? JSON.parse(rep) : rep;\n\n if ('name' in obj) {\n // name & value object\n if (typeof obj.name === 'string') this.name = obj.name;\n else console.error(\"TypeError: Metadata field 'name' is not a string\");\n\n if ('value' in obj) {\n if (typeof obj.value === 'string') this.value = obj.value;\n else console.error(\"TypeError: Metadata field 'value' is not a string\");\n } else console.error(\"Error: Metadata required field 'value' not present\");\n } else if ('divider' in obj) {\n // divider object\n if (typeof obj.divider === 'boolean') this.divider = obj.divider;\n else console.error(\"TypeError: Metadata field 'divider' is not a boolean\");\n } else console.error(\"Error: Metadata required field 'name' or 'divider' not present\");\n }\n\n public valid(): boolean {\n return (this.name && this.name.length > 0 && this.value && this.value.length > 0) || this.divider !== undefined;\n }\n}\n","import { StixObject } from './stix-object';\n\nexport class Asset extends StixObject {\n /**\n * Get techniques targeting this asset\n * @returns {string[]} technique IDs targeting this asset\n */\n public targeted(domainVersionID): string[] {\n let rels = this.dataService.getDomain(domainVersionID).relationships.targeted_assets;\n if (rels.has(this.id)) {\n return rels.get(this.id);\n } else {\n return [];\n }\n }\n\n /**\n * Get all techniques related to the asset\n */\n public relatedTechniques(domainVersionID): string[] {\n return this.targeted(domainVersionID);\n }\n}\n","import { StixObject } from './stix-object';\n\nexport class Campaign extends StixObject {\n /**\n * Get techniques used by the campaign\n * @param domainVersionID the ID of the domain and version\n * @returns {string[]} technique IDs used by the campaign\n */\n public used(domainVersionID): string[] {\n let relationships = this.dataService.getDomain(domainVersionID).relationships.campaign_uses;\n if (relationships.has(this.id)) {\n return relationships.get(this.id);\n } else {\n return [];\n }\n }\n\n /**\n * Get all techniques related to the campaign\n * @param domainVersionID the ID of the domain and version\n * @returns {string[]} technique IDs used by the campaign\n */\n public relatedTechniques(domainVersionID): string[] {\n return this.used(domainVersionID);\n }\n}\n","import { DataService } from '../../services/data.service';\nimport { StixObject } from './stix-object';\nimport { Technique } from './technique';\n\nexport class DataComponent extends StixObject {\n public readonly url: string;\n public readonly dataSource: string;\n\n constructor(stixSDO: any, dataService: DataService) {\n super(stixSDO, dataService, false);\n this.dataSource = stixSDO.x_mitre_data_source_ref;\n }\n\n /**\n * Get techniques related to the data component\n * @param domainVersionID the ID of the domain and version\n * @returns {Technique[]} list of techniques used by the data component\n */\n public techniques(domainVersionID): Technique[] {\n const techniques = [];\n const domain = this.dataService.getDomain(domainVersionID);\n\n let relationships = domain.relationships.component_rel;\n if (relationships.has(this.id)) {\n relationships.get(this.id).forEach((targetID) => {\n const technique = domain.techniques.find((t) => t.id === targetID);\n if (technique) techniques.push(technique);\n });\n }\n return techniques;\n }\n /**\n * Get the data source related to this data component\n * @param domainVersionID the ID of the domain and version\n * @returns { name: string, url: string } the name and first url of the data source referenced by this data component\n */\n public source(domainVersionID) {\n const dataSources = this.dataService.getDomain(domainVersionID).dataSources;\n if (dataSources.has(this.dataSource)) {\n const source = dataSources.get(this.dataSource);\n let url = '';\n if (source.external_references && source.external_references[0] && source.external_references[0].url)\n url = source.external_references[0].url;\n return { name: source.name, url: url };\n } else return { name: '', url: '' };\n }\n}\n","import { StixObject } from './stix-object';\n\nexport class Group extends StixObject {\n /**\n * Get the techniques used by this group\n * @param domainVersionID the ID of the domain and version\n * @returns {string[]} technique IDs used by this group\n */\n public used(domainVersionID): string[] {\n let rels = this.dataService.getDomain(domainVersionID).relationships.group_uses;\n if (rels.has(this.id)) {\n return rels.get(this.id);\n } else {\n return [];\n }\n }\n\n /**\n * Get techniques used by campaigns attributed to this group\n * @param domainVersionID the ID of the domain and version\n * @returns {string[]} technique IDs used by campaigns attributed to this group\n */\n public campaignsUsed(domainVersionID): string[] {\n // get campaigns attributed to groups\n let attributedCampaigns = this.dataService.getDomain(domainVersionID).relationships.campaigns_attributed_to;\n // get techniques used by campaigns\n let rels = this.dataService.getDomain(domainVersionID).relationships.campaign_uses;\n if (attributedCampaigns.has(this.id)) {\n // get set of techniques used by attributed campaigns\n let techniques = [];\n attributedCampaigns.get(this.id).forEach((campaign_id) => {\n if (rels.has(campaign_id)) techniques = techniques.concat(rels.get(campaign_id));\n });\n return techniques;\n } else return []; // no attributed campaigns\n }\n\n /**\n * Get all techniques related to the group\n */\n public relatedTechniques(domainVersionID): string[] {\n let usedSet = new Set(this.used(domainVersionID).concat(this.campaignsUsed(domainVersionID)));\n return Array.from(usedSet);\n }\n}\n","export { StixObject } from './stix-object';\nexport { Campaign } from './campaign';\nexport { DataComponent } from './data-component';\nexport { Group } from './group';\nexport { Matrix } from './matrix';\nexport { Mitigation } from './mitigation';\nexport { Note } from './note';\nexport { Software } from './software';\nexport { Tactic } from './tactic';\nexport { Technique } from './technique';\nexport { Asset } from './asset';\n","import { DataService } from '../../services/data.service';\nimport { StixObject } from './stix-object';\nimport { Tactic } from './tactic';\nimport { Technique } from './technique';\n\nexport class Matrix extends StixObject {\n public readonly tactics: Tactic[]; //tactics found under this Matrix\n\n /**\n * Creates an instance of Matrix.\n * @param {*} stixSDO for the matrix\n * @param {Map} idToTacticSDO map of tactic ID to tactic SDO\n * @param {Technique[]} techniques all techniques defined in the domain\n */\n constructor(stixSDO: any, idToTacticSDO: Map, techniques: Technique[], dataService: DataService) {\n super(stixSDO, dataService);\n this.tactics = stixSDO.tactic_refs\n .map((tacticID) => idToTacticSDO.get(tacticID)) // Get tacticSDOs\n .filter((tacticSDO) => tacticSDO) // Filter out nulls (tacticSDO not found)\n .map((tacticSDO) => new Tactic(tacticSDO, techniques, this.dataService)); // Create Tactic objects\n }\n}\n","import { StixObject } from './stix-object';\n\nexport class Mitigation extends StixObject {\n /**\n * Get techniques mitigated by this mitigation\n * @returns {string[]} technique IDs mitigated by this mitigation\n */\n public mitigated(domainVersionID): string[] {\n let rels = this.dataService.getDomain(domainVersionID).relationships.mitigates;\n if (rels.has(this.id)) {\n return rels.get(this.id);\n } else {\n return [];\n }\n }\n\n /**\n * Get all techniques related to the mitigation\n */\n public relatedTechniques(domainVersionID): string[] {\n return this.mitigated(domainVersionID);\n }\n}\n","export class Note {\n public readonly abstract?: string; // brief summary of note content\n public readonly content: string; // content of the note\n public readonly object_refs: string[]; // list of STIX objects the note is applied to\n\n /**\n * Creates an instance of Note.\n * @param {any} stixSDO for the note\n */\n constructor(stixSDO: any) {\n if (stixSDO.abstract) this.abstract = stixSDO.abstract;\n this.content = stixSDO.content;\n this.object_refs = stixSDO.object_refs;\n }\n}\n","import { DataService } from '../../services/data.service';\nimport { StixObject } from './stix-object';\n\nexport class Software extends StixObject {\n public readonly platforms: string[] = []; //platforms for this software\n\n /**\n * Creates an instance of Software.\n * @param {any} stixSDO for the software\n * @param {DataService} DataService the software occurs within\n */\n constructor(stixSDO: any, dataService: DataService) {\n super(stixSDO, dataService);\n this.platforms = stixSDO.x_mitre_platforms ? stixSDO.x_mitre_platforms.map((platform) => platform.trim()) : undefined;\n }\n\n /**\n * Get techniques used by this software\n * @param domainVersionID the ID of the domain and version\n * @returns {string[]} technique IDs used by this software\n */\n public used(domainVersionID): string[] {\n let rels = this.dataService.getDomain(domainVersionID).relationships.software_uses;\n if (rels.has(this.id)) {\n return rels.get(this.id);\n } else {\n return [];\n }\n }\n /**\n * Get all techniques related to the software\n */\n public relatedTechniques(domainVersionID): string[] {\n return this.used(domainVersionID);\n }\n}\n","import { DataService } from '../../services/data.service';\n\nexport abstract class StixObject {\n public readonly id: string; // STIX ID\n public readonly attackID: string; // ATT&CK ID\n public readonly name: string; // name of object\n public readonly description: string; // description of object\n public readonly url: string; // URL of object on the ATT&CK website\n public readonly created: string; // date object was created\n public readonly modified: string; // date object was last modified\n public readonly revoked: boolean; // is the object revoked?\n public readonly deprecated: boolean; // is the object deprecated?\n public readonly version: string; // object version\n protected readonly dataService: DataService;\n\n constructor(stixSDO: any, dataService: DataService, supportsAttackID = true) {\n // Properties\n this.id = stixSDO.id;\n this.name = stixSDO.name;\n this.description = stixSDO.description;\n this.created = stixSDO.created;\n this.modified = stixSDO.modified;\n this.revoked = stixSDO.revoked ? stixSDO.revoked : false;\n this.deprecated = stixSDO.x_mitre_deprecated ? stixSDO.x_mitre_deprecated : false;\n this.version = stixSDO.x_mitre_version ? stixSDO.x_mitre_version : '';\n this.dataService = dataService;\n\n // ATT&CK ID\n if (supportsAttackID) {\n if (stixSDO.external_references && stixSDO.external_references[0] && stixSDO.external_references[0].external_id) {\n this.attackID = stixSDO.external_references[0].external_id;\n } else {\n alert('Error: external_references has invalid format in imported StixObject (ID: ' + stixSDO.id + ')');\n throw new Error(\n 'Error: external_references has invalid format in imported StixObject. Read more here: https://docs.oasis-open.org/cti/stix/v2.1/os/stix-v2.1-os.html#_72bcfr3t79jx'\n );\n }\n }\n\n // URL\n if ('external_references' in stixSDO && stixSDO.external_references.length > 0) {\n this.url = stixSDO.external_references[0].url;\n } else {\n this.url = '';\n }\n }\n\n /**\n * Compare this object's version number to another object's version number\n * @param that the object to compare to\n * @returns 0 if the objects have the same version,\n * > 0 if this object's version is greater,\n * < 0 if that object's version is greater\n */\n public compareVersion(that: StixObject): number {\n if (!this.version || !that.version) return 0; // one or both of the objects have no version\n\n let thisVersion = this.version.split('.');\n let thatVersion = that.version.split('.');\n\n for (let i = 0; i < Math.max(thisVersion.length, thatVersion.length); i++) {\n if (thisVersion.length == thatVersion.length && thisVersion.length < i) return 0;\n if (thisVersion.length < i) return -1;\n if (thatVersion.length < i) return 1;\n if (+thisVersion[i] == +thatVersion[i]) continue;\n return +thisVersion[i] - +thatVersion[i];\n }\n return 0;\n }\n\n /**\n * get the stix object that this object is revoked by\n * @param {string} domainVersionID the ID of the domain & version this object is found in\n * @returns {string} object ID this object is revoked by\n */\n public revoked_by(domainVersionID): string {\n let rels = this.dataService.getDomain(domainVersionID).relationships.revoked_by;\n if (rels.has(this.id)) return rels.get(this.id);\n else return undefined;\n }\n}\n","import { DataService } from '../../services/data.service';\nimport { StixObject } from './stix-object';\nimport { Technique } from './technique';\n\nexport class Tactic extends StixObject {\n public readonly techniques: Technique[]; // techniques found under this tactic\n public readonly shortname: string; // shortname property, AKA phase-name for techniques' kill-chain phases\n\n /**\n * Creates an instance of Tactic.\n * @param {any} stixSDO for the tactic\n * @param {Technique[]} techniques all techniques in the domain\n */\n constructor(stixSDO: any, techniques: Technique[], dataService: DataService) {\n super(stixSDO, dataService);\n this.shortname = stixSDO.x_mitre_shortname;\n this.techniques = techniques.filter((technique: Technique) => {\n if (!technique.revoked && !technique.deprecated) return technique.tactics.includes(this.shortname);\n });\n }\n}\n","import { DataService } from '../../services/data.service';\nimport { StixObject } from './stix-object';\nimport { Tactic } from './tactic';\n\nexport class Technique extends StixObject {\n public readonly platforms: string[]; // platforms for this technique.\n public readonly tactics: string[]; // tactics this technique is found under in phase-name format\n public readonly subtechniques: Technique[]; // subtechniques under this technique\n public readonly datasources: string; // data sources of the technique\n public parent: Technique = null; // parent technique. Only present if it's a sub-technique\n public get isSubtechnique() {\n return this.parent != null;\n }\n\n /**\n * Creates an instance of Technique.\n * @param {any} stixSDO for the technique\n * @param {Technique[]} subtechniques occuring under the technique\n */\n constructor(stixSDO: any, subtechniques: Technique[], dataService: DataService) {\n super(stixSDO, dataService);\n this.platforms = stixSDO.x_mitre_platforms ? stixSDO.x_mitre_platforms.map((platform) => platform.trim()) : undefined;\n this.datasources = stixSDO.x_mitre_data_sources ? stixSDO.x_mitre_data_sources.toString() : '';\n if (!this.revoked && !this.deprecated) {\n this.tactics = stixSDO.kill_chain_phases.map((phase) => phase.phase_name);\n }\n\n this.subtechniques = subtechniques.filter((sub) => !(sub.deprecated || sub.revoked));\n for (let subtechnique of this.subtechniques) {\n subtechnique.parent = this;\n }\n }\n\n /**\n * Get an ID identifying this technique under a specific tactic\n * @param {string|Tactic} tactic tactic name in phase-name/shortname format, or a Tactic object itself\n * @returns {string} ID for this technique under that tactic\n */\n public get_technique_tactic_id(tactic: string | Tactic): string {\n let tactic_shortname = tactic instanceof Tactic ? tactic.shortname : tactic;\n if (!this.tactics.includes(tactic_shortname)) {\n throw new Error(tactic_shortname + ' is not a tactic of ' + this.attackID);\n }\n return this.attackID + '^' + tactic_shortname;\n }\n\n /**\n * Get all possible IDs identifying this technique under tactics\n * Basically the same as calling get_technique_tactic_id with all valid tactic values\n */\n public get_all_technique_tactic_ids(): string[] {\n if (this.revoked || this.deprecated) return [];\n return this.tactics.map((shortname: string) => this.get_technique_tactic_id(shortname));\n }\n}\n","import { ViewModel } from './view-model';\n\nexport class Tab {\n public title: string;\n public viewModel: ViewModel;\n public domain: string = '';\n public isDataTable: boolean;\n public isCloseable: boolean = false;\n public showScoreVariables: boolean = false;\n\n constructor(title: string, isCloseable: boolean, showScoreVariables: boolean, domain: string, isDataTable: boolean) {\n this.title = title;\n this.isCloseable = isCloseable;\n this.showScoreVariables = showScoreVariables;\n this.domain = domain;\n this.isDataTable = isDataTable;\n }\n}\n","import { Link } from './link';\nimport { Metadata } from './metadata';\nimport tinycolor from 'tinycolor2';\n\nexport class TechniqueVM {\n // Defines the ViewModel for a specific Technique\n public techniqueID: string;\n public technique_tactic_union_id: string;\n public tactic: string;\n\n public score: string = '';\n public scoreColor: string; // hex color for score gradient\n public aggregateScore: any; // number rather than string as this is not based on an input from user\n public aggregateScoreColor: string; // hex color for aggregate score\n public color: string = ''; // manually assigned color-class name\n public enabled: boolean = true;\n public comment: string = '';\n\n public metadata: Metadata[] = [];\n public get metadataStr(): string {\n return JSON.stringify(this.metadata);\n }\n\n public links: Link[] = [];\n public get linkStr(): string {\n return JSON.stringify(this.links);\n }\n\n public showSubtechniques = false;\n public isVisible: boolean = true; // is technique currently displayed on matrix?\n\n constructor(technique_tactic_union_id: string) {\n this.technique_tactic_union_id = technique_tactic_union_id;\n let idSplit = technique_tactic_union_id.split('^');\n this.techniqueID = idSplit[0];\n this.tactic = idSplit[1];\n }\n\n /**\n * Has this TechniqueVM been modified from its initialized state?\n * @return true if it has been modified, false otherwise\n */\n public modified(): boolean {\n return this.annotated() || this.showSubtechniques;\n }\n\n /**\n * Check if this TechniqueVM has been annotated\n * @return true if it has annotations, false otherwise\n */\n public annotated(): boolean {\n return this.score != '' || this.color != '' || !this.enabled || this.comment != '' || this.links.length !== 0 || this.metadata.length !== 0;\n }\n\n /**\n * Reset this TechniqueVM's annotations to their default values\n */\n public resetAnnotations(): void {\n this.score = '';\n this.comment = '';\n this.color = '';\n this.enabled = true;\n this.aggregateScore = '';\n this.aggregateScoreColor = '';\n this.links = [];\n this.metadata = [];\n }\n\n /**\n * Set isVisible based on filters\n */\n public setIsVisible(visible: boolean): void {\n this.isVisible = visible;\n }\n\n /**\n * Convert to string representation\n * @return string representation\n */\n public serialize(): string {\n let rep: { [k: string]: any } = {};\n rep.techniqueID = this.techniqueID;\n rep.tactic = this.tactic;\n if (this.score !== '' && !isNaN(Number(this.score))) rep.score = Number(this.score);\n rep.color = this.color;\n rep.comment = this.comment;\n rep.enabled = this.enabled;\n rep.metadata = this.metadata.filter((m) => m.valid()).map((m) => m.serialize());\n rep.links = this.links.filter((l) => l.valid()).map((l) => l.serialize());\n rep.showSubtechniques = this.showSubtechniques;\n return JSON.stringify(rep, null, '\\t');\n }\n\n /**\n * Restore this technique from serialized technique\n * @param rep serialized technique string\n */\n public deserialize(rep: string, techniqueID: string, tactic: string): void {\n let obj = JSON.parse(rep);\n if (techniqueID !== undefined) this.techniqueID = techniqueID;\n else console.error('ERROR: TechniqueID field not present in technique');\n\n if (tactic !== undefined && tactic !== '') this.tactic = tactic;\n else {\n console.error('WARNING: tactic field not present in technique');\n alert(`WARNING: The tactic field on the technique ID ${techniqueID} is not defined. Annotations for this technique may not be restored.`);\n }\n if ('comment' in obj) {\n if (typeof obj.comment === 'string') this.comment = obj.comment;\n else console.error('TypeError: technique comment field is not a number:', obj.comment, '(', typeof obj.comment, ')');\n }\n if ('color' in obj && obj.color !== '') {\n if (typeof obj.color === 'string' && tinycolor(obj.color).isValid()) this.color = obj.color;\n else console.error('TypeError: technique color field is not a color-string:', obj.color, '(', typeof obj.color, ')');\n }\n if ('score' in obj) {\n if (typeof obj.score === 'number') this.score = String(obj.score);\n else console.error('TypeError: technique score field is not a number:', obj.score, '(', typeof obj.score, ')');\n }\n if ('enabled' in obj) {\n if (typeof obj.enabled === 'boolean') this.enabled = obj.enabled;\n else console.error('TypeError: technique enabled field is not a boolean:', obj.enabled, '(', typeof obj.enabled, ')');\n }\n if ('showSubtechniques' in obj) {\n if (typeof obj.showSubtechniques === 'boolean') this.showSubtechniques = obj.showSubtechniques;\n else\n console.error(\n 'TypeError: technique showSubtechnique field is not a boolean:',\n obj.showSubtechniques,\n '(',\n typeof obj.showSubtechniques,\n ')'\n );\n }\n if (this.tactic !== undefined && this.techniqueID !== undefined) {\n this.technique_tactic_union_id = this.techniqueID + '^' + this.tactic;\n } else {\n console.error('ERROR: Tactic and TechniqueID field needed.');\n }\n\n if ('metadata' in obj) {\n for (let metadataObj of obj.metadata) {\n let m = new Metadata();\n m.deserialize(metadataObj);\n if (m.valid()) this.metadata.push(m);\n }\n }\n if ('links' in obj) {\n for (let linkObj of obj.links) {\n let link = new Link();\n link.deserialize(linkObj);\n if (link.valid()) this.links.push(link);\n }\n }\n }\n}\n","export class VersionChangelog {\n public oldDomainVersionID: string;\n public newDomainVersionID: string;\n public additions: string[] = []; // new objects added to newest version\n public changes: string[] = []; // object changes between versions\n public minor_changes: string[] = []; // changes to objects without version increments\n public deprecations: string[] = []; // objects deprecated since older version\n public revocations: string[] = []; // objects revoked since older version\n public unchanged: string[] = []; // objects which have not changed between versions\n\n public reviewed = new Set();\n public copied = new Set();\n\n constructor(oldDomainVersionID: string, newDomainVersionID: string) {\n this.oldDomainVersionID = oldDomainVersionID;\n this.newDomainVersionID = newDomainVersionID;\n }\n\n /** Get the length of the version changelog */\n public length(): number {\n return (\n this.additions.length +\n this.changes.length +\n this.minor_changes.length +\n this.deprecations.length +\n this.revocations.length +\n this.unchanged.length\n );\n }\n}\n","export class Version {\n public readonly name: string;\n public readonly number: string;\n\n /**\n * Creates an instance of Version\n * @param name version name\n * @param number version number\n */\n constructor(name: string, number: string) {\n this.name = name;\n this.number = number;\n }\n}\n","import { DataService } from '../services/data.service';\nimport { Filter } from './filter';\nimport { Gradient } from './gradient';\nimport { LayoutOptions } from './layout-options';\nimport { Link } from './link';\nimport { Metadata } from './metadata';\nimport { Technique, Tactic, Matrix } from './stix';\nimport { TechniqueVM } from './technique-vm';\nimport { VersionChangelog } from './version-changelog';\nimport * as globals from '../utils/globals';\nimport tinycolor from 'tinycolor2';\n\nexport class ViewModel {\n public name: string; // layer name\n public domain: string = ''; // attack domain\n public version: string = ''; // attack version\n public domainVersionID: string; // layer domain & version\n public description: string = ''; // layer description\n public uid: string; // unique identifier for this ViewModel\n public bundleURL: string; // the STIX bundle URL that a custom layer was loaded from\n public loaded: boolean = false; // whether or not techniqueVMs are loaded\n\n public techniqueVMs: Map = new Map(); // configuration for each technique\n public selectedTechniques: Set = new Set(); // currently selected techniques (technique_tactic_id)\n public activeTvm: TechniqueVM; // first selected techniqueVM\n\n private linkMismatches: string[] = []; // subsequent selected technique_tactic_ids that do not have matching links\n public get linksMatch(): boolean {\n return !this.linkMismatches.length;\n }\n private metadataMismatches: string[] = []; // subsequent selected technique_tactic_ids that do not have matching metadata\n public get metadataMatch(): boolean {\n return !this.metadataMismatches.length;\n }\n\n public highlightedTactic: Tactic = null;\n public highlightedTechniques: Set = new Set();\n public highlightedTechnique: Technique = null; // the Technique that was actually moused over\n\n public filters: Filter;\n public layout: LayoutOptions = new LayoutOptions();\n public hideDisabled: boolean = false; // are disabled techniques hidden?\n public showTacticRowBackground: boolean = false;\n public tacticRowBackground: string = '#dddddd';\n public stickyToolbar = true;\n\n public gradient: Gradient = new Gradient(); // scoring gradient\n public legendItems: any[] = [];\n public backgroundPresets: string[] = [\n '#e60d0d',\n '#fc3b3b',\n '#fc6b6b',\n '#fca2a2',\n '#e6550d',\n '#fd8d3c',\n '#fdae6b',\n '#fdd0a2',\n '#e6d60d',\n '#fce93b',\n '#fcf26b',\n '#fcf3a2',\n '#31a354',\n '#74c476',\n '#a1d99b',\n '#c7e9c0',\n '#3182bd',\n '#6baed6',\n '#9ecae1',\n '#c6dbef',\n '#756bb1',\n '#9e9ac8',\n '#bcbddc',\n '#dadaeb',\n '#636363',\n '#969696',\n '#bdbdbd',\n '#d9d9d9',\n ];\n public legendColorPresets: string[] = [];\n public initializeScoresTo = ''; // value to initialize scores to\n\n public metadata: Metadata[] = [];\n public links: Link[] = [];\n public technique_show_subtechnique = false;\n\n /*\n * 0: ascending alphabetically\n * 1: descending alphabetically\n * 2: ascending numerically\n * 3: descending numerically\n */\n public sorting: number = 0;\n\n public selectTechniquesAcrossTactics: boolean = true;\n public selectSubtechniquesWithParent: boolean = false;\n public selectVisibleTechniques: boolean = false;\n\n public compareTo?: ViewModel;\n public versionChangelog?: VersionChangelog;\n\n private _sidebarOpened: boolean;\n public get sidebarOpened(): boolean {\n return this._sidebarOpened;\n }\n public set sidebarOpened(newVal: boolean) {\n this._sidebarOpened = newVal;\n }\n\n public readonly sidebarContentTypes = ['layerUpgrade', 'search', 'layerSettings'];\n private _sidebarContentType: string;\n public get sidebarContentType(): string {\n return this._sidebarContentType;\n }\n public set sidebarContentType(newVal: string) {\n if (this.sidebarContentTypes.includes(newVal)) this._sidebarContentType = newVal;\n else this._sidebarContentType = '';\n }\n\n constructor(\n name: string,\n uid: string,\n domainVersionID: string,\n public dataService: DataService\n ) {\n console.debug(\"initializing ViewModel '\" + name + \"'\");\n this.domainVersionID = domainVersionID;\n this.filters = new Filter();\n this.name = name;\n this.uid = uid;\n this.legendColorPresets = this.backgroundPresets;\n }\n\n public openSidebar(contentType: string) {\n this.sidebarContentType = contentType;\n this.sidebarOpened = true;\n }\n\n public loadVMData(): void {\n let domain = this.dataService.getDomain(this.domainVersionID);\n if (domain.isCustom) {\n this.bundleURL = domain.urls[0];\n }\n\n if (!this.domainVersionID || !domain.dataLoaded) {\n let self = this;\n this.dataService.onDataLoad(this.domainVersionID, function () {\n self.initTechniqueVMs();\n self.filters.initPlatformOptions(self.dataService.getDomain(self.domainVersionID));\n });\n } else {\n this.initTechniqueVMs();\n this.filters.initPlatformOptions(domain);\n }\n this.loaded = true;\n }\n\n private initTechniqueVMs(): void {\n for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) {\n // init techniques\n for (let id of technique.get_all_technique_tactic_ids()) {\n let techniqueVM = new TechniqueVM(id);\n techniqueVM.score = this.initializeScoresTo;\n this.setTechniqueVM(techniqueVM, false);\n }\n\n // init sub-techniques\n for (let subtechnique of technique.subtechniques) {\n for (let id of subtechnique.get_all_technique_tactic_ids()) {\n let techniqueVM = new TechniqueVM(id);\n techniqueVM.score = this.initializeScoresTo;\n this.setTechniqueVM(techniqueVM, false);\n }\n }\n }\n // display annotated subtechniques if \"annotated\" option is selected\n if (this.layout.expandedSubtechniques == 'annotated') {\n for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) {\n if (technique.subtechniques.length > 0) {\n for (let id of technique.get_all_technique_tactic_ids()) {\n let tvm = this.getTechniqueVM_id(id);\n for (let subtechnique of technique.subtechniques) {\n tvm.showSubtechniques =\n tvm.showSubtechniques ||\n subtechnique.get_all_technique_tactic_ids().some((sid) => {\n let svm = this.getTechniqueVM_id(sid);\n return svm.annotated();\n });\n }\n }\n }\n }\n }\n // display all subtechniques if \"all\" option is selected\n else if (this.layout.expandedSubtechniques == 'all') {\n for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) {\n if (technique.subtechniques.length > 0) {\n for (let id of technique.get_all_technique_tactic_ids()) {\n let tvm = this.getTechniqueVM_id(id);\n tvm.showSubtechniques = true;\n }\n }\n }\n } else {\n for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) {\n if (technique.subtechniques.length > 0) {\n for (let id of technique.get_all_technique_tactic_ids()) {\n let tvm = this.getTechniqueVM_id(id);\n if (tvm.showSubtechniques) {\n this.technique_show_subtechnique = true;\n break;\n }\n }\n }\n }\n if (this.layout.expandedSubtechniques == 'none' && !this.technique_show_subtechnique) {\n this.techniqueVMs.forEach(function (tvm) {\n tvm.showSubtechniques = false;\n });\n }\n }\n // display none of the subtechniques if \"none\" option is selected\n }\n\n public getTechniqueVM(technique: Technique, tactic: Tactic): TechniqueVM {\n if (!this.hasTechniqueVM(technique, tactic)) {\n throw Error('technique VM not found: ' + technique.attackID + ', ' + tactic.attackID);\n }\n return this.techniqueVMs.get(technique.get_technique_tactic_id(tactic));\n }\n\n public getTechniqueVM_id(technique_tactic_id: string): TechniqueVM {\n if (!this.hasTechniqueVM_id(technique_tactic_id)) {\n throw Error('technique VM not found: ' + technique_tactic_id);\n }\n return this.techniqueVMs.get(technique_tactic_id);\n }\n\n /**\n * setter\n * @param {techniqueVM} techniqueVM: the techniqueVM to set\n * @param {boolean} overwrite (default true) if true, overwrite existing techniqueVMs under that ID.\n */\n public setTechniqueVM(techniqueVM: TechniqueVM, overwrite = true): void {\n if (this.techniqueVMs.has(techniqueVM.technique_tactic_union_id)) {\n if (overwrite) this.techniqueVMs.delete(techniqueVM.technique_tactic_union_id);\n else return;\n }\n this.techniqueVMs.set(techniqueVM.technique_tactic_union_id, techniqueVM);\n }\n\n public hasTechniqueVM(technique: Technique, tactic: Tactic): boolean {\n return this.techniqueVMs.has(technique.get_technique_tactic_id(tactic));\n }\n\n public hasTechniqueVM_id(technique_tactic_id: string): boolean {\n return this.techniqueVMs.has(technique_tactic_id);\n }\n\n /**\n * Highlight the given technique under the given tactic\n * @param {Technique} technique to highlight\n * @param {Tactic} tactic wherein the technique occurs\n */\n public highlightTechnique(technique: Technique, tactic?: Tactic | null): void {\n if (this.selectSubtechniquesWithParent && technique.isSubtechnique) this.highlightedTechniques.add(technique.parent.id);\n this.highlightedTechnique = technique;\n this.highlightedTechniques.add(technique.id);\n this.highlightedTactic = tactic;\n }\n\n /**\n * Clear the technique highlight\n */\n public clearHighlight(): void {\n this.highlightedTactic = null;\n this.highlightedTechnique = null;\n this.highlightedTechniques = new Set();\n }\n\n /**\n * Select the given technique. Depending on selectTechniquesAcrossTactics, either selects in all tactics or in given tactic\n * @param {Technique} technique to select\n * @param {Tactic} tactic wherein the technique occurs\n */\n public selectTechnique(technique: Technique, tactic: Tactic): void {\n if (this.selectTechniquesAcrossTactics) this.selectTechniqueAcrossTactics(technique);\n else this.selectTechniqueInTactic(technique, tactic);\n }\n\n /**\n * Unselect the given technique. Depending on selectTechniquesAcrossTactics, either unselects in all tactics or in given tactic\n * @param {Technique} technique to select\n * @param {Tactic} tactic wherein the technique occurs\n */\n public unselectTechnique(technique: Technique, tactic: Tactic): void {\n if (this.selectTechniquesAcrossTactics) this.unselectTechniqueAcrossTactics(technique);\n else this.unselectTechniqueInTactic(technique, tactic);\n }\n\n /**\n * Select the given technique in the given tactic\n * @param {Technique} technique to select\n * @param {Tactic} tactic wherein the technique occurs\n * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique\n */\n public selectTechniqueInTactic(technique: Technique, tactic: Tactic, walkChildren = true): void {\n if (this.selectSubtechniquesWithParent && walkChildren) {\n // check parent / children / siblings\n if (technique.isSubtechnique) {\n // select from parent\n this.selectTechniqueInTactic(technique.parent, tactic, true);\n return;\n } else {\n // select sub-techniques\n for (let subtechnique of technique.subtechniques) {\n this.selectTechniqueInTactic(subtechnique, tactic, false);\n }\n }\n }\n\n let technique_tactic_id = technique.get_technique_tactic_id(tactic);\n if (!this.isCurrentlyEditing()) {\n // first selection\n this.activeTvm = this.getTechniqueVM_id(technique_tactic_id);\n }\n if ((this.selectVisibleTechniques && this.getTechniqueVM_id(technique_tactic_id).isVisible) || !this.selectVisibleTechniques) {\n this.selectedTechniques.add(technique_tactic_id);\n this.checkValues(true, technique_tactic_id);\n }\n }\n\n /**\n * Select all techniques under the given tactic\n * @param {Tactic} tactic wherein the techniques occur\n */\n public selectAllTechniquesInTactic(tactic: Tactic): void {\n for (let technique of tactic.techniques) {\n this.selectTechnique(technique, tactic);\n }\n }\n\n /**\n * select the given technique across all tactics in which it occurs\n * @param {Technique} technique to select\n * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique\n * @param highlightTechniques, if true, highlight techniques rather than add to selected techniques group\n */\n public selectTechniqueAcrossTactics(technique: Technique, walkChildren = true, highlightTechniques = false): void {\n if (this.selectSubtechniquesWithParent && walkChildren) {\n // walk to parent / children / siblings\n if (technique.isSubtechnique) {\n // select from parent\n this.selectTechniqueAcrossTactics(technique.parent, true, highlightTechniques);\n return;\n } else {\n // select sub-techniques\n for (let subtechnique of technique.subtechniques) {\n this.selectTechniqueAcrossTactics(subtechnique, false, highlightTechniques);\n }\n }\n }\n if (highlightTechniques) {\n // highlight technique\n this.highlightTechnique(technique);\n } else {\n for (let id of technique.get_all_technique_tactic_ids()) {\n if (!this.isCurrentlyEditing()) this.activeTvm = this.getTechniqueVM_id(id); // first selection\n if ((this.selectVisibleTechniques && this.getTechniqueVM_id(id).isVisible) || !this.selectVisibleTechniques) {\n this.selectedTechniques.add(id);\n this.checkValues(true, id);\n }\n }\n }\n }\n\n /**\n * Unselect the given technique in the given tactic\n * @param {Technique} technique to unselect\n * @param {Tactic} tactic wherein the technique occurs\n * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique\n */\n public unselectTechniqueInTactic(technique: Technique, tactic: Tactic, walkChildren = true): void {\n if (this.selectSubtechniquesWithParent && walkChildren) {\n // walk to parent / children / siblings\n if (technique.isSubtechnique) {\n // select from parent\n this.unselectTechniqueInTactic(technique.parent, tactic, true);\n return;\n } else {\n // select sub-techniques\n for (let subtechnique of technique.subtechniques) {\n this.unselectTechniqueInTactic(subtechnique, tactic, false);\n }\n }\n }\n\n let technique_tactic_id = technique.get_technique_tactic_id(tactic);\n this.selectedTechniques.delete(technique_tactic_id);\n this.checkValues(false, technique_tactic_id);\n }\n\n /**\n * Unselect all techniques in the given tactic\n * @param {Tactic} tactic wherein the techniques occur\n */\n public unselectAllTechniquesInTactic(tactic: Tactic): void {\n for (let technique of tactic.techniques) {\n this.unselectTechnique(technique, tactic);\n }\n }\n\n /**\n * Unselect the given technique across all tactics in which it occurs\n * @param {Technique} technique to unselect\n * @param {boolean} walkChildren (recursion helper) if true and selectSubtechniquesWithParent is true, walk selection up to parent technique\n */\n public unselectTechniqueAcrossTactics(technique: Technique, walkChildren = true): void {\n if (this.selectSubtechniquesWithParent && walkChildren) {\n // walk to parent / children / siblings\n if (technique.isSubtechnique) {\n // select from parent\n this.unselectTechniqueAcrossTactics(technique.parent, true);\n return;\n } else {\n // select sub-techniques\n for (let subtechnique of technique.subtechniques) {\n this.unselectTechniqueAcrossTactics(subtechnique, false);\n }\n }\n }\n\n for (let id of technique.get_all_technique_tactic_ids()) {\n this.selectedTechniques.delete(id);\n this.checkValues(false, id);\n }\n }\n\n /* Unselect all techniques */\n public clearSelectedTechniques(): void {\n this.selectedTechniques.clear();\n this.activeTvm = undefined;\n this.linkMismatches = [];\n this.metadataMismatches = [];\n }\n\n /* Select all techniques */\n public selectAllTechniques(): void {\n this.clearSelectedTechniques();\n this.invertSelection();\n }\n\n /* Set all selected techniques to deselected, and select all techniques not currently selected */\n public invertSelection(): void {\n let previouslySelected = new Set(this.selectedTechniques);\n this.clearSelectedTechniques();\n\n let self = this;\n this.techniqueVMs.forEach(function (tvm, key) {\n if (!previouslySelected.has(tvm.technique_tactic_union_id)) {\n if ((self.selectVisibleTechniques && tvm.isVisible) || !self.selectVisibleTechniques) {\n if (!self.isCurrentlyEditing()) {\n // first selection\n self.activeTvm = self.getTechniqueVM_id(tvm.technique_tactic_union_id);\n }\n self.selectedTechniques.add(tvm.technique_tactic_union_id);\n self.checkValues(true, tvm.technique_tactic_union_id);\n }\n }\n });\n }\n\n /**\n * Select all techniques with annotations if nothing is currently selected, or\n * select a subset of the current selection that has annotations\n */\n public selectAnnotated(): void {\n let self = this;\n if (this.isCurrentlyEditing()) {\n // deselect techniques without annotations\n let selected = new Set(this.selectedTechniques);\n this.techniqueVMs.forEach(function (tvm, key) {\n if (selected.has(tvm.technique_tactic_union_id) && !tvm.annotated()) {\n self.selectedTechniques.delete(tvm.technique_tactic_union_id);\n self.checkValues(false, tvm.technique_tactic_union_id);\n }\n });\n } else {\n // select all techniques with annotations\n this.techniqueVMs.forEach(function (tvm, key) {\n if (tvm.annotated()) {\n if ((self.selectVisibleTechniques && tvm.isVisible) || !self.selectVisibleTechniques) {\n if (!self.isCurrentlyEditing()) self.activeTvm = self.getTechniqueVM_id(tvm.technique_tactic_union_id); // first selection\n self.selectedTechniques.add(tvm.technique_tactic_union_id);\n self.checkValues(true, tvm.technique_tactic_union_id);\n }\n }\n });\n }\n }\n\n /**\n * Select all techniques without annotations if nothing is currently selected, or\n * select a subset of the current selection that do not have annotations\n */\n public selectUnannotated(): void {\n let self = this;\n if (this.isCurrentlyEditing()) {\n // deselect techniques with annotations\n let selected = new Set(this.selectedTechniques);\n this.techniqueVMs.forEach(function (tvm, key) {\n if (selected.has(tvm.technique_tactic_union_id) && tvm.annotated()) {\n self.selectedTechniques.delete(tvm.technique_tactic_union_id);\n self.checkValues(false, tvm.technique_tactic_union_id);\n }\n });\n } else {\n // select all techniques without annotations\n this.selectAnnotated();\n this.invertSelection();\n }\n }\n\n /**\n * Copies all annotations from unchanged techniques and techniques\n * which have had minor changes\n */\n public initCopyAnnotations(): void {\n let self = this;\n\n function copy(attackID: string) {\n let fromTechnique = self.dataService.getTechnique(attackID, self.compareTo.domainVersionID);\n let domain = self.dataService.getDomain(self.domainVersionID);\n let tactics = fromTechnique.tactics.map((shortname) => domain.tactics.find((t) => t.shortname == shortname));\n tactics.forEach((tactic) => {\n let fromVM = self.compareTo.getTechniqueVM(fromTechnique, tactic);\n if (fromVM.annotated()) {\n let toTechnique = self.dataService.getTechnique(attackID, self.domainVersionID);\n self.copyAnnotations(fromTechnique, toTechnique, tactic);\n }\n });\n }\n\n if (this.versionChangelog) {\n this.versionChangelog.unchanged.forEach((attackID) => copy(attackID));\n this.versionChangelog.minor_changes.forEach((attackID) => copy(attackID));\n }\n }\n\n /**\n * Copy annotations from one technique to another under the given tactic.\n * The previous technique will be disabled\n * @param fromTechnique the technique to copy annotations from\n * @param toTechnique the technique to copy annotations to\n * @param tactic the tactic the techniques are found under\n */\n public copyAnnotations(fromTechnique: Technique, toTechnique: Technique, tactic: Tactic): void {\n let fromVM = this.compareTo.getTechniqueVM(fromTechnique, tactic);\n let toVM = this.getTechniqueVM(toTechnique, tactic);\n\n this.versionChangelog.reviewed.delete(fromTechnique.attackID);\n\n toVM.deserialize(fromVM.serialize(), fromTechnique.attackID, tactic.shortname);\n this.updateScoreColor(toVM);\n fromVM.enabled = false;\n\n this.versionChangelog.copied.add(fromVM.technique_tactic_union_id);\n if (fromTechnique.get_all_technique_tactic_ids().every((id) => this.versionChangelog.copied.has(id))) {\n this.versionChangelog.reviewed.add(fromTechnique.attackID);\n }\n }\n\n /**\n * Reset the techniqueVM that the annotations were previously copied to\n * and re-enable the technique the annotations were copied from\n * @param fromTechnique the technique that annotations were copied from\n * @param toTechnique the technique that annotations were copied to\n * @param tactic the tactic the techniques are found under\n */\n public revertCopy(fromTechnique: Technique, toTechnique: Technique, tactic: Tactic): void {\n let fromVM = this.compareTo.getTechniqueVM(fromTechnique, tactic);\n let toVM = this.getTechniqueVM(toTechnique, tactic);\n this.versionChangelog.reviewed.delete(fromTechnique.attackID);\n\n toVM.resetAnnotations();\n fromVM.enabled = true;\n\n this.versionChangelog.copied.delete(fromVM.technique_tactic_union_id);\n if (!fromTechnique.get_all_technique_tactic_ids().every((id) => this.versionChangelog.copied.has(id))) {\n this.versionChangelog.reviewed.delete(fromTechnique.attackID);\n }\n }\n\n /**\n * Return true if the given technique is selected, false otherwise\n * @param {Technique} technique the technique to check\n * * @param {Tactic} tactic wherein the technique occurs\n * @return {boolean} true if selected, false otherwise\n */\n public isTechniqueSelected(technique: Technique, tactic: Tactic, walkChildren = true): boolean {\n if (this.selectTechniquesAcrossTactics) {\n if (this.selectSubtechniquesWithParent && walkChildren) {\n // check parent / children / siblings\n if (technique.isSubtechnique) {\n // select from parent\n return this.isTechniqueSelected(technique.parent, tactic, true);\n } else {\n for (let subtechnique of technique.subtechniques) {\n if (this.isTechniqueSelected(subtechnique, tactic, false)) return true;\n }\n }\n }\n\n for (let id of technique.get_all_technique_tactic_ids()) {\n if (this.selectedTechniques.has(id)) return true;\n }\n return false;\n } else {\n if (this.selectSubtechniquesWithParent && walkChildren) {\n // check parent / children / siblings\n if (technique.isSubtechnique) {\n // select from parent\n return this.isTechniqueSelected(technique.parent, tactic, true);\n } else {\n for (let subtechnique of technique.subtechniques) {\n if (this.isTechniqueSelected(subtechnique, tactic, false)) return true;\n }\n }\n }\n return this.selectedTechniques.has(technique.get_technique_tactic_id(tactic));\n }\n }\n\n /**\n * Return the number of selected techniques\n * @return {number} the number of selected techniques\n */\n public getSelectedTechniqueCount(): number {\n if (this.selectTechniquesAcrossTactics) {\n if (this.selectSubtechniquesWithParent) {\n // match across tactics\n // match subtechniques and parents\n\n // matches this part\n // vvvvv\n // T1001.001^TA1000\n let ids = new Set();\n this.selectedTechniques.forEach((unionID) => ids.add(unionID.split('^')[0].split('.')[0]));\n return ids.size;\n } else {\n // match across tactics\n // differentiate subtechniques and parents\n\n // matches this part\n // vvvvv vvv\n // T1001.001^TA1000\n let ids = new Set();\n this.selectedTechniques.forEach((unionID) => ids.add(unionID.split('^')[0]));\n return ids.size;\n }\n } else {\n if (this.selectSubtechniquesWithParent) {\n // differentiate tactics\n // match subtechniques and parents\n\n // matches this part\n // vvvvv vvvvvv\n // T1001.001^TA1000\n let ids = new Set();\n this.selectedTechniques.forEach((unionID) => {\n let split = unionID.split('^');\n let tacticID = split[1];\n let techniqueID = split[0].split('.')[0];\n ids.add(techniqueID + '^' + tacticID);\n });\n return ids.size;\n } else {\n // differentiate tactics\n // differentiate subtechniques and parents\n\n // matches this part\n // vvvvv vvv vvvvvv\n // T1001.001^TA1000\n return this.selectedTechniques.size;\n }\n }\n }\n\n /**\n * Returns true if the given tactic is selected\n * @param {Tactic} tactic to check\n * @return {boolean} true if selected\n */\n public isTacticSelected(tactic: Tactic): boolean {\n let self = this;\n let isSelected = tactic.techniques.every(function (technique) {\n return self.isTechniqueSelected(technique, tactic);\n });\n return isSelected;\n }\n\n /**\n * Return true if currently editing any techniques, false otherwise\n * @return {boolean} true if currently editing any techniques, false otherwise\n */\n public isCurrentlyEditing(): boolean {\n return this.getSelectedTechniqueCount() > 0;\n }\n\n /**\n * Edit the selected techniques\n * @param {string} field the field to edit\n * @param {any} value the value to place in the field\n */\n public editSelectedTechniques(field: string, value: any): void {\n this.selectedTechniques.forEach((id) => {\n this.getTechniqueVM_id(id)[field] = value;\n });\n }\n\n /**\n * Edit the selected techniques list attribute\n * @param {string} field the field to edit\n * @param {(Link|Metadata)[]} values the list of values to place in the field\n */\n public editSelectedTechniqueValues(field: string, values: (Link | Metadata)[]): void {\n let fieldToType: any = { links: Link, metadata: Metadata };\n this.selectedTechniques.forEach((id) => {\n const value_clone = values.map((value) => {\n // deep copy\n let clone = new fieldToType[field]();\n clone.deserialize(value.serialize());\n return clone;\n });\n this.getTechniqueVM_id(id)[field] = value_clone;\n });\n }\n\n /**\n * Reset the selected techniques' annotations to their default values\n */\n public resetSelectedTechniques(): void {\n this.selectedTechniques.forEach((id) => {\n this.getTechniqueVM_id(id).resetAnnotations();\n });\n }\n\n /**\n * Get get a common value from the selected techniques\n * @param field the field to get the common value from\n * @return the value of the field if all selected techniques have the same value, otherwise \"\"\n */\n public getEditingCommonValue(field: string): any {\n if (!this.isCurrentlyEditing()) return '';\n let ids = Array.from(this.selectedTechniques);\n let commonValue = this.getTechniqueVM_id(ids[0])[field];\n for (let i = 1; i < ids.length; i++) {\n if (this.getTechniqueVM_id(ids[i])[field] != commonValue) return '';\n }\n return commonValue;\n }\n\n /**\n * If a technique has been selected, checks whether the link & metadata values of the selected technique match\n * the link & metadata values of the first selected technique. If a technique has been deselected, removes it from\n * the lists of mismatching techniques (if applicable) or re-evalutes the lists of mismatching\n * techniques in the case where the deselected technique was the first selected technique\n * @param selected true if the technique was selected, false if it was deselected\n * @param id the technique_tactic_union_id of the technique\n */\n public checkValues(selected: boolean, id: string): void {\n if (selected) {\n // selected technique(s)\n let tvm = this.getTechniqueVM_id(id);\n if (this.activeTvm.linkStr !== tvm.linkStr) this.linkMismatches.push(id);\n if (this.activeTvm.metadataStr !== tvm.metadataStr) this.metadataMismatches.push(id);\n } else {\n // deselected technique(s)\n if (this.linkMismatches.includes(id)) this.linkMismatches.splice(this.linkMismatches.indexOf(id), 1);\n if (this.metadataMismatches.includes(id)) this.metadataMismatches.splice(this.metadataMismatches.indexOf(id), 1);\n\n if (this.activeTvm && this.activeTvm.technique_tactic_union_id == id) {\n // edge case where deselection was the first selected technique\n let first_id = this.selectedTechniques.values().next().value;\n this.activeTvm = first_id ? this.getTechniqueVM_id(first_id) : undefined;\n\n // re-evaluate mismatched values\n this.linkMismatches = [];\n this.metadataMismatches = [];\n for (let technique_tactic_id of Array.from(this.selectedTechniques.values())) {\n let tvm = this.getTechniqueVM_id(technique_tactic_id);\n if (this.activeTvm.linkStr !== tvm.linkStr) this.linkMismatches.push(technique_tactic_id);\n if (this.activeTvm.metadataStr !== tvm.metadataStr) this.metadataMismatches.push(technique_tactic_id);\n }\n }\n }\n }\n\n /**\n * Filter tactics according to viewmodel state\n * @param {Tactic[]} tactics to filter\n * @param {Matrix} matrix that the tactics fall under\n * @returns {Tactic[]} filtered tactics\n */\n public filterTactics(tactics: Tactic[], matrix: Matrix): Tactic[] {\n if (!this.loaded) return; // still initializing technique VMs\n return tactics.filter((tactic: Tactic) => this.filterTechniques(tactic.techniques, tactic, matrix).length > 0);\n }\n\n /**\n * Filter techniques according to viewModel state\n * @param {Technique[]} techniques list of techniques to filter\n * @param {Tactic} tactic tactic the techniques fall under\n * @param {Matrix} matrix that the techniques fall under\n * @returns {Technique[]} filtered techniques\n */\n public filterTechniques(techniques: Technique[], tactic: Tactic, matrix: Matrix): Technique[] {\n return techniques.filter((technique: Technique) => {\n let techniqueVM = this.getTechniqueVM(technique, tactic);\n // filter by enabled\n if (this.hideDisabled && !this.isSubtechniqueEnabled(technique, techniqueVM, tactic)) {\n techniqueVM.setIsVisible(false);\n technique.subtechniques.forEach((subtechnique) => {\n let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic);\n subtechniqueVM.setIsVisible(false);\n });\n return false;\n }\n if (matrix.name == 'PRE-ATT&CK') {\n techniqueVM.setIsVisible(true);\n technique.subtechniques.forEach((subtechnique) => {\n let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic);\n subtechniqueVM.setIsVisible(true);\n });\n return true; // don't filter by platform if it's pre-attack\n }\n // filter by platform\n let platforms = new Set(technique.platforms);\n if (platforms.size == 0) { platforms.add('None'); }\n for (let platform of this.filters.platforms.selection) {\n if (platforms.has(platform)) {\n techniqueVM.setIsVisible(true);\n technique.subtechniques.forEach((subtechnique) => {\n let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic);\n subtechniqueVM.setIsVisible(true);\n });\n return true; //platform match\n }\n }\n techniqueVM.setIsVisible(false);\n technique.subtechniques.forEach((subtechnique) => {\n let subtechniqueVM = this.getTechniqueVM(subtechnique, tactic);\n subtechniqueVM.setIsVisible(false);\n });\n return false; // no platform match\n });\n }\n\n public isSubtechniqueEnabled(technique, techniqueVM, tactic): boolean {\n if (techniqueVM.enabled) return true;\n else if (technique.subtechniques.length > 0) {\n return technique.subtechniques.some((subtechnique) => {\n let sub_platforms = new Set(subtechnique.platforms);\n let filter = new Set(this.filters.platforms.selection);\n let platforms = new Set(Array.from(filter.values()).filter((p) => sub_platforms.has(p)));\n return this.getTechniqueVM(subtechnique, tactic).enabled && platforms.size > 0;\n });\n } else return false;\n }\n\n /**\n * Sort techniques according to viewModel state\n * @param {Technique[]} techniques techniques to sort\n * @param {Tactic} tactic tactic the techniques fall under\n * @returns {Technique[]} sorted techniques\n */\n public sortTechniques(techniques: Technique[], tactic: Tactic): Technique[] {\n return techniques.sort((technique1: Technique, technique2: Technique) => {\n const techniqueVM1 = this.getTechniqueVM(technique1, tactic);\n const techniqueVM2 = this.getTechniqueVM(technique2, tactic);\n\n this.sortSubTechniques(technique1, tactic);\n this.sortSubTechniques(technique2, tactic);\n\n // prefer techniques scored 0 over unscored\n let score1 = techniqueVM1.score.length > 0 ? Number(techniqueVM1.score) : Number.NEGATIVE_INFINITY;\n let score2 = techniqueVM2.score.length > 0 ? Number(techniqueVM2.score) : Number.NEGATIVE_INFINITY;\n\n if (this.layout.showAggregateScores) {\n // if enabled, factor aggregate scores of parent techniques into sorting\n if (technique1.subtechniques.length > 0) score1 = this.calculateAggregateScore(technique1, tactic);\n if (technique2.subtechniques.length > 0) score2 = this.calculateAggregateScore(technique2, tactic);\n }\n return this.sortingAlgorithm(technique1, technique2, score1, score2);\n });\n }\n\n /**\n * Sort subtechniques according to viewModel state\n * @param {Technique} technique technique to sort\n * @param {Tactic} tactic tactic the technique falls under\n */\n public sortSubTechniques(technique: Technique, tactic: Tactic) {\n technique.subtechniques.sort((technique1: Technique, technique2: Technique) => {\n const techniqueVM1 = this.getTechniqueVM(technique1, tactic);\n const techniqueVM2 = this.getTechniqueVM(technique2, tactic);\n const score1 = techniqueVM1.score.length > 0 ? Number(techniqueVM1.score) : 0;\n const score2 = techniqueVM2.score.length > 0 ? Number(techniqueVM2.score) : 0;\n return this.sortingAlgorithm(technique1, technique2, score1, score2);\n });\n }\n\n /**\n * Execute the sorting algorithm for techniques according to the viewModel state\n * @param {Technique} technique1 the first technique in the comparison\n * @param {Technique} technique2 the second technique in the comparison\n * @param {number} score1 the first score in the comparison\n * @param {number} score2 the second score in the comparison\n * @returns technique or score comparison\n */\n private sortingAlgorithm(technique1: Technique, technique2: Technique, score1: number, score2: number) {\n switch (this.sorting) {\n case 1: // Z-A\n return technique2.name.localeCompare(technique1.name);\n case 2: // 1-2\n if (score1 === score2) {\n return technique1.name.localeCompare(technique2.name);\n } else {\n return score1 - score2;\n }\n case 3: // 2-1\n if (score1 === score2) {\n return technique1.name.localeCompare(technique2.name);\n } else {\n return score2 - score1;\n }\n case 0: // A-Z\n default:\n return technique1.name.localeCompare(technique2.name);\n }\n }\n\n public calculateAggregateScore(technique: Technique, tactic: Tactic): any {\n const tvm = this.getTechniqueVM(technique, tactic);\n let score = tvm.score.length > 0 ? Number(tvm.score) : 0;\n let validTechniquesCount = tvm.score.length > 0 ? 1 : 0;\n let scores = [score];\n\n technique.subtechniques.forEach((subtechnique) => {\n const svm = this.getTechniqueVM(subtechnique, tactic);\n const scoreNum = svm.score.length > 0 ? Number(svm.score) : 0;\n if (svm.score.length > 0) {\n validTechniquesCount += 1;\n scores.push(scoreNum);\n }\n });\n\n if (validTechniquesCount === 0) return tvm.score.length > 0 ? score : Number.NEGATIVE_INFINITY;\n\n let aggScore: any = 0;\n\n switch (this.layout.aggregateFunction) {\n case 'min':\n if (scores.length > 0) aggScore = Math.min(...scores);\n break;\n case 'max':\n if (scores.length > 0) aggScore = Math.max(...scores);\n break;\n case 'sum':\n aggScore = scores.reduce((a, b) => a + b);\n break;\n case 'average':\n default:\n // Divide by count of all subtechniques + 1 (for parent technique) if counting unscored is enabled\n // Otherwise, divide by count of all scored only\n score = scores.reduce((a, b) => a + b);\n aggScore = score / (this.layout.countUnscored ? technique.subtechniques.length + 1 : validTechniquesCount);\n break;\n }\n\n aggScore = aggScore.toFixed(2);\n tvm.aggregateScoreColor = this.gradient.getHexColor(aggScore.toString());\n tvm.aggregateScore = Number.isFinite(+aggScore) ? (+aggScore).toString() : '';\n return +aggScore;\n }\n\n /**\n * Apply sort and filter state to techniques\n * @param {Technique[]} techniques techniques to sort and filter\n * @param {Tactic} tactic that the techniques fall under\n * @param {Matrix} matrix that the techniques fall under\n * @returns {Technique[]} sorted and filtered techniques\n */\n public applyControls(techniques: Technique[], tactic: Tactic, matrix: Matrix): Technique[] {\n return this.sortTechniques(this.filterTechniques(techniques, tactic, matrix), tactic);\n }\n\n /**\n * List of visible technique and subtechnique attack IDs\n * @returns list of strings of each visible technique and subtechnique attack ID\n */\n public getVisibleTechniquesList(): string[] {\n let visibleTechniques: string[] = [];\n this.techniqueVMs.forEach((t) => {\n if (t.isVisible) {\n visibleTechniques.push(t.technique_tactic_union_id);\n }\n });\n return visibleTechniques;\n }\n\n /**\n * Number of modified hidden techniques\n * @returns number of hidden techniques that are annotated\n */\n public modifiedHiddenTechniques(): number {\n let modifiedHiddenTechniques = 0;\n this.techniqueVMs.forEach(function (value, key) {\n if (value.modified() && value.isVisible === false) {\n modifiedHiddenTechniques++;\n }\n });\n return modifiedHiddenTechniques;\n }\n\n /**\n * Stringify this ViewModel\n * @return string representation\n */\n public serialize(downloadAnnotationsOnVisibleTechniques: boolean): string {\n let modifiedTechniqueVMs = [];\n this.techniqueVMs.forEach(function (value, key) {\n if (value.modified() && !downloadAnnotationsOnVisibleTechniques) {\n modifiedTechniqueVMs.push(JSON.parse(value.serialize())); //only save techniqueVMs which have been modified\n } else if (value.modified() && value.isVisible === true && downloadAnnotationsOnVisibleTechniques) {\n modifiedTechniqueVMs.push(JSON.parse(value.serialize())); //only save techniqueVMs which have been modified and are visible\n }\n });\n let rep: { [k: string]: any } = {};\n rep.name = this.name;\n\n rep.versions = {\n attack: this.dataService.getDomain(this.domainVersionID).getVersion(),\n navigator: globals.navVersion,\n layer: globals.layerVersion,\n };\n\n let domain = this.dataService.getDomain(this.domainVersionID);\n rep.domain = domain.domain_identifier;\n if (domain.isCustom) {\n // custom data url\n rep.customDataURL = domain.urls[0];\n }\n rep.description = this.description;\n rep.filters = JSON.parse(this.filters.serialize());\n rep.sorting = this.sorting;\n rep.layout = this.layout.serialize();\n rep.hideDisabled = this.hideDisabled;\n rep.techniques = modifiedTechniqueVMs;\n rep.gradient = JSON.parse(this.gradient.serialize());\n rep.legendItems = JSON.parse(JSON.stringify(this.legendItems));\n rep.metadata = this.metadata.filter((m) => m.valid()).map((m) => m.serialize());\n rep.links = this.links.filter((l) => l.valid()).map((l) => l.serialize());\n\n rep.showTacticRowBackground = this.showTacticRowBackground;\n rep.tacticRowBackground = this.tacticRowBackground;\n rep.selectTechniquesAcrossTactics = this.selectTechniquesAcrossTactics;\n rep.selectSubtechniquesWithParent = this.selectSubtechniquesWithParent;\n rep.selectVisibleTechniques = this.selectVisibleTechniques;\n\n return JSON.stringify(rep, null, '\\t');\n }\n\n /**\n * Restore the domain and version from a string\n * @param rep string to restore from\n * @return string representation of the obj version\n */\n public deserializeDomainVersionID(rep: any): string {\n let versionNumber = '';\n let obj = typeof rep == 'string' ? JSON.parse(rep) : rep;\n this.name = obj.name;\n // layer with no specified version defaults to current version\n this.version = this.dataService.latestVersion.number;\n if ('versions' in obj) {\n if ('attack' in obj.versions) {\n if (typeof obj.versions.attack === 'string') {\n if (obj.versions.attack.length > 0) this.version = obj.versions.attack.match(/\\d+/g)[0];\n } else console.error('TypeError: attack version field is not a string');\n }\n versionNumber = String(obj.versions['layer']);\n }\n if ('version' in obj) {\n // backwards compatibility with Layer Format 3\n versionNumber = String(obj.version);\n }\n // patch for old domain name convention\n if (obj.domain in this.dataService.domain_backwards_compatibility) {\n this.domain = this.dataService.domain_backwards_compatibility[obj.domain];\n } else {\n this.domain = obj.domain;\n }\n this.domainVersionID = this.dataService.getDomainVersionID(this.domain, this.version);\n return versionNumber;\n }\n\n /**\n * Restore this vm from a string\n * @param rep string to restore from\n */\n public deserialize(rep: any, restoreTechniques: boolean = true): void {\n let obj = typeof rep == 'string' ? JSON.parse(rep) : rep;\n\n if ('description' in obj) {\n if (typeof obj.description === 'string') this.description = obj.description;\n else console.error('TypeError: description field is not a string');\n }\n if ('filters' in obj) {\n this.filters.deserialize(obj.filters);\n }\n if ('sorting' in obj) {\n if (typeof obj.sorting === 'number') this.sorting = obj.sorting;\n else console.error('TypeError: sorting field is not a number');\n }\n if ('hideDisabled' in obj) {\n if (typeof obj.hideDisabled === 'boolean') this.hideDisabled = obj.hideDisabled;\n else console.error('TypeError: hideDisabled field is not a boolean');\n }\n\n if ('gradient' in obj) {\n this.gradient = new Gradient();\n this.gradient.deserialize(JSON.stringify(obj.gradient));\n }\n\n if ('legendItems' in obj) {\n for (let item of obj.legendItems) {\n let legendItem = {\n color: '#defa217',\n label: 'default label',\n };\n if (!('label' in item)) {\n console.error(\"Error: LegendItem required field 'label' not present\");\n continue;\n }\n if (!('color' in item)) {\n console.error(\"Error: LegendItem required field 'label' not present\");\n continue;\n }\n\n if (typeof item.label === 'string') {\n legendItem.label = item.label;\n } else {\n console.error('TypeError: legendItem label field is not a string');\n continue;\n }\n\n if (typeof item.color === 'string' && tinycolor(item.color).isValid()) {\n legendItem.color = item.color;\n } else {\n console.error('TypeError: legendItem color field is not a color-string:', item.color, '(', typeof item.color, ')');\n continue;\n }\n this.legendItems.push(legendItem);\n }\n }\n\n if ('showTacticRowBackground' in obj) {\n if (typeof obj.showTacticRowBackground === 'boolean') this.showTacticRowBackground = obj.showTacticRowBackground;\n else console.error('TypeError: showTacticRowBackground field is not a boolean');\n }\n if ('tacticRowBackground' in obj) {\n if (typeof obj.tacticRowBackground === 'string' && tinycolor(obj.tacticRowBackground).isValid())\n this.tacticRowBackground = obj.tacticRowBackground;\n else\n console.error(\n 'TypeError: tacticRowBackground field is not a color-string:',\n obj.tacticRowBackground,\n '(',\n typeof obj.tacticRowBackground,\n ')'\n );\n }\n if ('selectTechniquesAcrossTactics' in obj) {\n if (typeof obj.selectTechniquesAcrossTactics === 'boolean') this.selectTechniquesAcrossTactics = obj.selectTechniquesAcrossTactics;\n else console.error('TypeError: selectTechniquesAcrossTactics field is not a boolean');\n }\n if ('selectSubtechniquesWithParent' in obj) {\n if (typeof obj.selectSubtechniquesWithParent === 'boolean') this.selectSubtechniquesWithParent = obj.selectSubtechniquesWithParent;\n else console.error('TypeError: selectSubtechniquesWithParent field is not a boolean');\n }\n if ('selectVisibleTechniques' in obj) {\n if (typeof obj.selectVisibleTechniques === 'boolean') this.selectVisibleTechniques = obj.selectVisibleTechniques;\n else console.error('TypeError: selectVisibleTechniques field is not a boolean');\n }\n if ('techniques' in obj && restoreTechniques) {\n if (obj.techniques.length > 0) {\n for (let objTechnique of obj.techniques) {\n if ('tactic' in objTechnique) {\n let tvm = new TechniqueVM('');\n tvm.deserialize(JSON.stringify(objTechnique), objTechnique.techniqueID, objTechnique.tactic);\n this.setTechniqueVM(tvm);\n } else {\n // occurs in multiple tactics, match to Technique by attackID\n for (let technique of this.dataService.getDomain(this.domainVersionID).techniques) {\n if (technique.attackID == objTechnique.techniqueID) {\n // match technique\n // don't load deprecated/revoked, causes crash since tactics don't get loaded on revoked techniques\n if (technique.deprecated || technique.revoked) break;\n\n for (let tactic of technique.tactics) {\n let tvm = new TechniqueVM('');\n tvm.deserialize(JSON.stringify(objTechnique), objTechnique.techniqueID, tactic);\n this.setTechniqueVM(tvm);\n }\n break;\n }\n //check against subtechniques\n for (let subtechnique of technique.subtechniques) {\n if (subtechnique.attackID == objTechnique.techniqueID) {\n // don't load deprecated/revoked, causes crash since tactics don't get loaded on revoked techniques\n if (subtechnique.deprecated || subtechnique.revoked) break;\n\n for (let tactic of subtechnique.tactics) {\n let tvm = new TechniqueVM('');\n tvm.deserialize(JSON.stringify(objTechnique), objTechnique.techniqueID, tactic);\n this.setTechniqueVM(tvm);\n }\n break;\n }\n }\n }\n }\n }\n }\n }\n if ('metadata' in obj) {\n for (let metadataObj of obj.metadata) {\n let m = new Metadata();\n m.deserialize(metadataObj);\n if (m.valid()) this.metadata.push(m);\n }\n }\n if ('links' in obj) {\n for (let link of obj.links) {\n let l = new Link();\n l.deserialize(link);\n if (l.valid()) this.links.push(l);\n }\n }\n // add custom data URL\n if ('customDataURL' in obj) {\n this.bundleURL = obj.customDataURL;\n }\n if ('layout' in obj) {\n this.layout.deserialize(obj.layout);\n } else if ('viewMode' in obj) {\n /*\n * viewMode backwards compatibility:\n * 0: full table (side layout, show name)\n * 1: compact table (side layout, show ID)\n * 2: mini table (mini layout, show neither name nor ID)\n */\n if (typeof obj.viewMode === 'number') {\n switch (obj.viewMode) {\n case 1:\n this.layout.layout = 'side';\n this.layout.showName = false;\n this.layout.showID = true;\n break;\n case 2:\n this.layout.layout = 'mini';\n this.layout.showName = false;\n this.layout.showID = false;\n break;\n case 0:\n default:\n break; //default matrix layout already initialized\n }\n } else console.error('TypeError: viewMode field is not a number');\n }\n\n this.updateGradient();\n }\n\n /* Add a color to the end of the gradient */\n public addGradientColor(): void {\n this.gradient.addColor();\n this.updateGradient();\n }\n\n /**\n * Remove color at the given index\n * @param index index to remove color at\n */\n public removeGradientColor(index: number): void {\n this.gradient.removeColor(index);\n this.updateGradient();\n }\n\n /* Update this vm's gradient */\n public updateGradient(): void {\n this.gradient.updateGradient();\n let self = this;\n this.techniqueVMs.forEach(function (tvm, key) {\n tvm.scoreColor = self.gradient.getHexColor(tvm.score);\n });\n this.updateLegendColorPresets();\n }\n\n /**\n * Update the score color of a single technique VM to match the current\n * score and gradient\n * @param tvm technique VM to update\n */\n public updateScoreColor(tvm: TechniqueVM): void {\n tvm.scoreColor = this.gradient.getHexColor(tvm.score);\n }\n\n public addLegendItem(): void {\n let legendItem = {\n label: 'NewItem',\n color: '#00ffff',\n };\n this.legendItems.push(legendItem);\n }\n\n public deleteLegendItem(index: number): void {\n this.legendItems.splice(index, 1);\n }\n\n public clearLegend(): void {\n this.legendItems = [];\n }\n\n public updateLegendColorPresets(): void {\n this.legendColorPresets = [];\n this.backgroundPresets.forEach((preset) => this.legendColorPresets.push(preset));\n this.gradient.colors.forEach((color) => this.legendColorPresets.push(color.color));\n }\n}\n","import { Component, Input, ViewChild, AfterViewInit, ViewEncapsulation, OnDestroy, ElementRef, Output, EventEmitter } from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { ConfigService } from '../services/config.service';\nimport { TabsComponent } from '../tabs/tabs.component';\nimport { ViewModelsService } from '../services/viewmodels.service';\nimport { ViewModel } from '../classes';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\nimport * as Excel from 'exceljs/dist/exceljs.min.js';\nimport tinycolor from 'tinycolor2';\nimport { isIE } from '../utils/utils';\n\n@Component({\n selector: 'DataTable',\n templateUrl: './data-table.component.html',\n styleUrls: ['./data-table.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DataTableComponent implements AfterViewInit, OnDestroy {\n @ViewChild('scrollRef') private scrollRef: ElementRef;\n\n @Input() viewModel: ViewModel; // ViewModel being used by this data-table\n @Input() currentDropdown: string = ''; // current dropdown menu\n\n @Output() dropdownChange = new EventEmitter();\n @Output() onScroll = new EventEmitter();\n\n public customContextMenuItems = []; // items for custom context menu\n public showingLegend = false; // is the legend panel currently expanded\n\n public get layerDomainVersion(): string {\n let domain = this.dataService.getDomain(this.viewModel.domainVersionID);\n return `${domain.name} v${domain.version.number}`;\n }\n\n // scroll handling\n public previousScrollTop: number = 0;\n public headerHeight: number = 0;\n public footerHeight: number = 32;\n public controlsHeight: number = 34;\n public includedControls: any;\n public isScrollUp: boolean = true;\n public handleScroll = (e) => {\n const diff = this.scrollRef.nativeElement.scrollTop - this.previousScrollTop;\n if ((!this.isScrollUp && diff < 0) || (this.isScrollUp && diff > 0)) {\n this.isScrollUp = diff < 0;\n this.calculateScrollHeight();\n this.previousScrollTop = this.scrollRef.nativeElement.scrollTop;\n } else if (!this.isScrollUp && this.scrollRef.nativeElement.scrollTop > 0 && diff === 0) {\n this.calculateScrollHeight();\n }\n };\n public calculateScrollHeight = () => {\n const tabOffset = this.isScrollUp ? 0 : this.headerHeight;\n this.onScroll.emit(-1 * tabOffset);\n const scrollWindowHeight = this.isScrollUp ? this.headerHeight + this.controlsHeight + this.footerHeight : this.controlsHeight;\n this.scrollRef.nativeElement.style.height = `calc(100vh - ${scrollWindowHeight}px)`;\n };\n\n /*\n * 0: expand subtechniques\n * 1: expand annotated subtechniques\n * 2: collapse subtechniques\n */\n public showSubtechniquesType: number = 0;\n\n public downloadAnnotationsOnVisibleTechniques: boolean = false;\n\n showControlsBar = true;\n previousControlSection = '';\n\n currentControlSection = \"selection\";\n\n showHelpDropDown = false;\n\n // edit field bindings\n public commentEditField: string = '';\n public scoreEditField: string = '';\n\n private selectionChangeSubscription: Subscription;\n \n public layerControlsList = [];\n public techniqueControlsList = [];\n public selectionControlsList = [];\n\n showControlLabels = {\n selection: false,\n layer: false,\n technique: false,\n };\n\n constructor(\n public dataService: DataService,\n private tabs: TabsComponent,\n private sanitizer: DomSanitizer,\n private viewModelsService: ViewModelsService,\n public configService: ConfigService\n ) {\n this.selectionChangeSubscription = this.viewModelsService.onSelectionChange.subscribe(() => {\n this.onTechniqueSelect();\n });\n this.includedControls = configService.featureList;\n for(let i=0;i ('.header-wrapper')?.offsetHeight;\n this.scrollRef.nativeElement.style.height = `calc(100vh - ${this.headerHeight + this.controlsHeight + this.footerHeight}px)`;\n this.scrollRef.nativeElement.addEventListener('scroll', this.handleScroll);\n }\n\n ngOnDestroy(): void {\n this.selectionChangeSubscription.unsubscribe();\n document.body.removeEventListener('scroll', this.handleScroll);\n }\n\n public updateStickyToolbar() {\n this.viewModel.stickyToolbar = !this.viewModel.stickyToolbar;\n if (this.viewModel.stickyToolbar) {\n this.headerHeight = document.querySelector('.header-wrapper')?.offsetHeight;\n this.scrollRef.nativeElement.style.height = `calc(100vh - ${this.headerHeight + this.controlsHeight + this.footerHeight}px)`;\n this.scrollRef.nativeElement.addEventListener('scroll', this.handleScroll);\n } else {\n this.scrollRef.nativeElement.style.height = null;\n this.scrollRef.nativeElement.addEventListener('scroll', this.handleScroll);\n }\n }\n\n handleSelectionControlsSettingsDropdown() {\n if (this.currentDropdown !== 'selection_control_settings') {\n this.currentDropdown = 'selection_control_settings';\n } else {\n this.currentDropdown = '';\n }\n this.dropdownChange.emit(this.currentDropdown);\n }\n\n handleLayerControlsSettingsDropdown() {\n if (this.currentDropdown !== 'layer_control_settings') {\n this.currentDropdown = 'layer_control_settings';\n } else {\n this.currentDropdown = '';\n }\n this.dropdownChange.emit(this.currentDropdown);\n }\n\n handleTechniqueControlsSettingsDropdown() {\n if (this.currentDropdown !== 'technique_control_settings') {\n this.currentDropdown = 'technique_control_settings';\n } else {\n this.currentDropdown = '';\n }\n this.dropdownChange.emit(this.currentDropdown);\n }\n\n handleKeyDownTechnique(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleTechniqueControlsSettingsDropdown();\n }\n }\n \n handleKeyDownSelection(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleSelectionControlsSettingsDropdown();\n }\n }\n\n handleKeyDownLayer(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.handleLayerControlsSettingsDropdown();\n }\n }\n\n isControlIncluded(control, subfeature) {\n for(let i=0;i {\n const blob = new Blob([data], { type: 'application/octet-stream' });\n const filename = this.viewModel.name.toLowerCase().replace(/ /g, '_') + '.xlsx';\n this.saveBlob(blob, filename);\n });\n }\n\n /** Export all layers to Excel */\n public saveAllLayersLocallyExcel(): void {\n // create new excel workbook\n let workbook = new Excel.Workbook();\n for (let i = 0; i < this.viewModelsService.viewModels.length; i++) {\n let domain = this.dataService.getDomain(this.viewModelsService.viewModels[i].domainVersionID);\n // create a worksheet for each matrix in the domain\n for (let matrix of domain.matrices) {\n let worksheet = workbook.addWorksheet(\n matrix.name + ' v' + domain.getVersion() + ' (' + this.viewModelsService.viewModels[i].name + '-' + i + ')'\n );\n this.saveLayerExcel_helper(matrix, worksheet, this.viewModelsService.viewModels[i]);\n }\n }\n // save file\n workbook.xlsx.writeBuffer().then((data) => {\n const blob = new Blob([data], { type: 'application/octet-stream' });\n const filename = this.viewModel.name.toLowerCase().replace(/ /g, '_') + '.xlsx';\n this.saveBlob(blob, filename);\n });\n }\n\n /** Helper function for saving layer in Excel format */\n public saveLayerExcel_helper(matrix, worksheet, viewModel): void {\n // create a worksheet for each matrix in the domain\n // create tactic columns\n let columns = viewModel.filterTactics(matrix.tactics, matrix).map((tactic) => {\n return { header: this.getDisplayName(tactic), key: tactic.name };\n });\n worksheet.columns = columns;\n\n // create cells\n for (let tactic of viewModel.filterTactics(matrix.tactics, matrix)) {\n let tacticCol = worksheet.getColumn(tactic.name);\n let techniques = viewModel.applyControls(tactic.techniques, tactic, matrix);\n let techniqueCells = techniques.map((technique) => {\n return technique.name;\n });\n let subtechniqueList = [];\n\n // create subtechnique cells, if shown\n let subtechniqueCells = [];\n for (let technique of techniques) {\n let techniqueRow = techniqueCells.indexOf(technique.name);\n let tvm = viewModel.getTechniqueVM(technique, tactic);\n\n if (!tvm.showSubtechniques) continue; // do not show sub-techniques, skip\n\n // retrieve subtechniques\n let subtechniques = viewModel.applyControls(technique.subtechniques, tactic, matrix).map((sub) => {\n return sub.name;\n });\n subtechniqueList = subtechniqueList.concat(technique.subtechniques);\n\n // format technique cells for subtechniques\n let excelIndex = this.addSubtechniqueCells(subtechniqueCells, techniqueCells, subtechniques, technique);\n\n // merge technique cells\n if (excelIndex > 0) {\n worksheet.mergeCells(techniqueRow + 2, tacticCol.number, techniqueRow + excelIndex + 1, tacticCol.number);\n }\n }\n\n if (subtechniqueCells.length > 0) {\n // add subtechniques column\n let id = columns.findIndex((col) => col.key == tactic.name);\n columns.splice(id + 1, 0, { header: this.getDisplayName(tactic), key: tactic.name + 'Subtechniques' });\n worksheet.columns = columns;\n\n // merge subtechniques header\n let subtechniqueCol = worksheet.getColumn(tactic.name + 'Subtechniques');\n worksheet.mergeCells(tacticCol.letter + '1:' + subtechniqueCol.letter + '1');\n subtechniqueCol.values = [tactic.name.toString() + 'Subtechniques'].concat(subtechniqueCells);\n\n // style subtechnique cells\n this.styleTechniqueCells(subtechniqueCol, subtechniqueList, viewModel, tactic, true);\n }\n tacticCol.values = [this.getDisplayName(tactic)].concat(techniqueCells);\n\n // style technique cells\n this.styleTechniqueCells(tacticCol, techniques, viewModel, tactic);\n }\n\n // style tactic headers\n this.styleTacticHeaders(worksheet, viewModel);\n\n worksheet.getRow(1).alignment = { horizontal: 'center' };\n worksheet.getRow(1).border = { bottom: { style: 'thin' } };\n worksheet.getRow(1).font = { bold: true };\n if (viewModel.showTacticRowBackground) {\n worksheet.getRow(1).fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF' + viewModel.tacticRowBackground.substring(1) } };\n worksheet.getRow(1).font = {\n bold: true,\n color: { argb: 'FF' + tinycolor.mostReadable(viewModel.tacticRowBackground, ['white', 'black']).toHex() },\n };\n }\n }\n\n /**\n * Style technique cells for Excel worksheet\n */\n public styleTechniqueCells(column, techniqueList, viewModel, tactic, isSubtechnique = false): void {\n const seen = [];\n\n column.eachCell((cell) => {\n if (cell.row > 1 && cell.value && cell.value !== undefined) {\n let technique = techniqueList.find((t) => {\n if (isSubtechnique) {\n return t.name == cell.value.substring(cell.value.indexOf(':') + 1).trim() && !seen.includes(t.attackID);\n }\n return t.name == cell.value.substring(cell.value.indexOf(':') + 1).trim() || t.attackID === cell.value;\n });\n seen.push(technique.attackID);\n let tvm = viewModel.getTechniqueVM(technique, tactic);\n this.styleCells(cell, technique, tvm);\n }\n });\n }\n\n /**\n * Style tactic headers for Excel worksheet\n */\n public styleTacticHeaders(worksheet, viewModel): void {\n worksheet.columns.forEach((column) => {\n if (viewModel.layout.showID && !viewModel.layout.showName) {\n column.width = column.header.length < 15 ? 15 : column.header.length;\n } else if (!viewModel.layout.showID && !viewModel.layout.showName) {\n column.width = 10;\n } else {\n column.width = column.header.length < 30 ? 30 : column.header.length;\n }\n });\n }\n\n /**\n * Format technique cells for sub-technique cells\n */\n public addSubtechniqueCells(subtechniqueCells, techniqueCells, subtechniques, technique): number {\n let techniqueRow = techniqueCells.indexOf(technique.name);\n let excelIndex = 0;\n for (let subtechnique of subtechniques) {\n if (excelIndex !== 0) {\n techniqueCells.splice(techniqueRow + excelIndex, 0, technique.name);\n }\n subtechniqueCells[techniqueRow + excelIndex++] = subtechnique;\n }\n return excelIndex;\n }\n\n /**\n * Get the display name for technique/tactic as shown in layout\n */\n public getDisplayName(technique): string {\n if (this.viewModel.layout.showID && this.viewModel.layout.showName) {\n return technique.attackID + ': ' + technique.name;\n } else if (this.viewModel.layout.showID) {\n return technique.attackID;\n } else if (this.viewModel.layout.showName) {\n return technique.name;\n } else {\n return '';\n }\n }\n\n /**\n * Handle drop down change\n */\n public handleDescriptionDropdown(): void {\n if (this.currentDropdown !== 'description') {\n this.currentDropdown = 'description';\n } else {\n this.currentDropdown = '';\n }\n this.dropdownChange.emit(this.currentDropdown);\n }\n\n toggleShowControlsBar() {\n this.showControlsBar = !this.showControlsBar;\n }\n\n setCurrentControlSection(controlType) {\n this.currentControlSection = controlType;\n if (this.previousControlSection === controlType && this.showControlsBar) {\n this.showControlsBar = false;\n } else {\n this.showControlsBar = true;\n }\n this.previousControlSection = controlType;\n }\n\n /**\n * Handle export drop down change\n */\n public handleExportDropdown(): void {\n if (this.currentDropdown !== 'export') {\n this.currentDropdown = 'export';\n } else {\n this.currentDropdown = '';\n }\n this.dropdownChange.emit(this.currentDropdown);\n }\n\n /**\n * Triggered on left click of technique\n */\n public onTechniqueSelect(): void {\n if (!this.viewModel.isCurrentlyEditing()) {\n if (['comment', 'score', 'colorpicker', 'link', 'metadata'].includes(this.currentDropdown)) {\n //remove technique control dropdowns, because everything was deselected\n this.currentDropdown = '';\n }\n return;\n }\n if (this.currentDropdown == 'link' || this.currentDropdown == 'metadata') {\n this.currentDropdown = '';\n return;\n }\n //else populate editing controls\n this.populateEditFields();\n }\n\n /**\n * Show all sub-techniques in layout view\n */\n public expandSubtechniques(showAnnotatedOnly?: boolean): void {\n if (this.viewModel.layout.layout == 'mini') return; // control disabled in mini layout\n this.viewModel.layout.expandedSubtechniques = showAnnotatedOnly ? 'annotated' : 'all';\n\n for (let technique of this.dataService.getDomain(this.viewModel.domainVersionID).techniques) {\n if (!technique.subtechniques?.length) continue; // no sub-techniques\n\n for (let id of technique.get_all_technique_tactic_ids()) {\n let tvm = this.viewModel.getTechniqueVM_id(id);\n if (!showAnnotatedOnly) {\n // expand all sub-techniques\n tvm.showSubtechniques = true;\n continue;\n }\n if (showAnnotatedOnly) {\n // expand all sub-techniques\n tvm.showSubtechniques = false;\n }\n\n // expand only if sub-techniques have annotations\n for (let subtechnique of technique.subtechniques) {\n tvm.showSubtechniques =\n tvm.showSubtechniques ||\n subtechnique.get_all_technique_tactic_ids().some((sid) => {\n let svm = this.viewModel.getTechniqueVM_id(sid);\n return svm.annotated();\n });\n }\n }\n }\n }\n\n /**\n * Hide all sub-techniques in layout view\n */\n public collapseSubtechniques(): void {\n if (this.viewModel.layout.layout == 'mini') return; // control disabled in mini layout\n this.viewModel.techniqueVMs.forEach(function (tvm, key) {\n tvm.showSubtechniques = false;\n });\n this.viewModel.layout.expandedSubtechniques = 'none';\n }\n\n /**\n * Expand all, annotated or no subtechniques based on selection\n */\n public showSubtechniquesTypeAlgorithm() {\n switch (this.showSubtechniquesType) {\n case 1: // expand all subtechniques\n this.expandSubtechniques();\n console.log(this.showSubtechniquesType);\n break;\n case 2: // expand only annotated subtechniques\n this.expandSubtechniques(true);\n console.log(this.showSubtechniquesType);\n break;\n case 3: // collapse all subtechniques\n this.collapseSubtechniques();\n console.log(this.showSubtechniquesType);\n this.showSubtechniquesType = 0;\n break;\n case 0:\n break;\n default:\n // expand all subtechniques\n this.expandSubtechniques();\n }\n }\n\n /**\n * Populate edit fields. Gets common values if common values exist for all editing values.\n */\n public populateEditFields(): void {\n this.commentEditField = this.viewModel.getEditingCommonValue('comment');\n this.scoreEditField = this.viewModel.getEditingCommonValue('score');\n }\n\n /**\n * Set the state (enabled/disabled) of the selected features\n */\n public setSelectedState(): void {\n let currentState = this.viewModel.getEditingCommonValue('enabled');\n if (currentState === '') this.viewModel.editSelectedTechniques('enabled', false);\n else this.viewModel.editSelectedTechniques('enabled', !currentState);\n }\n\n /**\n * Sanitize the given css so that it can be displayed without error\n */\n public sanitize(css) {\n return this.sanitizer.bypassSecurityTrustStyle(css);\n }\n\n /**\n * Is score input valid number\n * @param event keypress event just in case we need it\n * @return true if valid number\n */\n public validateScoreInput(event): boolean {\n let result: boolean = isNaN(Number(this.scoreEditField));\n return result;\n }\n\n /**\n * Return whether the given dropdown element would overflow the side of the page if aligned to the right of its anchor\n * @param dropdown the DOM node of the panel\n * @return true if it would overflow\n */\n public checkalign(dropdown): boolean {\n let anchor = dropdown.parentNode;\n return anchor.getBoundingClientRect().left + dropdown.getBoundingClientRect().width > document.body.clientWidth;\n }\n\n /**\n * Open an export layer render tab for the current layer\n */\n public exportRender(): void {\n this.tabs.openSVGDialog(this.viewModel);\n }\n\n /**\n * Open search & multiselect sidebar\n */\n public openSearch(): void {\n if (this.viewModel.sidebarContentType !== 'layerUpgrade') {\n this.viewModel.sidebarOpened = this.viewModel.sidebarContentType !== 'search' ? true : !this.viewModel.sidebarOpened;\n this.viewModel.sidebarContentType = 'search';\n }\n }\n\n /**\n * Open layer settings in sidebar\n */\n public openLayerSettings(): void {\n this.viewModel.sidebarOpened = this.viewModel.sidebarContentType !== 'layerSettings' ? true : !this.viewModel.sidebarOpened;\n this.viewModel.sidebarContentType = 'layerSettings';\n }\n}\n","\n\n\n
\n
\n
\n = 2\"\n class=\"section-label\"\n [class.active]=\"currentControlSection === 'selection' && showControlsBar\"\n (click)=\"setCurrentControlSection('selection')\">\n Selection Controls\n
\n = 2\"\n class=\"section-label\"\n [class.active]=\"currentControlSection === 'layer' && showControlsBar\"\n (click)=\"setCurrentControlSection('layer')\">\n Layer Controls\n
\n = 1\"\n class=\"section-label\"\n [class.active]=\"currentControlSection === 'technique' && showControlsBar\"\n (click)=\"setCurrentControlSection('technique')\">\n Technique Controls\n
\n \n \n \n
    \n
  • \n
    \n \n {{getControlDisplayName('selection_controls','search') | titlecase}}\n search\n
    \n \n\n \n
    \n \n Deselect {{ this.viewModel.getSelectedTechniqueCount() }} Techniques\n clear\n {{ this.viewModel.getSelectedTechniqueCount() }}\n
    \n \n \n
    \n \n {{getControlDisplayName('selection_controls','selecting_techniques') | titlecase}}\n lock\n
    \n \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n \n
    \n \n \n
    \n \n \n
    \n
    \n \n more_vert\n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n Included Controls:\n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
  • \n
  • \n \n \n
    \n \n {{getControlDisplayName('layer_controls','layer_settings') | titlecase }}\n \n settings\n \n
    \n \n \n
    \n
    \n {{getControlDisplayName('layer_controls','download_layer') | titlecase}}\n file_download\n
    \n \n
    \n Export\n
    \n
    \n \n
    \n \n code\n
    \n
    \n\n \n 1\"\n class=\"control-row-item\">\n \n 1\" class=\"material-symbols-outlined\" alt=\"save layer\">\n code_blocks\n \n
    \n \n\n \n
    \n \n grid_on\n
    \n \n\n \n
    1\" class=\"control-row-item\">\n \n table_view\n
    \n \n\n \n
    \n \n camera_alt\n
    \n \n \n
    \n Options\n
    \n \n
    \n \n \n
    \n
    \n warning\n \n
    \n
    1\">\n warning\n \n
    \n \n \n\n \n
    \n \n {{getControlDisplayName('layer_controls','filters') | titlecase}}\n filter_list\n
    \n
    \n
    \n {{ filter }}\n
    \n
    \n \n \n
    \n
    \n
    Data does not include {{ filter }}
    \n
    \n
    \n \n\n \n
    \n \n \n \n A-Z Ascending\n \n \n \n A-Z Descending\n \n \n \n Numerically Ascending\n \n \n \n Numerically Descending\n \n \n \n
    \n \n\n \n
    \n \n {{getControlDisplayName('layer_controls','color_setup') | titlecase}}\n palette\n
    \n
    \n
    \n \n
    \n \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Low value:\n \n
    \n
    \n
    \n \n remove\n \n
    \n
    \n \n
    \n
    \n
    High value:\n \n
    \n
    \n
    \n presets\n \n
    \n
    \n \n red to green\n
    \n \n green to red\n
    \n \n blue to red\n
    \n \n red to blue\n
    \n \n transparent to blue\n
    \n \n transparent to red\n \n \n \n \n \n \n \n\n \n
    \n \n Hide Disabled\n visibility_off\n Show Disabled\n visibility\n
    \n \n\n \n
    \n \n \n \n Expand All Sub-techniques\n unfold_more\n \n \n Expand Annotated Sub-techniques\n \n \n \n Collapse Sub-techniques\n unfold_less\n \n \n
    \n \n
    \n
    \n \n more_vert\n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n Included Controls:\n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
  • \n \n \n \n \n
    \n \n {{getControlDisplayName('technique_controls','disable_techniques') | titlecase}}\n texture\n
    \n \n\n \n
    \n \n {{getControlDisplayName('technique_controls','manual_color') | titlecase}}\n format_color_fill\n
    \n \n \n
    no color
    \n \n \n \n\n \n
    \n \n {{getControlDisplayName('technique_controls','scoring') | titlecase}}\n insert_chart\n
    \n
    \n \n \n score\n \n not a number\n \n
    \n \n\n \n
    \n \n {{getControlDisplayName('technique_controls','comments') | titlecase}}\n insert_comment\n
    \n \n \n \n comments\n \n \n \n \n\n \n
    \n \n {{getControlDisplayName('technique_controls','links') | titlecase}}\n link\n
    \n \n \n \n \n \n\n \n
    \n \n {{getControlDisplayName('technique_controls','metadata') | titlecase}}\n list\n
    \n \n \n \n \n \n\n \n
    \n \n {{getControlDisplayName('technique_controls','clear_annotations') | titlecase}}\n layers_clear\n
    \n \n
    \n
    \n \n more_vert\n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n Included Controls:\n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
  • \n \n
    \n \n push_pin\n \n
    \n \n
  • \n
\n\n\n\n\n \n
\n
\n \n \n
\n \n
\n
\n
1\" class=\"matrix-name\">\n {{ matrix.name }}\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n \n \n \n
\n\n\n\n
\n keyboard_arrow_up\n
legend
\n
\n\n
\n
\n keyboard_arrow_down\n
legend
\n
\n
\n \n \n
\n \n \n \n \n \n
\n
\n
\n","import { Component, OnInit, Inject, ViewEncapsulation, ViewChild, Renderer2 } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { MarkdownComponent, MarkdownService } from 'ngx-markdown';\nimport { LayerInformationComponent } from '../layer-information/layer-information.component';\n\n@Component({\n selector: 'help',\n templateUrl: './help.component.html',\n styleUrls: ['./help.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class HelpComponent implements OnInit {\n private listenObj: any;\n @ViewChild('markdownElement', { static: false }) public markdownElement: any;\n public headingAnchors: MarkdownHeadingAnchor[] = [];\n\n constructor(\n private dialog: MatDialog,\n private markdownService: MarkdownService,\n private renderer: Renderer2,\n @Inject(MAT_DIALOG_DATA) public data\n ) {\n // intentionally left blank\n }\n\n ngOnInit(): void {\n setTimeout(() => {\n this.scrollTo('toc');\n }, 175);\n\n let self = this;\n this.markdownService.renderer.heading = (text: string, level: number) => {\n let img = text.match(/()/g) ? text.match(/()/g)[0].replace(/(nav-app\\/src\\/)/g, '') : '';\n text = text.replace(/()/g, '');\n const escapedText = text\n .toLowerCase()\n .trim()\n .replace(/[^\\w]+/g, '-');\n self.headingAnchors.push({\n level: level,\n anchor: escapedText,\n label: text.replace('&', '&'),\n });\n return `${img}${text}`;\n };\n\n this.markdownService.renderer.html = (html: string) => {\n if (!html.match(/(nav-app\\/src\\/)/g)) return html;\n return html.replace(/(nav-app\\/src\\/)/g, '');\n };\n }\n\n ngOnDestroy(): void {\n if (this.listenObj) {\n this.listenObj();\n }\n }\n\n // from https://github.com/jfcere/ngx-markdown/issues/125#issuecomment-518025821\n public onMarkdownLoad(e) {\n // hijack clicks on links\n if (this.markdownElement) {\n this.listenObj = this.renderer.listen(this.markdownElement.element.nativeElement, 'click', (e: Event) => {\n if (e.target && (e.target as any).tagName === 'A') {\n const el = e.target as HTMLElement;\n const linkURL = el.getAttribute && el.getAttribute('href');\n if (linkURL) {\n e.preventDefault();\n if (linkURL.charAt(0) === '#') this.scrollTo(linkURL.replace('#', ''));\n else if (linkURL.includes('layers/')) this.openLayerDialog();\n else if (linkURL.match(/(nav-app\\/src\\/)/g)) window.open(linkURL.replace(/(nav-app\\/src\\/)/g, ''));\n else window.open(linkURL);\n }\n }\n });\n }\n }\n\n public scrollTo(anchor) {\n let element = document.querySelector('.' + anchor);\n if (element) element.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });\n }\n\n /**\n * open the layer information dialog\n */\n public openLayerDialog(): void {\n this.dialog.open(LayerInformationComponent, {\n autoFocus: false,\n panelClass: this.data.theme,\n });\n }\n}\n\ninterface MarkdownHeadingAnchor {\n level: number;\n anchor: string;\n label: string;\n}\n","
","import { Component, ViewEncapsulation } from '@angular/core';\nimport * as globals from '../utils/globals';\n\n@Component({\n selector: 'app-layer-information',\n templateUrl: './layer-information.component.html',\n styleUrls: ['./layer-information.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LayerInformationComponent {\n public get layerFormatLink(): string {\n return `mitre/layers/spec/v${globals.layerVersion}/layerformat.md`;\n }\n}\n","
\n \n
\n \n
\n
\n \n \n \n
","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ViewModel } from '../classes';\nimport { DataService } from '../services/data.service';\n\n@Component({\n selector: 'app-layer-settings',\n templateUrl: './layer-settings.component.html',\n styleUrls: ['./layer-settings.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class LayerSettingsComponent {\n @Input() viewModel: ViewModel;\n\n constructor(\n public dataService: DataService,\n ) {\n // intentionally left blank\n }\n}\n","
\n\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

Layer Information

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tName\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tDescription\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tDomain\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tVersion\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t\n\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

Metadata

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

Links

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t\n\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

Matrix Layout

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t@for(option of viewModel.layout.layoutOptions; track option) {\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t {{option}} layout\n\t\t\t\t\t\t
\n\t\t\t\t\t}\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

Labels

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

Aggregate Scores

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tcount unscored techniques as 0\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\tAggregate Function\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t@for(option of viewModel.layout.aggregateFunctionOptions; track option) {\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t {{option}}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t
\n\t\n\t
\n\t\t\n\t
\n
","import { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { ViewModelsService } from '../../services/viewmodels.service';\nimport { ConfigService } from '../../services/config.service';\nimport { DataService } from '../../services/data.service';\nimport { Cell } from '../../matrix/cell';\n\n@Component({\n selector: 'changelog-cell',\n templateUrl: './changelog-cell.component.html',\n styleUrls: ['./changelog-cell.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ChangelogCellComponent extends Cell {\n @Input() isCurrentVersion?: boolean = true;\n @Input() isDraggable?: boolean = false;\n @Input() section: string;\n\n constructor(\n public configService: ConfigService,\n public dataService: DataService,\n public viewModelsService: ViewModelsService\n ) {\n super(dataService, configService);\n }\n\n /**\n * Highlight the moused over technique\n */\n public highlight(): void {\n if (this.isCurrentVersion) {\n this.viewModel.highlightTechnique(this.technique, this.tactic);\n }\n }\n\n /**\n * Clear the technique highlight\n */\n public unhighlight(): void {\n if (this.isCurrentVersion) this.viewModel.clearHighlight();\n }\n\n /**\n * Select or unselect this technique\n */\n public onClick(): void {\n if (this.isCurrentVersion) {\n // unselect technique\n if (this.viewModel.isTechniqueSelected(this.technique, this.tactic)) {\n this.viewModel.unselectTechnique(this.technique, this.tactic);\n }\n // select technique\n else {\n this.viewModel.clearSelectedTechniques();\n this.viewModel.selectTechnique(this.technique, this.tactic);\n }\n this.viewModelsService.selectionChanged(); // emit selection change\n }\n }\n\n /**\n * Retrieve css classes for this technique\n */\n public getClass(): string {\n let theclass = super.getClass();\n if (!this.isCurrentVersion && !this.isDraggable) {\n theclass += ' nopointer';\n }\n if (this.section == 'additions' || this.section == 'deprecations') {\n theclass += ' setwidth';\n }\n return theclass;\n }\n}\n","
\n
\n
\n \n {{ tactic.name }}\n \n
\n
\n {{ technique.attackID }}\n
\n
\n {{ technique.name }}\n
\n
\n
\n","import { Component, Input, OnInit, QueryList, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { Tactic, Technique } from '../classes/stix';\nimport { VersionChangelog, ViewModel } from '../classes';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { MatExpansionPanel } from '@angular/material/expansion';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatStepper } from '@angular/material/stepper';\n\n@Component({\n selector: 'layer-upgrade',\n templateUrl: './layer-upgrade.component.html',\n styleUrls: ['./layer-upgrade.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LayerUpgradeComponent implements OnInit {\n @Input() viewModel: ViewModel; // view model of new version\n @ViewChildren(MatPaginator) paginators = new QueryList();\n @ViewChildren(MatExpansionPanel) panels: QueryList;\n public paginator_map: Map = new Map(); // section name mapped to index of paginator\n public filteredIDs: string[] = [];\n @ViewChild('stepper') stepper: MatStepper;\n\n public changelog: VersionChangelog;\n public compareTo: ViewModel; // view model of old version\n public sections: string[] = ['additions', 'changes', 'minor_changes', 'revocations', 'deprecations', 'unchanged'];\n public filter: any = {\n changes: false,\n minor_changes: false,\n revocations: false,\n deprecations: false,\n unchanged: false,\n };\n public loading: boolean = false;\n\n constructor(public dataService: DataService) {}\n\n ngOnInit(): void {\n this.changelog = this.viewModel.versionChangelog;\n this.compareTo = this.viewModel.compareTo;\n // map sections with techniques to paginator index\n let i = 0;\n for (let s of this.sections) {\n if (this.changelog[s].length) this.paginator_map.set(s, i++);\n }\n this.applyFilters(this.sections[0]);\n this.wait();\n }\n\n wait(): void {\n this.loading = true;\n setTimeout(() => (this.loading = false), 1000);\n }\n\n /**\n * Get a readable version for the name of the changelog section\n * @param section name of the changelog section\n * @returns {string} readable section header text\n */\n public getHeader(section: string): string {\n return section\n .split(/[_-]+/)\n .map((s) => s.charAt(0).toUpperCase() + s.substring(1))\n .join(' ');\n }\n\n /**\n * Retrieve the URL for a given technique in the previous ATT&CK version\n * @param attackID the ATT&CK ID of the technique\n * @returns {string} the URL\n */\n public getPreservedURL(attackID: string): string {\n let url = this.getTechnique(attackID, this.compareTo).url;\n let i = url.search('/techniques');\n return url.substring(0, i) + '/versions/v' + this.compareTo.version + url.substring(i);\n }\n\n /**\n * Disable the annotated techniques filter?\n * @param section the name of the changelog section\n * @returns true if there are no annotated techniques in the given section, false otherwise\n */\n public disableFilter(section: string): boolean {\n return !this.changelog[section].filter((id) => this.anyAnnotated(id)).length;\n }\n\n /**\n * Apply filters to the changelog section\n * @returns the list of filtered ATT&CK IDs in the changelog section\n */\n public applyFilters(section: string): void {\n let sectionIDs = this.changelog[section];\n if (this.filter[section]) sectionIDs = sectionIDs.filter((id) => this.anyAnnotated(id));\n\n let i = this.paginator_map.get(section);\n let paginator = this.paginators.toArray()[i];\n if (paginator && paginator.pageIndex * paginator.pageSize > sectionIDs.length) {\n paginator.pageIndex = 0;\n }\n let start = paginator ? paginator.pageIndex * paginator.pageSize : 0;\n let end = paginator ? start + paginator.pageSize : 10;\n this.filteredIDs = sectionIDs.slice(start, end);\n setTimeout(() => {\n this.expandAll(section);\n });\n }\n\n /**\n * Update the list of IDs to render on step change\n * @param section the name of the changelog section\n * @param offset -1 if moving to the previous step, 1 if moving to the next step\n */\n public onStepChange(section: string, offset: number): void {\n let i = this.sections.findIndex((s) => s === section);\n if (i + offset < this.sections.length) {\n let nextSection = this.sections[i + offset];\n this.applyFilters(nextSection);\n if (this.changelog[nextSection].length > 0) this.wait();\n }\n }\n\n /**\n * Get the technique object in the domain of the given view model\n * @param attackID the ATT&CK ID of the technique\n * @param vm the view model\n * @param section name of the changelog section\n * @returns {Technique} the technique object\n */\n public getTechnique(attackID: string, vm: ViewModel, section?: string): Technique {\n let domain = this.dataService.getDomain(vm.domainVersionID);\n let all_techniques = domain.techniques.concat(domain.subtechniques);\n let technique = all_techniques.find((t) => t.attackID == attackID);\n\n if (section == 'revocations' && this.viewModel.version == vm.version) {\n // get revoking object\n let revokedByID = technique.revoked_by(vm.domainVersionID);\n let revokingObject = all_techniques.find((t) => t.id == revokedByID);\n return revokingObject;\n } else return technique;\n }\n\n /**\n * Get the list of tactic objects the given technique is found under\n * @param attackID the ATT&CK ID of the object\n * @param vm the view model used to identify the domain\n * @param section name of the changelog section\n * @returns {Tactic[]} list of tactic objects the object is found under\n */\n public getTactics(attackID: string, vm: ViewModel, section?: string): Tactic[] {\n if (section == 'additions') vm = this.viewModel;\n let technique = this.getTechnique(attackID, vm, section);\n let domain = this.dataService.getDomain(vm.domainVersionID);\n return technique.tactics.map((shortname) => domain.tactics.find((t) => t.shortname == shortname));\n }\n\n /**\n * Determine if the lists of tactics between the technique in the new version and\n * old version are the same\n * @param attackID the ATT&CK ID of the object\n * @param section name of the changelog section\n * @returns {boolean} true if the list of tactics are not identical\n */\n public tacticsChanged(attackID: string, section: string): boolean {\n if (section == 'deprecations' || section == 'additions') return false;\n\n let oldTechnique = this.getTechnique(attackID, this.compareTo);\n let newTechnique = this.getTechnique(attackID, this.viewModel, section);\n\n if (!oldTechnique.tactics && !newTechnique.tactics) return false;\n if (oldTechnique.tactics.length !== newTechnique.tactics.length) return true;\n\n // order lists and compare\n let sortArray = function (a, b) {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n let oldTactics = oldTechnique.tactics.sort(sortArray);\n let newTactics = newTechnique.tactics.sort(sortArray);\n if (oldTactics.every((value, i) => value === newTactics[i])) return false;\n return true;\n }\n\n /**\n * Determine if the technique is marked as reviewed\n * @param attackID the ATT&CK ID of the technique\n * @returns {boolean} true if the technique has been marked as reviewed\n */\n public isReviewed(attackID: string): boolean {\n return this.changelog.reviewed.has(attackID);\n }\n\n /**\n * Marks or unmarks a single given technique as reviewed\n * @param attackID the ATT&CK ID of the technique\n * @param panel the object's expansion panel\n */\n public reviewedChanged(attackID: string, panel: MatExpansionPanel): void {\n if (this.isReviewed(attackID)) {\n this.changelog.reviewed.delete(attackID);\n } else {\n this.changelog.reviewed.add(attackID);\n panel.expanded = false; // close on review\n }\n }\n\n /**\n * Expands all the techniques for easy review\n */\n public expandAll(section: string): void {\n let filtered_expand_visible_section = document.getElementById('filter_expand_visible_' + section) as HTMLInputElement;\n this.panels.forEach((panel) => {\n if (filtered_expand_visible_section.checked) {\n panel.open();\n } else {\n panel.close();\n }\n });\n }\n\n /**\n * Marks all techniques in the section as reviewed\n * @param section name of the changelog section\n */\n public reviewAll(section: string): void {\n let sectionIDs = this.changelog[section];\n let filtered_review_all_section = document.getElementById('filter_review_all_' + section) as HTMLInputElement;\n if (filtered_review_all_section.checked) {\n for (let sectionID of sectionIDs) {\n this.changelog.reviewed.add(sectionID);\n }\n } else {\n for (let sectionID of sectionIDs) {\n this.changelog.reviewed.delete(sectionID);\n }\n }\n }\n\n /**\n * Get the number of techniques marked as reviewed in the given section\n * @param section the name of the changelog section\n * @returns number of reviewed techniques\n */\n public countReviewed(section: string): number {\n return this.changelog[section].filter((attackID) => this.changelog.reviewed.has(attackID)).length;\n }\n\n // changelog section descriptions\n private descriptions: any = {\n additions:\n \"The following techniques have been added to the dataset since the layer was created. You can review the techniques below to identify which may require annotations. Annotations may be added using the 'technique controls' in the toolbar.\",\n changes:\n 'The following techniques have undergone major changes since the layer was created such as changes to scope or technique name. You can view the annotations you had previously added, map them to the current ATT&CK version, and adjust them as needed. You can also review the previous and current technique definitions by clicking the version numbers in each row.',\n minor_changes:\n 'The following techniques have had minor revisions since the layer was created such as typo corrections. The annotations have automatically been copied for these techniques, but you can review them if desired. You can also view the previous and current technique definitions by clicking the version numbers under the technique.',\n revocations:\n 'These are techniques which have been replaced by other techniques since the layer was created. You can view the replacing techniques and transfer annotations from the replaced techniques, adjusting them as nessecary. You can also review the replaced and replacing technique definitions by clicking the version numbers under the technique.',\n deprecations:\n 'These are techniques which have been removed from the dataset. You can view any annotations you had previously added to these techniques.',\n unchanged:\n \"These are techniques which have not changed since the uploaded layer's ATT&CK version. The annotations have automatically been copied for these techniques, but you can review them if desired.\",\n finish: \"The overview below indicates either the number of techniques you have reviewed in a section, if you have skipped a section, or if there are no techniques to review in that section. Annotations mapped to the current version have been saved to the new layer.\\n\\nVerify your changes and click 'Done' to complete the layer upgrade workflow. Once completed you cannot return to this workflow.\",\n };\n\n /**\n * Get the changelog section description\n * @param section the name of the changelog section\n * @returns the section description\n */\n public getDescription(section: string): string {\n return this.descriptions[section];\n }\n\n /**\n * Determine if any techniqueVM in the old version with the given\n * ATT&CK ID has annotations\n * @param attackID the ATT&CK ID of the technique\n * @returns {boolean} true if any TechniqueVM for this technique is annotated\n */\n public anyAnnotated(attackID: string): boolean {\n let oldTechnique = this.getTechnique(attackID, this.compareTo);\n if (oldTechnique) {\n let technique_tactic_ids = oldTechnique.get_all_technique_tactic_ids();\n\n for (let id of technique_tactic_ids) {\n if (this.compareTo.getTechniqueVM_id(id).annotated()) return true;\n }\n }\n return false;\n }\n\n /**\n * Is the TechniqueVM for this technique-tactic annotated?\n * @param technique the technique in the old version\n * @param tactic the tactic the technique is found under\n * @param vm the view model\n * @returns {boolean} true if the TechniqueVM is annotated, false otherwise\n */\n public isAnnotated(technique: Technique, tactic: Tactic, vm: ViewModel): boolean {\n return vm.getTechniqueVM(technique, tactic).annotated();\n }\n\n /**\n * Get the total number of techniques currently displayed in a given section\n * @param section the name of the changelog section\n * @returns the total number of annotated techniques in the section if the filter is enabled,\n * otherwise the total number of techniques in the seciton\n */\n public sectionLength(section: string): number {\n if (this.filter[section]) return this.changelog[section].filter((attackID) => this.anyAnnotated(attackID)).length;\n else return this.changelog[section].length;\n }\n\n /**\n * Determine if the annotations of the technique under the given tactic\n * in the old version have been copied to the new version\n * @param technique the technique in the old version\n * @param tactic the tactic the technique is found under\n * @returns {boolean} true if the annotations have been copied to the\n * object in the new version\n */\n public isCopied(technique: Technique, tactic: Tactic): boolean {\n if (this.changelog.copied.has(technique.get_technique_tactic_id(tactic))) return true;\n return false;\n }\n\n /**\n * Copy the annotations from the technique in the old version\n * to the technique in the new version\n * @param attackID the ATT&CK ID of the technique\n * @param tactic the tactic the technique is found under\n */\n public copyAnnotations(attackID: string, tactic: Tactic, section: string): void {\n let fromTechnique = this.getTechnique(attackID, this.compareTo);\n let toTechnique = this.getTechnique(attackID, this.viewModel, section);\n this.viewModel.copyAnnotations(fromTechnique, toTechnique, tactic);\n }\n\n /**\n * Re-enable the annotations on the technique in the old version and\n * reset the annotations on the technique in the new version\n * @param attackID the ATT&CK ID of the technique\n * @param tactic the tactic the technique is found under\n */\n public revertCopy(attackID: string, tactic: Tactic, section: string): void {\n let fromTechnique = this.getTechnique(attackID, this.compareTo);\n let toTechnique = this.getTechnique(attackID, this.viewModel, section);\n this.viewModel.revertCopy(fromTechnique, toTechnique, tactic);\n }\n\n /**\n * Copy the annotations from the TechniqueVM in the old version\n * to the TechniqueVM that the element was dropped over\n * @param event the ngx drop event\n * @param toTechnique the technique object to copy annotations to\n * @param toTactic the tactic object to copy annotations to\n * @param section the name of the changelog section\n */\n public onDrop(event: DndDropEvent, toTechnique: Technique, toTactic: Tactic, section: string): void {\n let attackID = event.data.split('^')[0];\n let validTechnique = this.getTechnique(attackID, this.viewModel, section);\n\n if (validTechnique.id === toTechnique.id) {\n // copying annotations to a valid target?\n // retrieve relevant technique VMs\n let fromTvm = this.compareTo.getTechniqueVM_id(event.data);\n let toTvm = this.viewModel.getTechniqueVM(toTechnique, toTactic);\n\n // copy annotations\n let rep = fromTvm.serialize();\n toTvm.resetAnnotations();\n toTvm.deserialize(rep, toTechnique.attackID, toTactic.shortname);\n this.viewModel.updateScoreColor(toTvm);\n } else {\n // invalid target\n }\n }\n\n /**\n * Remove all annotations from the VM\n * @param technique the technique object to remove annotations from\n * @param tactic the tactic the technique is found under\n */\n public clearAnnotations(technique: Technique, tactic: Tactic): void {\n this.viewModel.getTechniqueVM(technique, tactic).resetAnnotations();\n }\n\n /**\n * Close the layer upgrade sidebar\n */\n public closeSidebar(): void {\n this.viewModel.sidebarOpened = !this.viewModel.sidebarOpened;\n this.viewModel.sidebarContentType = '';\n }\n}\n","\n\n
\n \n \n \n
\n

Layer Upgrade

\n (ATT&CK v{{ compareTo.version }}\n east\n ATT&CK v{{ viewModel.version }})\n
\n

\n Review techniques which have been added, changed, replaced, or removed from the knowledge base since ATT&CK v{{ compareTo.version }}\n and update your Navigator layer to reflect these changes.\n

\n

\n View Versions of ATT&CK\n

\n
\n
\n\n \n\n \n \n Review {{ getHeader(section) }}\n\n
\n {{ desc }}\n
\n\n \n\n
0\">\n

Options

\n
\n \n \n show annotated techniques only\n \n
\n \n \n mark all as reviewed\n \n \n \n expand visible techniques\n \n\n
\n \n
\n\n \n
\n \n \n \n \n check_circle_outline\n radio_button_unchecked\n {{ attackID }}: {{ getTechnique(attackID, viewModel).name }}\n \n \n \n
\n \n
\n east\n
\n
\n
\n \n ATT&CK v{{ viewModel.version }}\n \n
\n \n
\n
\n\n
\n
\n
\n
\n \n
\n
\n
\n\n
\n \n info_outline\n \n
\n\n
\n \n \n\n \n x\n \n
\n
\n
\n\n
\n \n \n \n \n \n \n
\n \n \n \n chevron_right\n \n \n chevron_left\n \n \n \n
\n
\n\n
\n \n \n
\n \n \n \n
\n \n \n
\n\n
\n
No objects to show
\n
\n \n
\n 0\">Reviewed {{ countReviewed(section) }}/{{ sectionLength(section) }} techniques\n \n \n
\n \n\n \n Finish\n\n
\n {{ getDescription('finish') }}\n
\n\n \n\n

Overview

\n
\n {{ getHeader(section) }}: \n 0\">\n Reviewed {{ countReviewed(section) }}/{{ sectionLength(section) }} {{ filter[section] ? 'annotated' : '' }} techniques\n \n No objects to review\n Skipped\n
\n\n \n\n
\n \n \n
\n
\n \n\n","import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { Link, Metadata, ViewModel } from '../classes';\n\n@Component({\n selector: 'app-list-input',\n templateUrl: './list-input.component.html',\n styleUrls: ['./list-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ListInputComponent implements OnInit {\n @Input() config: ListInputConfig;\n public list: (Link | Metadata)[];\n private fieldToClass = {\n links: Link,\n metadata: Metadata,\n };\n public get includeLinks(): boolean {\n return this.config.type == 'links';\n }\n\n ngOnInit(): void {\n if (this.config.level == 'technique') {\n this.list = this.config.list.map((item) => {\n let clone = new this.fieldToClass[this.config.type]();\n clone.deserialize(item.serialize());\n return clone;\n });\n } else {\n this.list = this.config.list;\n }\n }\n\n /**\n * Adds a new item to the list\n */\n public add(): void {\n this.list.push(new this.fieldToClass[this.config.type]());\n }\n\n /**\n * Removes an item from the list at the given index\n * @param i the index of the item to remove\n */\n public remove(i: number): void {\n if (this.list[i - 1] && this.list[i - 1].divider && this.list[i + 1] && this.list[i + 1].divider) {\n this.list.splice(i - 1, 2);\n } else {\n this.list.splice(i, 1);\n }\n\n if (this.list[0]?.divider) this.removeDivider(0);\n if (this.list[this.list.length - 1] && this.list[this.list.length - 1].divider) this.removeDivider(this.list.length - 1);\n\n this.updateList();\n }\n\n /**\n * Validate items in the list and update the field on selected techniques\n */\n public updateList(): void {\n let value = this.list.filter((item) => item.valid());\n\n if (this.config.level == 'technique') {\n // do not update techniques if editing a layer-level list\n this.config.viewModel.editSelectedTechniqueValues(this.config.type, value);\n }\n }\n\n /**\n * Checks if a divider can be added at the previous index\n *\n * Note: a divider can only be added if both the items at the current and previous\n * indices are valid non-divider items.\n *\n * @param i the current index\n * @returns true, if a divider can be added, false otherwise\n */\n public canAddDivider(i: number): boolean {\n if (i < 1) return false; // cannot add divider before the first item\n if (this.list[i]?.valid() && !this.list[i]?.divider && this.list[i - 1]?.valid() && !this.list[i - 1]?.divider) {\n return true;\n }\n return false;\n }\n\n /**\n * Add a divider at the given index\n * @param i the index at which to add a divider\n */\n public addDivider(i: number): void {\n let item = new this.fieldToClass[this.config.type]();\n item.divider = true;\n this.list.splice(i, 0, item);\n this.updateList();\n }\n\n /**\n * Remove a divider at the given index\n * @param i the index of the divider to remove\n */\n public removeDivider(i: number): void {\n this.list.splice(i, 1);\n this.updateList();\n }\n}\n\nexport interface ListInputConfig {\n /** The viewmodel */\n viewModel: ViewModel;\n /** The list to edit */\n list: (Link | Metadata)[];\n /** The item type */\n type: 'links' | 'metadata';\n /**\n * Identifies whether the list exists on the technique or layer level\n * If on the technique level, the list must be cloned to prevent\n * empty values from being added; all selected techniques\n * will be updated with the new values\n * If on the layer level, the list is edited directly and does\n * not update selected techniques with the new values\n */\n level: 'layer' | 'technique';\n /** The label attribute of the list */\n nameField: string;\n /** The value attribute of the list */\n valueField: string;\n}\n","
\n
\n \n
\n \n
\n \n
\n \n
\n\n \n
\n \n {{config.nameField}}\n \n \n \n {{config.valueField}}\n \n \n \n {{ item[config.nameField] }}\n \n
\n \n
\n
\n
\n
\n
\n \n
\n","import { Input, Directive } from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { Technique, Tactic } from '../classes/stix';\nimport { ViewModel } from '../classes';\nimport { getCookie, hasCookie } from '../utils/cookies';\nimport { ConfigService } from '../services/config.service';\nimport tinycolor from 'tinycolor2';\n\n@Directive()\nexport abstract class Cell {\n @Input() viewModel: ViewModel;\n @Input() technique: Technique;\n @Input() tactic: Tactic;\n\n public showContextmenu: boolean = false;\n public isDarkTheme: boolean;\n\n constructor(\n public dataService: DataService,\n public configService: ConfigService\n ) {\n this.dataService = dataService;\n this.configService = configService;\n if (hasCookie('is_user_theme_dark')) this.isDarkTheme = getCookie('is_user_theme_dark') === 'true';\n else this.isDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches;\n }\n\n public get isHighlighted(): boolean {\n let isHighlighted = this.showContextmenu;\n let idToMatch = this.technique.id;\n if (this.viewModel.selectSubtechniquesWithParent && this.technique.isSubtechnique) idToMatch = this.technique.parent.id;\n\n if (this.viewModel.highlightedTechniques.has(idToMatch)) {\n if (!this.viewModel.highlightedTactic) {\n // highlight is called from search component\n return true;\n } else {\n const isTacticMatching = this.viewModel.highlightedTactic.id === this.tactic.id;\n return this.viewModel.selectTechniquesAcrossTactics || isTacticMatching;\n }\n }\n\n return isHighlighted;\n }\n\n /**\n * Return css classes for a technique\n * @param {technique} technique the technique to get the class of\n * @param {boolean} mini is it the minitable?\n * @return {string} the classes the technique should currently have\n */\n public getClass(): string {\n let theclass = 'link noselect cell';\n if (this.tactic && this.viewModel.isTechniqueSelected(this.technique, this.tactic)) theclass += ' editing';\n if (this.isHighlighted) {\n //open context menu always keeps highlight even if the mouse has moved elsewhere\n theclass += ' highlight';\n }\n\n // classes added by layout config\n if (this.viewModel.layout.showID) {\n theclass += ' showID';\n //change sticky top position of technique count\n let elements = document.querySelectorAll('.tactic.count');\n for (let i = 0; i < elements.length; i++) {\n elements[i].style.top = '46px';\n }\n }\n if (this.viewModel.layout.showName) theclass += ' showName';\n theclass += ' ' + this.viewModel.layout.layout;\n\n // classes according to annotations\n if (\n (this.tactic && this.viewModel.getTechniqueVM(this.technique, this.tactic).comment.length > 0) ||\n this.viewModel.getTechniqueVM(this.technique, this.tactic).metadata.length > 0 ||\n this.viewModel.getTechniqueVM(this.technique, this.tactic).links.length > 0 ||\n this.hasNotes()\n )\n theclass += ' underlined';\n if (this.getTechniqueBackground()) theclass += ' colored';\n if (this.tactic && !this.viewModel.getTechniqueVM(this.technique, this.tactic).enabled) theclass += ' disabled';\n\n return theclass;\n }\n\n /**\n * Emulate transparency without an alpha channel\n * @param color color with alpha channel\n * @returns color without an alpha channel which has been mixed with the proper background color as if it is transparent\n */\n public emulate_alpha(color: any) {\n /* note: constructing a tinycolor of a tinycolor makes them aliases. E.g:\n *\n * x = tinycolor(\"#ffffff\")\n * y = tinycolor(x)\n * y.getAlpha() -> 1\n * x.setAlpha(0)\n * y.getAlpha() -> 0\n *\n * Therefore y must be cloned after it is constructed to avoid transformations of x affecting it.\n * In this context, the color arg must be cloned because\n * in some contexts it is a tinycolor and we change its alpha below,\n * which could affect the copy in the calling function\n */\n if (!color || color.length < 1) return '';\n let cell_color = tinycolor(color).clone();\n let cell_color_alpha = cell_color.getAlpha();\n cell_color.setAlpha(1);\n let result = tinycolor.mix(this.isDarkTheme ? '#2e2e3f' : '#ffffff', cell_color, cell_color_alpha * 100);\n return result;\n }\n\n /**\n * Get most readable text color for the given technique\n * @param technique the technique to get the text color for\n * @param antihighlight boolean, true if the column is not selected.\n * @return black, white, or gray, depending on technique and column state\n */\n public getTechniqueTextColor() {\n if (!this.tactic) return this.isDarkTheme ? 'white' : 'black';\n let tvm = this.viewModel.getTechniqueVM(this.technique, this.tactic);\n if (!tvm.enabled) return this.isDarkTheme ? 'rgb(255 255 255 / 25%)' : '#aaaaaa';\n // don't display if disabled or highlighted\n // if (this.viewModel.highlightedTechnique && this.viewModel.highlightedTechnique.technique_tactic_union_id == this.technique.technique_tactic_union_id) return \"black\"\n if (tvm.color && this.configService.getFeature('background_color'))\n return tinycolor.mostReadable(this.emulate_alpha(tvm.color), ['white', 'black']);\n if (\n this.viewModel.layout.showAggregateScores &&\n tvm.aggregateScoreColor &&\n this.technique.subtechniques.length > 0 &&\n this.configService.getFeature('aggregate_score_color')\n )\n return tinycolor.mostReadable(this.emulate_alpha(tvm.aggregateScoreColor), ['white', 'black']);\n if (tvm.score && !isNaN(Number(tvm.score)) && this.configService.getFeature('non_aggregate_score_color'))\n return tinycolor.mostReadable(this.emulate_alpha(tvm.scoreColor), ['white', 'black']);\n else return this.isDarkTheme ? 'white' : 'black';\n }\n\n /**\n * Get the underline color for the given technique. The comment/metadata\n * underscore color overrides the link underscore color.\n */\n public getTechniqueUnderlineColor() {\n if (this.tactic) {\n let tvm = this.viewModel.getTechniqueVM(this.technique, this.tactic);\n if (tvm.comment.length > 0 || this.hasNotes()) {\n if (this.configService.getFeature('comment_underline')) return this.configService.commentColor;\n }\n if (tvm.metadata.length > 0) {\n if (this.configService.getFeature('metadata_underline')) return this.configService.metadataColor;\n }\n if (tvm.links.length > 0) {\n if (this.configService.getFeature('link_underline')) return this.configService.linkColor;\n }\n }\n return '';\n }\n\n /**\n * Check if technique has notes\n * @return true if technique has notes, false otherwise\n */\n public hasNotes() {\n let domain = this.dataService.getDomain(this.viewModel.domainVersionID);\n let notes = domain.notes.filter((note) => {\n return note.object_refs.includes(this.technique.id);\n });\n return notes.length > 0;\n }\n\n /**\n * get the technique background style for ngstyle\n * @param technique technique\n * @return background object\n */\n public getTechniqueBackground(): any {\n if (!this.tactic) return null;\n let tvm = this.viewModel.getTechniqueVM(this.technique, this.tactic);\n // don't display if disabled or highlighted\n if (!tvm.enabled || this.isHighlighted) return null;\n if (tvm.color && this.configService.getFeature('background_color')) return { background: this.emulate_alpha(tvm.color) };\n if (\n this.viewModel.layout.showAggregateScores &&\n this.technique.subtechniques.length > 0 &&\n !isNaN(Number(tvm.aggregateScore)) &&\n tvm.aggregateScore.length > 0 &&\n this.configService.getFeature('aggregate_score_color')\n ) {\n return { background: this.emulate_alpha(tvm.aggregateScoreColor) };\n }\n if (tvm.score && this.configService.getFeature('non_aggregate_score_color')) return { background: this.emulate_alpha(tvm.scoreColor) };\n }\n}\n","import { Input, Directive } from '@angular/core';\nimport { Matrix, Technique, Tactic } from '../classes/stix';\nimport { ViewModelsService } from '../services/viewmodels.service';\nimport { ConfigService } from '../services/config.service';\nimport { ViewModel } from '../classes';\nimport tinycolor from 'tinycolor2';\n\n@Directive()\nexport abstract class MatrixCommon {\n @Input() matrix: Matrix;\n @Input() viewModel: ViewModel;\n\n constructor(\n public configService: ConfigService,\n public viewModelsService: ViewModelsService\n ) {\n this.configService = configService;\n }\n\n /**\n * filter tactics according to viewmodel state\n * @param {Tactic[]} tactics to filter\n * @returns {Tactic[]} filtered tactics\n */\n public filterTactics(tactics: Tactic[]): Tactic[] {\n return this.viewModel.filterTactics(tactics, this.matrix);\n }\n\n /**\n * filter techniques according to viewModel state\n * @param {Technique[]} techniques list of techniques to filter\n * @param {Tactic} tactic tactic the techniques fall under\n * @returns {Technique[]} filtered techniques\n */\n public filterTechniques(techniques: Technique[], tactic: Tactic): Technique[] {\n return this.viewModel.filterTechniques(techniques, tactic, this.matrix);\n }\n\n /**\n * sort techniques accoding to viewModel state\n * @param {Technique[]} techniques techniques to sort\n * @param {Tactic} tactic tactic the techniques fall under\n * @returns {Technique[]} sorted techniques\n */\n public sortTechniques(techniques: Technique[], tactic: Tactic): Technique[] {\n return this.viewModel.sortTechniques(techniques, tactic);\n }\n\n /**\n * apply sort and filter state to techniques\n * @param {Technique[]} techniques techniques to sort and filter\n * @param {Tactic} tactic that the techniques fall under\n * @returns {Technique[]} sorted and filtered techniques\n */\n public applyControls(techniques: Technique[], tactic: Tactic): Technique[] {\n return this.viewModel.applyControls(techniques, tactic, this.matrix);\n }\n\n public onTechniqueLeftClick(event: any, technique: Technique, tactic: Tactic) {\n if (!this.configService.getFeature('selecting_techniques')) {\n //if selecting is disabled, same behavior as right click. Shouldn't ever get to this point because it should be handled in technique-cell\n return;\n }\n if (event.shift || event.ctrl || event.meta) {\n // add to selection\n if (this.viewModel.isTechniqueSelected(technique, tactic)) this.viewModel.unselectTechnique(technique, tactic);\n else this.viewModel.selectTechnique(technique, tactic);\n } else {\n // replace selection\n if (this.viewModel.getSelectedTechniqueCount() > 1) {\n if (this.viewModel.isTechniqueSelected(technique, tactic)) this.viewModel.clearSelectedTechniques();\n this.viewModel.selectTechnique(technique, tactic);\n } else if (this.viewModel.isTechniqueSelected(technique, tactic)) {\n //unselect currently selected\n this.viewModel.clearSelectedTechniques();\n } else {\n //replace\n this.viewModel.clearSelectedTechniques();\n this.viewModel.selectTechnique(technique, tactic);\n }\n }\n this.viewModelsService.onSelectionChange.emit();\n }\n\n public onToggleSubtechniquesVisible(technique: Technique, tactic: Tactic) {\n if (technique.subtechniques.length == 0) return;\n let tvm = this.viewModel.getTechniqueVM(technique, tactic);\n tvm.showSubtechniques = !tvm.showSubtechniques;\n }\n\n public onTechniqueHighlight(event: any, technique: Technique, tactic: Tactic) {\n this.viewModel.highlightTechnique(technique, tactic);\n }\n public onTechniqueUnhighlight(event: any) {\n this.viewModel.clearHighlight();\n }\n\n public onTacticClick(tactic: Tactic) {\n if (this.viewModel.isTacticSelected(tactic)) this.viewModel.unselectAllTechniquesInTactic(tactic);\n else this.viewModel.selectAllTechniquesInTactic(tactic);\n }\n\n public getTacticBackground(): any {\n if (this.viewModel.showTacticRowBackground)\n return {\n background: this.viewModel.tacticRowBackground,\n color: tinycolor.mostReadable(this.viewModel.tacticRowBackground, ['white', 'black']),\n };\n else {\n return {};\n }\n }\n}\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatrixCommon } from '../matrix-common';\nimport { ConfigService } from '../../services/config.service';\nimport { ViewModelsService } from '../../services/viewmodels.service';\n\n@Component({\n selector: 'matrix-flat',\n templateUrl: './matrix-flat.component.html',\n styleUrls: ['./matrix-flat.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatrixFlatComponent extends MatrixCommon implements OnInit {\n constructor(configService: ConfigService, viewModelsService: ViewModelsService) {\n super(configService, viewModelsService);\n }\n\n ngOnInit(): void {\n // intentionally left blank\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n {{ filterTechniques(tactic.techniques, tactic).length }}\n  techniques\n
\n \n \n \n \n \n \n \n 0\"\n class=\"sidebar technique\"\n [ngClass]=\"{ disabled: applyControls(technique.subtechniques, tactic).length == 0 }\"\n (click)=\"onToggleSubtechniquesVisible(technique, tactic)\">\n
=
\n \n
\n \n \n \n \n \n
\n \n
0\" class=\"sidebar subtechniques\">\n \n \n \n \n
\n \n
\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { MatrixCommon } from '../matrix-common';\nimport { ConfigService } from '../../services/config.service';\nimport { ViewModelsService } from '../../services/viewmodels.service';\n\n@Component({\n selector: 'matrix-mini',\n templateUrl: './matrix-mini.component.html',\n styleUrls: ['./matrix-mini.component.scss'],\n})\nexport class MatrixMiniComponent extends MatrixCommon implements OnInit {\n constructor(configService: ConfigService, viewModelsService: ViewModelsService) {\n super(configService, viewModelsService);\n }\n\n ngOnInit(): void {\n // intentionally left blank\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n
0; else elseblock\">\n
\n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n
\n","import { Component, OnInit, ViewEncapsulation } from '@angular/core';\nimport { MatrixCommon } from '../matrix-common';\nimport { ConfigService } from '../../services/config.service';\nimport { ViewModelsService } from '../../services/viewmodels.service';\n\n@Component({\n selector: 'matrix-side',\n templateUrl: './matrix-side.component.html',\n styleUrls: ['./matrix-side.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class MatrixSideComponent extends MatrixCommon implements OnInit {\n constructor(configService: ConfigService, viewModelsService: ViewModelsService) {\n super(configService, viewModelsService);\n }\n\n ngOnInit(): void {\n // intentionally left blank\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n
\n {{ filterTechniques(tactic.techniques, tactic).length }}\n  techniques\n
\n \n \n \n 0\"\n [ngClass]=\"{\n disabled: applyControls(technique.subtechniques, tactic).length == 0,\n expanded:\n viewModel.getTechniqueVM(technique, tactic).showSubtechniques &&\n applyControls(technique.subtechniques, tactic).length > 0\n }\"\n class=\"sidebar sidebar--{{ tactic.id }}--{{ technique.id }}\"\n (click)=\"onToggleSubtechniquesVisible(technique, tactic)\">\n
\n \n \n \n
\n
=
\n
\n \n \n \n
\n \n
\n \n
\n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n","import { Component, OnInit, Input, ViewEncapsulation } from '@angular/core';\nimport { Tactic } from '../../classes/stix';\nimport { ViewModel } from '../../classes';\n\n@Component({\n selector: 'tactic-cell',\n templateUrl: './tactic-cell.component.html',\n styleUrls: ['./tactic-cell.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TacticCellComponent implements OnInit {\n @Input() tactic: Tactic;\n @Input() viewModel: ViewModel;\n\n constructor() {\n // intentionally left blank\n }\n\n ngOnInit() {\n // intentionally left blank\n }\n}\n","\n {{ tactic.attackID }}\n
\n {{ tactic.name }}\n\n","import { ElementRef } from '@angular/core';\n\nexport abstract class CellPopover {\n private theElement: any;\n constructor(element: ElementRef) {\n this.theElement = element.nativeElement;\n }\n\n /**\n * Get the location of the tooltip according to the location on the screen.\n * Returns one of the following:\n * \"top left\":\n * ------------------\n * | XXXX |\n * | XXXX |\n * | X |\n * | |\n * ------------------\n * \"top right\":\n * ------------------\n * | XXXX |\n * | XXXX |\n * | X |\n * | |\n * ------------------\n * \"bottom left\":\n * ------------------\n * | |\n * | XXXX X |\n * | XXXX |\n * ------------------\n * \"bottom right\":\n * ------------------\n * | |\n * | X XXXX |\n * | XXXX |\n * ------------------\n * @returns {string} direction\n */\n public getPosition(): string {\n let boundingRect = this.theElement.getBoundingClientRect();\n let halfWidth = window.innerWidth / 2;\n let halfHeight = window.innerHeight / 2;\n let position = [];\n if (boundingRect.right > halfWidth) position.push('left');\n else position.push('right');\n if (boundingRect.bottom > halfHeight) position.push('top');\n else position.push('bottom');\n return position.join(' ');\n }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, ElementRef, ViewEncapsulation } from '@angular/core';\nimport { ContextMenuItem, Link, TechniqueVM, ViewModel } from '../../../classes';\nimport { Technique, Tactic } from '../../../classes/stix';\nimport { ViewModelsService } from '../../../services/viewmodels.service';\nimport { ConfigService } from '../../../services/config.service';\nimport { CellPopover } from '../cell-popover';\n\n@Component({\n selector: 'app-contextmenu',\n templateUrl: './contextmenu.component.html',\n styleUrls: ['./contextmenu.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ContextmenuComponent extends CellPopover implements OnInit {\n @Input() technique: Technique;\n @Input() tactic: Tactic;\n @Input() viewModel: ViewModel;\n public placement: string;\n @Output() close = new EventEmitter();\n\n public get techniqueVM(): TechniqueVM {\n return this.viewModel.getTechniqueVM(this.technique, this.tactic);\n }\n\n public get links(): Link[] {\n return this.techniqueVM.links;\n }\n\n constructor(\n private element: ElementRef,\n public configService: ConfigService,\n public viewModelsService: ViewModelsService\n ) {\n super(element);\n }\n\n ngOnInit() {\n this.placement = this.getPosition();\n }\n\n public closeContextmenu() {\n this.close.emit();\n }\n\n public select() {\n this.viewModel.clearSelectedTechniques();\n this.viewModel.selectTechnique(this.technique, this.tactic);\n this.closeContextmenu();\n }\n\n public addSelection() {\n this.viewModel.selectTechnique(this.technique, this.tactic);\n this.closeContextmenu();\n }\n\n public removeSelection() {\n this.viewModel.unselectTechnique(this.technique, this.tactic);\n this.closeContextmenu();\n }\n\n public selectAll() {\n this.viewModel.selectAllTechniques();\n this.closeContextmenu();\n }\n\n public deselectAll() {\n this.viewModel.clearSelectedTechniques();\n this.closeContextmenu();\n }\n\n public invertSelection() {\n this.viewModel.invertSelection();\n this.closeContextmenu();\n }\n\n public selectAnnotated() {\n this.viewModel.selectAnnotated();\n this.closeContextmenu();\n }\n\n public selectUnannotated() {\n this.viewModel.selectUnannotated();\n this.closeContextmenu();\n }\n\n public selectAllInTactic() {\n this.viewModel.selectAllTechniquesInTactic(this.tactic);\n this.closeContextmenu();\n }\n\n public deselectAllInTactic() {\n this.viewModel.unselectAllTechniquesInTactic(this.tactic);\n this.closeContextmenu();\n }\n\n public viewTechnique() {\n window.open(this.technique.url, '_blank');\n this.closeContextmenu();\n }\n\n public viewTactic() {\n window.open(this.tactic.url, '_blank');\n this.closeContextmenu();\n }\n\n public pinCell() {\n this.viewModelsService.pinnedCell =\n this.viewModelsService.pinnedCell === this.techniqueVM.technique_tactic_union_id ? '' : this.techniqueVM.technique_tactic_union_id;\n this.closeContextmenu();\n }\n\n public openCustomContextMenuItem(customItem: ContextMenuItem) {\n window.open(customItem.getReplacedURL(this.technique, this.tactic), '_blank');\n this.closeContextmenu();\n }\n\n public openLink(link: Link) {\n window.open(link.url);\n this.closeContextmenu();\n }\n}\n","
\n \n
\n \n
\n
\n
{{ technique.name }} ({{ technique.attackID }})
\n
\n
\n
pin/unpin tooltip
\n
\n
\n
select
\n
add to selection
\n
remove from selection
\n
\n
\n
select all
\n
deselect all
\n
invert selection
\n
\n
\n
select annotated
\n
select unannotated
\n
\n
\n
select all techniques in tactic
\n
deselect all techniques in tactic
\n
\n
\n
view technique
\n
view tactic
\n
\n
0\">\n \n {{ contextMenuItem.label }}\n
\n
\n
\n \n
\n
\n\n","import { Component, OnInit, Input, EventEmitter, Output, ViewEncapsulation } from '@angular/core';\nimport { DataService } from '../../services/data.service';\nimport { Technique, Tactic, Matrix } from '../../classes/stix';\nimport { ConfigService } from '../../services/config.service';\nimport { Cell } from '../cell';\nimport { ViewModelsService } from '../../services/viewmodels.service';\n\n@Component({\n selector: 'technique-cell',\n templateUrl: './technique-cell.component.html',\n styleUrls: ['./technique-cell.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TechniqueCellComponent extends Cell implements OnInit {\n @Input() matrix: Matrix;\n @Output() highlight = new EventEmitter(); // emit with the highlighted technique, or null to unhighlight\n @Output() unhighlight = new EventEmitter();\n @Output() leftclick = new EventEmitter(); // emit with the selected technique and the modifier keys\n\n public get isCellPinned(): boolean {\n return this.viewModelsService.pinnedCell === this.viewModel.getTechniqueVM(this.technique, this.tactic).technique_tactic_union_id;\n }\n\n public get showTooltip(): boolean {\n if (this.isCellPinned) return true;\n if (this.showContextmenu) return false;\n if (this.viewModel.highlightedTechniques.size === 0) return false;\n\n return (\n this.viewModel.highlightedTechnique === this.technique &&\n this.viewModel.highlightedTactic &&\n this.viewModel.highlightedTactic.id === this.tactic.id\n );\n }\n\n constructor(\n public dataService: DataService,\n public configService: ConfigService,\n public viewModelsService: ViewModelsService\n ) {\n super(dataService, configService);\n }\n\n ngOnInit(): void {\n // intentionally left blank\n }\n\n // count number of annotated sub-techniques on this technique\n public annotatedSubtechniques(): number {\n let annotatedSubs: Technique[] = [];\n for (let s of this.technique.subtechniques) {\n let subVM = this.viewModel.getTechniqueVM(s, this.tactic);\n if (subVM.annotated()) annotatedSubs.push(s);\n }\n return this.applyControls(annotatedSubs, this.tactic).length;\n }\n\n // sort and filter techniques\n public applyControls(techniques: Technique[], tactic: Tactic): Technique[] {\n return this.viewModel.applyControls(techniques, tactic, this.matrix);\n }\n\n // events to pass to parent component\n public onMouseEnter() {\n this.highlight.emit();\n }\n public onMouseLeave() {\n this.unhighlight.emit();\n }\n public onLeftClick(event) {\n if (!this.isCellPinned) this.viewModelsService.pinnedCell = '';\n if (this.configService.getFeature('selecting_techniques'))\n this.leftclick.emit({\n technique: this.technique,\n // modifier keys\n shift: event.shiftKey,\n ctrl: event.ctrlKey,\n meta: event.metaKey,\n // position of event on page\n x: event.pageX,\n y: event.pageY,\n });\n else this.onRightClick(event);\n }\n public onRightClick(event) {\n if (!this.isCellPinned) this.viewModelsService.pinnedCell = '';\n this.showContextmenu = true;\n }\n\n // return css classes for a technique\n public getClass(): string {\n let theclass = super.getClass();\n\n // classes by annotated sub-techniques\n if (!this.annotatedSubtechniques()) theclass += ' unannotated';\n\n if (this.isCellPinned) theclass += ' editing';\n\n return theclass;\n }\n}\n","
\n
\n \n {{ technique.attackID }}\n
\n {{ technique.name }}\n
\n 0\">\n \n  ({{ annotatedSubtechniques() }}/{{ applyControls(technique.subtechniques, tactic).length }})\n \n \n
\n \n \n
\n","import { Component, OnInit, Input, ElementRef, ViewEncapsulation } from '@angular/core';\nimport { DataService } from '../../../services/data.service';\nimport { Technique, Tactic, Note } from '../../../classes/stix';\nimport { ViewModel, TechniqueVM } from '../../../classes';\nimport { ViewModelsService } from '../../../services/viewmodels.service';\nimport { CellPopover } from '../cell-popover';\n\n@Component({\n selector: 'app-tooltip',\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TooltipComponent extends CellPopover implements OnInit {\n @Input() technique: Technique;\n @Input() tactic: Tactic;\n @Input() viewModel: ViewModel;\n public placement: string;\n public notes: Note[];\n\n public get isCellPinned(): boolean {\n return this.viewModelsService.pinnedCell === this.techniqueVM.technique_tactic_union_id;\n }\n\n public get techniqueVM(): TechniqueVM {\n return this.viewModel.getTechniqueVM(this.technique, this.tactic);\n }\n\n constructor(\n public element: ElementRef,\n public dataService: DataService,\n public viewModelsService: ViewModelsService\n ) {\n super(element);\n }\n\n ngOnInit() {\n this.placement = this.getPlacement();\n let domain = this.dataService.getDomain(this.viewModel.domainVersionID);\n this.notes = domain.notes.filter((note) => {\n return note.object_refs.includes(this.technique.id);\n });\n }\n\n public getPlacement(): string {\n return this.getPosition();\n }\n\n public unpin(): void {\n this.viewModelsService.pinnedCell = '';\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n {{ technique.name }} ({{ technique.attackID }})\n \n push_pin\n \n
Disabled
Score:{{ techniqueVM.score }}
Aggregate Score ({{ viewModel.layout.aggregateFunction }}):{{ techniqueVM.aggregateScore }}
Comment:{{ techniqueVM.comment }}
{{ note.abstract }}:{{ note.content }}

{{ metadata.name }}:{{ metadata.value }}
\n
\n","import { Component, OnInit, Input, ViewEncapsulation } from '@angular/core';\nimport { StixObject, Group, Mitigation, Software, Technique, Campaign, Asset } from '../classes/stix';\nimport { ViewModelsService } from '../services/viewmodels.service';\nimport { DataService } from '../services/data.service';\nimport { ViewModel } from '../classes';\n\n@Component({\n selector: 'app-search-and-multiselect',\n templateUrl: './search-and-multiselect.component.html',\n styleUrls: ['./search-and-multiselect.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SearchAndMultiselectComponent implements OnInit {\n @Input() viewModel: ViewModel;\n\n public stixTypes: any[] = [];\n public techniqueResults: Technique[] = [];\n // Data Components is a map mainly because it is a collection of labels that map to\n // an array of techniques, where we want to filter/sort by label name\n public stixDataComponents = new Map();\n public stixDataComponentLabels: string[] = [];\n public userClickedExpand: boolean = false;\n\n public expandedPanels = {\n 0: true, // techniques panel\n 1: false, // groups panel\n 2: false, // software panel\n 3: false, // campaign panel\n 4: false, // mitigations panel\n 5: false, // data components panel\n 6: false, // assets panel\n };\n\n public fields = [\n {\n label: 'name',\n field: 'name',\n enabled: true,\n },\n {\n label: 'ATT&CK ID',\n field: 'attackID',\n enabled: true,\n },\n {\n label: 'description',\n field: 'description',\n enabled: true,\n },\n {\n label: 'data sources',\n field: 'datasources',\n enabled: true,\n },\n ];\n\n private debounceFunction;\n private previousQuery: string = '';\n private _query: string = '';\n\n // query setter\n public set query(newQuery: string) {\n this._query = newQuery;\n if (!this.debounceFunction) {\n this.debounceFunction = setTimeout(() => {\n this.getResults(this._query);\n this.debounceFunction = null;\n this.previousQuery = this._query;\n }, 300);\n }\n }\n\n // get query length\n public get queryLength(): number {\n return this._query.length;\n }\n\n // get techniques matching label\n public get stixDataComponentsResults(): Technique[] {\n let results = [];\n this.stixDataComponentLabels.forEach((label) => {\n results = results.concat(this.stixDataComponents.get(label).objects);\n });\n return results;\n }\n\n constructor(\n private dataService: DataService,\n private viewModelsService: ViewModelsService\n ) {\n // intentionally left blank\n }\n\n ngOnInit() {\n this.getResults();\n }\n\n /**\n * Takes an array of items and does the following:\n * 1) if the query is empty, then it sorts the array\n * 2) if the query is not empty, then it filters the already sorted array until nothing is left, or until\n * the query is cleared out and empty again\n * @param items StixObject[] or Technique[] objects to be filtered and sorted\n * @param query user-input query in search bar\n * @param sortTechniquesAndSubtechniques will be true if called from getTechniqueResults(),\n * to sort techniques and all its subtechniques,\n * otherwise just sort StixObject items by name\n */\n public filterAndSort(items: StixObject[], query: string = '', sortTechniquesAndSubtechniques = false): any[] {\n let self = this;\n let results = items.filter((t) => !t.deprecated && !t.revoked);\n\n if (query.trim() === '') {\n // sort the array\n if (sortTechniquesAndSubtechniques) {\n results.sort((tA: Technique, tB: Technique) => {\n let c1 = tA.isSubtechnique ? tA.parent.name : tA.name;\n let c2 = tB.isSubtechnique ? tB.parent.name : tB.name;\n return c1.localeCompare(c2);\n });\n } else {\n results.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));\n }\n } else {\n // deconflict IDs for cross-tactic techniques\n let seenIDs = new Set();\n results = results.filter(function (technique: Technique) {\n if (seenIDs.has(technique.id)) return false;\n for (let field of self.fields) {\n if (field.enabled) {\n // query in this field\n if (technique[field.field]?.toLowerCase().includes(query.trim().toLowerCase())) {\n seenIDs.add(technique.id);\n return true;\n }\n }\n }\n return false;\n });\n }\n return results;\n }\n\n /**\n * Filters and sorts data component labels\n * @param labels list of data component labels\n * @param query user-input query in search bar\n */\n public filterAndSortLabels(labels: string[], query: string): string[] {\n let results: string[] = labels;\n if (query.trim() === '') {\n return results.sort();\n } else {\n return results.filter((r) => r.toLowerCase().includes(query.trim().toLowerCase()));\n }\n }\n\n /**\n * Checks if the query is:\n * 1) valid, and\n * 2) part of last query, otherwise call getTechniques() and getStixData() to search all objects again\n **/\n public getResults(query: string = '', fieldToggled = false) {\n if (query.trim() != '' && query.includes(this.previousQuery) && !fieldToggled) {\n this.techniqueResults = this.filterAndSort(this.techniqueResults, query, true);\n this.stixTypes.forEach((item) => (item['objects'] = this.filterAndSort(item['objects'], query)));\n } else {\n this.getTechniques();\n this.getStixData();\n }\n this.stixDataComponentLabels = this.filterAndSortLabels(this.stixDataComponentLabels, query);\n this.expandPanels();\n }\n\n /**\n * Update expanded panels based on query and results\n */\n public expandPanels() {\n if (!this.userClickedExpand) {\n this.expandedPanels[0] = this.techniqueResults.length > 0;\n let isPrevExpanded = this.expandedPanels[0];\n if (!isPrevExpanded) {\n this.stixTypes.forEach((s, i) => {\n this.expandedPanels[i + 1] = !isPrevExpanded && s.objects.length > 0;\n isPrevExpanded = s.isExpanded;\n });\n }\n this.expandedPanels[4] = !isPrevExpanded && this.stixDataComponentLabels.length > 0;\n } else {\n let isAllCollapsed = false;\n for (const isPanelExpanded in this.expandedPanels) {\n if (isPanelExpanded) {\n isAllCollapsed = true;\n break;\n }\n }\n this.userClickedExpand = isAllCollapsed;\n }\n }\n\n /**\n * Retrieve master list of techniques and sub-techniques\n */\n public getTechniques(): void {\n let allTechniques = this.dataService.getDomain(this.viewModel.domainVersionID).techniques;\n for (let technique of allTechniques) {\n allTechniques = allTechniques.concat(technique.subtechniques);\n }\n this.techniqueResults = this.filterAndSort(allTechniques, this._query, true);\n }\n\n /**\n * Retrieve master list of STIX objects\n */\n public getStixData(): void {\n let domain = this.dataService.getDomain(this.viewModel.domainVersionID);\n\n this.stixTypes = [\n {\n label: 'threat groups',\n objects: this.filterAndSort(domain.groups, this._query),\n },\n {\n label: 'software',\n objects: this.filterAndSort(domain.software, this._query),\n },\n {\n label: 'mitigations',\n objects: this.filterAndSort(domain.mitigations, this._query),\n },\n {\n label: 'campaigns',\n objects: this.filterAndSort(domain.campaigns, this._query),\n },\n {\n label: 'assets',\n objects: this.filterAndSort(domain.assets, this._query),\n },\n ];\n\n domain.dataComponents.forEach((c) => {\n const source = c.source(this.viewModel.domainVersionID);\n const label = `${source.name}: ${c.name}`;\n const obj = {\n objects: c.techniques(this.viewModel.domainVersionID),\n url: source.url,\n };\n this.stixDataComponents.set(label, obj);\n });\n this.stixDataComponentLabels = this.filterAndSortLabels(Array.from(this.stixDataComponents.keys()), this._query);\n }\n\n public toggleFieldEnabled(field: string) {\n for (let thefield of this.fields) {\n if (thefield.field == field) {\n thefield.enabled = !thefield.enabled;\n // set query to empty string to trigger getResults() in the case that:\n // 1) a field was toggled, and\n // 2) the query did not change\n this.getResults('', true);\n break;\n }\n }\n }\n\n public mouseEnterAll(techniques: Technique[]) {\n techniques.forEach((t) => this.mouseEnter(t));\n }\n\n public mouseEnter(technique: Technique, isTechnique = true): void {\n if (!isTechnique) {\n for (let t of this.getRelated(technique)) {\n this.viewModel.selectTechniqueAcrossTactics(t, true, true);\n }\n } else {\n this.viewModel.highlightTechnique(technique);\n }\n }\n\n public mouseLeave(): void {\n this.viewModel.clearHighlight();\n }\n\n public select(stixObject: any, isTechnique = true): void {\n if (isTechnique) {\n this.viewModel.selectTechniqueAcrossTactics(stixObject);\n } else if (!isTechnique) {\n for (let technique of this.getRelated(stixObject)) {\n this.viewModel.selectTechniqueAcrossTactics(technique);\n }\n }\n this.viewModelsService.onSelectionChange.emit(); // emit selection change\n }\n\n public deselect(stixObject: any, isTechnique = true): void {\n if (isTechnique) {\n this.viewModel.unselectTechniqueAcrossTactics(stixObject);\n } else if (!isTechnique) {\n for (let technique of this.getRelated(stixObject)) {\n this.viewModel.unselectTechniqueAcrossTactics(technique);\n }\n }\n this.viewModelsService.onSelectionChange.emit(); // emit selection change\n }\n\n public selectAll(items: any[], isTechniqueArray = true): void {\n if (isTechniqueArray) {\n for (let result of items) this.select(result, isTechniqueArray);\n } else if (!isTechniqueArray) {\n for (let stixObject of items) this.select(stixObject, isTechniqueArray);\n }\n this.viewModelsService.onSelectionChange.emit(); // emit selection change\n }\n\n public deselectAll(items: any[], isTechniqueArray = true): void {\n if (isTechniqueArray) {\n for (let result of items) this.deselect(result, isTechniqueArray);\n } else if (!isTechniqueArray) {\n for (let stixObject of items) this.deselect(stixObject, isTechniqueArray);\n }\n this.viewModelsService.onSelectionChange.emit(); // emit selection change\n }\n\n public getRelated(stixObject: StixObject): Technique[] {\n // master list of all techniques and sub-techniques\n let techniques = this.dataService.getDomain(this.viewModel.domainVersionID).techniques;\n let allTechniques = techniques.concat(this.dataService.getDomain(this.viewModel.domainVersionID).subtechniques);\n let domainVersionID = this.viewModel.domainVersionID;\n\n if (stixObject instanceof Group) {\n return allTechniques.filter((technique: Technique) => (stixObject as Group).relatedTechniques(domainVersionID).includes(technique.id));\n } else if (stixObject instanceof Software) {\n return allTechniques.filter((technique: Technique) => (stixObject as Software).relatedTechniques(domainVersionID).includes(technique.id));\n } else if (stixObject instanceof Mitigation) {\n return allTechniques.filter((technique: Technique) =>\n (stixObject as Mitigation).relatedTechniques(domainVersionID).includes(technique.id)\n );\n } else if (stixObject instanceof Campaign) {\n return allTechniques.filter((technique: Technique) => (stixObject as Campaign).relatedTechniques(domainVersionID).includes(technique.id));\n } else if (stixObject instanceof Asset) {\n return allTechniques.filter((technique: Technique) => (stixObject as Asset).relatedTechniques(domainVersionID).includes(technique.id));\n }\n }\n}\n","
\n
\n \n
\n \n \n \n search\n \n\n Search Settings\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n\n \n\n
\n \n \n \n \n

Techniques ({{ techniqueResults.length }})

\n
\n \n
\n\n \n
\n
\n \n \n
\n
\n 0; else noTechniquesResults\">\n \n \n \n \n \n \n
\n {{ result.parent.name }} :\n {{ result.name }}\n view\n \n \n \n
\n \n
no results for techniques
\n
\n
\n
\n
\n
\n\n \n \n \n

{{ stixType.label | titlecase }} ({{ stixType.objects.length }})

\n
\n \n
\n\n \n
\n \n \n
\n
\n 0; else noResults\">\n \n \n \n \n \n \n
\n {{ stixObject.name }}\n view\n \n \n \n
\n \n
no results for {{ stixType.label }}
\n
\n
\n
\n \n\n \n \n \n

Data Sources ({{ stixDataComponentLabels.length }})

\n
\n \n
\n\n \n
\n \n \n
\n
\n 0; else noResults\">\n \n \n \n \n \n \n
\n {{ label }}\n view\n \n \n \n
\n \n
no results for data sources
\n
\n
\n
\n
\n
\n
\n\n \n\n
\n \n
\n
\n","import { Injectable } from '@angular/core';\nimport { ContextMenuItem } from '../classes/context-menu-item';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\nimport { of } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigService {\n public collectionIndex: string;\n public versions: {\n enabled: boolean;\n entries: any;\n } = {\n enabled: false,\n entries: [],\n };\n public contextMenuItems: ContextMenuItem[] = [];\n public defaultLayers: any;\n public commentColor = 'yellow';\n public linkColor = 'blue';\n public metadataColor = 'purple';\n public banner: string;\n public featureList: any[] = [];\n public customizefeatureList: any[] = []\n\n private features = new Map();\n private featureGroups = new Map();\n\n public get subtechniquesEnabled(): boolean {\n return this.features.get('subtechniques');\n }\n\n constructor(private http: HttpClient) {\n // intentionally left blank\n }\n\n /**\n * Checks if the feature is enabled\n * @param featureName feature name\n * @returns true if the feature is enabled, false otherwise\n */\n public getFeature(featureName: string): boolean {\n return this.features.get(featureName);\n }\n\n /**\n * Checks if any/all features in the group are enabled\n * @param featureGroup feature group name\n * @param type\t'any' or 'all' for logical or/and\n * @returns true iff any/all are enabled, false otherwise\n */\n public getFeatureGroup(featureGroup: string, type?: string): boolean {\n if (!this.featureGroups.has(featureGroup)) return true;\n\n let subFeatures = this.featureGroups.get(featureGroup);\n let count = this.getFeatureGroupCount(featureGroup);\n return type == 'any' ? count > 0 : count === subFeatures.length;\n }\n\n /**\n * Get the number of enabled features in the group\n * @param featureGroup feature group name\n * @returns the number of enabled features in the group, or -1 if\n * the group does not exist\n */\n public getFeatureGroupCount(featureGroup: string): number {\n if (!this.featureGroups.has(featureGroup)) return -1;\n let subFeatures = this.featureGroups.get(featureGroup);\n let enabled = subFeatures.filter((f) => this.getFeature(f));\n return enabled.length;\n }\n\n /**\n * Recursively search an object for boolean properties, set these as features\n * Take a key:value pair of an object. If the value is a boolean, set the\n * feature[key] to value. Otherwise recursively walk value to find boolean\n * options.\n *\n * Additionally, if the given feature grouping (where value is an obj)\n * has been previously defined, boolean properties assigned to the grouping\n * name will apply to all subfeatures of the grouping.\n *\n * @param featureName string, the fieldname the value was found in\n * @param value boolean:object the value of the field. If a boolean,\n * sets feature[featureName] = value, otherwise walks recursively\n */\n public setFeature(featureName: string, value: any): string[] {\n let self = this;\n\n if (typeof value == 'boolean') {\n //base case\n if (this.featureGroups.has(featureName)) {\n //feature group, assign to all subfeatures\n this.featureGroups.get(featureName).forEach(function (subFeatureName: string) {\n self.setFeature(subFeatureName, value);\n });\n } else {\n //single feature\n this.features.set(featureName, value);\n }\n return [featureName];\n }\n\n if (typeof value == 'object') {\n //keep walking\n let subfeatures = [];\n Object.keys(value).forEach(function (fieldname: string) {\n subfeatures = Array.prototype.concat(subfeatures, self.setFeature(fieldname, value[fieldname]));\n });\n this.featureGroups.set(featureName, subfeatures);\n return subfeatures;\n }\n }\n\n /**\n * given a set of feature objects, set the enabledness of that object and all subobjects\n *\n * @param featureObject {name: string, enabled: boolean, subfeatures?: featureObject[] }\n * Of enabled is false and it has subfeatures, they will all be forced to be false too\n * @param override Set all subfeatures, and their subfeatures, values to\n * this value\n */\n public setFeature_object(featureObject: any, override = null): string[] {\n let self = this;\n\n // base case\n if (!featureObject.hasOwnProperty('subfeatures')) {\n let enabled = override !== null ? override : featureObject.enabled;\n this.features.set(featureObject.name, enabled);\n return [featureObject.name];\n } else {\n // has subfeatures\n if (!override) {\n override = !featureObject.enabled ? false : null;\n }\n let subfeatures = [];\n featureObject.subfeatures.forEach(function (subfeature) {\n subfeatures = Array.prototype.concat(subfeatures, self.setFeature_object(subfeature, override));\n });\n this.featureGroups.set(featureObject.name, subfeatures);\n return subfeatures;\n }\n }\n\n /**\n * Return if the given string corresponds to a defined feature\n * @param featureName the name of the feature\n * @return true if the feature exists, false otherwise\n */\n public isFeature(featureName: string): boolean {\n return this.features.has(featureName);\n }\n /**\n * return if the given string corresponds to a defined feature group\n * @param featureGroupName the name of the feature group\n * @return true if it is a feature group, false otherwise\n */\n public isFeatureGroup(featureGroupName: string): boolean {\n return this.featureGroups.has(featureGroupName);\n }\n\n /**\n * Get all url fragments\n * @param url optional, url to parse instead of window location href\n * @return all fragments as key-value pairs\n */\n public getAllFragments(url?: string): Map {\n if (!url) url = window.location.href;\n let fragments = new Map();\n let regex = /[#&](\\w+)=(\\w+)/g;\n\n let match;\n while ((match = regex.exec(url))) {\n fragments.set(match[1], match[2]);\n }\n\n return fragments;\n }\n\n /**\n * Validate that the configuration file specifies a collection index URL\n * or a list of versions/domains\n * @param config the configuration to validate\n * @returns the configuration, if valid, otherwise throws an error\n */\n public validateConfig(config: any): any {\n if (!config.collection_index_url && !config.versions?.entries?.length) {\n throw new Error(`'collection_index_url' or 'versions' must be defined`);\n }\n if (config.collection_index_url && typeof config.collection_index_url !== typeof 'string') {\n throw new Error(`'collection_index_url' must be a string`);\n }\n return config;\n }\n\n /**\n * Load the configuration file\n * Note: this is done at startup\n */\n public loadConfig() {\n return this.http\n .get('mitre/assets/config.json')\n .pipe(\n map((config: any) => this.validateConfig(config)),\n switchMap((config: any) => {\n console.debug('loaded app configuration settings');\n\n config['custom_context_menu_items'].forEach((item) => {\n this.contextMenuItems.push(new ContextMenuItem(item.label, item.url, item.subtechnique_url));\n });\n this.defaultLayers = config['default_layers'];\n this.commentColor = config['comment_color'];\n this.linkColor = config['link_color'];\n this.metadataColor = config['metadata_color'];\n this.banner = config['banner'];\n\n // parse feature preferences\n this.featureList = config['features'];\n this.customizefeatureList = config['customize_features']\n config['features'].forEach((feature) => {\n this.setFeature_object(feature);\n });\n config['customize_features'].forEach((feature) => {\n this.setFeature_object(feature);\n });\n\n // override preferences with preferences from URL fragments\n this.getAllFragments().forEach((value: string, key: string) => {\n if (this.isFeature(key) || this.isFeatureGroup(key)) {\n this.setFeature(key, value == 'true');\n }\n });\n\n // parse configured domains and versions\n this.versions = config['versions'];\n if (config['collection_index_url']) {\n return this.http.get(config['collection_index_url']).pipe(\n tap((_) => console.log('loaded collection index from', config['collection_index_url'])),\n catchError((err) => {\n throw new Error('collection index failed to load. ' + err.message);\n })\n );\n }\n return of(null);\n }),\n map((collectionIndex: any) => {\n if (collectionIndex) this.collectionIndex = collectionIndex;\n }),\n catchError((err) => {\n alert(`ERROR the configuration file failed to parse. See the javascript console for more details.`);\n throw err;\n })\n )\n .toPromise();\n }\n}","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Buffer } from 'buffer';\nimport { forkJoin, from, Observable } from 'rxjs';\nimport { Asset, Campaign, DataComponent, Group, Software, Matrix, Technique, Mitigation, Note } from '../classes/stix';\nimport { TaxiiConnect, Collection } from '../utils/taxii2lib';\nimport { Domain, Version, VersionChangelog } from '../classes';\nimport { ConfigService } from './config.service';\nimport * as globals from '../utils/globals';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DataService {\n constructor(\n private http: HttpClient,\n private configService: ConfigService\n ) {\n console.debug('initializing data service');\n if (configService.versions?.enabled) {\n // parse versions structure from configuration file\n // support for workbench integration, taxii and custom data\n this.setUpDomains(configService.versions.entries);\n }\n if (configService.collectionIndex) {\n // parse versions from collection index\n this.parseCollectionIndex(configService.collectionIndex);\n }\n this.versions.sort((a, b) => (+a.number > +b.number ? -1 : 1));\n this.latestVersion = this.versions[0];\n }\n\n public domain_backwards_compatibility = {\n 'mitre-enterprise': 'enterprise-attack',\n 'mitre-mobile': 'mobile-attack',\n };\n public domains: Domain[] = [];\n public versions: Version[] = [];\n public latestVersion: Version; // set in constructor\n\n // Observable for data\n private domainData$: Observable;\n\n /**\n * Callback functions passed to this function will be called after data is loaded\n * @param {string} domainVersionID the ID of the domain and version to load\n * @param {*} callback callback function to call when data is done loading\n */\n public onDataLoad(domainVersionID, callback) {\n this.getDomain(domainVersionID).dataLoadedCallbacks.push(callback);\n }\n\n /**\n * Parse the given stix bundles into the relevant data holders\n * @param domain\n * @param stixBundles\n */\n public parseBundles(domain: Domain, stixBundles: any[]): void {\n let platforms = new Set();\n let seenIDs = new Set();\n let matrixSDOs = [];\n let idToTacticSDO = new Map();\n let matrixToTechniqueSDOs = new Map();\n for (let bundle of stixBundles) {\n let techniqueSDOs = [];\n let bundleMatrices = [];\n let idToTechniqueSDO = new Map();\n // iterate through stix domain objects in the bundle\n for (let sdo of bundle.objects) {\n // filter out duplicates, except for matrices\n // which are needed to properly build the datatables\n if (sdo.type != 'x-mitre-matrix') {\n if (seenIDs.has(sdo.id)) continue;\n seenIDs.add(sdo.id);\n }\n\n // parse according to type\n switch (sdo.type) {\n case 'x-mitre-data-component':\n domain.dataComponents.push(new DataComponent(sdo, this));\n break;\n case 'x-mitre-data-source':\n domain.dataSources.set(sdo.id, { name: sdo.name, external_references: sdo.external_references });\n break;\n case 'intrusion-set':\n domain.groups.push(new Group(sdo, this));\n break;\n case 'malware':\n case 'tool':\n domain.software.push(new Software(sdo, this));\n break;\n case 'campaign':\n domain.campaigns.push(new Campaign(sdo, this));\n break;\n case 'x-mitre-asset':\n domain.assets.push(new Asset(sdo, this));\n break;\n case 'course-of-action':\n domain.mitigations.push(new Mitigation(sdo, this));\n break;\n case 'relationship':\n this.parseRelationship(sdo, domain);\n break;\n case 'attack-pattern':\n idToTechniqueSDO.set(sdo.id, sdo);\n if (!sdo.x_mitre_is_subtechnique) {\n techniqueSDOs.push(sdo);\n }\n break;\n case 'x-mitre-tactic':\n idToTacticSDO.set(sdo.id, sdo);\n break;\n case 'x-mitre-matrix':\n matrixSDOs.push(sdo);\n bundleMatrices.push(sdo);\n break;\n case 'note':\n domain.notes.push(new Note(sdo));\n break;\n }\n }\n\n // create techniques\n this.createTechniques(techniqueSDOs, idToTechniqueSDO, domain);\n\n // create map of matrices to techniques\n for (let matrixSDO of bundleMatrices) {\n if (!matrixToTechniqueSDOs.get(matrixSDO.id)) {\n matrixToTechniqueSDOs.set(matrixSDO.id, techniqueSDOs);\n } else {\n matrixToTechniqueSDOs.get(matrixSDO.id).push(...techniqueSDOs);\n }\n }\n\n // parse platforms\n this.parsePlatforms(domain).forEach(platforms.add, platforms);\n }\n\n // create matrices\n this.createMatrices(matrixSDOs, idToTacticSDO, matrixToTechniqueSDOs, domain);\n\n domain.platforms = Array.from(platforms); // convert to array\n\n // data loading complete; update watchers\n domain.dataLoaded = true;\n domain.executeCallbacks();\n }\n\n /**\n * Creates techniques and sub-techniques from the given technique SDOs\n * @param techniqueSDOs list of parent-level technique SDOs to create\n * @param idToTechniqueSDO map of all technique IDs to SDOs (incl. sub-techniques)\n * @param domain the domain to add the techniques to\n */\n public createTechniques(techniqueSDOs: any, idToTechniqueSDO: Map, domain: Domain): void {\n for (let techniqueSDO of techniqueSDOs) {\n let subtechniques: Technique[] = [];\n if (this.configService.subtechniquesEnabled) {\n if (domain.relationships.subtechniques_of.has(techniqueSDO.id)) {\n domain.relationships.subtechniques_of.get(techniqueSDO.id).forEach((sub_id) => {\n if (idToTechniqueSDO.has(sub_id)) {\n let subtechnique = new Technique(idToTechniqueSDO.get(sub_id), [], this);\n subtechniques.push(subtechnique);\n domain.subtechniques.push(subtechnique);\n }\n // else the target was revoked or deprecated and we can skip honoring the relationship\n });\n }\n }\n domain.techniques.push(new Technique(techniqueSDO, subtechniques, this));\n }\n }\n\n /**\n * Creates the matrices, which also creates its tactics and filters the techniques\n * @param matricesList list of matrix SDOs to create\n * @param tacticsList list of tactic SDOs\n * @param domain the domain to add the matrix/tactics to\n */\n public createMatrices(matrixSDOs: any[], idToTacticSDO: Map, matrixToTechniqueSDOs, domain: Domain): void {\n let createdMatrixIDs = [];\n for (let matrixSDO of matrixSDOs) {\n // check if matrix was already created\n if (createdMatrixIDs.includes(matrixSDO.id)) continue;\n\n // check if matrix is deprecated\n if (matrixSDO.x_mitre_deprecated) continue;\n\n // retrieve relevant matrix techniques\n let techniqueSDOs = matrixToTechniqueSDOs.get(matrixSDO.id);\n let techniqueIDs = techniqueSDOs.map((t) => t.id);\n let techniques = domain.techniques.filter((t) => techniqueIDs.includes(t.id));\n domain.matrices.push(new Matrix(matrixSDO, idToTacticSDO, techniques, this));\n\n // add to list of created matrices\n createdMatrixIDs.push(matrixSDO.id);\n }\n }\n\n /**\n * Extracts the set of platforms from the list of techniques\n * in the given domain\n * @param domain the domain for which to parse the platforms\n * @returns the set of platforms found\n */\n public parsePlatforms(domain: Domain): Set {\n let platforms = new Set();\n let allTechniques = domain.techniques.concat(domain.subtechniques);\n\n // parse platforms\n allTechniques.forEach((technique) => {\n if (!technique.deprecated && !technique.revoked) {\n technique.platforms?.forEach(platforms.add, platforms);\n }\n });\n\n return platforms;\n }\n\n /**\n * Parses the given SRO into the domain relationship map\n * @param sro the SRO to parse\n * @param domain the domain to add the relationship to\n */\n public parseRelationship(sro: any, domain: Domain): void {\n // for existing keys, add the given value to the list of values\n // otherwise, add the key with the value as the first item in the list\n let addRelationshipToMap = function (map, key, value) {\n if (map.has(key)) map.get(key).push(value);\n else map.set(key, [value]);\n };\n\n switch (sro.relationship_type) {\n case 'subtechnique-of':\n if (!this.configService.subtechniquesEnabled) return;\n // record subtechnique:technique relationship\n addRelationshipToMap(domain.relationships['subtechniques_of'], sro.target_ref, sro.source_ref);\n break;\n case 'uses':\n if (sro.source_ref.startsWith('intrusion-set') && sro.target_ref.startsWith('attack-pattern')) {\n // record group:technique relationship\n addRelationshipToMap(domain.relationships['group_uses'], sro.source_ref, sro.target_ref);\n } else if (\n (sro.source_ref.startsWith('malware') || sro.source_ref.startsWith('tool')) &&\n sro.target_ref.startsWith('attack-pattern')\n ) {\n // record software:technique relationship\n addRelationshipToMap(domain.relationships['software_uses'], sro.source_ref, sro.target_ref);\n } else if (sro.source_ref.startsWith('campaign') && sro.target_ref.startsWith('attack-pattern')) {\n // record campaign:technique relationship\n addRelationshipToMap(domain.relationships['campaign_uses'], sro.source_ref, sro.target_ref);\n }\n break;\n case 'mitigates':\n // record mitigation:technique relationship\n addRelationshipToMap(domain.relationships['mitigates'], sro.source_ref, sro.target_ref);\n break;\n case 'revoked-by':\n // record stix object: stix object relationship\n domain.relationships['revoked_by'].set(sro.source_ref, sro.target_ref);\n break;\n case 'detects':\n // record data component: technique relationship\n addRelationshipToMap(domain.relationships['component_rel'], sro.source_ref, sro.target_ref);\n break;\n case 'attributed-to':\n // record campaign:group relationship\n addRelationshipToMap(domain.relationships['campaigns_attributed_to'], sro.target_ref, sro.source_ref);\n break;\n case 'targets':\n // record technique:asset relationship\n addRelationshipToMap(domain.relationships['targeted_assets'], sro.target_ref, sro.source_ref);\n break;\n }\n }\n\n /**\n * Set up the URLs for domains in the list defined in the config file\n * @param {versions} list of versions and domains\n */\n public setUpDomains(versions: any[]) {\n versions.forEach((version: any) => {\n let v = this.addVersion(version['name'], version['version'].match(/\\d+/g)[0]);\n version['domains'].forEach((domain: any) => {\n let identifier = domain['identifier'];\n let domainObject = new Domain(identifier, domain['name'], v);\n if (version['authentication']) domainObject.authentication = version['authentication'];\n if (domain['taxii_url'] && domain['taxii_collection']) {\n domainObject.taxii_url = domain['taxii_url'];\n domainObject.taxii_collection = domain['taxii_collection'];\n } else {\n domainObject.urls = domain['data'];\n }\n this.domains.push(domainObject);\n });\n });\n }\n\n /**\n * Parses the collection index for domains/versions\n * @param collectionIndex the collection index\n */\n public parseCollectionIndex(collectionIndex: any) {\n for (let collection of collectionIndex.collections) {\n let domainIdentifier = this.getDomainIdentifier(collection.name);\n\n // only most recent minor versions of a major release\n let minorVersionMap = collection.versions.reduce((acc, version) => {\n const [major, minor] = version.version.split('.').map(Number);\n if (!acc[major] || acc[major].minor < minor) {\n acc[major] = { version: version.version, url: version.url };\n }\n return acc;\n }, {});\n let versions: Array<{ version: string; url: string }> = Object.values(minorVersionMap);\n\n for (let version of versions) {\n let versionNumber = version.version.split('.')[0]; // major version only\n let versionName = `${collectionIndex.name} v${versionNumber}`;\n if (+versionNumber < +globals.minimumSupportedVersion) {\n console.debug(`version ${versionNumber} is not supported, skipping ${collection.name} v${versionNumber}`);\n continue;\n }\n // create version & domain\n let v = this.addVersion(versionName, versionNumber);\n this.domains.push(new Domain(domainIdentifier, collection.name, v, [version.url]));\n }\n }\n }\n\n /**\n * Retrieves the domain identifier from the domain name\n * Helper function for parseCollectionIndex()\n * @param domainName the name of the domain\n * @returns the domain identifier (e.g. 'enterprise-attack')\n */\n public getDomainIdentifier(domainName: string): string {\n return domainName.replace(/ /g, '-').replace(/&/g, 'a').toLowerCase();\n }\n\n /**\n * Adds a new version to the list of versions, checking if\n * one already exists.\n * @param versionName the name of the version\n * @param versionNumber the version number\n * @returns the existing or created Version object\n */\n public addVersion(versionName: string, versionNumber: string): Version {\n // check if version already exists\n let existingVersion = this.versions.find((v) => v.name === versionName && v.number === versionNumber);\n if (!existingVersion) {\n // create and add new version\n let version = new Version(versionName, versionNumber);\n this.versions.push(version);\n return version;\n }\n return existingVersion;\n }\n\n /**\n * Fetch the domain data from the endpoint\n */\n public getDomainData(domain: Domain, refresh: boolean = false): Observable {\n if (domain.taxii_collection && domain.taxii_url) {\n console.debug('fetching data from TAXII server');\n let conn = new TaxiiConnect(domain.taxii_url, '', '');\n let collectionInfo: any = {\n id: domain.taxii_collection,\n title: domain.name,\n description: '',\n can_read: true,\n can_write: false,\n };\n const collection = new Collection(collectionInfo, domain.taxii_url, conn);\n this.domainData$ = forkJoin(from(collection.getObjects('', undefined)));\n } else if (refresh || !this.domainData$) {\n console.debug('retrieving data', domain.urls);\n let bundleData = [];\n const httpOptions = {\n headers: undefined,\n };\n if (domain.authentication && domain.authentication.enabled) {\n // include authorization header, if configured (integrations)\n let token = `${domain.authentication.serviceName}:${domain.authentication.apiKey}`;\n httpOptions.headers = new HttpHeaders({ Authorization: 'Basic ' + Buffer.from(token).toString('base64') });\n }\n domain.urls.forEach((url) => {\n bundleData.push(this.http.get(url, httpOptions));\n });\n this.domainData$ = forkJoin(bundleData);\n }\n return this.domainData$;\n }\n\n /**\n * Load and parse domain data\n */\n public loadDomainData(domainVersionID: string, refresh: boolean = false): Promise {\n let dataPromise: Promise = new Promise((resolve, reject) => {\n let domain = this.getDomain(domainVersionID);\n if (domain) {\n if (domain.dataLoaded && !refresh) resolve(null);\n let subscription;\n subscription = this.getDomainData(domain, refresh).subscribe({\n next: (data: Object[]) => {\n this.parseBundles(domain, data);\n resolve(null);\n },\n complete: () => {\n if (subscription) subscription.unsubscribe();\n }, //prevent memory leaks\n });\n } else if (!domain) {\n // domain not defined in config\n reject(new Error(\"'\" + domainVersionID + \"' is not a valid domain & version.\"));\n }\n });\n return dataPromise;\n }\n\n /**\n * Get domain object by domain ID\n */\n public getDomain(domainVersionID: string): Domain {\n return this.domains.find((d) => d.id === domainVersionID);\n }\n\n /**\n * Get the ID from domain name & version\n */\n public getDomainVersionID(domain: string, versionNumber: string): string {\n if (!versionNumber) {\n // layer with no specified version defaults to current version\n versionNumber = this.versions[0].number;\n }\n return domain + '-' + versionNumber;\n }\n\n /**\n * Retrieve the technique object with the given attackID in the given domain/version\n */\n public getTechnique(attackID: string, domainVersionID: string) {\n let domain = this.getDomain(domainVersionID);\n let all_techniques = domain.techniques.concat(domain.subtechniques);\n return all_techniques.find((t) => t.attackID == attackID);\n }\n\n /**\n * Is the given version supported?\n */\n public isSupported(version: string) {\n let supported = this.versions.map((v) => v.number);\n let match = version.match(/\\d+/g)[0];\n return supported.includes(match);\n }\n\n /**\n * Compares techniques between two ATT&CK versions and returns a set of object changes\n * @param oldDomainVersionID imported layer domain & version to upgrade from\n * @param newDomainVersionID latest ATT&CK domain & version to upgrade to\n */\n public compareVersions(oldDomainVersionID: string, newDomainVersionID: string): VersionChangelog {\n let changelog = new VersionChangelog(oldDomainVersionID, newDomainVersionID);\n let oldDomain = this.getDomain(oldDomainVersionID);\n let newDomain = this.getDomain(newDomainVersionID);\n\n let previousTechniques = oldDomain.techniques.concat(oldDomain.subtechniques);\n let latestTechniques = newDomain.techniques.concat(newDomain.subtechniques);\n\n // object lookup to increase efficiency\n let objectLookup = new Map(\n latestTechniques.map((technique) => [technique.id, previousTechniques.find((p) => p.id == technique.id)])\n );\n\n for (let latestTechnique of latestTechniques) {\n if (!latestTechnique) continue;\n\n let prevTechnique = objectLookup.get(latestTechnique.id);\n if (!prevTechnique) {\n if (latestTechnique.deprecated || latestTechnique.revoked) {\n // object doesn't exist in previous version, but is deprecated or revoked\n // in the latest version\n // this case is unlikely to occur and indicates that something has\n // gone wrong in the data, such as the case in which a sub-technique\n // was deprecated, had its ties erroneously severed with its parent\n // and therefore, cannot be parsed correctly\n continue;\n }\n\n // object doesn't exist in previous version, added to latest version\n changelog.additions.push(latestTechnique.attackID);\n } else if (latestTechnique.modified == prevTechnique.modified) {\n if (prevTechnique.revoked || prevTechnique.deprecated) {\n // object is revoked or deprecated, ignore\n continue;\n } else {\n // no changes made to the object\n changelog.unchanged.push(latestTechnique.attackID);\n }\n } else {\n // changes were made to the object\n if (latestTechnique.revoked && !prevTechnique.revoked) {\n // object was revoked since the previous version\n changelog.revocations.push(latestTechnique.attackID);\n } else if (latestTechnique.revoked && prevTechnique.revoked) {\n // both objects are revoked, ignore\n continue;\n } else if (latestTechnique.deprecated && !prevTechnique.deprecated) {\n // object was deprecated since the previous version\n changelog.deprecations.push(latestTechnique.attackID);\n } else if (latestTechnique.deprecated && prevTechnique.deprecated) {\n // both objects are deprecated, ignore\n continue;\n } else if (latestTechnique.compareVersion(prevTechnique) != 0) {\n // version number changed\n changelog.changes.push(latestTechnique.attackID);\n } else {\n // minor change\n changelog.minor_changes.push(latestTechnique.attackID);\n }\n }\n }\n return changelog;\n }\n}\n\nexport interface ServiceAuth {\n enabled: boolean;\n serviceName: string;\n apiKey: string;\n}\n","import { Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IconsService {\n constructor(\n public matIconRegistry: MatIconRegistry,\n private domSanitizer: DomSanitizer\n ) {\n // intentionally left blank\n }\n\n public registerIcons(): void {\n this.loadIcons(Object.values(Icons), 'mitre/assets/icons');\n }\n\n private loadIcons(iconKeys: string[], iconUrl: string): void {\n iconKeys.forEach((key) => {\n this.matIconRegistry.addSvgIcon(key, this.domSanitizer.bypassSecurityTrustResourceUrl(`${iconUrl}/${key}.svg`));\n });\n }\n}\n\nexport enum Icons {\n SORT_ALPHABETICAL_ASC = 'ic_sort_alphabetically_ascending',\n SORT_ALPHABETICAL_DESC = 'ic_sort_alphabetically_descending',\n SORT_NUMERICAL_ASC = 'ic_sort_numerically_ascending',\n SORT_NUMERICAL_DESC = 'ic_sort_numerically_descending',\n UNFOLD_MORE_ALT = 'ic_unfold_more_alt',\n NON_STICKY_TOOLBAR = 'ic_push_pin_gray',\n}\n","import { EventEmitter, Injectable, Output } from '@angular/core';\nimport { Gradient, TechniqueVM, ViewModel } from '../classes';\nimport { DataService } from './data.service';\nimport { evaluate } from 'mathjs';\nimport { isBoolean, isNumber } from '../utils/utils';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ViewModelsService {\n @Output() onSelectionChange = new EventEmitter();\n\n public viewModels: ViewModel[] = [];\n public pinnedCell: string = '';\n private nonce: number = 0;\n\n constructor(private dataService: DataService) {\n // intentionally left blank\n }\n\n /* Emit event when technique selection changes */\n public selectionChanged(): void {\n this.onSelectionChange.emit();\n }\n\n /**\n * Create and return a new viewModel\n * @param {string} name the viewmodel name\n * @param {string} domainVersionID the ID of the domain & version\n * @return {ViewModel} the created ViewModel\n */\n public newViewModel(name: string, domainVersionID: string): ViewModel {\n let vm = new ViewModel(name, 'vm' + this.getNonce(), domainVersionID, this.dataService);\n this.viewModels.push(vm);\n return vm;\n }\n\n /**\n * Get a nonce.\n * @return a number that will never be regenerated by sequential calls to getNonce.\n * Note: this applies on a session-by-session basis, nonces are not\n * unique between app instances.\n */\n public getNonce(): number {\n return this.nonce++;\n }\n\n /**\n * Destroy the viewmodel\n * @param vm viewmodel to destroy.\n */\n public destroyViewModel(vm: ViewModel): void {\n for (let i = 0; i < this.viewModels.length; i++) {\n if (this.viewModels[i] == vm) {\n this.viewModels.splice(i, 1);\n return;\n }\n }\n }\n\n /**\n * Layer combination operation\n * @param scoreVariables variables in math expression, mapping to viewmodel they correspond to\n * @param layerName the name of the new layer\n * @param opSettings the settings for view model inheritance\n * - `domain`: the domain & version\n * - `gradientVM`: the view model to inherit gradient from\n * - `coloringVM`: the view model to inherit manual colors from\n * - `commentVM`: the view model to inherit comments from\n * - `linkVM`: the view model to inherit links from\n * - `metadataVM`: the view model to inherit metadata from\n * - `enabledVM`: the view model to inherit enabled state from\n * - `filterVM`: the view model to inherit filters from\n * - `scoreExpression`: math equation of score expression\n * - `legendVM`: the view model to inherit legend items from\n * @return new viewmodel inheriting above properties\n */\n public layerOperation(scoreVariables: Map, layerName: string, opSettings: any): ViewModel {\n let newViewModel = new ViewModel('layer by operation', 'vm' + this.getNonce(), opSettings.domain, this.dataService);\n\n if (opSettings.scoreExpression) {\n opSettings.scoreExpression = opSettings.scoreExpression.toLowerCase(); // should be enforced by input, but just in case\n let minScore = Infinity;\n let maxScore = -Infinity;\n\n // get list of all technique IDs used in the VMs\n let techniqueIDs = new Set();\n scoreVariables.forEach((vm) => {\n vm.techniqueVMs.forEach(function (techniqueVM, techniqueID) {\n techniqueIDs.add(techniqueID);\n });\n });\n\n // attempt to evaluate without a scope to catch the case of a static assignment\n try {\n // evaluate with an empty scope\n let result = evaluate(opSettings.scoreExpression, {});\n\n // if it didn't except after this, it evaluated to a single result\n console.debug('score expression evaluated to single result to be applied to all techniques');\n if (isBoolean(result)) {\n // boolean to binary\n result = result ? '1' : '0';\n } else if (!isNumber(result)) {\n // unexpected user input\n throw Error('math result ( ' + result + ' ) is not a number');\n }\n\n // apply result to all techniques\n newViewModel.initializeScoresTo = String(result);\n minScore = result;\n maxScore = result;\n } catch (err) {\n //couldn't evaluate with empty scope, build scope for each technique\n // compute the score of each techniqueID\n techniqueIDs.forEach((techniqueID) => {\n let newTechniqueVM = new TechniqueVM(techniqueID);\n let scope = {};\n let misses = 0; // number of times a VM is missing the value\n scoreVariables.forEach(function (vm, key) {\n let scoreValue: number;\n if (!vm.hasTechniqueVM_id(techniqueID)) {\n // missing technique\n scoreValue = 0;\n misses++;\n } else {\n // technique exists\n let score = vm.getTechniqueVM_id(techniqueID).score;\n if (score == '' || isNaN(Number(score))) {\n scoreValue = 0;\n misses++;\n } else {\n scoreValue = Number(score);\n }\n }\n scope[key] = scoreValue;\n });\n\n // did at least one technique have a score for this technique?\n if (misses < scoreVariables.size) {\n let mathResult = evaluate(opSettings.scoreExpression, scope);\n if (isBoolean(mathResult)) {\n // boolean to binary\n mathResult = mathResult ? '1' : '0';\n } else if (!isNumber(mathResult)) {\n // unexpected user input\n throw Error('math result ( ' + mathResult + ' ) is not a number');\n }\n\n newTechniqueVM.score = String(mathResult);\n newViewModel.techniqueVMs.set(techniqueID, newTechniqueVM);\n minScore = Math.min(minScore, mathResult);\n maxScore = Math.max(maxScore, mathResult);\n }\n // don't record a result if none of VMs had a score for this technique\n });\n }\n\n // gradient doesn't apply if there is no range of values\n if (minScore != maxScore) {\n // set up gradient according to result range\n if (minScore != Infinity) newViewModel.gradient.minValue = minScore;\n if (maxScore != -Infinity) newViewModel.gradient.maxValue = maxScore;\n\n // if binary range, set to transparentblue gradient\n if (minScore == 0 && maxScore == 1) newViewModel.gradient.setGradientPreset('transparentblue');\n }\n }\n\n /**\n * Inherit a field from a vm\n * @param {ViewModel} inheritVM the viewModel to inherit from\n * @param {string} fieldName the field to inherit from the viewmodel\n */\n function inherit(inheritVM: ViewModel, fieldName: string) {\n inheritVM.techniqueVMs.forEach((techniqueVM) => {\n let tvm = newViewModel.hasTechniqueVM_id(techniqueVM.technique_tactic_union_id)\n ? newViewModel.getTechniqueVM_id(techniqueVM.technique_tactic_union_id)\n : new TechniqueVM(techniqueVM.technique_tactic_union_id);\n tvm[fieldName] = techniqueVM[fieldName];\n newViewModel.techniqueVMs.set(techniqueVM.technique_tactic_union_id, tvm);\n });\n }\n\n if (opSettings.commentVM) inherit(opSettings.commentVM, 'comment');\n if (opSettings.linkVM) inherit(opSettings.linkVM, 'links');\n if (opSettings.metadataVM) inherit(opSettings.metadataVM, 'metadata');\n if (opSettings.coloringVM) inherit(opSettings.coloringVM, 'color');\n if (opSettings.enabledVM) inherit(opSettings.enabledVM, 'enabled');\n\n if (opSettings.filterVM) {\n //copy filter settings\n newViewModel.filters.deserialize(JSON.parse(opSettings.filterVM.filters.serialize()));\n }\n\n if (opSettings.legendVM) {\n newViewModel.legendItems = JSON.parse(JSON.stringify(opSettings.legendVM.legendItems));\n }\n\n if (opSettings.gradientVM) {\n newViewModel.gradient = new Gradient();\n newViewModel.gradient.deserialize(opSettings.gradientVM.gradient.serialize());\n }\n\n newViewModel.name = layerName;\n this.viewModels.push(newViewModel);\n newViewModel.updateGradient();\n return newViewModel;\n }\n}\n","import { Component, Input, OnChanges } from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { ViewModel } from '../classes';\n\n@Component({\n selector: 'sidebar',\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n})\nexport class SidebarComponent implements OnChanges {\n @Input() viewModel: ViewModel;\n public reloadToggle: boolean = true;\n\n constructor(public dataService: DataService) {}\n\n ngOnChanges(): void {\n this.reloadToggle = false;\n setTimeout(() => (this.reloadToggle = true));\n }\n}\n","
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n","export { RenderableMatrix } from './renderable-matrix';\nexport { RenderableTactic } from './renderable-tactic';\nexport { RenderableTechnique } from './renderable-technique';\n","import { Matrix } from '../../classes/stix';\nimport { RenderableTactic } from './renderable-tactic';\nimport { ViewModel } from '../../classes';\n\nexport class RenderableMatrix {\n public matrix: Matrix;\n public tactics: RenderableTactic[] = [];\n\n public get height() {\n let heights = this.tactics.map(function (tactic: RenderableTactic) {\n return tactic.height;\n });\n return Math.max(...heights);\n }\n\n constructor(matrix: Matrix, viewModel: ViewModel, renderConfig: any) {\n this.matrix = matrix;\n let filteredTactics = viewModel.filterTactics(matrix.tactics, matrix);\n for (let tactic of filteredTactics) {\n this.tactics.push(new RenderableTactic(tactic, matrix, viewModel, renderConfig));\n }\n }\n}\n","import { Matrix, Tactic } from '../../classes/stix';\nimport { RenderableTechnique } from './renderable-technique';\nimport { ViewModel } from '../../classes';\n\nexport class RenderableTactic {\n public readonly tactic: Tactic;\n public readonly techniques: RenderableTechnique[] = [];\n public readonly subtechniques: RenderableTechnique[] = [];\n public height: number;\n\n constructor(tactic: Tactic, matrix: Matrix, viewModel: ViewModel, renderConfig: any) {\n this.tactic = tactic;\n let filteredTechniques = viewModel.sortTechniques(viewModel.filterTechniques(tactic.techniques, tactic, matrix), tactic);\n let yPosition = 1; // start at 1 to make space for tactic label\n for (let technique of filteredTechniques) {\n let techniqueVM = viewModel.getTechniqueVM(technique, tactic);\n let filteredSubtechniques = viewModel.filterTechniques(technique.subtechniques, tactic, matrix);\n\n let showSubtechniques =\n renderConfig.showSubtechniques == 'all' || (renderConfig.showSubtechniques == 'expanded' && techniqueVM.showSubtechniques);\n\n this.techniques.push(new RenderableTechnique(yPosition++, technique, tactic, matrix, viewModel, showSubtechniques));\n\n if (filteredSubtechniques.length > 0 && showSubtechniques) {\n for (let subtechnique of filteredSubtechniques) {\n this.subtechniques.push(new RenderableTechnique(yPosition++, subtechnique, tactic, matrix, viewModel, renderConfig));\n }\n }\n }\n this.height = yPosition;\n }\n}\n","import { Matrix, Tactic, Technique } from '../../classes/stix';\nimport { TechniqueVM, ViewModel } from '../../classes';\nimport tinycolor from 'tinycolor2';\n\nexport class RenderableTechnique {\n public readonly yPosition: number;\n public readonly technique: Technique;\n public readonly tactic: Tactic;\n public readonly matrix: Matrix;\n public readonly showSubtechniques;\n public readonly viewModel: ViewModel;\n\n constructor(yPosition, technique: Technique, tactic: Tactic, matrix: Matrix, viewModel: ViewModel, showSubtechniques = false) {\n this.yPosition = yPosition;\n this.technique = technique;\n this.tactic = tactic;\n this.matrix = matrix;\n this.viewModel = viewModel;\n this.showSubtechniques = showSubtechniques;\n }\n\n public get fill() {\n if (this.viewModel.hasTechniqueVM(this.technique, this.tactic)) {\n let techniqueVM: TechniqueVM = this.viewModel.getTechniqueVM(this.technique, this.tactic);\n if (!techniqueVM.enabled) return 'white';\n if (techniqueVM.color) return techniqueVM.color;\n if (this.viewModel.layout.showAggregateScores && techniqueVM.aggregateScoreColor) return techniqueVM.aggregateScoreColor;\n if (techniqueVM.score) return techniqueVM.scoreColor;\n }\n return null; //default\n }\n\n public get textColor() {\n if (this.viewModel.hasTechniqueVM(this.technique, this.tactic)) {\n let techniqueVM: TechniqueVM = this.viewModel.getTechniqueVM(this.technique, this.tactic);\n if (!techniqueVM.enabled) return '#aaaaaa';\n }\n if (this.fill) {\n return tinycolor.mostReadable(this.fill, ['white', 'black']); //default;\n }\n return null;\n }\n\n public get text() {\n let text = [];\n if (this.viewModel.layout.showID) text.push(this.technique.attackID);\n if (this.viewModel.layout.showName) text.push(this.technique.name);\n return text.join(': ');\n }\n}\n","import { Component, OnInit, Inject, ViewEncapsulation } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ViewModel } from '../classes';\nimport { ConfigService } from '../services/config.service';\nimport { DataService } from '../services/data.service';\nimport { RenderableMatrix, RenderableTactic, RenderableTechnique } from './renderable-objects';\nimport tinycolor from 'tinycolor2';\nimport { isIE } from '../utils/utils';\ndeclare var d3: any; //d3js\n\n@Component({\n selector: 'app-svg-export',\n templateUrl: './svg-export.component.html',\n styleUrls: ['./svg-export.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class SvgExportComponent implements OnInit {\n // vm to render\n public viewModel: ViewModel;\n\n // SVG configuration\n public config: any = {};\n public svgConfigDefaults: any = {\n width: 11,\n height: 8.5,\n headerHeight: 1,\n unit: 'in',\n orientation: 'landscape',\n size: 'letter',\n fontSize: 4,\n autofitText: true,\n maxTextSize: Infinity,\n theme: 'light',\n showSubtechniques: 'expanded',\n font: 'sans-serif',\n tableBorderColor: '#6B7279',\n showHeader: true,\n legendDocked: true,\n legendX: 0,\n legendY: 0,\n legendWidth: 2,\n legendHeight: 1,\n showLegend: true,\n showGradient: true,\n showFilters: true,\n showAbout: true,\n showDomain: true,\n showAggregate: false,\n };\n\n // SVG settings\n public currentDropdown: string = null;\n public hasScores: boolean;\n private svgElementID: string = 'svgInsert_tmp';\n private buildSVGDebounce: boolean = false;\n\n // counter for unit change ui element\n public unitEnum: number = 0;\n\n // counter for theme change ui element\n public themeEnum: number = 0;\n\n // browser compatibility\n public get isIE(): boolean {\n return isIE();\n }\n\n // getters for visibility of SVG header sections\n public get hasName(): boolean {\n return this.viewModel.name.length > 0;\n }\n public get hasDomain(): boolean {\n return this.viewModel.domainVersionID.length > 0;\n }\n public get hasDescription(): boolean {\n return this.viewModel.description.length > 0;\n }\n public get hasLegendItems(): boolean {\n return this.viewModel.legendItems.length > 0;\n }\n\n // getters for user preferences\n public get showName(): boolean {\n return this.config.showAbout && this.hasName && this.config.showHeader;\n }\n public get showDomain(): boolean {\n return this.config.showDomain && this.hasDomain && this.config.showHeader;\n }\n public get showAggregate(): boolean {\n return this.viewModel.layout.showAggregateScores && this.config.showHeader;\n }\n public get showDescription(): boolean {\n return this.config.showAbout && this.hasDescription && this.config.showHeader;\n }\n public get showFilters(): boolean {\n return this.config.showFilters && this.config.showHeader;\n }\n public get showGradient(): boolean {\n return this.config.showGradient && this.hasScores && this.config.showHeader;\n }\n public get showLegend(): boolean {\n return this.config.showLegend && this.hasLegendItems;\n }\n public get showLegendContainer(): boolean {\n return this.showLegend || this.showGradient;\n }\n public get showLegendInHeader(): boolean {\n return this.config.legendDocked;\n }\n\n constructor(\n private dialogRef: MatDialogRef, // needed for mat-dialog-close\n private configService: ConfigService,\n private dataService: DataService,\n @Inject(MAT_DIALOG_DATA) public data\n ) {\n this.config = this.svgConfigDefaults;\n }\n\n ngOnInit(): void {\n this.viewModel = this.data.vm;\n this.svgElementID = 'svgInsert' + this.viewModel.uid;\n\n let self = this;\n //determine if the layer has any scores\n let visibleTechniques = self.viewModel.getVisibleTechniquesList();\n for (let unionID of visibleTechniques) {\n let techniqueVM = self.viewModel.getTechniqueVM_id(unionID);\n if (techniqueVM.score != '') {\n self.hasScores = true;\n break; // at least one score found\n }\n }\n\n // dynamic legend height according to content\n let legendSectionCount = 0;\n if (self.hasScores) legendSectionCount++;\n if (self.hasLegendItems) legendSectionCount++;\n self.config.legendHeight = 0.5 * legendSectionCount;\n\n //initial legend position for undocked legend\n this.config.legendX = this.config.width - this.config.legendWidth - 0.1;\n this.config.legendY = this.config.height - this.config.legendHeight - 0.1;\n if (this.config.showHeader) this.config.legendY -= this.config.headerHeight;\n\n //initial table border color\n if (this.config.theme === 'light') {\n this.config.tableBorderColor = '#6B7279';\n } else if (this.config.theme === 'dark') {\n this.config.tableBorderColor = '#4c4c68';\n }\n\n // build SVG at end of fn queue so page can render before build\n window.setTimeout(function () {\n self.buildSVG(self);\n }, 0);\n }\n\n /** build the SVG */\n public buildSVG(self?: any, bypassDebounce: boolean = false): void {\n if (!self) self = this; // called from somewhere other than ngOnInit\n\n // debounce\n if (self.buildSVGDebounce && !bypassDebounce) return;\n if (!bypassDebounce) {\n self.buildSVGDebounce = true;\n window.setTimeout(function () {\n self.buildSVG(self, true);\n }, 500);\n return;\n }\n self.buildSVGDebounce = false;\n\n // set svg size\n this.setSize(self, self.config.size, self.config.orientation);\n\n // calculate svg height and width\n let margin = { top: 5, right: 5, bottom: 5, left: 5 };\n let width = Math.max(self.toPx(self.config.width, self.config.unit) - (margin.right + margin.left), 10);\n let svgWidth = width + margin.left + margin.right;\n let height = Math.max(self.toPx(self.config.height, self.config.unit) - (margin.top + margin.bottom), 10);\n let svgHeight = height + margin.top + margin.bottom;\n let headerHeight = Math.max(self.toPx(self.config.headerHeight, self.config.unit), 1);\n\n // remove previous graphic\n let svgElement: HTMLElement = document.getElementById(self.svgElementID);\n svgElement.innerHTML = '';\n\n // create new SVG\n let svg = d3\n .select('#' + self.svgElementID)\n .append('svg')\n .attr('width', svgWidth)\n .attr('height', svgHeight)\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('id', 'svg' + self.viewModel.uid) // SVG download tag\n .append('g')\n .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')\n .style('font-family', self.config.font);\n\n // -----------------------------------------------------------------------------\n // LEGEND\n // -----------------------------------------------------------------------------\n\n let legendSection = { title: 'legend', contents: [] };\n\n // scores and gradient\n if (self.hasScores && self.showGradient) {\n legendSection.contents.push({ label: 'gradient', data: self.buildGradient() });\n }\n\n // legend items\n if (self.showLegend) {\n legendSection.contents.push({ label: 'legend', data: self.buildLegend() });\n }\n\n // -----------------------------------------------------------------------------\n // HEADER\n // -----------------------------------------------------------------------------\n\n if (self.config.showHeader) {\n let headerSections: HeaderSection[] = [];\n\n // about section\n if (self.showName || self.showDescription) {\n let aboutSection = { title: 'about', contents: [] };\n if (self.showName) aboutSection.contents.push({ label: 'name', data: this.viewModel.name });\n if (self.showDescription) aboutSection.contents.push({ label: 'description', data: this.viewModel.description });\n headerSections.push(aboutSection);\n }\n\n // domain section\n let domainSection = { title: 'domain', contents: [] };\n if (self.showDomain) {\n let domain = this.dataService.getDomain(this.viewModel.domainVersionID);\n domainSection.contents.push({ label: 'domain', data: `${domain.name} v${domain.version.number}` });\n }\n\n // platform section\n let platformSection = { title: 'platforms', contents: [] };\n if (self.showFilters) {\n let filterData = { label: 'platforms', data: this.viewModel.filters.platforms.selection.join(', ') };\n\n // domain + platforms\n if (self.showAggregate) {\n domainSection.title = 'domain & platforms';\n domainSection.contents.push(filterData);\n } else {\n platformSection.contents.push(filterData);\n }\n }\n\n // add relevant sections to header\n if (domainSection.contents.length > 0) headerSections.push(domainSection);\n if (platformSection.contents.length > 0) headerSections.push(platformSection);\n\n // aggregate scores\n if (self.showAggregate) {\n let aggregateSection = { title: 'aggregate', contents: [] };\n aggregateSection.contents.push({\n label: 'function',\n data: 'showing aggregate scores using the ' + this.viewModel.layout.aggregateFunction + ' aggregate function',\n });\n if (this.viewModel.layout.countUnscored) {\n aggregateSection.contents.push({ label: 'unscored', data: 'includes unscored techniques as having a score of 0' });\n }\n headerSections.push(aggregateSection);\n }\n\n // legend section\n if (self.showLegendContainer && self.showLegendInHeader) headerSections.push(legendSection);\n\n // build header\n let headerGroup = svg.append('g');\n let headerX = d3\n .scaleBand()\n .paddingInner(0.05)\n .domain(headerSections.map((section) => section.title))\n .range([0, width]);\n\n // build header sections\n for (let section of headerSections) {\n let sectionGroup = headerGroup.append('g');\n if (headerSections.length > 1) {\n sectionGroup.attr('transform', `translate(${headerX(section.title)}, 0)`);\n }\n let headerWidth = headerSections.length == 1 ? width : headerX.bandwidth();\n self.buildHeaderSection(this, sectionGroup, section, headerWidth, headerHeight);\n }\n\n if (headerSections.length == 0) headerHeight = 0; // no header sections\n } else {\n //no header\n headerHeight = 0;\n }\n\n // -----------------------------------------------------------------------------\n // MATRIX\n // -----------------------------------------------------------------------------\n\n // build data model\n let datatable = svg.append('g').attr('transform', 'translate(0,' + (headerHeight + 1) + ')');\n let domain = self.dataService.getDomain(self.viewModel.domainVersionID);\n let matrices: RenderableMatrix[] = domain.matrices.map((m) => new RenderableMatrix(m, self.viewModel, self.config));\n\n // get flattened list of tactics\n let tactics: RenderableTactic[] = [];\n for (let matrix of matrices) {\n tactics = tactics.concat(matrix.tactics);\n }\n\n // build tactic columns\n let xRange = d3\n .scaleBand()\n .domain(tactics.map((t) => t.tactic.id))\n .range([0, width]);\n\n let yRange = d3\n .scaleLinear()\n .domain([\n d3.max(tactics, function (tactic: RenderableTactic) {\n return tactic.height;\n }),\n 0,\n ])\n .range([height - headerHeight, 0]);\n\n // tactic row background\n let subtechniqueIndent = Math.min(2 * yRange(1), 15);\n if (self.viewModel.showTacticRowBackground) {\n datatable\n .append('rect')\n .attr('class', 'tactic-header-background')\n .attr('width', width)\n .attr('height', yRange(1))\n .attr('fill', self.viewModel.tacticRowBackground)\n .attr('stroke', self.config.tableBorderColor);\n }\n\n // tactic names\n let tacticGroups = datatable\n .append('g')\n .selectAll('g')\n .data(tactics)\n .enter()\n .append('g')\n .attr('class', function (tactic: RenderableTactic) {\n return 'tactic ' + tactic.tactic.shortname;\n })\n .attr('transform', function (tactic: RenderableTactic) {\n return `translate(${xRange(tactic.tactic.id)}, 0)`;\n });\n\n // add technique groups to tactic column\n let techniqueGroups = tacticGroups\n .append('g')\n .attr('class', 'techniques')\n .selectAll('g')\n .data(function (tactic: RenderableTactic) {\n return tactic.techniques;\n })\n .enter()\n .append('g')\n .attr('class', function (technique: RenderableTechnique) {\n return 'technique ' + technique.technique.attackID;\n })\n .attr('transform', function (technique: RenderableTechnique) {\n return `translate(0, ${yRange(technique.yPosition)})`;\n });\n\n // add sub-technique groups to tactic column\n let subtechniqueGroups = tacticGroups\n .append('g')\n .attr('class', 'subtechniques')\n .selectAll('g')\n .data(function (tactic: RenderableTactic) {\n return tactic.subtechniques;\n })\n .enter()\n .append('g')\n .attr('class', function (subtechnique: RenderableTechnique) {\n return 'subtechnique ' + subtechnique.technique.attackID;\n })\n .attr('transform', function (subtechnique: RenderableTechnique) {\n return `translate(${subtechniqueIndent}, ${yRange(subtechnique.yPosition)})`;\n });\n\n // add cell style to techniques\n techniqueGroups\n .append('rect')\n .attr('class', 'cell')\n .attr('height', yRange(1))\n .attr('width', xRange.bandwidth())\n .attr('fill', function (technique: RenderableTechnique) {\n if (technique.fill !== null) {\n return technique.fill;\n } else {\n if (self.config.theme === 'light') {\n return '#ffffff';\n } else {\n return '#2e2e3f';\n }\n }\n })\n .attr('stroke', self.config.tableBorderColor);\n\n // add cell style to sub-techniques\n subtechniqueGroups\n .append('rect')\n .attr('class', 'cell')\n .attr('height', yRange(1))\n .attr('width', xRange.bandwidth() - subtechniqueIndent)\n .attr('fill', function (subtechnique: RenderableTechnique) {\n if (subtechnique.fill !== null) {\n return subtechnique.fill;\n } else {\n if (self.config.theme === 'light') {\n return '#ffffff';\n } else {\n return '#2e2e3f';\n }\n }\n })\n .attr('stroke', self.config.tableBorderColor);\n\n // add styling for sub-technique sidebar\n let sidebarWidth: number = 3;\n subtechniqueGroups\n .append('rect')\n .attr('class', 'cell')\n .attr('height', yRange(1))\n .attr('width', sidebarWidth)\n .attr('transform', `translate(${-sidebarWidth}, 0)`)\n .attr('fill', self.config.tableBorderColor)\n .attr('stroke', self.config.tableBorderColor);\n techniqueGroups\n .append('polygon')\n .attr('class', 'sidebar')\n .attr('transform', `translate(0, ${yRange(1)})`)\n .attr('points', function (technique: RenderableTechnique) {\n return [\n '0,0',\n `${subtechniqueIndent - sidebarWidth},0`,\n `${subtechniqueIndent - sidebarWidth},${Math.min(\n subtechniqueIndent - sidebarWidth,\n yRange(self.viewModel.filterTechniques(technique.technique.subtechniques, technique.tactic, technique.matrix).length)\n )}`,\n ].join(' ');\n })\n .attr('fill', self.config.tableBorderColor)\n .attr('visibility', function (technique: RenderableTechnique) {\n return technique.technique.subtechniques.length > 0 && technique.showSubtechniques ? 'visible' : 'hidden';\n });\n\n // -----------------------------------------------------------------------------\n // CELL TEXT\n // -----------------------------------------------------------------------------\n\n // track smallest optimal font size\n let minFontSize = Infinity;\n\n // set technique font size\n techniqueGroups\n .append('text')\n .text(function (technique: RenderableTechnique) {\n return technique.text;\n })\n .attr('font-size', function (technique: RenderableTechnique) {\n const fontSize = self.optimalFontSize(this, technique.text, xRange.bandwidth(), yRange(1), false);\n if (fontSize < minFontSize) minFontSize = fontSize;\n return fontSize;\n })\n .attr('fill', function (technique: RenderableTechnique) {\n if (technique.textColor !== null) {\n return technique.textColor;\n } else {\n if (self.config.theme === 'light') {\n return '#000000';\n } else {\n return '#ffffff';\n }\n }\n })\n .each(function () {\n self.verticalAlignCenter(this);\n });\n\n // set sub-technique font size\n subtechniqueGroups\n .append('text')\n .text(function (subtechnique: RenderableTechnique) {\n return subtechnique.text;\n })\n .attr('font-size', function (subtechnique: RenderableTechnique) {\n const fontSize = self.optimalFontSize(this, subtechnique.text, xRange.bandwidth() - subtechniqueIndent, yRange(1), false);\n if (fontSize < minFontSize) minFontSize = fontSize;\n return fontSize;\n })\n .attr('fill', function (subtechnique: RenderableTechnique) {\n if (subtechnique.textColor !== null) {\n return subtechnique.textColor;\n } else {\n if (self.config.theme === 'light') {\n return '#000000';\n } else {\n return '#ffffff';\n }\n }\n })\n .each(function () {\n self.verticalAlignCenter(this);\n });\n\n // set technique and sub-technique groups to the same font size\n this.config.maxTextSize = minFontSize;\n if (this.config.autofitText) {\n this.config.fontSize = minFontSize.toFixed(2);\n }\n if (this.config.autofitText) {\n techniqueGroups.select('text').attr('font-size', minFontSize);\n subtechniqueGroups.select('text').attr('font-size', minFontSize);\n } else {\n techniqueGroups.select('text').attr('font-size', this.config.fontSize);\n subtechniqueGroups.select('text').attr('font-size', this.config.fontSize);\n }\n\n // track the smallest optimal font size for tactics\n let minTacticFontSize = Infinity;\n\n // set tactic font size\n let tacticLabels = tacticGroups.append('g').attr('class', 'tactic-label');\n tacticLabels\n .append('text')\n .text(function (tactic: RenderableTactic) {\n return tactic.tactic.name;\n })\n .attr('font-size', function (tactic: RenderableTactic) {\n const fontSize = self.optimalFontSize(this, tactic.tactic.name, xRange.bandwidth(), yRange(1), true);\n if (fontSize < minTacticFontSize) minTacticFontSize = fontSize;\n return fontSize;\n })\n .attr('fill', function (tactic: RenderableTactic) {\n if (self.viewModel.showTacticRowBackground) return tinycolor.mostReadable(self.viewModel.tacticRowBackground, ['white', 'black']);\n else return self.config.theme === 'light' ? 'black' : 'white';\n })\n .attr('font-weight', 'bold')\n .each(function () {\n self.verticalAlignCenter(this);\n });\n\n // set tactic labels to same font size\n tacticLabels.select('text').attr('font-size', minTacticFontSize);\n\n // -----------------------------------------------------------------------------\n // UNDOCKED LEGEND\n // -----------------------------------------------------------------------------\n\n if (self.showLegendContainer && !self.showLegendInHeader) {\n // calculate legend height and width\n let legendX = Math.max(self.toPx(self.config.legendX, self.config.unit), 0);\n let legendY = Math.max(self.toPx(self.config.legendY, self.config.unit), 0);\n let legendWidth = Math.max(self.toPx(self.config.legendWidth, self.config.unit), 10);\n let legendHeight = Math.max(self.toPx(self.config.legendHeight, self.config.unit), 10);\n\n let legendGroup = datatable.append('g').attr('transform', `translate(${legendX}, ${legendY})`);\n self.buildHeaderSection(this, legendGroup, legendSection, legendWidth, legendHeight);\n }\n }\n\n /**\n * Build the box for the given header section\n * @param self this DOM node\n * @param group outer group element\n * @param section header section\n * @param width width of the cell\n * @param height height of the cell\n */\n private buildHeaderSection(self: any, group: any, section: HeaderSection, width: number, height: number): void {\n let padding = 5;\n height -= 2 * padding; // adjust height for padding\n\n // header section group\n let boxGroup = group.append('g').attr('transform', `translate(0,${padding})`);\n\n // create outer box\n boxGroup\n .append('rect')\n .attr('class', 'header-box')\n .attr('width', width)\n .attr('height', height)\n .attr('stroke', self.config.theme === 'light' ? 'black' : '#4c4c68')\n .attr('fill', self.config.theme === 'light' ? 'white' : '#1a1a23')\n .attr('rx', padding); // rounded corner\n\n // box title\n let boxTitle = boxGroup\n .append('text')\n .attr('class', 'header-box-label')\n .text(section.title)\n .attr('x', 2 * padding)\n .attr('font-size', 12)\n .attr('fill', self.config.theme === 'light' ? 'black' : 'white')\n .each(function () {\n self.verticalAlignCenter(this);\n });\n\n // add cover mask so that the box lines crop around the text\n let bbox = boxTitle.node().getBBox();\n let coverPadding = 2;\n boxGroup\n .append('rect')\n .attr('class', 'label-cover')\n .attr('x', bbox.x - coverPadding)\n .attr('y', bbox.y - coverPadding)\n .attr('width', bbox.width + 2 * coverPadding)\n .attr('height', bbox.height + 2 * coverPadding)\n .attr('fill', self.config.theme === 'light' ? 'white' : '#1a1a23')\n .attr('rx', padding); // rounded corner\n boxTitle.raise(); // push title to front\n\n // add content to box\n let boxContentGroup = boxGroup\n .append('g')\n .attr('class', 'header-box-content')\n .attr('fill', self.config.theme === 'light' ? 'black' : 'white')\n .attr('transform', `translate(${padding}, 0)`);\n\n let yRange = d3\n .scaleBand()\n .padding(0.05)\n .align(0.5)\n .domain(\n section.contents.map(function (content) {\n return content.label;\n })\n )\n .range([0, height]);\n\n // add each subsection to box\n let contentWidth = width - 2 * padding;\n for (let i = 0; i < section.contents.length; i++) {\n let subsection = section.contents[i];\n let contentGroup = boxContentGroup.append('g').attr('transform', `translate(0, ${yRange(subsection.label)})`);\n\n if (typeof subsection.data == 'string') {\n // add text to contentGroup\n contentGroup\n .append('text')\n .text(subsection)\n .attr('font-size', function () {\n return self.optimalFontSize(this, subsection.data as string, contentWidth, yRange.bandwidth(), false, 12);\n })\n .each(function () {\n self.verticalAlignCenter(this);\n });\n } else {\n // call callback to add complex data to contentGroup\n subsection.data(self, contentGroup, contentWidth);\n }\n if (i != section.contents.length - 1) {\n // add dividing line\n contentGroup\n .append('line')\n .attr('x1', 0)\n .attr('x2', contentWidth)\n .attr('y1', yRange.bandwidth())\n .attr('y2', yRange.bandwidth())\n .attr('stroke', '#dddddd');\n }\n }\n }\n\n /** Callback function to build the legend section */\n private buildLegend(): Function {\n return function (self, group, width) {\n // legend colors\n let colorScale = d3\n .scaleOrdinal()\n .domain(\n self.viewModel.legendItems.map(function (item) {\n return item.label;\n })\n )\n .range(\n self.viewModel.legendItems.map(function (item) {\n return item.color;\n })\n );\n\n // legend svg group\n group\n .append('g')\n .attr('transform', 'translate(0, 5)')\n .call(\n d3\n .legendColor()\n .shapeWidth(width / self.viewModel.legendItems.length)\n .shapePadding(0)\n .shape('rect')\n .orient('horizontal')\n .scale(colorScale)\n .labelOffset(2)\n );\n };\n }\n\n /** Callback function to build the gradient section */\n private buildGradient(): Function {\n return function (self, group, width) {\n // build gradient\n let gradient = [];\n for (let i = 0; i < self.viewModel.gradient.colors.length; i++) {\n let percent = i / (self.viewModel.gradient.colors.length - 1);\n gradient.push(d3.interpolateNumber(self.viewModel.gradient.minValue, self.viewModel.gradient.maxValue)(percent));\n }\n\n // build color scale\n let colorScale = d3\n .scaleLinear()\n .domain(gradient)\n .range(self.viewModel.gradient.colors.map((color) => color.color));\n\n // gradient svg group\n let nCells = gradient.length * 2;\n group\n .append('g')\n .attr('transform', 'translate(0, 5)')\n .call(\n d3\n .legendColor()\n .shapeWidth(width / nCells)\n .shapePadding(0)\n .cells(nCells)\n .shape('rect')\n .orient('horizontal')\n .scale(colorScale)\n .labelOffset(2)\n .labelFormat(d3.format('0.02r'))\n );\n };\n }\n\n /**\n * Set width and height based on selected size and orientaiton\n * @param {any} self this DOM node\n * @param {string} size dimensions\n * @param {string} orientation portrait or landscape\n */\n private setSize(self: any, size: string, orientation: string) {\n const ratioMap = {\n letter: { portrait: [8.5, 11], landscape: [11, 8.5] },\n legal: { portrait: [8.5, 14], landscape: [14, 8.5] },\n small: { portrait: [11, 17], landscape: [17, 11] },\n medium: { portrait: [18, 24], landscape: [24, 18] },\n large: { portrait: [24, 36], landscape: [36, 24] },\n };\n\n if (size !== 'custom') {\n const [w, h] = ratioMap[size][orientation];\n self.config.width = w;\n self.config.height = h;\n }\n }\n\n /**\n * Set the vertical alignment of the given node to center\n * @param self this DOM node\n * @param fontSize the font size of the node\n */\n private verticalAlignCenter(self: any, fontSize: any = null) {\n if (self.children && self.children.length > 0) {\n for (let child of self.children) {\n this.verticalAlignCenter(child, self.getAttribute('font-size'));\n }\n } else {\n // transform by half the font size - 1/2px for proper centering\n fontSize = fontSize ? fontSize : self.getAttribute('font-size');\n if (fontSize.endsWith('px')) fontSize = Number(fontSize.split('px')[0]);\n let yPosition = self.hasAttribute('y') ? Number(self.getAttribute('y')) : 0;\n let newYPosition = yPosition + Math.floor(fontSize * 0.3);\n d3.select(self).attr('y', newYPosition);\n }\n }\n\n /**\n * Divide distance into divisions equidistant anchor points S.T they all have equal\n * padding from each other and the beginning and end of the distance\n * @param distance distance to divide\n * @param divisions number of divisions\n * @return number[] where each number corresponds to a division-center offset\n */\n private getSpacing(distance: number, divisions: number): number[] {\n let res = [];\n let spacing = (distance - 1) / (divisions * 2);\n for (let i = 1; i <= divisions * 2; i += 2) {\n res.push(1 + spacing * i);\n }\n return res;\n }\n\n /**\n * Insert line breaks\n * @param self this DOM node\n * @param words array of words to space\n * @param padding element padding\n * @param spacing distance to space text inside element\n * @param center center the text?\n * @param width width of the cell\n * @param height height of the cell\n */\n private insertLineBreaks(self: any, words: string[], padding: number, spacing: number, center: boolean, width: number, height: number) {\n let element = d3.select(self);\n\n // clear previous content\n element.text('');\n while (self.firstChild) self.removeChild(self.firstChild);\n\n let division = this.getSpacing(spacing, words.length);\n for (let i = 0; i < words.length; i++) {\n let tspan = element.append('tspan').text(words[i]);\n if (center) tspan.attr('text-anchor', 'middle');\n tspan.attr('x', center ? width / 2 : padding).attr('y', (height - spacing) / 2 + division[i]);\n }\n }\n\n /**\n * Find the font size for the given array of words to be broken onto\n * 1 line each\n * @param self this DOM node\n * @param text text to render\n * @param width width of the cell\n * @param height height of the cell\n * @param center center the text?\n * @param maxFontSize maximum font size, default 12\n * @returns the largest possible font size\n */\n private findSize(self: any, words: string[], width: number, height: number, center: boolean, maxFontSize: number = 12): number {\n let padding = 4;\n if (!this.config.autofitText) {\n padding = 1;\n }\n\n // break into multiple lines\n let distance = Math.min(height, (maxFontSize + 3) * words.length);\n this.insertLineBreaks(self, words, padding, distance, center, width, height);\n\n // find text size to fit height of cell\n let textHeight = Math.min(distance / words.length, height) * 0.8;\n\n // find text size to fit width of cell\n let longestWordLength = -Infinity;\n for (let word of words) {\n longestWordLength = Math.max(longestWordLength, word.length);\n }\n let textWidth = ((width - 2 * padding) / longestWordLength) * 1.45;\n\n return Math.min(maxFontSize, textHeight, textWidth);\n }\n\n /**\n * Calculate the optimal font size for the given text in the given\n * sizing parameters\n * @param self this DOM node\n * @param text text to render\n * @param width width of the cell\n * @param height height of the cell\n * @param center center the text?\n * @param maxFontSize maximum font size, default 12\n * @returns the size in pixels\n */\n private optimalFontSize(self: any, text: string, width: number, height: number, center: boolean, maxFontSize: number = 12): number {\n let words = text.split(' ');\n let optimalSize = -Infinity;\n let wordArrangement = [];\n\n // too many combinations causes page lagging\n let num_breaks = 1;\n if (words.length < 20) num_breaks = 3;\n else if (words.length < 50) num_breaks = 2;\n\n let breaks = Array.from(this.findBreaks(words.length, num_breaks));\n for (let b of breaks) {\n // find the best option for proposed placements generated\n // b is the binary representation of newline locations (e.g. 001011)\n // where 1 is a newline and 0 is a space\n let wordList = [];\n\n for (let i = 0; i < b.length; i++) {\n if (b[i] === '0') {\n // join with space\n if (wordList.length == 0) wordList.push(words[i]);\n else wordList[wordList.length - 1] = wordList[wordList.length - 1] + ' ' + words[i];\n } else {\n // join with newline\n wordList.push(words[i]);\n }\n }\n\n let size = this.findSize(self, wordList, width, height, center, maxFontSize);\n if (size > optimalSize) {\n optimalSize = size;\n wordArrangement = wordList;\n }\n if (size == maxFontSize) break; // max font size found, stop search\n }\n\n this.findSize(self, wordArrangement, width, height, center, maxFontSize);\n return optimalSize;\n }\n\n /**\n * Determine placement of line breaks\n * @param spaces number of spaces in the words\n * @param breaks number of breaks to insert\n * @returns the placement of line breaks represented as [01]+ where 1=break and 0=space\n */\n private findBreaks(spaces: number, breaks: number): Set {\n let placement = new Set();\n let initial_breaks = [];\n while (initial_breaks.length < spaces) initial_breaks.push(0);\n placement.add(initial_breaks.join(''));\n\n function recurse(currPlacement, depth, breaks) {\n for (let i = 0; i < currPlacement.length; i++) {\n let p = JSON.parse(JSON.stringify(currPlacement));\n p[i] = 1;\n placement.add(p.join(''));\n if (depth < breaks - 1) recurse(p, depth + 1, breaks);\n }\n }\n recurse(initial_breaks, 0, breaks);\n return placement;\n }\n\n /**\n * Convert any length in various units to pixels\n * @param quantity what length\n * @param unit which unit system (in, cm, px, em, pt)\n * @return that length in pixels\n */\n private toPx(quantity: number, unit: string): number {\n let factor: any;\n if (unit == 'in') factor = 96;\n else if (unit == 'cm') factor = 3.779375 * 10;\n else if (unit == 'px') factor = 1;\n else if (unit == 'em') factor = 16;\n else if (unit == 'pt') factor = 1.33;\n else {\n console.error('unknown unit', unit);\n factor = 0;\n }\n return quantity * factor;\n }\n\n /** Download the SVG */\n public downloadSVG(): void {\n // get SVG element\n let svgElement = document.getElementById('svg' + this.viewModel.uid);\n svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n // generate filename\n let filename = this.viewModel.name.split(' ').join('_');\n // remove all non alphanumeric characters\n filename = filename.replace(/\\W/g, '') + '.svg';\n\n // build SVG blob\n const preface = '\\r\\n';\n const svgData = new XMLSerializer().serializeToString(svgElement);\n const svgBlob = new Blob([preface, svgData], { type: 'image/svg+xml;charset=utf-8' });\n\n // download\n if (this.isIE) {\n const nav = window.navigator as any;\n nav.msSaveOrOpenBlob(svgBlob, filename);\n } else {\n const downloadLink = document.createElement('a');\n downloadLink.download = filename;\n downloadLink.href = URL.createObjectURL(svgBlob);\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n }\n }\n}\n\nclass HeaderSectionContent {\n label: string;\n // either string to display in box, or a callback to create complex content in the box\n // callback function option takes params node, width, height, and appends data to node\n data: string | Function;\n}\n\nclass HeaderSection {\n title: string;\n contents: HeaderSectionContent[];\n}\n","
\n
\n
    \n
  • \n Warning: this interface is not fully compatible with your browser. For best results please switch to Edge, Chrome, or Firefox.\n
  • \n
  • \n
    \n \n \n nightlight_round\n wb_sunny\n
    \n
\n \n
  • \n
    \n \n \n \n \n {{ config.unit }}\n \n \n
    \n
  • \n \n
  • \n
    \n \n photo_size_select_large\n
    \n
    \n
      \n
    • \n \n orientation\n \n Portrait\n Landscape\n \n \n
    • \n
    • \n \n size\n \n Custom\n US Letter: 8.5x11\n US Legal: 8.5x14\n Small: 11x17\n Medium: 18x24\n Large 24x36\n \n \n
    • \n
    • \n \n width\n \n {{ config.unit }}\n \n
    • \n
    • \n \n height\n \n {{ config.unit }}\n \n
    • \n
    • \n \n header height\n \n {{ config.unit }}\n \n
    • \n
    \n
    \n \n\n
    \n \n format_size\n
    \n
    \n
      \n
    • \n \n font\n \n serif\n sans-serif\n monospace\n \n \n
    • \n
    • \n \n font size\n \n \n
      config.maxTextSize\">\n warning\n \n
      \n
    • \n
    • \n \n \n
    • \n
    \n
    \n \n
    \n \n view_list\n
    \n
    \n
      \n
    • \n \n \n
    • \n
    • \n \n legend X position\n \n {{ config.unit }}\n \n
    • \n
    • \n \n legend Y position\n \n {{ config.unit }}\n \n
    • \n
    • \n \n legend width\n \n {{ config.unit }}\n \n
    • \n
    • \n \n legend height\n \n {{ config.unit }}\n \n
    • \n
    \n
    \n \n
    \n \n visibility\n
    \n
    \n
      \n
    • \n \n \n
    • \n
    • \n \n \n show about\n \n
    • \n
    • \n \n \n show domain\n \n
    • \n
    • \n \n \n
    • \n
    • \n \n \n
    • \n
    • \n \n \n
    • \n
    • \n \n sub-techniques\n \n show all\n show expanded\n show none\n \n \n
    • \n
    • \n \n \n
    • \n
    \n
    \n \n
  • \n
  • \n
    \n \n file_download\n
    \n \n
  • \n \n\n\n
    loading...
    \n\n\n \n\n","import { Component, ViewChild, TemplateRef, AfterViewInit, ViewEncapsulation, Input, Output, EventEmitter } from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { Tab, Domain, Version, ViewModel } from '../classes';\nimport { ConfigService } from '../services/config.service';\nimport { VersionUpgradeComponent } from '../version-upgrade/version-upgrade.component';\nimport { HelpComponent } from '../help/help.component';\nimport { SvgExportComponent } from '../svg-export/svg-export.component';\nimport { ViewModelsService } from '../services/viewmodels.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { HttpClient } from '@angular/common/http';\nimport { ChangelogComponent } from '../changelog/changelog.component';\nimport { Subscription, forkJoin } from 'rxjs';\nimport * as globals from '../utils/globals';\nimport { LayerInformationComponent } from '../layer-information/layer-information.component';\nimport { isSafari } from '../utils/utils';\n\n@Component({\n selector: 'tabs',\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n providers: [ViewModelsService],\n encapsulation: ViewEncapsulation.None,\n})\nexport class TabsComponent implements AfterViewInit {\n @Input() userTheme: string;\n @Output() onUserThemeChange = new EventEmitter();\n @ViewChild('safariWarning') safariWarning: TemplateRef;\n @ViewChild('versionWarning') versionWarning: TemplateRef;\n\n public activeTab: Tab = null;\n public dropdownEnabled: string = '';\n public layerTabs: Tab[] = [];\n public adjustedHeaderHeight: number = 0;\n public safariDialogRef;\n public versionDialogRef;\n public versionMinorSnackbarRef;\n public showHelpDropDown: boolean = false;\n public loadURL: string = '';\n public layerLinkURLs: string[] = [];\n public bannerContent: string;\n public subscription: Subscription;\n public copiedRecently: boolean = false; // true if copyLayerLink is called, reverts to false after 2 seconds\n public loadData: any = {\n url: undefined,\n version: undefined,\n identifier: undefined,\n };\n\n // user input for layer-layer operations\n public opSettings: any = {\n domain: '',\n gradientVM: null,\n coloringVM: null,\n commentVM: null,\n linkVM: null,\n metadataVM: null,\n enabledVM: null,\n filterVM: null,\n scoreExpression: '',\n legendVM: null,\n };\n\n public get latestDomains(): Domain[] {\n return this.filterDomains(this.dataService.versions[0]);\n }\n\n public get minimumSupportedVersion(): string {\n return globals.minimumSupportedVersion;\n }\n\n public get navVersion(): string {\n return globals.navVersion;\n }\n\n constructor(\n public dialog: MatDialog,\n public viewModelsService: ViewModelsService,\n public dataService: DataService,\n public http: HttpClient,\n public configService: ConfigService,\n public snackBar: MatSnackBar\n ) {\n console.debug('initializing tabs component');\n this.newBlankTab();\n this.loadTabs(configService.defaultLayers).then(() => {\n // failed to load from URL, create a new blank layer\n if (this.layerTabs.length == 0) this.newLayer(this.dataService.domains[0].id);\n\n // if there is no active tab set, activate the first\n if (!this.activeTab) this.selectTab(this.layerTabs[0]);\n });\n this.bannerContent = this.configService.banner;\n }\n\n ngAfterViewInit(): void {\n if (isSafari('<=13')) {\n // open safari version incompatibility warning\n this.safariDialogRef = this.dialog.open(this.safariWarning, {\n width: '350px',\n disableClose: true,\n panelClass: this.userTheme,\n });\n }\n }\n\n /**\n * Adjust the header height on scroll event\n */\n public adjustHeader(newHeight) {\n this.adjustedHeaderHeight = newHeight;\n }\n\n /**\n * Open initial tabs on application load\n * @param defaultLayers any default layers defined in the config file\n */\n public async loadTabs(defaultLayers) {\n let bundleURL = this.getNamedFragmentValue('bundleURL')[0];\n let bundleVersion = this.getNamedFragmentValue('version')[0];\n let bundleDomain = this.getNamedFragmentValue('domain')[0];\n let layerURLs = this.getNamedFragmentValue('layerURL');\n\n let self = this;\n if (bundleURL?.length && bundleVersion && bundleDomain?.length) {\n // load base data from URL\n self.newLayerFromURL({\n url: bundleURL,\n version: bundleVersion,\n identifier: bundleDomain,\n });\n } else if (layerURLs?.length) {\n // load layer from URL\n let first = true;\n for (let url of layerURLs) {\n await self.loadLayerFromURL(url, first, true);\n first = false;\n }\n } else if (defaultLayers['enabled']) {\n // load default layers from config file\n let first = true;\n for (let url of defaultLayers['urls']) {\n await self.loadLayerFromURL(url, first, true);\n first = false;\n }\n }\n }\n\n /**\n * Open a new tab\n * @param {string} title title of new tab\n * @param {ViewModel} viewModel the view model for the template\n * @param {Boolean} isCloseable is the tab closeable, default false\n * @param {Boolean} replace replace the current tab with the new tab, default false\n * @param {Boolean} forceNew force open a new tab even if a tab of that name already exists, default false\n * @param {Boolean} isDataTable is the tab a data table, if so tab text should be editable, default false\n */\n public openTab(title: string, viewModel: ViewModel, isCloseable = false, replace = true, forceNew = false, isDataTable = false): void {\n if (!forceNew) {\n // if tab is already open, change to that tab\n let tab: Tab = this.layerTabs.find((t) => t.title === title);\n this.selectTab(tab);\n return;\n }\n\n // create a new tab\n let domain = viewModel ? viewModel.domainVersionID : '';\n let tab = new Tab(title, isCloseable, false, domain, isDataTable);\n tab.viewModel = viewModel;\n\n // select new tab\n if (!replace || this.layerTabs.length === 0) {\n this.layerTabs.push(tab); // don't replace\n this.selectTab(this.layerTabs[this.layerTabs.length - 1]);\n } else {\n // find active tab index\n for (let i = 0; i < this.layerTabs.length; i++) {\n if (this.layerTabs[i] == this.activeTab) {\n if (this.layerTabs[i].title == 'new tab') {\n // close current and don't let it create a replacement tab\n this.closeActiveTab(true);\n }\n this.layerTabs.splice(i, 0, tab); // replace\n this.selectTab(this.layerTabs[i]);\n return;\n }\n }\n }\n // reset dropdown\n this.dropdownEnabled = '';\n }\n\n /**\n * Open a new \"blank\" tab with new layer options\n * @param {boolean} replace replace the current tab with this blank tab, default false\n */\n public newBlankTab(replace: boolean = false): void {\n this.openTab('new tab', null, true, replace, true, false);\n }\n\n /**\n * Select the specified tab, deselect other tabs\n * @param {Tab} tab the tab to select\n */\n public selectTab(tab: Tab): void {\n this.activeTab = tab;\n\n // close search sidebar\n this.viewModelsService.viewModels.forEach((viewModel) => {\n if (viewModel.sidebarContentType === 'search') {\n viewModel.sidebarOpened = false;\n viewModel.sidebarContentType = '';\n }\n });\n }\n\n /**\n * Close the specified tab\n * @param {Tab} tab the tab to close\n * @param {boolean} allowNoTab if true, doesn't select another tab, and won't open a new tab if there are none, default false\n */\n public closeTab(tab: Tab, allowNoTab: boolean = false) {\n let action = 0; // controls post close-tab behavior\n\n // destroy tab viewmodel\n this.viewModelsService.destroyViewModel(tab.viewModel);\n\n // check if the tab we're closing is the active tab\n let i = this.layerTabs.findIndex((t) => t === tab);\n if (tab == this.activeTab) {\n if (i == 0 && this.layerTabs.length > 1) action = 1; // closing first tab, first tab is active, and more tabs exist\n else if (i > 0) action = 2; // not closing first tab, implicitly more tabs exist\n else action = 3; // closing first tab and no other tabs exist\n }\n\n // remove the tab\n this.layerTabs.splice(i, 1);\n\n // handle post close-tab behavior\n if (allowNoTab) return;\n\n switch (action) {\n case 0: // should only occur if the active tab is not closed, don't select another tab\n break;\n case 1: // closing the first tab and more tabs exist\n this.selectTab(this.layerTabs[0]); // select first tab\n break;\n case 2: // closing any tab other than the first\n this.selectTab(this.layerTabs[0]); // select first tab\n break;\n case 3: // closing first tab and no other tab exist\n this.newBlankTab(); // create a new blank tab, automatically opens this tab\n break;\n default: // should never occur\n console.error('post closetab action not specified (this should never happen)');\n }\n }\n\n /**\n * Close the currently selected tab\n * @param {boolean} allowNoTab if true, doesn't select another tab, and won't open a new tab if there are none, default false\n */\n public closeActiveTab(allowNoTab: boolean = false): void {\n if (this.activeTab) this.closeTab(this.activeTab, allowNoTab);\n }\n\n /**\n * Handle tab click event\n * @param {Tab} tab the selected tab\n */\n public handleTabClick(tab: Tab): void {\n if (this.activeTab !== tab) {\n this.activeTab = tab;\n this.dropdownEnabled = '';\n } else this.dropdownEnabled = this.dropdownEnabled !== 'description' ? 'description' : '';\n }\n\n /**\n * Filter domains on version\n * @param {Version} version the version to filter by\n * @returns list of domains in the given version\n */\n public filterDomains(version: Version): Domain[] {\n return this.dataService.domains.filter((d) => d.version == version);\n }\n\n /**\n * Check if the given feature is defined in the config file\n * @param {string} featureName the name of the feature\n * @returns true, if the feature is defined, false otherwise\n */\n public hasFeature(featureName: string): boolean {\n return this.configService.getFeature(featureName);\n }\n\n /**\n * Handle theme change\n * @param {string} theme the selected theme\n */\n public handleUserThemeChange(theme: string) {\n this.onUserThemeChange.emit(theme);\n }\n\n /**\n * Open the selected dialog\n * @param {string} dialogName {\"changelog\"|\"help\"} the dialog to open\n */\n public openDialog(dialogName: string) {\n const settings = { maxWidth: '75ch', panelClass: this.userTheme, autoFocus: false, data: {theme: this.userTheme} };\n if (dialogName == 'changelog') {\n this.dialog.open(ChangelogComponent, settings);\n } else if (dialogName == 'help') {\n this.dialog.open(HelpComponent, settings);\n } else if (dialogName == 'layers') {\n this.dialog.open(LayerInformationComponent, settings);\n }\n }\n\n /**\n * Open the SVG exporter dialog\n * @param {ViewModel} viewModel the viewModel to render\n */\n public openSVGDialog(viewModel: ViewModel) {\n this.dialog.open(SvgExportComponent, {\n data: { vm: viewModel },\n panelClass: ['dialog-custom', this.userTheme],\n autoFocus: false,\n });\n }\n\n /**\n * Given a unique root, get a layer name that does not conflict any existing layers, e.g 'new layer' -> 'new layer 1'\n * @param {string} root the root string to get the non-conflicting version of\n * @return {string} non-conflicted version\n */\n public getUniqueLayerName(root: string): string {\n let id = 0;\n\n function isInteger(str: string): boolean {\n let n = Math.floor(Number(str));\n return String(n) === str;\n }\n\n for (let viewModel of this.viewModelsService.viewModels) {\n if (!viewModel.name.startsWith(root)) continue;\n if (viewModel.name === root) {\n // case where it's \"layer\" aka \"layer0\"\n id = Math.max(id, 1);\n continue;\n }\n\n // find the lowest number higher than existing number\n let substr = viewModel.name.substring(root.length, viewModel.name.length);\n if (isInteger(substr)) {\n id = Math.max(id, Number(substr) + 1);\n }\n }\n\n // if no layers of this name exist (id == 0) just return root\n if (id != 0) root = root + id;\n return root;\n }\n\n /**\n * Create a new layer from URL\n */\n public newLayerFromURL(loadData: any, obj: any = undefined): void {\n let domainID = loadData.identifier.toLowerCase();\n let domainVersionID = this.dataService.getDomainVersionID(domainID, loadData.version);\n\n // validate input data\n let valid = this.validateInput(loadData, domainVersionID);\n if (!valid) return;\n\n // load from URL\n let url = new URL(loadData.url).toString();\n let subscription;\n subscription = this.http.get(url).subscribe({\n next: (res) => {\n // check for custom domain\n let exists = this.dataService.domains.find((d) => d.isCustom && d.id === domainVersionID);\n if (!exists) {\n // create or retrieve version\n let v: Version = this.dataService.versions.find((v) => v.number == loadData.version);\n if (!v) {\n v = new Version(`ATT&CK v${loadData.version}`, String(loadData.version));\n this.dataService.versions.push(v);\n }\n\n // create new custom domain object\n let domainObject = new Domain(domainID, domainID, v, [url]);\n domainObject.isCustom = true;\n this.dataService.domains.push(domainObject);\n }\n\n this.newLayer(domainVersionID, obj);\n },\n error: (err) => {\n console.error(err);\n alert('ERROR retrieving data from ' + url + ', check the javascript console for more information.');\n },\n complete: () => {\n if (subscription) subscription.unsubscribe();\n }, // prevent memory leaks\n });\n }\n\n /**\n * Validate user input data before loading data from collection or STIX bundle URL\n * @param {any} loadData the user input\n * @param {string} domainVersionID the domain and version\n * @returns true if user input is valid, false otherwise\n */\n public validateInput(loadData: any, domainVersionID: string): boolean {\n try {\n // validate URL\n let url = new URL(loadData.url);\n\n // validate version\n if (isNaN(loadData.version)) {\n throw Error('version is not a number');\n }\n\n // validate domainVersionID is unique\n let exists = this.dataService.domains.find((d) => d.id == domainVersionID);\n // Note: if a user inputs the same domain, version, AND url, do not check for collisions, just reload the custom dataset\n if (exists && !(exists.isCustom && exists.urls[0] == url.toString())) {\n throw Error(`the domain and version specified conflict with an existing set of ATT&CK data (${exists.name} ${exists.version.name})`);\n }\n\n return true; // passed validation\n } catch (err) {\n console.error(err);\n if (err instanceof TypeError) {\n alert('ERROR: invalid url, check the javascript console for more information.');\n } else {\n alert('ERROR ' + err.message);\n }\n return false; // failed validation\n }\n }\n\n /**\n * Create a new layer in the given domain and version\n */\n public newLayer(domainVersionID: string, obj: any = undefined): void {\n // load domain data, if not yet loaded\n let domain = this.dataService.getDomain(domainVersionID);\n if (!domain.dataLoaded) {\n this.dataService.loadDomainData(domainVersionID, true);\n }\n\n // find non conflicting name\n let name;\n if (obj && 'name' in obj && obj['name']) {\n name = obj['name'];\n } else name = this.getUniqueLayerName('layer');\n\n // create and open the view model\n let viewModel = this.viewModelsService.newViewModel(name, domainVersionID);\n if (obj) {\n // restore view model from the given string\n viewModel.deserialize(obj);\n }\n viewModel.loadVMData();\n this.openTab(name, viewModel, true, true, true, true);\n }\n\n /**\n * Get the layer score expression variable for the tab at the given index\n * @param {number} index the index of the tab\n * @return {string} the score expression character\n */\n public indexToChar(index: number): string {\n let viewModelIndex = 0;\n for (let i = 0; i < index; i++) {\n // check if tab has a view model\n if (this.layerTabs[i].viewModel) viewModelIndex++;\n }\n return String.fromCharCode(97 + viewModelIndex);\n }\n\n /**\n * Inverse of indextoChar, maps the character to the tab it corresponds to\n * @param {string} char the score expression character\n * @return {number} the index of the tab\n */\n public charToIndex(char: string): number {\n let viewModelIndex = 0;\n for (let i = 0; i < this.layerTabs.length; i++) {\n if (this.layerTabs[i].viewModel) {\n let currChar = String.fromCharCode(97 + viewModelIndex);\n viewModelIndex++;\n if (currChar == char) return i;\n }\n }\n }\n\n /**\n * Create a new layer by operation based on user input\n */\n public layerByOperation(): void {\n // build score expression map, mapping inline variables to their actual VMs\n let scoreVariables = new Map();\n let regex = /\\b[a-z]\\b/g; // \\b matches word boundary\n let matches = this.opSettings.scoreExpression.match(regex);\n\n let self = this;\n if (matches) {\n matches.forEach(function (match) {\n let index = self.charToIndex(match);\n let vm = self.layerTabs[index].viewModel;\n scoreVariables.set(match, vm);\n });\n }\n\n let layerName = this.getUniqueLayerName('layer by operation');\n try {\n // all layers must be of the same domain/version\n let vms = Array.from(scoreVariables.values());\n if (vms && !vms.every((vm) => vm.domainVersionID === vms[0].domainVersionID)) {\n throw Error('cannot apply operations to layers of different domains');\n }\n\n // execute the layer operation\n let vm = this.viewModelsService.layerOperation(scoreVariables, layerName, this.opSettings);\n\n // load domain data and open new layer operation tab\n if (!this.dataService.getDomain(this.opSettings.domain).dataLoaded) {\n this.dataService.loadDomainData(this.opSettings.domain, true).then(() => {\n vm.loadVMData();\n vm.updateGradient();\n this.openTab(layerName, vm, true, true, true, true);\n });\n } else {\n vm.loadVMData();\n vm.updateGradient();\n this.openTab(layerName, vm, true, true, true, true);\n }\n } catch (err) {\n console.error(err);\n alert('Layer Layer operation error: ' + err.message);\n }\n }\n\n /**\n * Check if there's an error in the score expression (syntax, etc)\n * @return {string} error or null if no error\n */\n public getScoreExpressionError(): string {\n let self = this;\n try {\n // build fake scope\n let regex = /\\b[a-z]\\b/g; // \\b matches word boundary\n let scope = {};\n let matches = self.opSettings.scoreExpression.match(regex);\n\n if (matches) {\n let noMatch = '';\n matches.forEach(function (match) {\n scope[match] = 0;\n\n // check if letter is too large\n if (typeof self.charToIndex(match) == 'undefined') {\n noMatch = 'Variable ' + match + ' does not match any layers';\n } else if (\n self.opSettings.domain &&\n self.layerTabs[self.charToIndex(match)].viewModel.domainVersionID !== self.opSettings.domain\n ) {\n noMatch = 'Layer ' + match + ' does not match the chosen domain';\n }\n });\n if (noMatch.length > 0) return noMatch;\n }\n return null;\n } catch (err) {\n return err.message;\n }\n }\n\n /**\n * Open prompt to upload a layer\n */\n public openUploadPrompt(): void {\n let input = document.getElementById('uploader');\n input.click();\n }\n\n /**\n * Dialog to upgrade version if layer is not the latest version\n */\n public versionUpgradeDialog(viewModel: ViewModel): Promise {\n let dataPromise: Promise = new Promise((resolve, reject) => {\n let currVersion = this.dataService.latestVersion.number;\n if (viewModel.version !== currVersion) {\n // ask to upgrade\n let dialog = this.dialog.open(VersionUpgradeComponent, {\n data: {\n layerName: viewModel.name,\n vmVersion: viewModel.version,\n currVersion: currVersion,\n },\n disableClose: true,\n width: '25%',\n panelClass: this.userTheme,\n autoFocus: false,\n });\n this.subscription = dialog.afterClosed().subscribe({\n next: (result) => {\n if (!result.upgrade && !this.dataService.isSupported(viewModel.version)) {\n reject(\n new Error(`Uploaded layer version (${String(viewModel.version)}) is not supported by Navigator v${this.navVersion}`)\n );\n }\n if (result.upgrade) {\n let newDomainVersionID = this.dataService.getDomainVersionID(viewModel.domain, currVersion);\n resolve({ oldID: viewModel.domainVersionID, newID: newDomainVersionID });\n }\n resolve(null);\n },\n complete: () => {\n if (this.subscription) this.subscription.unsubscribe();\n }, //prevent memory leaks\n });\n } else resolve(null); // layer is already current version\n });\n return dataPromise;\n }\n\n /**\n * Checks if the layer can be upgraded and initializes the layer upgrade process\n * @param {ViewModel} oldViewModel viewmodel to upgrade\n * @param {any} serialized the viewmodel's raw serialized JSON string\n * @param {boolean} replace replace if true, replace the current active tab with the layer\n * @param {boolean} defaultLayers is this a layer being loaded by default (from the config or query string)?\n * if so, will act as if the user decided not to upgrade the layer\n */\n public upgradeLayer(oldViewModel: ViewModel, serialized: any, replace: boolean, defaultLayers: boolean = false): Promise {\n return new Promise((resolve, reject) => {\n if (!defaultLayers) {\n this.versionUpgradeDialog(oldViewModel)\n .then((versions) => {\n if (versions) {\n // user upgraded to latest version\n // create and open the latest version\n let newViewModel = this.viewModelsService.newViewModel(oldViewModel.name, versions.newID);\n newViewModel.version = this.dataService.latestVersion.number; // update version to new ID\n newViewModel.deserialize(serialized, false); // restore layer data, except for technique annotations\n newViewModel.loadVMData();\n newViewModel.compareTo = oldViewModel;\n this.openTab('new layer', newViewModel, true, replace, true, true);\n newViewModel.openSidebar('layerUpgrade');\n newViewModel.selectTechniquesAcrossTactics = false;\n\n // load layer version & latest ATT&CK version\n let loads: any = {};\n let dataSubscription: Subscription;\n if (!this.dataService.getDomain(versions.oldID).dataLoaded)\n loads.old = this.dataService.loadDomainData(versions.oldID, true);\n if (!this.dataService.getDomain(versions.newID).dataLoaded)\n loads.new = this.dataService.loadDomainData(versions.newID, true);\n dataSubscription = forkJoin(loads).subscribe({\n complete: () => {\n newViewModel.versionChangelog = this.dataService.compareVersions(versions.oldID, versions.newID);\n // load vm for uploaded layer\n oldViewModel.deserialize(serialized);\n oldViewModel.loadVMData();\n newViewModel.initCopyAnnotations();\n resolve(null);\n if (dataSubscription) dataSubscription.unsubscribe();\n },\n });\n } else {\n // user did not upgrade, keep the old version\n this.openTab('new layer', oldViewModel, true, replace, true, true);\n if (!this.dataService.getDomain(oldViewModel.domainVersionID).dataLoaded) {\n this.dataService.loadDomainData(oldViewModel.domainVersionID, true).then(() => {\n oldViewModel.deserialize(serialized);\n oldViewModel.loadVMData();\n resolve(null);\n });\n } else {\n oldViewModel.deserialize(serialized);\n oldViewModel.loadVMData();\n resolve(null);\n }\n }\n })\n .catch((err) => {\n console.error(err);\n alert('ERROR parsing file, check the javascript console for more information.');\n resolve(null);\n });\n } else {\n // default layer, do not upgrade\n this.openTab('new layer', oldViewModel, true, replace, true, true);\n if (!this.dataService.getDomain(oldViewModel.domainVersionID).dataLoaded) {\n this.dataService.loadDomainData(oldViewModel.domainVersionID, true).then(() => {\n oldViewModel.deserialize(serialized);\n oldViewModel.loadVMData();\n resolve(null);\n });\n } else {\n oldViewModel.deserialize(serialized);\n oldViewModel.loadVMData();\n resolve(null);\n }\n }\n });\n }\n\n /**\n * Load a layer from file\n */\n public loadLayerFromFile(): void {\n let input = document.getElementById('uploader');\n if (input.files.length < 1) {\n alert('You must select a file to upload!');\n return;\n }\n this.readJSONFile(input.files[0]);\n }\n\n /**\n * Reads the JSON file, adds the properties to a view model, and\n * loads the view model into a new layer\n */\n public async readJSONFile(file: File): Promise {\n return new Promise((resolve, reject) => {\n let reader = new FileReader();\n let self = this;\n\n reader.onload = async (e) => {\n let loadObjAsLayer = async function(layerObj) {\n let viewModel = self.viewModelsService.newViewModel('loading layer...', undefined);\n try {\n let layerVersionStr = viewModel.deserializeDomainVersionID(layerObj);\n await self.versionMismatchWarning(layerVersionStr);\n self.versionMismatchWarning(layerVersionStr);\n if (!self.dataService.getDomain(viewModel.domainVersionID)) {\n throw new Error(`Error: '${viewModel.domain}' (v${viewModel.version}) is an invalid domain.`);\n }\n\n let isCustom = 'customDataURL' in layerObj;\n if (!isCustom) {\n await self.upgradeLayer(viewModel, layerObj, true);\n console.debug(`loaded layer \"${viewModel.name}\"`);\n } else {\n // load as custom data\n viewModel.deserialize(layerObj);\n let url = layerObj['customDataURL'];\n self.newLayerFromURL(\n {url: url, version: viewModel.version, identifier: viewModel.domain},\n layerObj\n );\n }\n } catch (err) {\n console.error(err);\n alert(`ERROR parsing layer, check the javascript console for more information.`);\n self.viewModelsService.destroyViewModel(viewModel);\n resolve(null); // continue\n }\n }\n\n let result = String(reader.result);\n let layerFile = typeof result == 'string' ? JSON.parse(result) : result;\n if (layerFile?.length) {\n console.debug('loading file with multiple layers');\n for (let layer of layerFile) {\n await loadObjAsLayer(layer);\n }\n } else {\n await loadObjAsLayer(layerFile);\n }\n };\n reader.readAsText(file);\n });\n }\n\n /**\n * Check if uploaded layer version is out of date and display\n * a snackbar warning message (for minor mismatches) or a dialog warning\n * (for major mismatches)\n * @param {string} layerVersionStr the uploaded layer version\n */\n public async versionMismatchWarning(layerVersionStr: string): Promise {\n return new Promise((resolve, reject) => {\n let globalVersionSplit = globals.layerVersion.split('.');\n let layerVersion = layerVersionStr.split('.');\n // if minor version change, snackbar will be displayed\n if (layerVersion[0] === globalVersionSplit[0] && layerVersion[1] !== globalVersionSplit[1]) {\n let snackMessage = `Uploaded layer version (${layerVersionStr}) is out of date. Please update to v${globals.layerVersion} for optimal compatibility.`;\n this.versionMinorSnackbarRef = this.snackBar.open(snackMessage, 'CHANGELOG', {\n duration: 6500,\n });\n this.versionMinorSnackbarRef.onAction().subscribe(() => {\n this.openDialog('changelog');\n });\n resolve(true);\n }\n // if major version change, keep the dialog open until user dismisses it\n else if (layerVersion[0] !== globalVersionSplit[0]) {\n this.versionDialogRef = this.dialog.open(this.versionWarning, {\n width: '30em',\n disableClose: true,\n panelClass: this.userTheme,\n data: {\n objVersion: layerVersionStr,\n globalVersion: globals.layerVersion,\n },\n });\n this.versionDialogRef.afterClosed().subscribe((_) => {\n resolve(true);\n });\n } else {\n resolve(true);\n }\n });\n }\n\n /**\n * Load layer from URL\n * @param {string} loadURL the url to load\n * @param {boolean} replace replace the current active with the loaded layer?\n * @param {boolean} defaultLayers is this loading reflecting a set of default layers (from the config file or from the query string)?\n *\n */\n public async loadLayerFromURL(loadURL: string, replace: boolean, defaultLayers: boolean = false): Promise {\n return new Promise(async (resolve, reject) => {\n let subscription;\n let self = this;\n subscription = self.http.get(loadURL).subscribe({\n next: async (res) => {\n let loadLayerAsync = async function(layerObj) {\n let viewModel = self.viewModelsService.newViewModel('loading layer...', undefined);\n try {\n let layerVersionStr = viewModel.deserializeDomainVersionID(layerObj);\n await self.versionMismatchWarning(layerVersionStr);\n if (!self.dataService.getDomain(viewModel.domainVersionID)) {\n throw new Error(`Error: '${viewModel.domain}' (v${viewModel.version}) is an invalid domain.`);\n }\n await self.upgradeLayer(viewModel, layerObj, replace, defaultLayers);\n console.debug(`loaded layer \"${viewModel.name}\" from ${loadURL}`);\n } catch (err) {\n console.error(err);\n alert(`ERROR parsing layer from ${loadURL}, check the javascript console for more information.`);\n self.viewModelsService.destroyViewModel(viewModel);\n resolve(null); // continue\n }\n };\n\n let layerFile = typeof res == 'string' ? JSON.parse(res) : res;\n if (layerFile?.length) {\n console.debug('loading file with multiple layers');\n for (let layer of layerFile) {\n await loadLayerAsync(layer);\n }\n } else {\n await loadLayerAsync(layerFile);\n }\n resolve(null); //continue\n },\n error: (err) => {\n console.error(err);\n alert(`ERROR retrieving layer from ${loadURL}, check the javascript console for more information.`);\n resolve(null); // continue\n },\n complete: () => {\n if (subscription) subscription.unsubscribe();\n }, // prevent memory leaks\n });\n });\n }\n\n /**\n * Helper function to track which layerLinkURLs have been added or removed\n */\n public trackByFunction(index: number): any {\n return index;\n }\n\n /**\n * Add a new empty layer link to the layerLinkURLs array\n */\n public addLayerLink(): void {\n this.layerLinkURLs.push('');\n }\n\n /**\n * Remove the given layer link URL from layerLinkURLs\n * @param {number} index the index to remove\n */\n public removeLayerLink(index: number): void {\n this.layerLinkURLs.splice(index, 1);\n }\n\n /**\n * Convert layerLinkURL to a query string value for layerURL query string\n * @return URL such that when opened will create navigator instance with a query String\n * specifying layerLinkURL as the URL to fetch the default layer from\n */\n public getLayerLink(): string {\n let str = window.location.href.split('#')[0];\n let join = '#'; // hash first, then ampersand\n for (let layerLinkURL of this.layerLinkURLs) {\n str += join + 'layerURL=' + encodeURIComponent(layerLinkURL);\n join = '&';\n }\n for (let feature of this.configService.customizefeatureList) {\n if (feature.subfeatures) {\n for (let subfeature of feature.subfeatures) {\n if (!subfeature.enabled) {\n str += join + subfeature.name + '=false';\n join = '&';\n }\n }\n } else if (!feature.enabled) {\n str += join + feature.name + '=false';\n join = '&';\n }\n }\n return str;\n }\n\n /**\n * Select the layer link field text\n */\n public selectLayerLink(): void {\n let copyText = document.getElementById('layerLink');\n console.debug('copied', copyText.value);\n copyText.select();\n }\n\n /**\n * Copy the created layer link to clipboard\n */\n public copyLayerLink(): void {\n this.selectLayerLink();\n document.execCommand('Copy');\n this.copiedRecently = true;\n let self = this;\n window.setTimeout(function () {\n self.copiedRecently = false;\n }, 2000);\n }\n\n /**\n * Return true if the text is only letters a-z, false otherwise\n * @param text text to eval\n * @return true if a-z, false otherwise\n */\n public isAlphabetical(text: string): boolean {\n return /^[a-z]+$/.test(text);\n }\n\n /**\n * Get a key=value fragment value by key\n * @param {string} name name of param to get the value of\n * @param {string} url optional, if unspecified searches in current window location. Otherwise searches this string\n * @return {string} fragment param value\n */\n public getNamedFragmentValue(name: string, url?: string): any {\n if (!url) url = window.location.href;\n\n name = name.replace(/[[\\]]/g, '\\\\$&');\n let regex = new RegExp('[#&]' + name + '(?:=([^&#]*)|&|#|$)', 'g');\n\n // match as many results as exist under the name\n let results = [];\n let match = regex.exec(url);\n while (match != null) {\n results.push(decodeURIComponent(match[1].replace(/\\+/g, ' ')));\n match = regex.exec(url);\n }\n return results;\n }\n\n /** Get all view models in the same domain/version */\n public getFilteredVMs(): ViewModel[] {\n return this.viewModelsService.viewModels.filter((vm) => vm.domainVersionID == this.opSettings.domain);\n }\n}\n","
    \n \n
    \n
    \n \n \n
    \n
    \n\n \n
    \n \n \n \n \n \n
    \n
    = 0\">\n \n \n
    \n
    \n\n \n
    \n \n \n
    \n\n
    \n \n \n
    \n\n\n\n
    \n

    WARNING

    \n

    \n We’ve detected that you are using the Safari browser. As of Navigator version\n 4.3\n , Safari versions 13 and below are not supported due to an unfixable freeze that can occur when selecting a layer tab.\n

    \n

    \n We recommend you use Chrome or Firefox instead. You can continue to use the Navigator in Safari (versions 13 and below), but you may lose\n work if the application freezes.\n

    \n \n
    \n
    \n\n\n
    \n
    \n

    \n WARNING:\n Outdated Layer\n

    \n \n

    \n The uploaded layer version ({{ data.objVersion }}) does not match Navigator's layer version ({{ data.globalVersion }}). The layer\n configuration may not be fully restored.\n

    \n

    View the latest Layer File Format specification and the changelog for more information:

    \n

    \n Layer File Format v{{ data.globalVersion }}\n

    \n

    \n Changelog\n

    \n
    \n
    \n\n \n
    \n
    \n\n\n\n
    \n
    \n \n
    \n

    \n The ATT&CK Navigator is a web-based tool for annotating and exploring ATT&CK matrices. It can be used to visualize defensive\n coverage, red/blue team planning, the frequency of detected techniques, and more.\n

    \n
    \n \n \n
    \n \n \n \n \n Create New Layer\n Create a new empty layer\n \n\n \n
    \n \n
    \n\n \n \n \n More Options\n \n\n
    \n
    \n \n \n Select a version\n \n none\n \n {{ nVersion.name }}\n \n \n \n \n \n Select a domain\n \n none\n \n {{ nDomain.name }}\n \n \n \n \n \n *Note: ATT&CK Versions prior to v{{ minimumSupportedVersion }} are not supported by Navigator v{{ navVersion }}.\n \n
    \n
    \n OR\n
    \n
    \n \n \n Collection or STIX bundle URL\n \n \n \n \n Bundle version number\n \n ATT&CK version (e.g. 12)\n \n \n \n Bundle domain\n \n Domain identifier (e.g. defending-iaas)\n \n
    \n
    \n\n
    \n
    \n \n
    \n
    \n
    \n \n Create layer from bundle\n \n
    \n
    \n
    \n
    \n\n \n \n \n Open Existing Layer\n Load a layer from your computer or a URL\n \n\n
    \n
    \n \n \n
    \n
    \n OR\n
    \n
    \n \n Load from URL\n \n \n chevron_right\n \n \n
    \n
    \n
    \n\n \n \n \n Create Layer from Other Layers\n Select layers to inherit properties from\n \n\n
    \n \n
    \n
    \n \n domain\n \n \n {{ domain.name }} {{ domain.version.name }}\n \n \n \n
    \n
    \n
    \n Select the domain for the new layer. Only layers of the same domain and version can be merged.\n
    \n
    \n\n \n
    \n
    \n \n score expression\n \n {{ getScoreExpressionError() }}\n \n
    \n
    \n
    \n \n Use constants (numbers) and layer variables (yellow, above) to write an expression for the initial value of scores in\n the new layer. A full list of supported operations can be found\n here\n . Leave blank to initialize scores to 0. Here's a list of available layer variables:\n
      \n \n {{ indexToChar($i) }}\n ({{ tab.isDataTable ? tab.viewModel.name : tab.title }})\n \n
    \n
    \n
    \n
    \n\n \n
    \n
    \n \n gradient\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n \n Select which layer to import the scoring gradient from. Leave blank to initialize with the default scoring gradient.\n \n
    \n
    \n\n \n
    \n
    \n \n coloring\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import manually assigned colors from. Leave blank to initialize with no colors.\n
    \n
    \n\n \n
    \n
    \n \n comments\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import comments from. Leave blank to initialize with no comments.\n
    \n
    \n\n \n
    \n
    \n \n links\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import technique links from. Leave blank to initialize without links.\n
    \n
    \n\n \n
    \n
    \n \n metadata\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import technique metadata from. Leave blank to initialize without metadata.\n
    \n
    \n\n \n
    \n
    \n \n states\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import enabled/disabled states from. Leave blank to initialize all to enabled.\n
    \n
    \n\n \n
    \n
    \n \n filters\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import filters from. Leave blank to initialize with no filters.\n
    \n
    \n\n \n
    \n
    \n \n legend\n \n none\n {{ vm.name }}\n \n \n
    \n
    \n
    \n Select which layer to import the legend from. Leave blank to initialize with an empty legend.\n
    \n
    \n\n \n
    \n \n
    \n
    \n
    \n\n \n \n \n Create Customized Navigator\n Create a hyperlink to a customized ATT&CK Navigator\n \n\n
    \n
    \n \n

    Default Layers

    \n
    \n
    \n
      \n
    • \n \n default layer {{i+1}}\n \n \n \n
    • \n
    • \n \n
    • \n
    \n
    \n
    \n
    \n Enter the URLs of layers hosted on the web. The custom navigator will open these layers by default.\n
    \n
    \n
    \n\n
    \n \n

    Navigator Features

    \n \n
    \n
    \n \n {{ feature.name.split('_').join(' ') }}\n \n
    \n
    \n
    \n {{ feature.description }}\n
    \n
    \n
    \n
    \n
    \n\n \n
    \n \n custom navigator url\n \n \n copied\n \n
    \n
    \n
    \n
    \n
    \n\n\n\n \n\n","// utilities for working with browser cookies\n\n/**\n * Set a cookie\n * @param {string} key key to set under\n * @param {string} value value to set under key\n * @param {number} expirationDays when cookie expires in days\n */\nconst setCookie = function (key: string, value: string, expirationDays: number) {\n let d = new Date();\n d.setTime(d.getTime() + expirationDays * 24 * 60 * 60 * 1000);\n let expires = 'expires=' + d.toUTCString();\n document.cookie = key + '=' + value + ';' + expires + ';path=/;SameSite=Strict';\n};\n\n/**\n * Get the value of the cookie under the given key\n * @param {string} key to retrieve from\n * @return {string} cookie value\n */\nconst getCookie = function (key: string): string {\n let name = key + '=';\n let decodedCookie = decodeURIComponent(document.cookie);\n let ca = decodedCookie.split(';');\n\n for (let c of ca) {\n while (c.startsWith(' ')) {\n c = c.substring(1);\n }\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n};\n/**\n * Does a cookie exist under the given key?\n * @param {string} key to check\n * @return {boolean} true if cookie is stored under key, false otherwise\n */\nconst hasCookie = function (key: string): boolean {\n return getCookie(key) !== '';\n};\n\n/**\n * Delete the given cookie\n * @param {string} key to delete\n */\nconst deleteCookie = function (key: string) {\n document.cookie = key + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;SameSite=Strict';\n};\n\nexport { setCookie, getCookie, hasCookie, deleteCookie };\n","'use strict';\nimport appPackageInfo from '../../../package.json';\n\nexport const navVersion: string = appPackageInfo.version;\nexport const layerVersion: string = '4.5';\nexport const minimumSupportedVersion: string = '4.0';\n","/**\n * @fileoverview\n * A TAXII 2.0 Javascript client library.\n * Converted to Typescript by Isabel Tuson 24 May 2018.\n * Added support for TAXII 2.1 by Charissa Miller 9 April 2024.\n *\n * @see https://github.com/workingDog/taxii2lib/\n * @see https://oasis-open.github.io/cti-documentation/\n *\n * @author R. Wathelet, September 2017\n * @modified by I. Tuson 24 May 2018\n * @modified by C. Miller 9 April 2024\n *\n * @version 0.3\n */\n\n/**\n * Provide asynchronous network communications to a TAXII 2.0 or 2.1 server.\n */\nexport class TaxiiConnect {\n baseURL: string;\n user: string;\n password: string;\n hash: string;\n timeout: number;\n version: string;\n getConfig: any;\n getStixConfig: any;\n mediaType: string;\n\n /**\n * provide network communication to a Taxii 2.0 or 2.1 server.\n * @param {String} url - the base url of the Taxii2 server, for example https://example.com/\n * @param {String} user - the user name required for authentication.\n * @param {String} password - the user password required for authentication.\n * @param {Integer} timeout - the connection timeout in millisec\n */\n constructor(url, user, password, timeout = 10000) {\n this.baseURL = TaxiiConnect.withoutLastSlash(url);\n this.user = user;\n this.password = password;\n this.hash = btoa(this.user + ':' + this.password);\n this.timeout = timeout;\n\n this.version = '2.1';\n this.mediaType = `application/taxii+json;version=${this.version}`;\n // backwards compatibility for STIX 2.0\n if (url.includes('cti-taxii.mitre.org')) {\n this.version = '2.0';\n this.mediaType = 'application/vnd.oasis.stix+json';\n }\n\n // default headers configurations\n this.getConfig = {\n method: 'get',\n headers: new Headers({\n Accept: this.mediaType,\n version: this.version,\n Authorization: 'Basic ' + this.hash,\n }),\n };\n\n this.getStixConfig = {\n method: 'get',\n headers: new Headers({\n Accept: this.mediaType,\n version: this.version,\n Authorization: 'Basic ' + this.hash,\n }),\n };\n }\n\n // original code from: https://github.com/jkomyno/fetch-timeout\n timeoutPromise(promise, timeout, error) {\n return new Promise((resolve, reject) => {\n setTimeout(() => reject(error), timeout);\n promise.then(resolve, reject);\n });\n }\n // original code from: https://github.com/jkomyno/fetch-timeout\n fetchTimeout(url, options, timeout, error) {\n error = error || 'Timeout error';\n options = options || {};\n timeout = timeout || 10000;\n return this.timeoutPromise(fetch(url, options), timeout, error);\n }\n\n /**\n * send an async request (GET or POST) to the taxii2 server.\n *\n * @param {String} path - the full path to connect to.\n * @param {Object} config - the request configuration, see getConfig and postConfig for examples\n * @param {Object} filter - the filter object describing the filtering requested, this is added to the path as a query string\n * @returns {Promise} the server response in json.\n */\n async asyncFetch(path, config, filter?) {\n //CHANGED\n let fullPath = !filter ? path : path + '?' + TaxiiConnect.asQueryString(filter);\n return await this.fetchTimeout(fullPath, config, this.timeout, 'connection timeout')\n .then((res: Response) => res.json())\n .catch((err) => {\n throw new Error('fetch error: ' + err);\n });\n }\n\n /**\n * send a GET async request to the taxii2 server.\n *\n * The server response is assigned to the cache attribute of the options object, and\n * the options flag attribute is set to true if a server request was performed.\n * Otherwise if the options.flag is initially true, the cached response (options.cache) is returned and\n * no server request is performed.\n * To force a server request used invalidate(), for example: server.invalidate()\n *\n * @param {String} path - the path to connect to.\n * @param {Object} options - an option object of the form: { \"cache\": {}, \"flag\": false }\n * @param {Object} filter - the filter object describing the filtering requested, this is added to the path as a query string\n * @param {Object} config - the request configuration\n * @returns {Promise} the server response object\n */\n async fetchThis(path, options, filter?, config?) {\n //CHANGED\n let conf = config === undefined ? this.getConfig : config;\n if (!options.flag) {\n options.cache = await this.asyncFetch(path, conf, filter);\n options.flag = true;\n }\n return options.cache;\n }\n\n /**\n * return the url without the last slash.\n * @param {String} url - the URL string to process.\n * @returns {String} the url without the last slash.\n */\n static withoutLastSlash(url) {\n return url.substr(-1) === '/' ? url.substr(0, url.length - 1) : url;\n }\n\n /**\n * return the url with a terminating slash.\n * @param {String} url - the URL string to process.\n * @returns {String} the url with a terminating slash.\n */\n static withLastSlash(url) {\n return url.substr(-1) === '/' ? url : url + '/';\n }\n\n /**\n * convert a filter object into a query string.\n * @param {Object} filter - the filter object to process.\n * @returns {String} the query string corresponding to the filter object.\n */\n static asQueryString(filter) {\n return Object.keys(filter)\n .map((k) => {\n let value = k === 'added_after' ? k : 'match[' + k + ']';\n return encodeURIComponent(value) + '=' + encodeURIComponent(filter[k]);\n })\n .join('&');\n }\n}\n\n/**\n * A Collection resource endpoint.\n */\nexport class Collection {\n collectionInfo: any;\n api_root_path: string;\n conn: TaxiiConnect;\n path: string;\n colOptions: any;\n objsOptions: any;\n objOptions: any;\n manOptions: any;\n\n /**\n * Collection resource endpoint.\n * @param {CollectionInfoObject} collectionInfo - the collection object of this endpoint.\n * @param {String} api_root_path - the full path to the desired api root endpoint.\n * @param {TaxiiConnection} conn - a TaxiiConnection class instance.\n */\n constructor(collectionInfo, api_root_path, conn) {\n this.collectionInfo = collectionInfo;\n\n this.api_root_path = TaxiiConnect.withLastSlash(api_root_path + 'api/v21');\n // backwards compatibility for STIX 2.0\n if (api_root_path.includes('cti-taxii.mitre.org')) {\n // cont. support for stix 2.0\n this.api_root_path = TaxiiConnect.withLastSlash(api_root_path + 'stix');\n }\n this.conn = conn;\n // construct the path\n this.path = this.api_root_path + 'collections/' + collectionInfo.id + '/';\n // cache represents the cached results and flag determines if it needs a re-fetch\n this.colOptions = { cache: {}, flag: false };\n this.objsOptions = { cache: {}, flag: false };\n this.objOptions = { cache: {}, flag: false };\n this.manOptions = { cache: {}, flag: false };\n }\n\n /**\n * check that the collection allows reading, if true then return the function passed in\n * else log an error\n * @param {Function} func - the function to return if the collection allows reading it\n * @returns {Function} the function if this collection allow reading else undefined\n */\n ifCanRead(func) {\n if (this.collectionInfo.can_read) {\n return func;\n } else {\n console.log('this collection does not allow reading: \\n' + JSON.stringify(this.collectionInfo));\n }\n }\n\n /**\n * check that the collection allows writing, if true then return the function passed in else log an error\n * @param {Function} func - the function to return if the collection allows writing it\n * @returns {Function} the function if this collection allow writing else undefined\n */\n ifCanWrite(func) {\n if (this.collectionInfo.can_write) {\n return func;\n } else {\n console.log('this collection does not allow writing: \\n' + JSON.stringify(this.collectionInfo));\n }\n }\n\n /**\n * retrieve a STIX-2 bundle from this Collection.\n *\n * @param {Object} filter - the filter object describing the filtering requested, this is added to the path as a query string.\n * For example: {\"added_after\": \"2016-02-01T00:00:01.000Z\"}\n * {\"type\": [\"incident\",\"ttp\",\"actor\"]}\n * @param {String} range - a pagination range string, for example \"0-10\"\n * @returns {Promise} the Bundle with the STIX-2 objects of this collection\n */\n async getObjects(filter, range) {\n let theConfig = this.conn.getStixConfig;\n if (range !== undefined) {\n theConfig = {\n method: 'get',\n headers: new Headers({\n Accept: this.conn.mediaType,\n version: this.conn.version,\n Authorization: 'Basic ' + this.conn.hash, //CHANGED\n Range: 'items=' + range,\n }),\n };\n }\n return this.ifCanRead(this.conn.fetchThis(this.path + 'objects/', this.objsOptions, filter, theConfig));\n }\n}\n","// utils.ts\nimport { detect } from \"detect-browser\";\n\nlet comparatorFn = {\n\t'<': function(a, b) { return a < b; },\n\t'<=': function(a, b) { return a <= b; },\n\t'>': function(a, b) { return a > b; },\n\t'>=': function(a, b) { return a >= b; }\n};\n\nexport function isBoolean(value: any): boolean {\n\treturn typeof value === 'boolean';\n}\n\nexport function isNumber(value: any): boolean {\n\treturn typeof value === 'number';\n}\n\nexport function isIE(): boolean {\n\tconst browser = detect();\n\treturn browser.name == 'ie';\n}\n\nexport function isSafari(compRange): boolean {\n\tfunction compare(version, comp) {\n\t\tlet str = (comp + '');\n\t\tlet n = +(/\\d+/.exec(str) || NaN);\n\t\tlet op = /^[<>]=?/.exec(str)[0];\n\t\treturn comparatorFn[op] ? comparatorFn[op](version, n) : (version == n || Number.isNaN(n));\n\t}\n\n\tconst browser = detect();\n\treturn browser.name == 'safari' && compare(browser.version.split('.')[0], compRange);\n}\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { ViewModelsService } from '../services/viewmodels.service';\nimport { DataService } from '../services/data.service';\nimport * as globals from '../utils/globals';\n\n@Component({\n selector: 'app-version-upgrade',\n templateUrl: './version-upgrade.component.html',\n styleUrls: ['./version-upgrade.component.scss'],\n providers: [ViewModelsService],\n})\nexport class VersionUpgradeComponent implements OnInit {\n navVersion = globals.navVersion;\n currVersion: string;\n vmVersion: string;\n layerName: string;\n\n constructor(\n public dialogRef: MatDialogRef,\n public dataService: DataService,\n private viewModelsService: ViewModelsService,\n @Inject(MAT_DIALOG_DATA) public data\n ) {}\n\n ngOnInit() {\n this.currVersion = this.data.currVersion;\n this.vmVersion = this.data.vmVersion;\n this.layerName = this.data.layerName;\n }\n\n upgradeVersion(upgrade: boolean) {\n this.dialogRef.close({ upgrade: upgrade });\n }\n}\n","
    \n

    Upgrade layer version?

    \n \n

    \n The layer \"{{ layerName }}\" uses an outdated version of ATT&CK (v{{ vmVersion }}). Do you want to open the workflow to upgrade this\n layer to ATT&CK v{{ currVersion }}?\n \n This version is not supported by Navigator v{{ navVersion }} and must be upgraded for use.\n \n

    \n
    \n \n \n \n \n
    \n","// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\n// The list of which env maps to which file can be found in `.angular-cli.json`.\n\nexport const environment = {\n production: false,\n};\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic()\n .bootstrapModule(AppModule)\n .catch((err) => console.log(err));\n","/* (ignored) */"],"names":["TabsComponent","globals","deleteCookie","getCookie","hasCookie","setCookie","AppComponent","promptNavAway","$event","configService","getFeature","returnValue","constructor","iconsService","titleService","navVersion","title","Array","prototype","includes","value","i","length","user_theme","ngOnInit","registerIcons","setTitle","themeChangeHandler","theme","_","i0","ɵɵdirectiveInject","i1","ConfigService","i2","IconsService","i3","Title","_2","selectors","viewQuery","AppComponent_Query","rf","ctx","ɵɵlistener","AppComponent_beforeunload_HostBindingHandler","ɵɵresolveWindow","ɵɵelementStart","AppComponent_Template_tabs_onUserThemeChange_3_listener","ɵɵelementEnd","AppComponent_Template_button_click_4_listener","tabsComponent","openDialog","ɵɵtext","ɵɵproperty","ɵɵadvance","ɵɵtextInterpolate1","BrowserModule","BrowserAnimationsModule","APP_INITIALIZER","MatInputModule","MatSelectModule","MatButtonModule","MatIconModule","MatProgressSpinnerModule","FormsModule","ReactiveFormsModule","MatTooltipModule","MatCheckboxModule","MatDialogModule","MatSnackBarModule","MatMenuModule","MatExpansionModule","MatSidenavModule","ColorPickerModule","DndModule","HttpClientModule","DataTableComponent","HelpComponent","SvgExportComponent","TechniqueCellComponent","MatrixSideComponent","MatrixFlatComponent","MatrixMiniComponent","TooltipComponent","SearchAndMultiselectComponent","ContextmenuComponent","TacticCellComponent","VersionUpgradeComponent","SidebarComponent","LayerUpgradeComponent","ChangelogCellComponent","MatCardModule","MatDividerModule","MatStepperModule","MatPaginatorModule","LayerSettingsComponent","MarkdownModule","LayerInformationComponent","ChangelogComponent","MatTabsModule","ListInputComponent","AppModule","bootstrap","_3","provide","useFactory","loadConfig","deps","multi","imports","forRoot","declarations","exports","NgClass","NgForOf","NgIf","MatFormField","MatLabel","MatHint","MatSuffix","i4","MatSelect","i5","MatOption","i6","DefaultValueAccessor","NumberValueAccessor","NgControlStatus","RequiredValidator","NgModel","i7","MatInput","i8","MatButton","MatIconButton","i9","MatIcon","i10","MatCheckbox","i11","MatTooltip","i12","MatAccordion","MatExpansionPanel","MatExpansionPanelHeader","MatExpansionPanelTitle","MatExpansionPanelDescription","i13","MatDialogClose","MatDialogTitle","MatDialogContent","i14","MatTabNav","MatTabNavPanel","MatTabLink","MAT_DIALOG_DATA","dialog","markdownService","data","MatDialog","MarkdownService","ChangelogComponent_Query","ɵɵelement","ContextMenuItem","label","url","subtechnique_url","getReplacedURL","technique","tactic","isSubtechnique","replace","parent","attackID","id","name","toLowerCase","split","shortname","Domain","tactics","matrix","matrices","concat","domain_identifier","version","urls","taxii_url","taxii_collection","dataLoaded","dataLoadedCallbacks","isCustom","techniques","platforms","subtechniques","software","campaigns","assets","dataComponents","dataSources","Map","groups","mitigations","notes","relationships","subtechniques_of","component_rel","group_uses","software_uses","campaign_uses","campaigns_attributed_to","mitigates","revoked_by","targeted_assets","number","getVersion","executeCallbacks","callback","Filter","selection","options","initPlatformOptions","domain","JSON","parse","stringify","toggleInFilter","filterName","console","error","index","indexOf","splice","push","inFilter","serialize","deserialize","rep","isStringArray","arr","item","backwards_compatibility_mappings","android","ios","windows","linux","mac","AWS","GCP","Azure","Set","forEach","platform","add","from","tinycolor","tinygradient","Gradient","colors","Gcolor","minValue","maxValue","presets","redgreen","greenred","bluered","redblue","transparentblue","transparentred","setGradientPreset","colorList","gColor","hexstring","color","toHex8String","obj","isColorStringArray","isValid","self","hex","updateGradient","presetToTinyColor","preset","colorarray","gcolor","css","map","colorobj","gradient","gradientRGB","rgb","addColor","removeColor","getHexColor","valueString","Number","toHexString","Math","round","VersionChangelog","Version","LayoutOptions","Link","Metadata","TechniqueVM","ViewModel","Tab","layoutOptions","_layout","aggregateFunctionOptions","_aggregateFunction","_showID","_showName","_showAggregateScores","_countUnscored","expandedSubtechniquesOptions","_expandedSubtechniques","layout","newLayout","warn","oldLayout","showID","showName","aggregateFunction","newAggregateFunction","newval","showAggregateScores","countUnscored","expandedSubtechniques","newExpandedSubtechniques","divider","valid","undefined","StixObject","Asset","targeted","domainVersionID","rels","dataService","getDomain","has","get","relatedTechniques","Campaign","used","DataComponent","stixSDO","dataSource","x_mitre_data_source_ref","targetID","find","t","source","external_references","Group","campaignsUsed","attributedCampaigns","campaign_id","usedSet","Matrix","Mitigation","Note","Software","Tactic","Technique","idToTacticSDO","tactic_refs","tacticID","filter","tacticSDO","mitigated","abstract","content","object_refs","x_mitre_platforms","trim","supportsAttackID","description","created","modified","revoked","deprecated","x_mitre_deprecated","x_mitre_version","external_id","alert","Error","compareVersion","that","thisVersion","thatVersion","max","x_mitre_shortname","datasources","x_mitre_data_sources","toString","kill_chain_phases","phase","phase_name","sub","subtechnique","get_technique_tactic_id","tactic_shortname","get_all_technique_tactic_ids","isCloseable","showScoreVariables","isDataTable","metadataStr","metadata","linkStr","links","technique_tactic_union_id","score","enabled","comment","showSubtechniques","isVisible","idSplit","techniqueID","annotated","resetAnnotations","aggregateScore","aggregateScoreColor","setIsVisible","visible","isNaN","m","l","String","metadataObj","linkObj","link","oldDomainVersionID","newDomainVersionID","additions","changes","minor_changes","deprecations","revocations","unchanged","reviewed","copied","linksMatch","linkMismatches","metadataMatch","metadataMismatches","sidebarOpened","_sidebarOpened","newVal","sidebarContentType","_sidebarContentType","sidebarContentTypes","uid","loaded","techniqueVMs","selectedTechniques","highlightedTactic","highlightedTechniques","highlightedTechnique","hideDisabled","showTacticRowBackground","tacticRowBackground","stickyToolbar","legendItems","backgroundPresets","legendColorPresets","initializeScoresTo","technique_show_subtechnique","sorting","selectTechniquesAcrossTactics","selectSubtechniquesWithParent","selectVisibleTechniques","debug","filters","openSidebar","contentType","loadVMData","bundleURL","onDataLoad","initTechniqueVMs","techniqueVM","setTechniqueVM","tvm","getTechniqueVM_id","some","sid","svm","getTechniqueVM","hasTechniqueVM","technique_tactic_id","hasTechniqueVM_id","overwrite","delete","set","highlightTechnique","clearHighlight","selectTechnique","selectTechniqueAcrossTactics","selectTechniqueInTactic","unselectTechnique","unselectTechniqueAcrossTactics","unselectTechniqueInTactic","walkChildren","isCurrentlyEditing","activeTvm","checkValues","selectAllTechniquesInTactic","highlightTechniques","unselectAllTechniquesInTactic","clearSelectedTechniques","clear","selectAllTechniques","invertSelection","previouslySelected","key","selectAnnotated","selected","selectUnannotated","initCopyAnnotations","copy","fromTechnique","getTechnique","compareTo","fromVM","toTechnique","copyAnnotations","versionChangelog","toVM","updateScoreColor","every","revertCopy","isTechniqueSelected","getSelectedTechniqueCount","ids","unionID","size","isTacticSelected","isSelected","editSelectedTechniques","field","editSelectedTechniqueValues","values","fieldToType","value_clone","clone","resetSelectedTechniques","getEditingCommonValue","commonValue","first_id","next","filterTactics","filterTechniques","isSubtechniqueEnabled","subtechniqueVM","sub_platforms","p","sortTechniques","sort","technique1","technique2","techniqueVM1","techniqueVM2","sortSubTechniques","score1","NEGATIVE_INFINITY","score2","calculateAggregateScore","sortingAlgorithm","localeCompare","validTechniquesCount","scores","scoreNum","aggScore","min","reduce","a","b","toFixed","isFinite","applyControls","getVisibleTechniquesList","visibleTechniques","modifiedHiddenTechniques","downloadAnnotationsOnVisibleTechniques","modifiedTechniqueVMs","versions","attack","navigator","layer","layerVersion","customDataURL","deserializeDomainVersionID","versionNumber","latestVersion","match","domain_backwards_compatibility","getDomainVersionID","restoreTechniques","legendItem","objTechnique","viewMode","addGradientColor","removeGradientColor","scoreColor","updateLegendColorPresets","addLegendItem","deleteLegendItem","clearLegend","EventEmitter","Excel","isIE","DataTableComponent_div_4_Template_div_click_0_listener","ɵɵrestoreView","_r1","ctx_r1","ɵɵnextContext","ɵɵresetView","setCurrentControlSection","ɵɵclassProp","currentControlSection","showControlsBar","DataTableComponent_div_5_Template_div_click_0_listener","_r3","DataTableComponent_div_6_Template_div_click_0_listener","_r4","ɵɵtextInterpolate","ɵɵpipeBind1","getControlDisplayName","DataTableComponent_ul_7_li_1_div_1_Template_div_click_1_listener","_r6","openSearch","ɵɵtemplate","DataTableComponent_ul_7_li_1_div_1_span_2_Template","ɵɵpureFunction1","_c1","viewModel","showControlLabels","DataTableComponent_ul_7_li_1_div_2_Template_div_click_1_listener","_r7","currentDropdown","DataTableComponent_ul_7_li_1_div_2_span_2_Template","ɵɵpropertyInterpolate1","ɵɵtwoWayListener","DataTableComponent_ul_7_li_1_div_3_div_5_div_6_Template_input_ngModelChange_1_listener","_r10","ɵɵtwoWayBindingSet","ɵɵtwoWayProperty","DataTableComponent_ul_7_li_1_div_3_div_5_Template_input_ngModelChange_3_listener","_r9","DataTableComponent_ul_7_li_1_div_3_div_5_div_6_Template","DataTableComponent_ul_7_li_1_div_3_div_5_Template_input_ngModelChange_8_listener","checkalign","dropdown_r11","DataTableComponent_ul_7_li_1_div_3_Template_div_click_1_listener","_r8","DataTableComponent_ul_7_li_1_div_3_span_2_Template","DataTableComponent_ul_7_li_1_div_3_div_5_Template","DataTableComponent_ul_7_li_1_div_8_div_10_Template_input_ngModelChange_1_listener","control_r14","_r13","$implicit","getControl","DataTableComponent_ul_7_li_1_div_8_Template_input_ngModelChange_3_listener","_r12","DataTableComponent_ul_7_li_1_div_8_div_10_Template","dropdown_r15","selectionControlsList","DataTableComponent_ul_7_li_1_div_1_Template","DataTableComponent_ul_7_li_1_div_2_Template","DataTableComponent_ul_7_li_1_div_3_Template","DataTableComponent_ul_7_li_1_Template_div_click_5_listener","_r5","handleSelectionControlsSettingsDropdown","DataTableComponent_ul_7_li_1_Template_div_keydown_5_listener","handleKeyDownSelection","DataTableComponent_ul_7_li_1_div_8_Template","isControlIncluded","DataTableComponent_ul_7_li_2_div_1_Template_div_click_1_listener","_r17","openLayerSettings","DataTableComponent_ul_7_li_2_div_1_span_2_Template","DataTableComponent_ul_7_li_2_div_2_div_5_div_6_Template_div_click_1_listener","_r20","saveLayerLocally","DataTableComponent_ul_7_li_2_div_2_div_5_div_7_Template_div_click_1_listener","_r21","saveAllLayersLocally","DataTableComponent_ul_7_li_2_div_2_div_5_div_7_span_2_Template","viewModelsService","viewModels","DataTableComponent_ul_7_li_2_div_2_div_5_div_8_Template_div_click_1_listener","_r22","saveLayerLocallyExcel","DataTableComponent_ul_7_li_2_div_2_div_5_div_9_Template_div_click_1_listener","_r23","saveAllLayersLocallyExcel","DataTableComponent_ul_7_li_2_div_2_div_5_div_10_Template_div_click_1_listener","_r24","exportRender","DataTableComponent_ul_7_li_2_div_2_div_5_div_6_Template","DataTableComponent_ul_7_li_2_div_2_div_5_div_7_Template","DataTableComponent_ul_7_li_2_div_2_div_5_div_8_Template","DataTableComponent_ul_7_li_2_div_2_div_5_div_9_Template","DataTableComponent_ul_7_li_2_div_2_div_5_div_10_Template","DataTableComponent_ul_7_li_2_div_2_div_5_Template_input_ngModelChange_15_listener","_r19","DataTableComponent_ul_7_li_2_div_2_div_5_div_18_Template","DataTableComponent_ul_7_li_2_div_2_div_5_div_19_Template","dropdown_r25","DataTableComponent_ul_7_li_2_div_2_Template_div_click_1_listener","_r18","handleExportDropdown","DataTableComponent_ul_7_li_2_div_2_span_2_Template","DataTableComponent_ul_7_li_2_div_2_div_5_Template","DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_div_1_Template_input_click_1_listener","filterOption_r28","_r27","filter_r29","DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_div_1_Template","DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_3_Template","DataTableComponent_ul_7_li_2_div_3_div_5_div_2_div_4_Template","DataTableComponent_ul_7_li_2_div_3_div_5_div_2_Template","dropdown_r30","ɵɵpureFunction0","_c2","DataTableComponent_ul_7_li_2_div_3_Template_div_click_1_listener","_r26","DataTableComponent_ul_7_li_2_div_3_span_2_Template","DataTableComponent_ul_7_li_2_div_3_div_5_Template","ɵɵelementContainerStart","DataTableComponent_ul_7_li_2_div_4_ng_container_3_span_1_Template","DataTableComponent_ul_7_li_2_div_4_ng_container_4_span_1_Template","DataTableComponent_ul_7_li_2_div_4_ng_container_5_span_1_Template","DataTableComponent_ul_7_li_2_div_4_ng_container_6_span_1_Template","DataTableComponent_ul_7_li_2_div_4_Template_div_click_1_listener","_r31","DataTableComponent_ul_7_li_2_div_4_ng_container_3_Template","DataTableComponent_ul_7_li_2_div_4_ng_container_4_Template","DataTableComponent_ul_7_li_2_div_4_ng_container_5_Template","DataTableComponent_ul_7_li_2_div_4_ng_container_6_Template","_c3","_c4","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_button_click_2_listener","$i_r35","_r34","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_colorPickerChange_5_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_cpPresetColorsChange_5_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_cpSliderChange_5_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_cpInputChange_5_listener","gradientStep_r36","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template_input_ngModelChange_5_listener","ɵɵstyleProp","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_1_listener","_r37","presetsMenuVisible","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_3_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_5_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_7_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_9_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template_div_click_11_listener","sanitize","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_6_listener","_r33","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_colorPickerChange_9_listener","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_9_listener","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_input_19_listener","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_19_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_22_Template","DataTableComponent_ul_7_li_2_div_5_div_5_Template_button_click_26_listener","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_input_32_listener","DataTableComponent_ul_7_li_2_div_5_div_5_Template_input_ngModelChange_32_listener","DataTableComponent_ul_7_li_2_div_5_div_5_Template_div_click_34_listener","DataTableComponent_ul_7_li_2_div_5_div_5_div_38_Template","dropdown_r38","_c5","DataTableComponent_ul_7_li_2_div_5_Template_div_click_1_listener","_r32","DataTableComponent_ul_7_li_2_div_5_span_2_Template","DataTableComponent_ul_7_li_2_div_5_div_5_Template","DataTableComponent_ul_7_li_2_div_6_Template_div_click_1_listener","_r39","DataTableComponent_ul_7_li_2_div_6_span_2_Template","DataTableComponent_ul_7_li_2_div_6_span_3_Template","DataTableComponent_ul_7_li_2_div_6_span_4_Template","DataTableComponent_ul_7_li_2_div_6_span_5_Template","DataTableComponent_ul_7_li_2_div_7_ng_container_3_span_1_Template","DataTableComponent_ul_7_li_2_div_7_ng_container_4_span_1_Template","DataTableComponent_ul_7_li_2_div_7_ng_container_5_span_1_Template","DataTableComponent_ul_7_li_2_div_7_Template_div_click_1_listener","_r40","showSubtechniquesType","showSubtechniquesTypeAlgorithm","DataTableComponent_ul_7_li_2_div_7_ng_container_3_Template","DataTableComponent_ul_7_li_2_div_7_ng_container_4_Template","DataTableComponent_ul_7_li_2_div_7_ng_container_5_Template","_c6","_c7","DataTableComponent_ul_7_li_2_div_12_div_10_Template_input_ngModelChange_1_listener","control_r43","_r42","DataTableComponent_ul_7_li_2_div_12_Template_input_ngModelChange_3_listener","_r41","DataTableComponent_ul_7_li_2_div_12_div_10_Template","dropdown_r44","layerControlsList","DataTableComponent_ul_7_li_2_div_1_Template","DataTableComponent_ul_7_li_2_div_2_Template","DataTableComponent_ul_7_li_2_div_3_Template","DataTableComponent_ul_7_li_2_div_4_Template","DataTableComponent_ul_7_li_2_div_5_Template","DataTableComponent_ul_7_li_2_div_6_Template","DataTableComponent_ul_7_li_2_div_7_Template","DataTableComponent_ul_7_li_2_Template_div_click_9_listener","_r16","handleLayerControlsSettingsDropdown","DataTableComponent_ul_7_li_2_Template_div_keydown_9_listener","handleKeyDownLayer","DataTableComponent_ul_7_li_2_div_12_Template","DataTableComponent_ul_7_li_3_div_1_Template_div_click_1_listener","_r46","setSelectedState","DataTableComponent_ul_7_li_3_div_1_span_2_Template","DataTableComponent_ul_7_li_3_div_2_div_5_div_4_Template_div_click_0_listener","color_r50","_r49","DataTableComponent_ul_7_li_3_div_2_div_5_Template_div_click_2_listener","_r48","DataTableComponent_ul_7_li_3_div_2_div_5_div_4_Template","dropdown_r51","DataTableComponent_ul_7_li_3_div_2_Template_div_click_1_listener","_r47","continue","DataTableComponent_ul_7_li_3_div_2_span_2_Template","DataTableComponent_ul_7_li_3_div_2_div_5_Template","DataTableComponent_ul_7_li_3_div_3_div_5_Template_input_ngModelChange_5_listener","_r53","scoreEditField","DataTableComponent_ul_7_li_3_div_3_div_5_Template_input_input_5_listener","target","DataTableComponent_ul_7_li_3_div_3_div_5_mat_hint_6_Template","dropdown_r54","validateScoreInput","DataTableComponent_ul_7_li_3_div_3_Template_div_click_1_listener","_r52","DataTableComponent_ul_7_li_3_div_3_span_2_Template","DataTableComponent_ul_7_li_3_div_3_div_5_Template","DataTableComponent_ul_7_li_3_div_4_div_5_Template_textarea_ngModelChange_5_listener","_r56","commentEditField","DataTableComponent_ul_7_li_3_div_4_div_5_Template_textarea_input_5_listener","dropdown_r57","DataTableComponent_ul_7_li_3_div_4_Template_div_click_1_listener","_r55","DataTableComponent_ul_7_li_3_div_4_span_2_Template","DataTableComponent_ul_7_li_3_div_4_div_5_Template","dropdown_r59","ɵɵpureFunction2","_c8","DataTableComponent_ul_7_li_3_div_5_Template_div_click_1_listener","_r58","DataTableComponent_ul_7_li_3_div_5_span_2_Template","DataTableComponent_ul_7_li_3_div_5_div_5_Template","dropdown_r61","_c9","DataTableComponent_ul_7_li_3_div_6_Template_div_click_1_listener","_r60","DataTableComponent_ul_7_li_3_div_6_span_2_Template","DataTableComponent_ul_7_li_3_div_6_div_5_Template","DataTableComponent_ul_7_li_3_div_7_Template_div_click_1_listener","_r62","populateEditFields","DataTableComponent_ul_7_li_3_div_7_span_2_Template","DataTableComponent_ul_7_li_3_div_12_div_10_Template_input_ngModelChange_1_listener","control_r65","_r64","DataTableComponent_ul_7_li_3_div_12_Template_input_ngModelChange_3_listener","_r63","DataTableComponent_ul_7_li_3_div_12_div_10_Template","dropdown_r66","techniqueControlsList","DataTableComponent_ul_7_li_3_div_1_Template","DataTableComponent_ul_7_li_3_div_2_Template","DataTableComponent_ul_7_li_3_div_3_Template","DataTableComponent_ul_7_li_3_div_4_Template","DataTableComponent_ul_7_li_3_div_5_Template","DataTableComponent_ul_7_li_3_div_6_Template","DataTableComponent_ul_7_li_3_div_7_Template","DataTableComponent_ul_7_li_3_Template_div_click_9_listener","_r45","handleTechniqueControlsSettingsDropdown","DataTableComponent_ul_7_li_3_Template_div_keydown_9_listener","handleKeyDownTechnique","DataTableComponent_ul_7_li_3_div_12_Template","DataTableComponent_ul_7_li_4_div_1_Template_div_click_1_listener","_r67","updateStickyToolbar","DataTableComponent_ul_7_li_4_div_1_span_2_Template","DataTableComponent_ul_7_li_4_div_1_span_3_Template","DataTableComponent_ul_7_li_4_div_1_Template","DataTableComponent_ul_7_li_1_Template","DataTableComponent_ul_7_li_2_Template","DataTableComponent_ul_7_li_3_Template","DataTableComponent_ul_7_li_4_Template","getFeatureGroup","matrix_r68","DataTableComponent_ng_template_14_div_1_div_1_Template","DataTableComponent_ng_template_14_div_1_div_2_Template","DataTableComponent_ng_template_14_div_1_div_3_Template","DataTableComponent_ng_template_14_div_1_div_4_Template","DataTableComponent_ng_template_14_div_1_Template","DataTableComponent_div_18_Template_div_click_0_listener","_r69","showingLegend","DataTableComponent_div_19_div_11_Template_input_colorPickerChange_1_listener","item_r72","_r71","DataTableComponent_div_19_div_11_Template_input_ngModelChange_1_listener","DataTableComponent_div_19_div_11_Template_input_ngModelChange_3_listener","DataTableComponent_div_19_div_11_Template_button_click_4_listener","i_r73","DataTableComponent_div_19_Template_div_click_1_listener","_r70","DataTableComponent_div_19_Template_button_click_7_listener","DataTableComponent_div_19_Template_button_click_9_listener","DataTableComponent_div_19_div_11_Template","layerDomainVersion","tabs","sanitizer","dropdownChange","onScroll","customContextMenuItems","previousScrollTop","headerHeight","footerHeight","controlsHeight","isScrollUp","handleScroll","e","diff","scrollRef","nativeElement","scrollTop","calculateScrollHeight","tabOffset","emit","scrollWindowHeight","style","height","previousControlSection","showHelpDropDown","selectionChangeSubscription","onSelectionChange","subscribe","onTechniqueSelect","includedControls","featureList","j","subfeatures","display_name","ngAfterViewInit","document","querySelector","offsetHeight","addEventListener","ngOnDestroy","unsubscribe","body","removeEventListener","event","preventDefault","control","subfeature","saveBlob","blob","filename","nav","window","msSaveOrOpenBlob","svgUrl","URL","createObjectURL","downloadLink","createElement","href","download","appendChild","click","removeChild","json","Blob","type","saveLayerJson_helper","myarr","styleCells","cell","getDisplayName","alignment","vertical","horizontal","fill","pattern","fgColor","argb","substring","font","mostReadable","toHex","note","border","top","bottom","left","right","workbook","Workbook","worksheet","addWorksheet","saveLayerExcel_helper","xlsx","writeBuffer","then","columns","header","tacticCol","getColumn","techniqueCells","subtechniqueList","subtechniqueCells","techniqueRow","excelIndex","addSubtechniqueCells","mergeCells","findIndex","col","subtechniqueCol","letter","styleTechniqueCells","styleTacticHeaders","getRow","bold","column","techniqueList","seen","eachCell","row","width","handleDescriptionDropdown","toggleShowControlsBar","controlType","expandSubtechniques","showAnnotatedOnly","collapseSubtechniques","log","currentState","bypassSecurityTrustStyle","result","dropdown","anchor","parentNode","getBoundingClientRect","clientWidth","openSVGDialog","DataService","DomSanitizer","ViewModelsService","DataTableComponent_Query","DataTableComponent_div_4_Template","DataTableComponent_div_5_Template","DataTableComponent_div_6_Template","DataTableComponent_ul_7_Template","DataTableComponent_div_13_Template","DataTableComponent_ng_template_14_Template","ɵɵtemplateRefExtractor","DataTableComponent_div_18_Template","DataTableComponent_div_19_Template","getFeatureGroupCount","loadMatrices_r74","HelpComponent_ul_11_li_1_Template_a_click_1_listener","heading_r3","_r2","ctx_r3","scrollTo","ɵɵclassMapInterpolate1","level","HelpComponent_ul_11_li_1_Template","headingAnchors","renderer","setTimeout","heading","text","img","escapedText","html","listenObj","onMarkdownLoad","markdownElement","listen","element","tagName","el","linkURL","getAttribute","charAt","openLayerDialog","open","scrollIntoView","behavior","block","inline","autoFocus","panelClass","Renderer2","HelpComponent_Query","HelpComponent_Template_button_click_5_listener","HelpComponent_ul_11_Template","HelpComponent_Template_markdown_load_12_listener","layerFormatLink","decls","vars","consts","template","LayerInformationComponent_Template","LayerSettingsComponent_For_56_Template_input_ngModelChange_1_listener","option_r3","LayerSettingsComponent_For_91_Template_input_ngModelChange_1_listener","option_r5","inputs","LayerSettingsComponent_Template","LayerSettingsComponent_Template_input_ngModelChange_12_listener","LayerSettingsComponent_Template_textarea_ngModelChange_17_listener","LayerSettingsComponent_Template_input_ngModelChange_22_listener","LayerSettingsComponent_Template_input_ngModelChange_27_listener","ɵɵrepeaterCreate","LayerSettingsComponent_For_56_Template","ɵɵrepeaterTrackByIdentity","LayerSettingsComponent_Template_input_ngModelChange_64_listener","LayerSettingsComponent_Template_input_ngModelChange_68_listener","LayerSettingsComponent_Template_input_ngModelChange_79_listener","LayerSettingsComponent_Template_input_ngModelChange_83_listener","LayerSettingsComponent_For_91_Template","LayerSettingsComponent_Template_button_click_94_listener","_c0","ɵɵrepeater","Cell","isCurrentVersion","isDraggable","highlight","unhighlight","onClick","selectionChanged","getClass","theclass","section","features","ɵɵInheritDefinitionFeature","ChangelogCellComponent_Template","ChangelogCellComponent_Template_div_click_1_listener","ChangelogCellComponent_Template_div_mouseenter_1_listener","ChangelogCellComponent_Template_div_mouseleave_1_listener","getTechniqueBackground","commentColor","getTechniqueTextColor","QueryList","MatPaginator","getHeader","section_r3","desc_r5","LayerUpgradeComponent_mat_step_19_div_4_div_3_Template_input_ngModelChange_1_listener","LayerUpgradeComponent_mat_step_19_div_4_div_3_Template_input_change_1_listener","applyFilters","disableFilter","ɵɵpropertyInterpolate","getPreservedURL","attackID_r9","ɵɵsanitizeUrl","oldTechnique_r11","tactic_r10","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_1_div_1_Template","getTactics","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_span_2_Template_span_click_0_listener","_r15","tactic_r13","newTechnique_r14","ngIf","clearAnnotations","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_Template_div_dndDrop_0_listener","onDrop","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_span_2_Template","isAnnotated","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_div_1_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_1_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_div_5_Template","tactic_r16","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template_button_click_1_listener","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template_button_click_4_listener","isCopied","anyAnnotated","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_1_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_2_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_td_3_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_tr_2_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_1_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_2_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_3_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_4_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_div_5_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_Template_input_click_7_listener","panel_r18","ɵɵreference","reviewedChanged","tacticsChanged","isReviewed","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_mat_icon_4_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_mat_icon_5_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_ng_template_8_Template","ɵɵtextInterpolate2","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_mat_expansion_panel_2_Template","filteredIDs","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_div_1_Template","loading","LayerUpgradeComponent_mat_step_19_div_4_div_3_Template","LayerUpgradeComponent_mat_step_19_div_4_Template_input_change_4_listener","reviewAll","LayerUpgradeComponent_mat_step_19_div_4_Template_input_change_7_listener","expandAll","LayerUpgradeComponent_mat_step_19_div_4_div_10_Template","LayerUpgradeComponent_mat_step_19_div_4_ng_container_11_Template","LayerUpgradeComponent_mat_step_19_div_4_Template_mat_paginator_page_12_listener","stepper_r19","sections","selectedIndex","sectionLength","countReviewed","LayerUpgradeComponent_mat_step_19_button_9_Template_button_click_0_listener","onStepChange","LayerUpgradeComponent_mat_step_19_ng_template_1_Template","LayerUpgradeComponent_mat_step_19_div_2_Template","LayerUpgradeComponent_mat_step_19_div_4_Template","LayerUpgradeComponent_mat_step_19_div_5_Template","LayerUpgradeComponent_mat_step_19_span_8_Template","LayerUpgradeComponent_mat_step_19_button_9_Template","LayerUpgradeComponent_mat_step_19_Template_button_click_10_listener","getDescription","changelog","ɵɵtextInterpolate3","section_r21","LayerUpgradeComponent_div_28_span_3_Template","LayerUpgradeComponent_div_28_span_4_Template","LayerUpgradeComponent_div_28_span_5_Template","paginators","paginator_map","descriptions","finish","s","wait","toUpperCase","join","search","sectionIDs","paginator","toArray","pageIndex","pageSize","start","end","slice","offset","nextSection","vm","all_techniques","revokedByID","revokingObject","oldTechnique","newTechnique","sortArray","oldTactics","newTactics","panel","expanded","filtered_expand_visible_section","getElementById","panels","checked","close","filtered_review_all_section","sectionID","technique_tactic_ids","toTactic","validTechnique","fromTvm","toTvm","closeSidebar","LayerUpgradeComponent_Query","LayerUpgradeComponent_mat_step_19_Template","LayerUpgradeComponent_ng_template_21_Template","LayerUpgradeComponent_div_28_Template","LayerUpgradeComponent_Template_button_click_33_listener","ListInputComponent_div_1_div_1_Template_button_click_1_listener","i_r2","ctx_r2","removeDivider","ListInputComponent_div_1_div_2_Template_button_click_1_listener","addDivider","item_r6","config","valueField","nameField","ListInputComponent_div_1_div_3_Template_input_ngModelChange_4_listener","ListInputComponent_div_1_div_3_Template_input_input_4_listener","updateList","ListInputComponent_div_1_div_3_Template_input_ngModelChange_8_listener","ListInputComponent_div_1_div_3_Template_input_input_8_listener","ListInputComponent_div_1_div_3_a_9_Template","ListInputComponent_div_1_div_3_Template_button_click_11_listener","remove","includeLinks","ListInputComponent_div_1_div_1_Template","ListInputComponent_div_1_div_2_Template","ListInputComponent_div_1_div_3_Template","canAddDivider","fieldToClass","list","ListInputComponent_Template","ListInputComponent_div_1_Template","ListInputComponent_Template_button_click_3_listener","showContextmenu","isDarkTheme","matchMedia","matches","isHighlighted","idToMatch","isTacticMatching","elements","querySelectorAll","hasNotes","emulate_alpha","cell_color","cell_color_alpha","getAlpha","setAlpha","mix","getTechniqueUnderlineColor","metadataColor","linkColor","background","MatrixCommon","onTechniqueLeftClick","shift","ctrl","meta","onToggleSubtechniquesVisible","onTechniqueHighlight","onTechniqueUnhighlight","onTacticClick","getTacticBackground","MatrixFlatComponent_td_3_Template_a_click_1_listener","tactic_r2","MatrixFlatComponent_td_5_ng_container_2_Template","tactic_r4","MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_leftclick_1_listener","technique_r6","tactic_r7","MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_rightclick_1_listener","onTechniqueRightClick","MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_highlight_1_listener","MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template_technique_cell_unhighlight_1_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_2_Template_td_click_0_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_leftclick_0_listener","subtechnique_r11","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_rightclick_0_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_highlight_0_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template_technique_cell_unhighlight_0_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_2_Template","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_leftclick_4_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_rightclick_4_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_highlight_4_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template_technique_cell_unhighlight_4_listener","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_td_6_Template","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_technique_cell_9_Template","MatrixFlatComponent_td_8_ng_container_1_ng_container_1_Template","MatrixFlatComponent_td_8_ng_container_1_ng_template_2_Template","supertechnique_r12","MatrixFlatComponent_td_8_ng_container_1_Template","MatrixFlatComponent_Template","MatrixFlatComponent_td_3_Template","MatrixFlatComponent_td_5_Template","MatrixFlatComponent_td_8_Template","tactic_r1","MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_leftclick_1_listener","subtechnique_r7","tactic_r5","MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_rightclick_1_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_highlight_1_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template_technique_cell_unhighlight_1_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_leftclick_2_listener","technique_r4","MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_rightclick_2_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_highlight_2_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_Template_technique_cell_unhighlight_2_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_div_4_Template","MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_leftclick_1_listener","MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_rightclick_1_listener","MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_highlight_1_listener","MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template_technique_cell_unhighlight_1_listener","MatrixMiniComponent_td_6_ng_container_1_div_1_Template","MatrixMiniComponent_td_6_ng_container_1_ng_template_2_Template","elseblock_r9","MatrixMiniComponent_td_6_ng_container_1_Template","MatrixMiniComponent_Template","MatrixMiniComponent_td_3_Template","MatrixMiniComponent_td_6_Template","MatrixSideComponent_td_3_Template_a_click_1_listener","MatrixSideComponent_td_5_ng_container_2_Template","MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_leftclick_1_listener","MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_rightclick_1_listener","MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_highlight_1_listener","MatrixSideComponent_td_8_tr_2_ng_container_2_Template_technique_cell_unhighlight_1_listener","MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_leftclick_3_listener","MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_rightclick_3_listener","MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_highlight_3_listener","MatrixSideComponent_td_8_tr_2_ng_template_3_Template_technique_cell_unhighlight_3_listener","MatrixSideComponent_td_8_tr_2_td_5_Template_td_click_0_listener","ɵɵclassMapInterpolate2","MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_leftclick_1_listener","MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_rightclick_1_listener","MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_highlight_1_listener","MatrixSideComponent_td_8_tr_2_div_8_Template_technique_cell_unhighlight_1_listener","MatrixSideComponent_td_8_tr_2_ng_container_2_Template","MatrixSideComponent_td_8_tr_2_ng_template_3_Template","MatrixSideComponent_td_8_tr_2_td_5_Template","MatrixSideComponent_td_8_tr_2_div_8_Template","MatrixSideComponent_td_8_tr_2_Template","MatrixSideComponent_Template","MatrixSideComponent_td_3_Template","MatrixSideComponent_td_5_Template","MatrixSideComponent_td_8_Template","ctx_r0","TacticCellComponent_Template","TacticCellComponent_ng_container_1_Template","TacticCellComponent_div_2_Template","TacticCellComponent_ng_container_3_Template","CellPopover","theElement","getPosition","boundingRect","halfWidth","innerWidth","halfHeight","innerHeight","position","ContextmenuComponent_div_9_Template_div_click_1_listener","select","ContextmenuComponent_div_9_Template_div_click_3_listener","addSelection","ContextmenuComponent_div_9_Template_div_click_5_listener","removeSelection","ContextmenuComponent_div_10_Template_div_click_1_listener","selectAll","ContextmenuComponent_div_10_Template_div_click_3_listener","deselectAll","ContextmenuComponent_div_10_Template_div_click_5_listener","ContextmenuComponent_div_11_Template_div_click_1_listener","ContextmenuComponent_div_11_Template_div_click_3_listener","ContextmenuComponent_div_12_Template_div_click_1_listener","selectAllInTactic","ContextmenuComponent_div_12_Template_div_click_3_listener","deselectAllInTactic","ContextmenuComponent_div_18_div_1_Template_div_click_0_listener","contextMenuItem_r7","openCustomContextMenuItem","ContextmenuComponent_div_18_div_1_Template","contextMenuItems","ContextmenuComponent_div_19_div_1_div_1_Template_div_click_0_listener","link_r9","openLink","ContextmenuComponent_div_19_div_1_div_1_Template","ContextmenuComponent_div_19_div_1_ng_template_2_Template","divider_r10","ContextmenuComponent_div_19_div_1_Template","placement","closeContextmenu","viewTechnique","viewTactic","pinCell","pinnedCell","customItem","ElementRef","outputs","ContextmenuComponent_Template","ContextmenuComponent_Template_div_contextmenu_0_listener","ContextmenuComponent_Template_div_click_1_listener","ContextmenuComponent_Template_div_click_7_listener","ContextmenuComponent_div_9_Template","ContextmenuComponent_div_10_Template","ContextmenuComponent_div_11_Template","ContextmenuComponent_div_12_Template","ContextmenuComponent_Template_div_click_14_listener","ContextmenuComponent_Template_div_click_16_listener","ContextmenuComponent_div_18_Template","ContextmenuComponent_div_19_Template","annotatedSubtechniques","TechniqueCellComponent_ng_container_6_sub_1_Template","TechniqueCellComponent_app_contextmenu_8_Template_app_contextmenu_close_0_listener","onMouseLeave","isCellPinned","showTooltip","leftclick","annotatedSubs","subVM","onMouseEnter","onLeftClick","shiftKey","ctrlKey","metaKey","x","pageX","y","pageY","onRightClick","TechniqueCellComponent_Template","TechniqueCellComponent_Template_div_click_1_listener","TechniqueCellComponent_Template_div_contextmenu_1_listener","TechniqueCellComponent_Template_div_mouseenter_1_listener","TechniqueCellComponent_Template_div_mouseleave_1_listener","TechniqueCellComponent_ng_container_3_Template","TechniqueCellComponent_div_4_Template","TechniqueCellComponent_ng_container_5_Template","TechniqueCellComponent_ng_container_6_Template","TechniqueCellComponent_app_tooltip_7_Template","TechniqueCellComponent_app_contextmenu_8_Template","TooltipComponent_span_6_Template_span_click_0_listener","unpin","note_r3","TooltipComponent_tr_11_td_1_Template","metadata_r4","TooltipComponent_tr_12_td_1_Template","TooltipComponent_tr_12_td_2_Template","TooltipComponent_tr_12_td_3_Template","getPlacement","TooltipComponent_Template","TooltipComponent_span_6_Template","TooltipComponent_tr_7_Template","TooltipComponent_tr_8_Template","TooltipComponent_tr_9_Template","TooltipComponent_tr_10_Template","TooltipComponent_tr_11_Template","TooltipComponent_tr_12_Template","SearchAndMultiselectComponent_div_12_Template_input_click_1_listener","field_r2","toggleFieldEnabled","result_r6","SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_td_mouseenter_1_listener","mouseEnter","SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_td_mouseleave_1_listener","mouseLeave","SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_span_2_Template","SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_button_click_8_listener","SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template_button_click_11_listener","deselect","SearchAndMultiselectComponent_ng_template_22_table_7_tr_1_Template","techniqueResults","SearchAndMultiselectComponent_ng_template_22_Template_button_click_2_listener","SearchAndMultiselectComponent_ng_template_22_Template_button_click_4_listener","SearchAndMultiselectComponent_ng_template_22_table_7_Template","SearchAndMultiselectComponent_ng_template_22_ng_template_8_Template","noTechniquesResults_r7","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_td_mouseenter_1_listener","stixObject_r12","_r11","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_td_mouseleave_1_listener","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_button_click_7_listener","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template_button_click_10_listener","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_tr_1_Template","stixType_r10","objects","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template_button_click_1_listener","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template_button_click_3_listener","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_table_6_Template","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_ng_template_7_Template","noResults_r13","SearchAndMultiselectComponent_mat_expansion_panel_23_Template_mat_expansion_panel_click_0_listener","userClickedExpand","SearchAndMultiselectComponent_mat_expansion_panel_23_ng_template_7_Template","expandedPanels","i_r14","SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_td_mouseenter_1_listener","label_r17","mouseEnterAll","stixDataComponents","SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_td_mouseleave_1_listener","SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_button_click_7_listener","SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template_button_click_10_listener","SearchAndMultiselectComponent_ng_template_30_table_6_tr_1_Template","stixDataComponentLabels","SearchAndMultiselectComponent_ng_template_30_Template_button_click_1_listener","stixDataComponentsResults","SearchAndMultiselectComponent_ng_template_30_Template_button_click_3_listener","SearchAndMultiselectComponent_ng_template_30_table_6_Template","SearchAndMultiselectComponent_ng_template_30_ng_template_7_Template","noResults_r18","query","newQuery","_query","debounceFunction","getResults","previousQuery","queryLength","results","stixTypes","fields","filterAndSort","items","sortTechniquesAndSubtechniques","tA","tB","c1","c2","seenIDs","filterAndSortLabels","labels","r","fieldToggled","getTechniques","getStixData","expandPanels","isPrevExpanded","isExpanded","isAllCollapsed","isPanelExpanded","allTechniques","c","keys","thefield","isTechnique","getRelated","stixObject","isTechniqueArray","SearchAndMultiselectComponent_Template","SearchAndMultiselectComponent_Template_input_ngModelChange_6_listener","SearchAndMultiselectComponent_div_12_Template","SearchAndMultiselectComponent_Template_mat_expansion_panel_click_16_listener","SearchAndMultiselectComponent_ng_template_22_Template","SearchAndMultiselectComponent_mat_expansion_panel_23_Template","SearchAndMultiselectComponent_Template_mat_expansion_panel_click_24_listener","SearchAndMultiselectComponent_ng_template_30_Template","SearchAndMultiselectComponent_Template_button_click_33_listener","catchError","switchMap","tap","of","subtechniquesEnabled","http","entries","customizefeatureList","featureGroups","featureName","featureGroup","subFeatures","count","f","setFeature","subFeatureName","Object","fieldname","setFeature_object","featureObject","override","hasOwnProperty","isFeature","isFeatureGroup","featureGroupName","getAllFragments","location","fragments","regex","exec","validateConfig","collection_index_url","pipe","defaultLayers","banner","feature","err","message","collectionIndex","toPromise","ɵɵinject","HttpClient","factory","ɵfac","providedIn","HttpHeaders","Buffer","forkJoin","TaxiiConnect","Collection","domains","setUpDomains","parseCollectionIndex","parseBundles","stixBundles","matrixSDOs","matrixToTechniqueSDOs","bundle","techniqueSDOs","bundleMatrices","idToTechniqueSDO","sdo","parseRelationship","x_mitre_is_subtechnique","createTechniques","matrixSDO","parsePlatforms","createMatrices","techniqueSDO","sub_id","createdMatrixIDs","techniqueIDs","sro","addRelationshipToMap","relationship_type","target_ref","source_ref","startsWith","v","addVersion","identifier","domainObject","authentication","collection","collections","domainIdentifier","getDomainIdentifier","minorVersionMap","acc","major","minor","versionName","minimumSupportedVersion","domainName","existingVersion","getDomainData","refresh","conn","collectionInfo","can_read","can_write","domainData$","getObjects","bundleData","httpOptions","headers","token","serviceName","apiKey","Authorization","loadDomainData","dataPromise","Promise","resolve","reject","subscription","complete","d","isSupported","supported","compareVersions","oldDomain","newDomain","previousTechniques","latestTechniques","objectLookup","latestTechnique","prevTechnique","matIconRegistry","domSanitizer","loadIcons","Icons","iconKeys","iconUrl","addSvgIcon","bypassSecurityTrustResourceUrl","MatIconRegistry","evaluate","isBoolean","isNumber","nonce","newViewModel","getNonce","destroyViewModel","layerOperation","scoreVariables","layerName","opSettings","scoreExpression","minScore","Infinity","maxScore","newTechniqueVM","scope","misses","scoreValue","mathResult","inherit","inheritVM","fieldName","commentVM","linkVM","metadataVM","coloringVM","enabledVM","filterVM","legendVM","gradientVM","SidebarComponent_div_1_div_2_div_1_Template","SidebarComponent_div_1_div_1_Template","SidebarComponent_div_1_div_2_Template","SidebarComponent_div_1_div_3_Template","reloadToggle","ngOnChanges","ɵɵNgOnChangesFeature","SidebarComponent_Template","SidebarComponent_div_1_Template","RenderableMatrix","RenderableTactic","RenderableTechnique","heights","renderConfig","filteredTactics","filteredTechniques","yPosition","filteredSubtechniques","textColor","SvgExportComponent_div_20_Template_mat_select_ngModelChange_6_listener","orientation","SvgExportComponent_div_20_Template_mat_select_selectionChange_6_listener","buildSVG","SvgExportComponent_div_20_Template_mat_select_ngModelChange_15_listener","SvgExportComponent_div_20_Template_mat_select_selectionChange_15_listener","SvgExportComponent_div_20_Template_input_ngModelChange_32_listener","SvgExportComponent_div_20_Template_input_input_32_listener","SvgExportComponent_div_20_Template_input_ngModelChange_39_listener","SvgExportComponent_div_20_Template_input_input_39_listener","SvgExportComponent_div_20_Template_input_ngModelChange_46_listener","SvgExportComponent_div_20_Template_input_input_46_listener","unit","showHeader","SvgExportComponent_div_25_Template_mat_select_ngModelChange_6_listener","SvgExportComponent_div_25_Template_mat_select_selectionChange_6_listener","SvgExportComponent_div_25_Template_input_ngModelChange_17_listener","fontSize","SvgExportComponent_div_25_Template_input_input_17_listener","SvgExportComponent_div_25_div_18_Template","SvgExportComponent_div_25_Template_input_ngModelChange_20_listener","autofitText","SvgExportComponent_div_25_Template_input_change_20_listener","maxTextSize","SvgExportComponent_div_30_Template_input_ngModelChange_3_listener","legendDocked","SvgExportComponent_div_30_Template_input_change_3_listener","SvgExportComponent_div_30_Template_input_ngModelChange_10_listener","legendX","SvgExportComponent_div_30_Template_input_input_10_listener","SvgExportComponent_div_30_Template_input_ngModelChange_17_listener","legendY","SvgExportComponent_div_30_Template_input_input_17_listener","SvgExportComponent_div_30_Template_input_ngModelChange_24_listener","legendWidth","SvgExportComponent_div_30_Template_input_input_24_listener","SvgExportComponent_div_30_Template_input_ngModelChange_31_listener","legendHeight","SvgExportComponent_div_30_Template_input_input_31_listener","SvgExportComponent_div_35_li_26_Template_mat_select_ngModelChange_4_listener","SvgExportComponent_div_35_li_26_Template_mat_select_selectionChange_4_listener","SvgExportComponent_div_35_Template_input_ngModelChange_3_listener","SvgExportComponent_div_35_Template_input_change_3_listener","SvgExportComponent_div_35_Template_input_ngModelChange_7_listener","showAbout","SvgExportComponent_div_35_Template_input_change_7_listener","SvgExportComponent_div_35_Template_input_ngModelChange_11_listener","showDomain","SvgExportComponent_div_35_Template_input_change_11_listener","SvgExportComponent_div_35_Template_input_ngModelChange_15_listener","showFilters","SvgExportComponent_div_35_Template_input_change_15_listener","SvgExportComponent_div_35_Template_input_ngModelChange_19_listener","showLegend","SvgExportComponent_div_35_Template_input_change_19_listener","SvgExportComponent_div_35_Template_input_ngModelChange_23_listener","showGradient","SvgExportComponent_div_35_Template_input_change_23_listener","SvgExportComponent_div_35_li_26_Template","SvgExportComponent_div_35_Template_input_colorPickerChange_28_listener","tableBorderColor","SvgExportComponent_div_35_Template_input_colorPickerSelect_28_listener","hasName","hasDescription","hasDomain","hasLegendItems","hasScores","showAggregate","showDescription","showLegendContainer","showLegendInHeader","dialogRef","svgConfigDefaults","svgElementID","buildSVGDebounce","unitEnum","themeEnum","legendSectionCount","bypassDebounce","setSize","margin","toPx","svgWidth","svgHeight","svgElement","innerHTML","svg","d3","append","attr","legendSection","contents","buildGradient","buildLegend","headerSections","aboutSection","domainSection","platformSection","filterData","aggregateSection","headerGroup","headerX","scaleBand","paddingInner","range","sectionGroup","headerWidth","bandwidth","buildHeaderSection","datatable","xRange","yRange","scaleLinear","subtechniqueIndent","tacticGroups","enter","techniqueGroups","subtechniqueGroups","sidebarWidth","minFontSize","optimalFontSize","each","verticalAlignCenter","minTacticFontSize","tacticLabels","legendGroup","group","padding","boxGroup","boxTitle","bbox","node","getBBox","coverPadding","raise","boxContentGroup","align","contentWidth","subsection","contentGroup","colorScale","scaleOrdinal","call","legendColor","shapeWidth","shapePadding","shape","orient","scale","labelOffset","percent","interpolateNumber","nCells","cells","labelFormat","format","ratioMap","portrait","landscape","legal","small","medium","large","w","h","children","child","endsWith","hasAttribute","newYPosition","floor","getSpacing","distance","divisions","res","spacing","insertLineBreaks","words","center","firstChild","division","tspan","findSize","maxFontSize","textHeight","longestWordLength","word","textWidth","optimalSize","wordArrangement","num_breaks","breaks","findBreaks","wordList","spaces","initial_breaks","recurse","currPlacement","depth","quantity","factor","downloadSVG","setAttribute","preface","svgData","XMLSerializer","serializeToString","svgBlob","MatDialogRef","SvgExportComponent_Template","SvgExportComponent_li_3_Template","SvgExportComponent_Template_div_click_6_listener","SvgExportComponent_span_7_Template","SvgExportComponent_span_8_Template","SvgExportComponent_Template_div_click_11_listener","SvgExportComponent_Template_div_click_17_listener","SvgExportComponent_div_20_Template","SvgExportComponent_Template_div_click_22_listener","SvgExportComponent_div_25_Template","SvgExportComponent_Template_div_click_27_listener","SvgExportComponent_div_30_Template","SvgExportComponent_Template_div_click_32_listener","SvgExportComponent_div_35_Template","SvgExportComponent_Template_div_click_38_listener","HeaderSectionContent","HeaderSection","isSafari","bannerContent","ɵɵsanitizeHtml","TabsComponent_div_7_Template_button_click_1_listener","TabsComponent_div_7_Template_button_click_3_listener","TabsComponent_a_10_button_2_Template_button_click_0_listener","tab_r5","closeTab","indexToChar","$i_r7","TabsComponent_a_10_Template_a_click_0_listener","handleTabClick","TabsComponent_a_10_button_2_Template","TabsComponent_a_10_span_3_Template","activeTab","isAlphabetical","TabsComponent_a_11_Template_a_click_0_listener","newBlankTab","TabsComponent_div_14_Template_button_click_1_listener","TabsComponent_ng_template_15_Template_button_click_10_listener","safariDialogRef","TabsComponent_ng_template_17_Template_a_click_12_listener","TabsComponent_ng_template_17_Template_a_click_15_listener","TabsComponent_ng_template_17_Template_button_click_17_listener","versionDialogRef","data_r12","objVersion","globalVersion","TabsComponent_ng_template_19_button_34_Template_button_click_0_listener","domain_r16","newLayer","nVersion_r17","nDomain_r18","domain_r19","$i_r22","tab_r21","TabsComponent_ng_template_19_ul_140_li_1_Template","vm_r23","vm_r24","vm_r25","vm_r26","vm_r27","vm_r28","vm_r29","vm_r30","TabsComponent_ng_template_19_li_261_Template_input_ngModelChange_4_listener","i_r32","layerLinkURLs","TabsComponent_ng_template_19_li_261_Template_button_click_5_listener","removeLayerLink","TabsComponent_ng_template_19_ng_container_272_div_1_Template_mat_checkbox_ngModelChange_2_listener","feature_r34","TabsComponent_ng_template_19_ng_container_272_div_1_Template","TabsComponent_ng_template_19_Template_button_click_10_listener","TabsComponent_ng_template_19_Template_button_click_12_listener","TabsComponent_ng_template_19_Template_button_click_14_listener","select_r14","TabsComponent_ng_template_19_Template_mat_select_selectionChange_17_listener","handleUserThemeChange","TabsComponent_ng_template_19_button_34_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_44_listener","nVersion","TabsComponent_ng_template_19_mat_option_47_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_51_listener","nDomain","TabsComponent_ng_template_19_mat_option_54_Template","TabsComponent_ng_template_19_Template_input_ngModelChange_64_listener","loadData","TabsComponent_ng_template_19_Template_input_ngModelChange_68_listener","TabsComponent_ng_template_19_Template_input_ngModelChange_74_listener","TabsComponent_ng_template_19_Template_button_click_79_listener","TabsComponent_ng_template_19_Template_button_click_83_listener","newLayerFromURL","TabsComponent_ng_template_19_Template_button_click_93_listener","openUploadPrompt","TabsComponent_ng_template_19_Template_input_change_95_listener","loadLayerFromFile","TabsComponent_ng_template_19_Template_input_ngModelChange_103_listener","loadURL","TabsComponent_ng_template_19_Template_button_click_104_listener","loadLayerFromURL","TabsComponent_ng_template_19_Template_mat_expansion_panel_opened_107_listener","TabsComponent_ng_template_19_Template_mat_expansion_panel_closed_107_listener","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_119_listener","TabsComponent_ng_template_19_mat_option_120_Template","TabsComponent_ng_template_19_Template_input_ngModelChange_130_listener","TabsComponent_ng_template_19_Template_input_keyup_130_listener","TabsComponent_ng_template_19_ul_140_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_146_listener","TabsComponent_ng_template_19_mat_option_149_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_159_listener","TabsComponent_ng_template_19_mat_option_162_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_172_listener","TabsComponent_ng_template_19_mat_option_175_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_185_listener","TabsComponent_ng_template_19_mat_option_188_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_198_listener","TabsComponent_ng_template_19_mat_option_201_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_211_listener","TabsComponent_ng_template_19_mat_option_214_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_224_listener","TabsComponent_ng_template_19_mat_option_227_Template","TabsComponent_ng_template_19_Template_mat_select_ngModelChange_237_listener","TabsComponent_ng_template_19_mat_option_240_Template","TabsComponent_ng_template_19_Template_button_click_246_listener","layerByOperation","TabsComponent_ng_template_19_li_261_Template","TabsComponent_ng_template_19_Template_button_click_263_listener","addLayerLink","TabsComponent_ng_template_19_ng_container_272_Template","TabsComponent_ng_template_19_Template_input_click_277_listener","selectLayerLink","TabsComponent_ng_template_19_Template_button_click_278_listener","copyLayerLink","TabsComponent_ng_template_19_mat_hint_281_Template","latestDomains","filterDomains","getScoreExpressionError","layerTabs","getFilteredVMs","trackByFunction","getLayerLink","copiedRecently","TabsComponent_ng_template_20_Template_DataTable_dropdownChange_0_listener","_r35","dropdownEnabled","TabsComponent_ng_template_20_Template_DataTable_onScroll_0_listener","adjustHeader","snackBar","onUserThemeChange","adjustedHeaderHeight","loadTabs","selectTab","safariWarning","disableClose","userTheme","newHeight","_this","_asyncToGenerator","getNamedFragmentValue","bundleVersion","bundleDomain","layerURLs","first","openTab","forceNew","tab","closeActiveTab","allowNoTab","action","hasFeature","dialogName","settings","maxWidth","getUniqueLayerName","root","isInteger","str","n","substr","domainID","validateInput","exists","TypeError","viewModelIndex","fromCharCode","charToIndex","char","currChar","vms","noMatch","input","versionUpgradeDialog","currVersion","vmVersion","afterClosed","upgrade","oldID","newID","upgradeLayer","oldViewModel","serialized","loads","dataSubscription","old","new","catch","files","readJSONFile","file","_this2","reader","FileReader","onload","_ref","loadObjAsLayer","_ref2","layerObj","layerVersionStr","versionMismatchWarning","_x2","apply","arguments","layerFile","_x","readAsText","_this3","globalVersionSplit","snackMessage","versionMinorSnackbarRef","duration","onAction","versionWarning","_this4","_ref3","_ref4","loadLayerAsync","_ref5","_x6","_x5","_x3","_x4","layerLinkURL","encodeURIComponent","copyText","execCommand","test","RegExp","decodeURIComponent","MatSnackBar","TabsComponent_Query","TabsComponent_Template","TabsComponent_div_1_Template","TabsComponent_Template_div_click_3_listener","TabsComponent_div_7_Template","TabsComponent_a_10_Template","TabsComponent_a_11_Template","TabsComponent_div_14_Template","TabsComponent_ng_template_15_Template","TabsComponent_ng_template_17_Template","TabsComponent_ng_template_19_Template","TabsComponent_ng_template_20_Template","tabPanel_r36","expirationDays","Date","setTime","getTime","expires","toUTCString","cookie","decodedCookie","ca","appPackageInfo","user","password","timeout","baseURL","withoutLastSlash","hash","btoa","mediaType","getConfig","method","Headers","Accept","getStixConfig","timeoutPromise","promise","fetchTimeout","fetch","asyncFetch","path","fullPath","asQueryString","fetchThis","conf","flag","cache","withLastSlash","k","api_root_path","colOptions","objsOptions","objOptions","manOptions","ifCanRead","func","ifCanWrite","theConfig","Range","detect","comparatorFn","<","<=",">",">=","browser","compRange","compare","comp","NaN","op","upgradeVersion","ɵɵProvidersFeature","VersionUpgradeComponent_Template","VersionUpgradeComponent_em_6_Template","VersionUpgradeComponent_Template_button_click_8_listener","VersionUpgradeComponent_Template_button_click_10_listener","environment","production","enableProdMode","__NgCli_bootstrap_1","platformBrowser","bootstrapModule"],"sourceRoot":"webpack:///","x_google_ignoreList":[85]} \ No newline at end of file diff --git a/site/mitre/polyfills.js b/site/mitre/polyfills.js new file mode 100644 index 0000000..b20ba6b --- /dev/null +++ b/site/mitre/polyfills.js @@ -0,0 +1,17407 @@ +(self["webpackChunknav_app"] = self["webpackChunknav_app"] || []).push([["polyfills"],{ + +/***/ 24050: +/*!**************************!*\ + !*** ./src/polyfills.ts ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var core_js_es_symbol__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/es/symbol */ 71178); +/* harmony import */ var core_js_es_symbol__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_es_symbol__WEBPACK_IMPORTED_MODULE_0__); +/* harmony import */ var core_js_es_object__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/es/object */ 55069); +/* harmony import */ var core_js_es_object__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_es_object__WEBPACK_IMPORTED_MODULE_1__); +/* harmony import */ var core_js_es_function__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/es/function */ 20230); +/* harmony import */ var core_js_es_function__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_es_function__WEBPACK_IMPORTED_MODULE_2__); +/* harmony import */ var core_js_es_parse_int__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/es/parse-int */ 38414); +/* harmony import */ var core_js_es_parse_int__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_es_parse_int__WEBPACK_IMPORTED_MODULE_3__); +/* harmony import */ var core_js_es_parse_float__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/es/parse-float */ 93441); +/* harmony import */ var core_js_es_parse_float__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_es_parse_float__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var core_js_es_number__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/es/number */ 77311); +/* harmony import */ var core_js_es_number__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_es_number__WEBPACK_IMPORTED_MODULE_5__); +/* harmony import */ var core_js_es_math__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/es/math */ 34220); +/* harmony import */ var core_js_es_math__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_es_math__WEBPACK_IMPORTED_MODULE_6__); +/* harmony import */ var core_js_es_string__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/es/string */ 57507); +/* harmony import */ var core_js_es_string__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_es_string__WEBPACK_IMPORTED_MODULE_7__); +/* harmony import */ var core_js_es_date__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/es/date */ 94102); +/* harmony import */ var core_js_es_date__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_es_date__WEBPACK_IMPORTED_MODULE_8__); +/* harmony import */ var core_js_es_array__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/es/array */ 43051); +/* harmony import */ var core_js_es_array__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_es_array__WEBPACK_IMPORTED_MODULE_9__); +/* harmony import */ var core_js_es_regexp__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/es/regexp */ 30455); +/* harmony import */ var core_js_es_regexp__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_es_regexp__WEBPACK_IMPORTED_MODULE_10__); +/* harmony import */ var core_js_es_map__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/es/map */ 67240); +/* harmony import */ var core_js_es_map__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_es_map__WEBPACK_IMPORTED_MODULE_11__); +/* harmony import */ var core_js_es_weak_map__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/es/weak-map */ 56349); +/* harmony import */ var core_js_es_weak_map__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_es_weak_map__WEBPACK_IMPORTED_MODULE_12__); +/* harmony import */ var core_js_es_set__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/es/set */ 56490); +/* harmony import */ var core_js_es_set__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_es_set__WEBPACK_IMPORTED_MODULE_13__); +/* harmony import */ var classlist_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! classlist.js */ 34296); +/* harmony import */ var classlist_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(classlist_js__WEBPACK_IMPORTED_MODULE_14__); +/* harmony import */ var core_js_es_reflect__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/es/reflect */ 70279); +/* harmony import */ var core_js_es_reflect__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_es_reflect__WEBPACK_IMPORTED_MODULE_15__); +/* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! zone.js */ 74124); +/* harmony import */ var zone_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(zone_js__WEBPACK_IMPORTED_MODULE_16__); +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ +/*************************************************************************************************** + * BROWSER POLYFILLS + */ +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ + + + + + + + + + + + + + + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ + // Run `npm install --save classlist.js`. +/** IE10 and IE11 requires the following for the Reflect API. */ + +/** Evergreen browsers require these. **/ +// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. +/** + * Required to support Web Animations `@angular/platform-browser/animations`. + * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation + **/ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ + // Included with Angular CLI. +/*************************************************************************************************** + * APPLICATION IMPORTS + */ +/** + * Date, currency, decimal and percent pipes. + * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 + */ +// import 'intl'; // Run `npm install --save intl`. +/** + * Need to import at least one locale-data with intl. + */ +// import 'intl/locale-data/jsonp/en'; +if (!Element.prototype.matches) { + Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; +} + +/***/ }), + +/***/ 34296: +/*!************************************************!*\ + !*** ./node_modules/classlist.js/classList.js ***! + \************************************************/ +/***/ (() => { + +/* + * classList.js: Cross-browser full element.classList implementation. + * 1.1.20150312 + * + * By Eli Grey, http://eligrey.com + * License: Dedicated to the public domain. + * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md + */ + +/*global self, document, DOMException */ + +/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */ + +if ("document" in self) { + // Full polyfill for browsers with no classList support + // Including IE < Edge missing SVGElement.classList + if (!("classList" in document.createElement("_")) || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg", "g"))) { + (function (view) { + "use strict"; + + if (!('Element' in view)) return; + var classListProp = "classList", + protoProp = "prototype", + elemCtrProto = view.Element[protoProp], + objCtr = Object, + strTrim = String[protoProp].trim || function () { + return this.replace(/^\s+|\s+$/g, ""); + }, + arrIndexOf = Array[protoProp].indexOf || function (item) { + var i = 0, + len = this.length; + for (; i < len; i++) { + if (i in this && this[i] === item) { + return i; + } + } + return -1; + } + // Vendors: please allow content code to instantiate DOMExceptions + , + DOMEx = function (type, message) { + this.name = type; + this.code = DOMException[type]; + this.message = message; + }, + checkTokenAndGetIndex = function (classList, token) { + if (token === "") { + throw new DOMEx("SYNTAX_ERR", "An invalid or illegal string was specified"); + } + if (/\s/.test(token)) { + throw new DOMEx("INVALID_CHARACTER_ERR", "String contains an invalid character"); + } + return arrIndexOf.call(classList, token); + }, + ClassList = function (elem) { + var trimmedClasses = strTrim.call(elem.getAttribute("class") || ""), + classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [], + i = 0, + len = classes.length; + for (; i < len; i++) { + this.push(classes[i]); + } + this._updateClassName = function () { + elem.setAttribute("class", this.toString()); + }; + }, + classListProto = ClassList[protoProp] = [], + classListGetter = function () { + return new ClassList(this); + }; + // Most DOMException implementations don't allow calling DOMException's toString() + // on non-DOMExceptions. Error's toString() is sufficient here. + DOMEx[protoProp] = Error[protoProp]; + classListProto.item = function (i) { + return this[i] || null; + }; + classListProto.contains = function (token) { + token += ""; + return checkTokenAndGetIndex(this, token) !== -1; + }; + classListProto.add = function () { + var tokens = arguments, + i = 0, + l = tokens.length, + token, + updated = false; + do { + token = tokens[i] + ""; + if (checkTokenAndGetIndex(this, token) === -1) { + this.push(token); + updated = true; + } + } while (++i < l); + if (updated) { + this._updateClassName(); + } + }; + classListProto.remove = function () { + var tokens = arguments, + i = 0, + l = tokens.length, + token, + updated = false, + index; + do { + token = tokens[i] + ""; + index = checkTokenAndGetIndex(this, token); + while (index !== -1) { + this.splice(index, 1); + updated = true; + index = checkTokenAndGetIndex(this, token); + } + } while (++i < l); + if (updated) { + this._updateClassName(); + } + }; + classListProto.toggle = function (token, force) { + token += ""; + var result = this.contains(token), + method = result ? force !== true && "remove" : force !== false && "add"; + if (method) { + this[method](token); + } + if (force === true || force === false) { + return force; + } else { + return !result; + } + }; + classListProto.toString = function () { + return this.join(" "); + }; + if (objCtr.defineProperty) { + var classListPropDesc = { + get: classListGetter, + enumerable: true, + configurable: true + }; + try { + objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); + } catch (ex) { + // IE 8 doesn't support enumerable:true + if (ex.number === -0x7FF5EC54) { + classListPropDesc.enumerable = false; + objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); + } + } + } else if (objCtr[protoProp].__defineGetter__) { + elemCtrProto.__defineGetter__(classListProp, classListGetter); + } + })(self); + } else { + // There is full or partial native classList support, so just check if we need + // to normalize the add/remove and toggle APIs. + + (function () { + "use strict"; + + var testElement = document.createElement("_"); + testElement.classList.add("c1", "c2"); + + // Polyfill for IE 10/11 and Firefox <26, where classList.add and + // classList.remove exist but support only one argument at a time. + if (!testElement.classList.contains("c2")) { + var createMethod = function (method) { + var original = DOMTokenList.prototype[method]; + DOMTokenList.prototype[method] = function (token) { + var i, + len = arguments.length; + for (i = 0; i < len; i++) { + token = arguments[i]; + original.call(this, token); + } + }; + }; + createMethod('add'); + createMethod('remove'); + } + testElement.classList.toggle("c3", false); + + // Polyfill for IE 10 and Firefox <24, where classList.toggle does not + // support the second argument. + if (testElement.classList.contains("c3")) { + var _toggle = DOMTokenList.prototype.toggle; + DOMTokenList.prototype.toggle = function (token, force) { + if (1 in arguments && !this.contains(token) === !force) { + return force; + } else { + return _toggle.call(this, token); + } + }; + } + testElement = null; + })(); + } +} + +/***/ }), + +/***/ 74124: +/*!***********************************************!*\ + !*** ./node_modules/zone.js/fesm2015/zone.js ***! + \***********************************************/ +/***/ (() => { + +"use strict"; + + +/** + * @license Angular v + * (c) 2010-2024 Google LLC. https://angular.io/ + * License: MIT + */ +const global = globalThis; +// __Zone_symbol_prefix global can be used to override the default zone +// symbol prefix with a custom one if needed. +function __symbol__(name) { + const symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__'; + return symbolPrefix + name; +} +function initZone() { + const performance = global['performance']; + function mark(name) { + performance && performance['mark'] && performance['mark'](name); + } + function performanceMeasure(name, label) { + performance && performance['measure'] && performance['measure'](name, label); + } + mark('Zone'); + class ZoneImpl { + // tslint:disable-next-line:require-internal-with-underscore + static #_ = this.__symbol__ = __symbol__; + static assertZonePatched() { + if (global['Promise'] !== patches['ZoneAwarePromise']) { + throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' + 'has been overwritten.\n' + 'Most likely cause is that a Promise polyfill has been loaded ' + 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' + 'If you must load one, do so before loading zone.js.)'); + } + } + static get root() { + let zone = ZoneImpl.current; + while (zone.parent) { + zone = zone.parent; + } + return zone; + } + static get current() { + return _currentZoneFrame.zone; + } + static get currentTask() { + return _currentTask; + } + // tslint:disable-next-line:require-internal-with-underscore + static __load_patch(name, fn, ignoreDuplicate = false) { + if (patches.hasOwnProperty(name)) { + // `checkDuplicate` option is defined from global variable + // so it works for all modules. + // `ignoreDuplicate` can work for the specified module + const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true; + if (!ignoreDuplicate && checkDuplicate) { + throw Error('Already loaded patch: ' + name); + } + } else if (!global['__Zone_disable_' + name]) { + const perfName = 'Zone:' + name; + mark(perfName); + patches[name] = fn(global, ZoneImpl, _api); + performanceMeasure(perfName, perfName); + } + } + get parent() { + return this._parent; + } + get name() { + return this._name; + } + constructor(parent, zoneSpec) { + this._parent = parent; + this._name = zoneSpec ? zoneSpec.name || 'unnamed' : ''; + this._properties = zoneSpec && zoneSpec.properties || {}; + this._zoneDelegate = new _ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec); + } + get(key) { + const zone = this.getZoneWith(key); + if (zone) return zone._properties[key]; + } + getZoneWith(key) { + let current = this; + while (current) { + if (current._properties.hasOwnProperty(key)) { + return current; + } + current = current._parent; + } + return null; + } + fork(zoneSpec) { + if (!zoneSpec) throw new Error('ZoneSpec required!'); + return this._zoneDelegate.fork(this, zoneSpec); + } + wrap(callback, source) { + if (typeof callback !== 'function') { + throw new Error('Expecting function got: ' + callback); + } + const _callback = this._zoneDelegate.intercept(this, callback, source); + const zone = this; + return function () { + return zone.runGuarded(_callback, this, arguments, source); + }; + } + run(callback, applyThis, applyArgs, source) { + _currentZoneFrame = { + parent: _currentZoneFrame, + zone: this + }; + try { + return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); + } finally { + _currentZoneFrame = _currentZoneFrame.parent; + } + } + runGuarded(callback, applyThis = null, applyArgs, source) { + _currentZoneFrame = { + parent: _currentZoneFrame, + zone: this + }; + try { + try { + return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); + } catch (error) { + if (this._zoneDelegate.handleError(this, error)) { + throw error; + } + } + } finally { + _currentZoneFrame = _currentZoneFrame.parent; + } + } + runTask(task, applyThis, applyArgs) { + if (task.zone != this) { + throw new Error('A task can only be run in the zone of creation! (Creation: ' + (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); + } + const zoneTask = task; + // https://github.com/angular/zone.js/issues/778, sometimes eventTask + // will run in notScheduled(canceled) state, we should not try to + // run such kind of task but just return + const { + type, + data: { + isPeriodic = false, + isRefreshable = false + } = {} + } = task; + if (task.state === notScheduled && (type === eventTask || type === macroTask)) { + return; + } + const reEntryGuard = task.state != running; + reEntryGuard && zoneTask._transitionTo(running, scheduled); + const previousTask = _currentTask; + _currentTask = zoneTask; + _currentZoneFrame = { + parent: _currentZoneFrame, + zone: this + }; + try { + if (type == macroTask && task.data && !isPeriodic && !isRefreshable) { + task.cancelFn = undefined; + } + try { + return this._zoneDelegate.invokeTask(this, zoneTask, applyThis, applyArgs); + } catch (error) { + if (this._zoneDelegate.handleError(this, error)) { + throw error; + } + } + } finally { + // if the task's state is notScheduled or unknown, then it has already been cancelled + // we should not reset the state to scheduled + const state = task.state; + if (state !== notScheduled && state !== unknown) { + if (type == eventTask || isPeriodic || isRefreshable && state === scheduling) { + reEntryGuard && zoneTask._transitionTo(scheduled, running, scheduling); + } else { + const zoneDelegates = zoneTask._zoneDelegates; + this._updateTaskCount(zoneTask, -1); + reEntryGuard && zoneTask._transitionTo(notScheduled, running, notScheduled); + if (isRefreshable) { + zoneTask._zoneDelegates = zoneDelegates; + } + } + } + _currentZoneFrame = _currentZoneFrame.parent; + _currentTask = previousTask; + } + } + scheduleTask(task) { + if (task.zone && task.zone !== this) { + // check if the task was rescheduled, the newZone + // should not be the children of the original zone + let newZone = this; + while (newZone) { + if (newZone === task.zone) { + throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${task.zone.name}`); + } + newZone = newZone.parent; + } + } + task._transitionTo(scheduling, notScheduled); + const zoneDelegates = []; + task._zoneDelegates = zoneDelegates; + task._zone = this; + try { + task = this._zoneDelegate.scheduleTask(this, task); + } catch (err) { + // should set task's state to unknown when scheduleTask throw error + // because the err may from reschedule, so the fromState maybe notScheduled + task._transitionTo(unknown, scheduling, notScheduled); + // TODO: @JiaLiPassion, should we check the result from handleError? + this._zoneDelegate.handleError(this, err); + throw err; + } + if (task._zoneDelegates === zoneDelegates) { + // we have to check because internally the delegate can reschedule the task. + this._updateTaskCount(task, 1); + } + if (task.state == scheduling) { + task._transitionTo(scheduled, scheduling); + } + return task; + } + scheduleMicroTask(source, callback, data, customSchedule) { + return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined)); + } + scheduleMacroTask(source, callback, data, customSchedule, customCancel) { + return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel)); + } + scheduleEventTask(source, callback, data, customSchedule, customCancel) { + return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel)); + } + cancelTask(task) { + if (task.zone != this) throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' + (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); + if (task.state !== scheduled && task.state !== running) { + return; + } + task._transitionTo(canceling, scheduled, running); + try { + this._zoneDelegate.cancelTask(this, task); + } catch (err) { + // if error occurs when cancelTask, transit the state to unknown + task._transitionTo(unknown, canceling); + this._zoneDelegate.handleError(this, err); + throw err; + } + this._updateTaskCount(task, -1); + task._transitionTo(notScheduled, canceling); + task.runCount = -1; + return task; + } + _updateTaskCount(task, count) { + const zoneDelegates = task._zoneDelegates; + if (count == -1) { + task._zoneDelegates = null; + } + for (let i = 0; i < zoneDelegates.length; i++) { + zoneDelegates[i]._updateTaskCount(task.type, count); + } + } + } + const DELEGATE_ZS = { + name: '', + onHasTask: (delegate, _, target, hasTaskState) => delegate.hasTask(target, hasTaskState), + onScheduleTask: (delegate, _, target, task) => delegate.scheduleTask(target, task), + onInvokeTask: (delegate, _, target, task, applyThis, applyArgs) => delegate.invokeTask(target, task, applyThis, applyArgs), + onCancelTask: (delegate, _, target, task) => delegate.cancelTask(target, task) + }; + class _ZoneDelegate { + get zone() { + return this._zone; + } + constructor(zone, parentDelegate, zoneSpec) { + this._taskCounts = { + 'microTask': 0, + 'macroTask': 0, + 'eventTask': 0 + }; + this._zone = zone; + this._parentDelegate = parentDelegate; + this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS); + this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt); + this._forkCurrZone = zoneSpec && (zoneSpec.onFork ? this._zone : parentDelegate._forkCurrZone); + this._interceptZS = zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS); + this._interceptDlgt = zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt); + this._interceptCurrZone = zoneSpec && (zoneSpec.onIntercept ? this._zone : parentDelegate._interceptCurrZone); + this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS); + this._invokeDlgt = zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt); + this._invokeCurrZone = zoneSpec && (zoneSpec.onInvoke ? this._zone : parentDelegate._invokeCurrZone); + this._handleErrorZS = zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS); + this._handleErrorDlgt = zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt); + this._handleErrorCurrZone = zoneSpec && (zoneSpec.onHandleError ? this._zone : parentDelegate._handleErrorCurrZone); + this._scheduleTaskZS = zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS); + this._scheduleTaskDlgt = zoneSpec && (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt); + this._scheduleTaskCurrZone = zoneSpec && (zoneSpec.onScheduleTask ? this._zone : parentDelegate._scheduleTaskCurrZone); + this._invokeTaskZS = zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS); + this._invokeTaskDlgt = zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt); + this._invokeTaskCurrZone = zoneSpec && (zoneSpec.onInvokeTask ? this._zone : parentDelegate._invokeTaskCurrZone); + this._cancelTaskZS = zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS); + this._cancelTaskDlgt = zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt); + this._cancelTaskCurrZone = zoneSpec && (zoneSpec.onCancelTask ? this._zone : parentDelegate._cancelTaskCurrZone); + this._hasTaskZS = null; + this._hasTaskDlgt = null; + this._hasTaskDlgtOwner = null; + this._hasTaskCurrZone = null; + const zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask; + const parentHasTask = parentDelegate && parentDelegate._hasTaskZS; + if (zoneSpecHasTask || parentHasTask) { + // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such + // a case all task related interceptors must go through this ZD. We can't short circuit it. + this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS; + this._hasTaskDlgt = parentDelegate; + this._hasTaskDlgtOwner = this; + this._hasTaskCurrZone = this._zone; + if (!zoneSpec.onScheduleTask) { + this._scheduleTaskZS = DELEGATE_ZS; + this._scheduleTaskDlgt = parentDelegate; + this._scheduleTaskCurrZone = this._zone; + } + if (!zoneSpec.onInvokeTask) { + this._invokeTaskZS = DELEGATE_ZS; + this._invokeTaskDlgt = parentDelegate; + this._invokeTaskCurrZone = this._zone; + } + if (!zoneSpec.onCancelTask) { + this._cancelTaskZS = DELEGATE_ZS; + this._cancelTaskDlgt = parentDelegate; + this._cancelTaskCurrZone = this._zone; + } + } + } + fork(targetZone, zoneSpec) { + return this._forkZS ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) : new ZoneImpl(targetZone, zoneSpec); + } + intercept(targetZone, callback, source) { + return this._interceptZS ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) : callback; + } + invoke(targetZone, callback, applyThis, applyArgs, source) { + return this._invokeZS ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) : callback.apply(applyThis, applyArgs); + } + handleError(targetZone, error) { + return this._handleErrorZS ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) : true; + } + scheduleTask(targetZone, task) { + let returnTask = task; + if (this._scheduleTaskZS) { + if (this._hasTaskZS) { + returnTask._zoneDelegates.push(this._hasTaskDlgtOwner); + } + returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task); + if (!returnTask) returnTask = task; + } else { + if (task.scheduleFn) { + task.scheduleFn(task); + } else if (task.type == microTask) { + scheduleMicroTask(task); + } else { + throw new Error('Task is missing scheduleFn.'); + } + } + return returnTask; + } + invokeTask(targetZone, task, applyThis, applyArgs) { + return this._invokeTaskZS ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) : task.callback.apply(applyThis, applyArgs); + } + cancelTask(targetZone, task) { + let value; + if (this._cancelTaskZS) { + value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task); + } else { + if (!task.cancelFn) { + throw Error('Task is not cancelable'); + } + value = task.cancelFn(task); + } + return value; + } + hasTask(targetZone, isEmpty) { + // hasTask should not throw error so other ZoneDelegate + // can still trigger hasTask callback + try { + this._hasTaskZS && this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty); + } catch (err) { + this.handleError(targetZone, err); + } + } + // tslint:disable-next-line:require-internal-with-underscore + _updateTaskCount(type, count) { + const counts = this._taskCounts; + const prev = counts[type]; + const next = counts[type] = prev + count; + if (next < 0) { + throw new Error('More tasks executed then were scheduled.'); + } + if (prev == 0 || next == 0) { + const isEmpty = { + microTask: counts['microTask'] > 0, + macroTask: counts['macroTask'] > 0, + eventTask: counts['eventTask'] > 0, + change: type + }; + this.hasTask(this._zone, isEmpty); + } + } + } + class ZoneTask { + constructor(type, source, callback, options, scheduleFn, cancelFn) { + // tslint:disable-next-line:require-internal-with-underscore + this._zone = null; + this.runCount = 0; + // tslint:disable-next-line:require-internal-with-underscore + this._zoneDelegates = null; + // tslint:disable-next-line:require-internal-with-underscore + this._state = 'notScheduled'; + this.type = type; + this.source = source; + this.data = options; + this.scheduleFn = scheduleFn; + this.cancelFn = cancelFn; + if (!callback) { + throw new Error('callback is not defined'); + } + this.callback = callback; + const self = this; + // TODO: @JiaLiPassion options should have interface + if (type === eventTask && options && options.useG) { + this.invoke = ZoneTask.invokeTask; + } else { + this.invoke = function () { + return ZoneTask.invokeTask.call(global, self, this, arguments); + }; + } + } + static invokeTask(task, target, args) { + if (!task) { + task = this; + } + _numberOfNestedTaskFrames++; + try { + task.runCount++; + return task.zone.runTask(task, target, args); + } finally { + if (_numberOfNestedTaskFrames == 1) { + drainMicroTaskQueue(); + } + _numberOfNestedTaskFrames--; + } + } + get zone() { + return this._zone; + } + get state() { + return this._state; + } + cancelScheduleRequest() { + this._transitionTo(notScheduled, scheduling); + } + // tslint:disable-next-line:require-internal-with-underscore + _transitionTo(toState, fromState1, fromState2) { + if (this._state === fromState1 || this._state === fromState2) { + this._state = toState; + if (toState == notScheduled) { + this._zoneDelegates = null; + } + } else { + throw new Error(`${this.type} '${this.source}': can not transition to '${toState}', expecting state '${fromState1}'${fromState2 ? " or '" + fromState2 + "'" : ''}, was '${this._state}'.`); + } + } + toString() { + if (this.data && typeof this.data.handleId !== 'undefined') { + return this.data.handleId.toString(); + } else { + return Object.prototype.toString.call(this); + } + } + // add toJSON method to prevent cyclic error when + // call JSON.stringify(zoneTask) + toJSON() { + return { + type: this.type, + state: this.state, + source: this.source, + zone: this.zone.name, + runCount: this.runCount + }; + } + } + ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + /// MICROTASK QUEUE + ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + const symbolSetTimeout = __symbol__('setTimeout'); + const symbolPromise = __symbol__('Promise'); + const symbolThen = __symbol__('then'); + let _microTaskQueue = []; + let _isDrainingMicrotaskQueue = false; + let nativeMicroTaskQueuePromise; + function nativeScheduleMicroTask(func) { + if (!nativeMicroTaskQueuePromise) { + if (global[symbolPromise]) { + nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0); + } + } + if (nativeMicroTaskQueuePromise) { + let nativeThen = nativeMicroTaskQueuePromise[symbolThen]; + if (!nativeThen) { + // native Promise is not patchable, we need to use `then` directly + // issue 1078 + nativeThen = nativeMicroTaskQueuePromise['then']; + } + nativeThen.call(nativeMicroTaskQueuePromise, func); + } else { + global[symbolSetTimeout](func, 0); + } + } + function scheduleMicroTask(task) { + // if we are not running in any task, and there has not been anything scheduled + // we must bootstrap the initial task creation by manually scheduling the drain + if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) { + // We are not running in Task, so we need to kickstart the microtask queue. + nativeScheduleMicroTask(drainMicroTaskQueue); + } + task && _microTaskQueue.push(task); + } + function drainMicroTaskQueue() { + if (!_isDrainingMicrotaskQueue) { + _isDrainingMicrotaskQueue = true; + while (_microTaskQueue.length) { + const queue = _microTaskQueue; + _microTaskQueue = []; + for (let i = 0; i < queue.length; i++) { + const task = queue[i]; + try { + task.zone.runTask(task, null, null); + } catch (error) { + _api.onUnhandledError(error); + } + } + } + _api.microtaskDrainDone(); + _isDrainingMicrotaskQueue = false; + } + } + ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + /// BOOTSTRAP + ////////////////////////////////////////////////////// + ////////////////////////////////////////////////////// + const NO_ZONE = { + name: 'NO ZONE' + }; + const notScheduled = 'notScheduled', + scheduling = 'scheduling', + scheduled = 'scheduled', + running = 'running', + canceling = 'canceling', + unknown = 'unknown'; + const microTask = 'microTask', + macroTask = 'macroTask', + eventTask = 'eventTask'; + const patches = {}; + const _api = { + symbol: __symbol__, + currentZoneFrame: () => _currentZoneFrame, + onUnhandledError: noop, + microtaskDrainDone: noop, + scheduleMicroTask: scheduleMicroTask, + showUncaughtError: () => !ZoneImpl[__symbol__('ignoreConsoleErrorUncaughtError')], + patchEventTarget: () => [], + patchOnProperties: noop, + patchMethod: () => noop, + bindArguments: () => [], + patchThen: () => noop, + patchMacroTask: () => noop, + patchEventPrototype: () => noop, + isIEOrEdge: () => false, + getGlobalObjects: () => undefined, + ObjectDefineProperty: () => noop, + ObjectGetOwnPropertyDescriptor: () => undefined, + ObjectCreate: () => undefined, + ArraySlice: () => [], + patchClass: () => noop, + wrapWithCurrentZone: () => noop, + filterProperties: () => [], + attachOriginToPatched: () => noop, + _redefineProperty: () => noop, + patchCallbacks: () => noop, + nativeScheduleMicroTask: nativeScheduleMicroTask + }; + let _currentZoneFrame = { + parent: null, + zone: new ZoneImpl(null, null) + }; + let _currentTask = null; + let _numberOfNestedTaskFrames = 0; + function noop() {} + performanceMeasure('Zone', 'Zone'); + return ZoneImpl; +} +function loadZone() { + // if global['Zone'] already exists (maybe zone.js was already loaded or + // some other lib also registered a global object named Zone), we may need + // to throw an error, but sometimes user may not want this error. + // For example, + // we have two web pages, page1 includes zone.js, page2 doesn't. + // and the 1st time user load page1 and page2, everything work fine, + // but when user load page2 again, error occurs because global['Zone'] already exists. + // so we add a flag to let user choose whether to throw this error or not. + // By default, if existing Zone is from zone.js, we will not throw the error. + const global = globalThis; + const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true; + if (global['Zone'] && (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function')) { + throw new Error('Zone already loaded.'); + } + // Initialize global `Zone` constant. + global['Zone'] ??= initZone(); + return global['Zone']; +} + +/** + * Suppress closure compiler errors about unknown 'Zone' variable + * @fileoverview + * @suppress {undefinedVars,globalThis,missingRequire} + */ +// issue #989, to reduce bundle size, use short name +/** Object.getOwnPropertyDescriptor */ +const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +/** Object.defineProperty */ +const ObjectDefineProperty = Object.defineProperty; +/** Object.getPrototypeOf */ +const ObjectGetPrototypeOf = Object.getPrototypeOf; +/** Object.create */ +const ObjectCreate = Object.create; +/** Array.prototype.slice */ +const ArraySlice = Array.prototype.slice; +/** addEventListener string const */ +const ADD_EVENT_LISTENER_STR = 'addEventListener'; +/** removeEventListener string const */ +const REMOVE_EVENT_LISTENER_STR = 'removeEventListener'; +/** zoneSymbol addEventListener */ +const ZONE_SYMBOL_ADD_EVENT_LISTENER = __symbol__(ADD_EVENT_LISTENER_STR); +/** zoneSymbol removeEventListener */ +const ZONE_SYMBOL_REMOVE_EVENT_LISTENER = __symbol__(REMOVE_EVENT_LISTENER_STR); +/** true string const */ +const TRUE_STR = 'true'; +/** false string const */ +const FALSE_STR = 'false'; +/** Zone symbol prefix string const. */ +const ZONE_SYMBOL_PREFIX = __symbol__(''); +function wrapWithCurrentZone(callback, source) { + return Zone.current.wrap(callback, source); +} +function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) { + return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel); +} +const zoneSymbol = __symbol__; +const isWindowExists = typeof window !== 'undefined'; +const internalWindow = isWindowExists ? window : undefined; +const _global = isWindowExists && internalWindow || globalThis; +const REMOVE_ATTRIBUTE = 'removeAttribute'; +function bindArguments(args, source) { + for (let i = args.length - 1; i >= 0; i--) { + if (typeof args[i] === 'function') { + args[i] = wrapWithCurrentZone(args[i], source + '_' + i); + } + } + return args; +} +function patchPrototype(prototype, fnNames) { + const source = prototype.constructor['name']; + for (let i = 0; i < fnNames.length; i++) { + const name = fnNames[i]; + const delegate = prototype[name]; + if (delegate) { + const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name); + if (!isPropertyWritable(prototypeDesc)) { + continue; + } + prototype[name] = (delegate => { + const patched = function () { + return delegate.apply(this, bindArguments(arguments, source + '.' + name)); + }; + attachOriginToPatched(patched, delegate); + return patched; + })(delegate); + } + } +} +function isPropertyWritable(propertyDesc) { + if (!propertyDesc) { + return true; + } + if (propertyDesc.writable === false) { + return false; + } + return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined'); +} +const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope; +// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify +// this code. +const isNode = !('nw' in _global) && typeof _global.process !== 'undefined' && _global.process.toString() === '[object process]'; +const isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); +// we are in electron of nw, so we are both browser and nodejs +// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify +// this code. +const isMix = typeof _global.process !== 'undefined' && _global.process.toString() === '[object process]' && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); +const zoneSymbolEventNames$1 = {}; +const enableBeforeunloadSymbol = zoneSymbol('enable_beforeunload'); +const wrapFn = function (event) { + // https://github.com/angular/zone.js/issues/911, in IE, sometimes + // event will be undefined, so we need to use window.event + event = event || _global.event; + if (!event) { + return; + } + let eventNameSymbol = zoneSymbolEventNames$1[event.type]; + if (!eventNameSymbol) { + eventNameSymbol = zoneSymbolEventNames$1[event.type] = zoneSymbol('ON_PROPERTY' + event.type); + } + const target = this || event.target || _global; + const listener = target[eventNameSymbol]; + let result; + if (isBrowser && target === internalWindow && event.type === 'error') { + // window.onerror have different signature + // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror + // and onerror callback will prevent default when callback return true + const errorEvent = event; + result = listener && listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error); + if (result === true) { + event.preventDefault(); + } + } else { + result = listener && listener.apply(this, arguments); + if ( + // https://github.com/angular/angular/issues/47579 + // https://www.w3.org/TR/2011/WD-html5-20110525/history.html#beforeunloadevent + // This is the only specific case we should check for. The spec defines that the + // `returnValue` attribute represents the message to show the user. When the event + // is created, this attribute must be set to the empty string. + event.type === 'beforeunload' && + // To prevent any breaking changes resulting from this change, given that + // it was already causing a significant number of failures in G3, we have hidden + // that behavior behind a global configuration flag. Consumers can enable this + // flag explicitly if they want the `beforeunload` event to be handled as defined + // in the specification. + _global[enableBeforeunloadSymbol] && + // The IDL event definition is `attribute DOMString returnValue`, so we check whether + // `typeof result` is a string. + typeof result === 'string') { + event.returnValue = result; + } else if (result != undefined && !result) { + event.preventDefault(); + } + } + return result; +}; +function patchProperty(obj, prop, prototype) { + let desc = ObjectGetOwnPropertyDescriptor(obj, prop); + if (!desc && prototype) { + // when patch window object, use prototype to check prop exist or not + const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop); + if (prototypeDesc) { + desc = { + enumerable: true, + configurable: true + }; + } + } + // if the descriptor not exists or is not configurable + // just return + if (!desc || !desc.configurable) { + return; + } + const onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched'); + if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) { + return; + } + // A property descriptor cannot have getter/setter and be writable + // deleting the writable and value properties avoids this error: + // + // TypeError: property descriptors must not specify a value or be writable when a + // getter or setter has been specified + delete desc.writable; + delete desc.value; + const originalDescGet = desc.get; + const originalDescSet = desc.set; + // slice(2) cuz 'onclick' -> 'click', etc + const eventName = prop.slice(2); + let eventNameSymbol = zoneSymbolEventNames$1[eventName]; + if (!eventNameSymbol) { + eventNameSymbol = zoneSymbolEventNames$1[eventName] = zoneSymbol('ON_PROPERTY' + eventName); + } + desc.set = function (newValue) { + // in some of windows's onproperty callback, this is undefined + // so we need to check it + let target = this; + if (!target && obj === _global) { + target = _global; + } + if (!target) { + return; + } + const previousValue = target[eventNameSymbol]; + if (typeof previousValue === 'function') { + target.removeEventListener(eventName, wrapFn); + } + // issue #978, when onload handler was added before loading zone.js + // we should remove it with originalDescSet + originalDescSet && originalDescSet.call(target, null); + target[eventNameSymbol] = newValue; + if (typeof newValue === 'function') { + target.addEventListener(eventName, wrapFn, false); + } + }; + // The getter would return undefined for unassigned properties but the default value of an + // unassigned property is null + desc.get = function () { + // in some of windows's onproperty callback, this is undefined + // so we need to check it + let target = this; + if (!target && obj === _global) { + target = _global; + } + if (!target) { + return null; + } + const listener = target[eventNameSymbol]; + if (listener) { + return listener; + } else if (originalDescGet) { + // result will be null when use inline event attribute, + // such as + // because the onclick function is internal raw uncompiled handler + // the onclick will be evaluated when first time event was triggered or + // the property is accessed, https://github.com/angular/zone.js/issues/525 + // so we should use original native get to retrieve the handler + let value = originalDescGet.call(this); + if (value) { + desc.set.call(this, value); + if (typeof target[REMOVE_ATTRIBUTE] === 'function') { + target.removeAttribute(prop); + } + return value; + } + } + return null; + }; + ObjectDefineProperty(obj, prop, desc); + obj[onPropPatchedSymbol] = true; +} +function patchOnProperties(obj, properties, prototype) { + if (properties) { + for (let i = 0; i < properties.length; i++) { + patchProperty(obj, 'on' + properties[i], prototype); + } + } else { + const onProperties = []; + for (const prop in obj) { + if (prop.slice(0, 2) == 'on') { + onProperties.push(prop); + } + } + for (let j = 0; j < onProperties.length; j++) { + patchProperty(obj, onProperties[j], prototype); + } + } +} +const originalInstanceKey = zoneSymbol('originalInstance'); +// wrap some native API on `window` +function patchClass(className) { + const OriginalClass = _global[className]; + if (!OriginalClass) return; + // keep original class in global + _global[zoneSymbol(className)] = OriginalClass; + _global[className] = function () { + const a = bindArguments(arguments, className); + switch (a.length) { + case 0: + this[originalInstanceKey] = new OriginalClass(); + break; + case 1: + this[originalInstanceKey] = new OriginalClass(a[0]); + break; + case 2: + this[originalInstanceKey] = new OriginalClass(a[0], a[1]); + break; + case 3: + this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]); + break; + case 4: + this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]); + break; + default: + throw new Error('Arg list too long.'); + } + }; + // attach original delegate to patched function + attachOriginToPatched(_global[className], OriginalClass); + const instance = new OriginalClass(function () {}); + let prop; + for (prop in instance) { + // https://bugs.webkit.org/show_bug.cgi?id=44721 + if (className === 'XMLHttpRequest' && prop === 'responseBlob') continue; + (function (prop) { + if (typeof instance[prop] === 'function') { + _global[className].prototype[prop] = function () { + return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments); + }; + } else { + ObjectDefineProperty(_global[className].prototype, prop, { + set: function (fn) { + if (typeof fn === 'function') { + this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop); + // keep callback in wrapped function so we can + // use it in Function.prototype.toString to return + // the native one. + attachOriginToPatched(this[originalInstanceKey][prop], fn); + } else { + this[originalInstanceKey][prop] = fn; + } + }, + get: function () { + return this[originalInstanceKey][prop]; + } + }); + } + })(prop); + } + for (prop in OriginalClass) { + if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) { + _global[className][prop] = OriginalClass[prop]; + } + } +} +function patchMethod(target, name, patchFn) { + let proto = target; + while (proto && !proto.hasOwnProperty(name)) { + proto = ObjectGetPrototypeOf(proto); + } + if (!proto && target[name]) { + // somehow we did not find it, but we can see it. This happens on IE for Window properties. + proto = target; + } + const delegateName = zoneSymbol(name); + let delegate = null; + if (proto && (!(delegate = proto[delegateName]) || !proto.hasOwnProperty(delegateName))) { + delegate = proto[delegateName] = proto[name]; + // check whether proto[name] is writable + // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob + const desc = proto && ObjectGetOwnPropertyDescriptor(proto, name); + if (isPropertyWritable(desc)) { + const patchDelegate = patchFn(delegate, delegateName, name); + proto[name] = function () { + return patchDelegate(this, arguments); + }; + attachOriginToPatched(proto[name], delegate); + } + } + return delegate; +} +// TODO: @JiaLiPassion, support cancel task later if necessary +function patchMacroTask(obj, funcName, metaCreator) { + let setNative = null; + function scheduleTask(task) { + const data = task.data; + data.args[data.cbIdx] = function () { + task.invoke.apply(this, arguments); + }; + setNative.apply(data.target, data.args); + return task; + } + setNative = patchMethod(obj, funcName, delegate => function (self, args) { + const meta = metaCreator(self, args); + if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') { + return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask); + } else { + // cause an error by calling it directly. + return delegate.apply(self, args); + } + }); +} +function attachOriginToPatched(patched, original) { + patched[zoneSymbol('OriginalDelegate')] = original; +} +let isDetectedIEOrEdge = false; +let ieOrEdge = false; +function isIE() { + try { + const ua = internalWindow.navigator.userAgent; + if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) { + return true; + } + } catch (error) {} + return false; +} +function isIEOrEdge() { + if (isDetectedIEOrEdge) { + return ieOrEdge; + } + isDetectedIEOrEdge = true; + try { + const ua = internalWindow.navigator.userAgent; + if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) { + ieOrEdge = true; + } + } catch (error) {} + return ieOrEdge; +} +function isFunction(value) { + return typeof value === 'function'; +} +function isNumber(value) { + return typeof value === 'number'; +} + +/** + * @fileoverview + * @suppress {missingRequire} + */ +// Note that passive event listeners are now supported by most modern browsers, +// including Chrome, Firefox, Safari, and Edge. There's a pending change that +// would remove support for legacy browsers by zone.js. Removing `passiveSupported` +// from the codebase will reduce the final code size for existing apps that still use zone.js. +let passiveSupported = false; +if (typeof window !== 'undefined') { + try { + const options = Object.defineProperty({}, 'passive', { + get: function () { + passiveSupported = true; + } + }); + // Note: We pass the `options` object as the event handler too. This is not compatible with the + // signature of `addEventListener` or `removeEventListener` but enables us to remove the handler + // without an actual handler. + window.addEventListener('test', options, options); + window.removeEventListener('test', options, options); + } catch (err) { + passiveSupported = false; + } +} +// an identifier to tell ZoneTask do not create a new invoke closure +const OPTIMIZED_ZONE_EVENT_TASK_DATA = { + useG: true +}; +const zoneSymbolEventNames = {}; +const globalSources = {}; +const EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\w+)(true|false)$'); +const IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped'); +function prepareEventNames(eventName, eventNameToString) { + const falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR; + const trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR; + const symbol = ZONE_SYMBOL_PREFIX + falseEventName; + const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; + zoneSymbolEventNames[eventName] = {}; + zoneSymbolEventNames[eventName][FALSE_STR] = symbol; + zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; +} +function patchEventTarget(_global, api, apis, patchOptions) { + const ADD_EVENT_LISTENER = patchOptions && patchOptions.add || ADD_EVENT_LISTENER_STR; + const REMOVE_EVENT_LISTENER = patchOptions && patchOptions.rm || REMOVE_EVENT_LISTENER_STR; + const LISTENERS_EVENT_LISTENER = patchOptions && patchOptions.listeners || 'eventListeners'; + const REMOVE_ALL_LISTENERS_EVENT_LISTENER = patchOptions && patchOptions.rmAll || 'removeAllListeners'; + const zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER); + const ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':'; + const PREPEND_EVENT_LISTENER = 'prependListener'; + const PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':'; + const invokeTask = function (task, target, event) { + // for better performance, check isRemoved which is set + // by removeEventListener + if (task.isRemoved) { + return; + } + const delegate = task.callback; + if (typeof delegate === 'object' && delegate.handleEvent) { + // create the bind version of handleEvent when invoke + task.callback = event => delegate.handleEvent(event); + task.originalDelegate = delegate; + } + // invoke static task.invoke + // need to try/catch error here, otherwise, the error in one event listener + // will break the executions of the other event listeners. Also error will + // not remove the event listener when `once` options is true. + let error; + try { + task.invoke(task, target, [event]); + } catch (err) { + error = err; + } + const options = task.options; + if (options && typeof options === 'object' && options.once) { + // if options.once is true, after invoke once remove listener here + // only browser need to do this, nodejs eventEmitter will cal removeListener + // inside EventEmitter.once + const delegate = task.originalDelegate ? task.originalDelegate : task.callback; + target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate, options); + } + return error; + }; + function globalCallback(context, event, isCapture) { + // https://github.com/angular/zone.js/issues/911, in IE, sometimes + // event will be undefined, so we need to use window.event + event = event || _global.event; + if (!event) { + return; + } + // event.target is needed for Samsung TV and SourceBuffer + // || global is needed https://github.com/angular/zone.js/issues/190 + const target = context || event.target || _global; + const tasks = target[zoneSymbolEventNames[event.type][isCapture ? TRUE_STR : FALSE_STR]]; + if (tasks) { + const errors = []; + // invoke all tasks which attached to current target with given event.type and capture = false + // for performance concern, if task.length === 1, just invoke + if (tasks.length === 1) { + const err = invokeTask(tasks[0], target, event); + err && errors.push(err); + } else { + // https://github.com/angular/zone.js/issues/836 + // copy the tasks array before invoke, to avoid + // the callback will remove itself or other listener + const copyTasks = tasks.slice(); + for (let i = 0; i < copyTasks.length; i++) { + if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { + break; + } + const err = invokeTask(copyTasks[i], target, event); + err && errors.push(err); + } + } + // Since there is only one error, we don't need to schedule microTask + // to throw the error. + if (errors.length === 1) { + throw errors[0]; + } else { + for (let i = 0; i < errors.length; i++) { + const err = errors[i]; + api.nativeScheduleMicroTask(() => { + throw err; + }); + } + } + } + } + // global shared zoneAwareCallback to handle all event callback with capture = false + const globalZoneAwareCallback = function (event) { + return globalCallback(this, event, false); + }; + // global shared zoneAwareCallback to handle all event callback with capture = true + const globalZoneAwareCaptureCallback = function (event) { + return globalCallback(this, event, true); + }; + function patchEventTargetMethods(obj, patchOptions) { + if (!obj) { + return false; + } + let useGlobalCallback = true; + if (patchOptions && patchOptions.useG !== undefined) { + useGlobalCallback = patchOptions.useG; + } + const validateHandler = patchOptions && patchOptions.vh; + let checkDuplicate = true; + if (patchOptions && patchOptions.chkDup !== undefined) { + checkDuplicate = patchOptions.chkDup; + } + let returnTarget = false; + if (patchOptions && patchOptions.rt !== undefined) { + returnTarget = patchOptions.rt; + } + let proto = obj; + while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { + proto = ObjectGetPrototypeOf(proto); + } + if (!proto && obj[ADD_EVENT_LISTENER]) { + // somehow we did not find it, but we can see it. This happens on IE for Window properties. + proto = obj; + } + if (!proto) { + return false; + } + if (proto[zoneSymbolAddEventListener]) { + return false; + } + const eventNameToString = patchOptions && patchOptions.eventNameToString; + // We use a shared global `taskData` to pass data for `scheduleEventTask`, + // eliminating the need to create a new object solely for passing data. + // WARNING: This object has a static lifetime, meaning it is not created + // each time `addEventListener` is called. It is instantiated only once + // and captured by reference inside the `addEventListener` and + // `removeEventListener` functions. Do not add any new properties to this + // object, as doing so would necessitate maintaining the information + // between `addEventListener` calls. + const taskData = {}; + const nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; + const nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = proto[REMOVE_EVENT_LISTENER]; + const nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = proto[LISTENERS_EVENT_LISTENER]; + const nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; + let nativePrependEventListener; + if (patchOptions && patchOptions.prepend) { + nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] = proto[patchOptions.prepend]; + } + /** + * This util function will build an option object with passive option + * to handle all possible input from the user. + */ + function buildEventListenerOptions(options, passive) { + if (!passiveSupported && typeof options === 'object' && options) { + // doesn't support passive but user want to pass an object as options. + // this will not work on some old browser, so we just pass a boolean + // as useCapture parameter + return !!options.capture; + } + if (!passiveSupported || !passive) { + return options; + } + if (typeof options === 'boolean') { + return { + capture: options, + passive: true + }; + } + if (!options) { + return { + passive: true + }; + } + if (typeof options === 'object' && options.passive !== false) { + return { + ...options, + passive: true + }; + } + return options; + } + const customScheduleGlobal = function (task) { + // if there is already a task for the eventName + capture, + // just return, because we use the shared globalZoneAwareCallback here. + if (taskData.isExisting) { + return; + } + return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options); + }; + /** + * In the context of events and listeners, this function will be + * called at the end by `cancelTask`, which, in turn, calls `task.cancelFn`. + * Cancelling a task is primarily used to remove event listeners from + * the task target. + */ + const customCancelGlobal = function (task) { + // if task is not marked as isRemoved, this call is directly + // from Zone.prototype.cancelTask, we should remove the task + // from tasksList of target first + if (!task.isRemoved) { + const symbolEventNames = zoneSymbolEventNames[task.eventName]; + let symbolEventName; + if (symbolEventNames) { + symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR]; + } + const existingTasks = symbolEventName && task.target[symbolEventName]; + if (existingTasks) { + for (let i = 0; i < existingTasks.length; i++) { + const existingTask = existingTasks[i]; + if (existingTask === task) { + existingTasks.splice(i, 1); + // set isRemoved to data for faster invokeTask check + task.isRemoved = true; + if (task.removeAbortListener) { + task.removeAbortListener(); + task.removeAbortListener = null; + } + if (existingTasks.length === 0) { + // all tasks for the eventName + capture have gone, + // remove globalZoneAwareCallback and remove the task cache from target + task.allRemoved = true; + task.target[symbolEventName] = null; + } + break; + } + } + } + } + // if all tasks for the eventName + capture have gone, + // we will really remove the global event callback, + // if not, return + if (!task.allRemoved) { + return; + } + return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options); + }; + const customScheduleNonGlobal = function (task) { + return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); + }; + const customSchedulePrepend = function (task) { + return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); + }; + const customCancelNonGlobal = function (task) { + return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options); + }; + const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; + const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; + const compareTaskCallbackVsDelegate = function (task, delegate) { + const typeOfDelegate = typeof delegate; + return typeOfDelegate === 'function' && task.callback === delegate || typeOfDelegate === 'object' && task.originalDelegate === delegate; + }; + const compare = patchOptions && patchOptions.diff ? patchOptions.diff : compareTaskCallbackVsDelegate; + const unpatchedEvents = Zone[zoneSymbol('UNPATCHED_EVENTS')]; + const passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')]; + function copyEventListenerOptions(options) { + if (typeof options === 'object' && options !== null) { + // We need to destructure the target `options` object since it may + // be frozen or sealed (possibly provided implicitly by a third-party + // library), or its properties may be readonly. + const newOptions = { + ...options + }; + // The `signal` option was recently introduced, which caused regressions in + // third-party scenarios where `AbortController` was directly provided to + // `addEventListener` as options. For instance, in cases like + // `document.addEventListener('keydown', callback, abortControllerInstance)`, + // which is valid because `AbortController` includes a `signal` getter, spreading + // `{...options}` wouldn't copy the `signal`. Additionally, using `Object.create` + // isn't feasible since `AbortController` is a built-in object type, and attempting + // to create a new object directly with it as the prototype might result in + // unexpected behavior. + if (options.signal) { + newOptions.signal = options.signal; + } + return newOptions; + } + return options; + } + const makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget = false, prepend = false) { + return function () { + const target = this || _global; + let eventName = arguments[0]; + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + let delegate = arguments[1]; + if (!delegate) { + return nativeListener.apply(this, arguments); + } + if (isNode && eventName === 'uncaughtException') { + // don't patch uncaughtException of nodejs to prevent endless loop + return nativeListener.apply(this, arguments); + } + // don't create the bind delegate function for handleEvent + // case here to improve addEventListener performance + // we will create the bind delegate when invoke + let isHandleEvent = false; + if (typeof delegate !== 'function') { + if (!delegate.handleEvent) { + return nativeListener.apply(this, arguments); + } + isHandleEvent = true; + } + if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { + return; + } + const passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1; + const options = copyEventListenerOptions(buildEventListenerOptions(arguments[2], passive)); + const signal = options?.signal; + if (signal?.aborted) { + // the signal is an aborted one, just return without attaching the event listener. + return; + } + if (unpatchedEvents) { + // check unpatched list + for (let i = 0; i < unpatchedEvents.length; i++) { + if (eventName === unpatchedEvents[i]) { + if (passive) { + return nativeListener.call(target, eventName, delegate, options); + } else { + return nativeListener.apply(this, arguments); + } + } + } + } + const capture = !options ? false : typeof options === 'boolean' ? true : options.capture; + const once = options && typeof options === 'object' ? options.once : false; + const zone = Zone.current; + let symbolEventNames = zoneSymbolEventNames[eventName]; + if (!symbolEventNames) { + prepareEventNames(eventName, eventNameToString); + symbolEventNames = zoneSymbolEventNames[eventName]; + } + const symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; + let existingTasks = target[symbolEventName]; + let isExisting = false; + if (existingTasks) { + // already have task registered + isExisting = true; + if (checkDuplicate) { + for (let i = 0; i < existingTasks.length; i++) { + if (compare(existingTasks[i], delegate)) { + // same callback, same capture, same event name, just return + return; + } + } + } + } else { + existingTasks = target[symbolEventName] = []; + } + let source; + const constructorName = target.constructor['name']; + const targetSource = globalSources[constructorName]; + if (targetSource) { + source = targetSource[eventName]; + } + if (!source) { + source = constructorName + addSource + (eventNameToString ? eventNameToString(eventName) : eventName); + } + // In the code below, `options` should no longer be reassigned; instead, it + // should only be mutated. This is because we pass that object to the native + // `addEventListener`. + // It's generally recommended to use the same object reference for options. + // This ensures consistency and avoids potential issues. + taskData.options = options; + if (once) { + // When using `addEventListener` with the `once` option, we don't pass + // the `once` option directly to the native `addEventListener` method. + // Instead, we keep the `once` setting and handle it ourselves. + taskData.options.once = false; + } + taskData.target = target; + taskData.capture = capture; + taskData.eventName = eventName; + taskData.isExisting = isExisting; + const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined; + // keep taskData into data to allow onScheduleEventTask to access the task information + if (data) { + data.taskData = taskData; + } + if (signal) { + // When using `addEventListener` with the `signal` option, we don't pass + // the `signal` option directly to the native `addEventListener` method. + // Instead, we keep the `signal` setting and handle it ourselves. + taskData.options.signal = undefined; + } + // The `scheduleEventTask` function will ultimately call `customScheduleGlobal`, + // which in turn calls the native `addEventListener`. This is why `taskData.options` + // is updated before scheduling the task, as `customScheduleGlobal` uses + // `taskData.options` to pass it to the native `addEventListener`. + const task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); + if (signal) { + // after task is scheduled, we need to store the signal back to task.options + taskData.options.signal = signal; + // Wrapping `task` in a weak reference would not prevent memory leaks. Weak references are + // primarily used for preventing strong references cycles. `onAbort` is always reachable + // as it's an event listener, so its closure retains a strong reference to the `task`. + const onAbort = () => task.zone.cancelTask(task); + nativeListener.call(signal, 'abort', onAbort, { + once: true + }); + // We need to remove the `abort` listener when the event listener is going to be removed, + // as it creates a closure that captures `task`. This closure retains a reference to the + // `task` object even after it goes out of scope, preventing `task` from being garbage + // collected. + task.removeAbortListener = () => signal.removeEventListener('abort', onAbort); + } + // should clear taskData.target to avoid memory leak + // issue, https://github.com/angular/angular/issues/20442 + taskData.target = null; + // need to clear up taskData because it is a global object + if (data) { + data.taskData = null; + } + // have to save those information to task in case + // application may call task.zone.cancelTask() directly + if (once) { + taskData.options.once = true; + } + if (!(!passiveSupported && typeof task.options === 'boolean')) { + // if not support passive, and we pass an option object + // to addEventListener, we should save the options to task + task.options = options; + } + task.target = target; + task.capture = capture; + task.eventName = eventName; + if (isHandleEvent) { + // save original delegate for compare to check duplicate + task.originalDelegate = delegate; + } + if (!prepend) { + existingTasks.push(task); + } else { + existingTasks.unshift(task); + } + if (returnTarget) { + return target; + } + }; + }; + proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget); + if (nativePrependEventListener) { + proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true); + } + proto[REMOVE_EVENT_LISTENER] = function () { + const target = this || _global; + let eventName = arguments[0]; + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + const options = arguments[2]; + const capture = !options ? false : typeof options === 'boolean' ? true : options.capture; + const delegate = arguments[1]; + if (!delegate) { + return nativeRemoveEventListener.apply(this, arguments); + } + if (validateHandler && !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { + return; + } + const symbolEventNames = zoneSymbolEventNames[eventName]; + let symbolEventName; + if (symbolEventNames) { + symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; + } + const existingTasks = symbolEventName && target[symbolEventName]; + // `existingTasks` may not exist if the `addEventListener` was called before + // it was patched by zone.js. Please refer to the attached issue for + // clarification, particularly after the `if` condition, before calling + // the native `removeEventListener`. + if (existingTasks) { + for (let i = 0; i < existingTasks.length; i++) { + const existingTask = existingTasks[i]; + if (compare(existingTask, delegate)) { + existingTasks.splice(i, 1); + // set isRemoved to data for faster invokeTask check + existingTask.isRemoved = true; + if (existingTasks.length === 0) { + // all tasks for the eventName + capture have gone, + // remove globalZoneAwareCallback and remove the task cache from target + existingTask.allRemoved = true; + target[symbolEventName] = null; + // in the target, we have an event listener which is added by on_property + // such as target.onclick = function() {}, so we need to clear this internal + // property too if all delegates with capture=false were removed + // https:// github.com/angular/angular/issues/31643 + // https://github.com/angular/angular/issues/54581 + if (!capture && typeof eventName === 'string') { + const onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName; + target[onPropertySymbol] = null; + } + } + // In all other conditions, when `addEventListener` is called after being + // patched by zone.js, we would always find an event task on the `EventTarget`. + // This will trigger `cancelFn` on the `existingTask`, leading to `customCancelGlobal`, + // which ultimately removes an event listener and cleans up the abort listener + // (if an `AbortSignal` was provided when scheduling a task). + existingTask.zone.cancelTask(existingTask); + if (returnTarget) { + return target; + } + return; + } + } + } + // https://github.com/angular/zone.js/issues/930 + // We may encounter a situation where the `addEventListener` was + // called on the event target before zone.js is loaded, resulting + // in no task being stored on the event target due to its invocation + // of the native implementation. In this scenario, we simply need to + // invoke the native `removeEventListener`. + return nativeRemoveEventListener.apply(this, arguments); + }; + proto[LISTENERS_EVENT_LISTENER] = function () { + const target = this || _global; + let eventName = arguments[0]; + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + const listeners = []; + const tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName); + for (let i = 0; i < tasks.length; i++) { + const task = tasks[i]; + let delegate = task.originalDelegate ? task.originalDelegate : task.callback; + listeners.push(delegate); + } + return listeners; + }; + proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () { + const target = this || _global; + let eventName = arguments[0]; + if (!eventName) { + const keys = Object.keys(target); + for (let i = 0; i < keys.length; i++) { + const prop = keys[i]; + const match = EVENT_NAME_SYMBOL_REGX.exec(prop); + let evtName = match && match[1]; + // in nodejs EventEmitter, removeListener event is + // used for monitoring the removeListener call, + // so just keep removeListener eventListener until + // all other eventListeners are removed + if (evtName && evtName !== 'removeListener') { + this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName); + } + } + // remove removeListener listener finally + this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener'); + } else { + if (patchOptions && patchOptions.transferEventName) { + eventName = patchOptions.transferEventName(eventName); + } + const symbolEventNames = zoneSymbolEventNames[eventName]; + if (symbolEventNames) { + const symbolEventName = symbolEventNames[FALSE_STR]; + const symbolCaptureEventName = symbolEventNames[TRUE_STR]; + const tasks = target[symbolEventName]; + const captureTasks = target[symbolCaptureEventName]; + if (tasks) { + const removeTasks = tasks.slice(); + for (let i = 0; i < removeTasks.length; i++) { + const task = removeTasks[i]; + let delegate = task.originalDelegate ? task.originalDelegate : task.callback; + this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); + } + } + if (captureTasks) { + const removeTasks = captureTasks.slice(); + for (let i = 0; i < removeTasks.length; i++) { + const task = removeTasks[i]; + let delegate = task.originalDelegate ? task.originalDelegate : task.callback; + this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); + } + } + } + } + if (returnTarget) { + return this; + } + }; + // for native toString patch + attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); + attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); + if (nativeRemoveAllListeners) { + attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); + } + if (nativeListeners) { + attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); + } + return true; + } + let results = []; + for (let i = 0; i < apis.length; i++) { + results[i] = patchEventTargetMethods(apis[i], patchOptions); + } + return results; +} +function findEventTasks(target, eventName) { + if (!eventName) { + const foundTasks = []; + for (let prop in target) { + const match = EVENT_NAME_SYMBOL_REGX.exec(prop); + let evtName = match && match[1]; + if (evtName && (!eventName || evtName === eventName)) { + const tasks = target[prop]; + if (tasks) { + for (let i = 0; i < tasks.length; i++) { + foundTasks.push(tasks[i]); + } + } + } + } + return foundTasks; + } + let symbolEventName = zoneSymbolEventNames[eventName]; + if (!symbolEventName) { + prepareEventNames(eventName); + symbolEventName = zoneSymbolEventNames[eventName]; + } + const captureFalseTasks = target[symbolEventName[FALSE_STR]]; + const captureTrueTasks = target[symbolEventName[TRUE_STR]]; + if (!captureFalseTasks) { + return captureTrueTasks ? captureTrueTasks.slice() : []; + } else { + return captureTrueTasks ? captureFalseTasks.concat(captureTrueTasks) : captureFalseTasks.slice(); + } +} +function patchEventPrototype(global, api) { + const Event = global['Event']; + if (Event && Event.prototype) { + api.patchMethod(Event.prototype, 'stopImmediatePropagation', delegate => function (self, args) { + self[IMMEDIATE_PROPAGATION_SYMBOL] = true; + // we need to call the native stopImmediatePropagation + // in case in some hybrid application, some part of + // application will be controlled by zone, some are not + delegate && delegate.apply(self, args); + }); + } +} + +/** + * @fileoverview + * @suppress {missingRequire} + */ +function patchQueueMicrotask(global, api) { + api.patchMethod(global, 'queueMicrotask', delegate => { + return function (self, args) { + Zone.current.scheduleMicroTask('queueMicrotask', args[0]); + }; + }); +} + +/** + * @fileoverview + * @suppress {missingRequire} + */ +const taskSymbol = zoneSymbol('zoneTask'); +function patchTimer(window, setName, cancelName, nameSuffix) { + let setNative = null; + let clearNative = null; + setName += nameSuffix; + cancelName += nameSuffix; + const tasksByHandleId = {}; + function scheduleTask(task) { + const data = task.data; + data.args[0] = function () { + return task.invoke.apply(this, arguments); + }; + const handleOrId = setNative.apply(window, data.args); + // Whlist on Node.js when get can the ID by using `[Symbol.toPrimitive]()` we do + // to this so that we do not cause potentally leaks when using `setTimeout` + // since this can be periodic when using `.refresh`. + if (isNumber(handleOrId)) { + data.handleId = handleOrId; + } else { + data.handle = handleOrId; + // On Node.js a timeout and interval can be restarted over and over again by using the `.refresh` method. + data.isRefreshable = isFunction(handleOrId.refresh); + } + return task; + } + function clearTask(task) { + const { + handle, + handleId + } = task.data; + return clearNative.call(window, handle ?? handleId); + } + setNative = patchMethod(window, setName, delegate => function (self, args) { + if (isFunction(args[0])) { + const options = { + isRefreshable: false, + isPeriodic: nameSuffix === 'Interval', + delay: nameSuffix === 'Timeout' || nameSuffix === 'Interval' ? args[1] || 0 : undefined, + args: args + }; + const callback = args[0]; + args[0] = function timer() { + try { + return callback.apply(this, arguments); + } finally { + // issue-934, task will be cancelled + // even it is a periodic task such as + // setInterval + // https://github.com/angular/angular/issues/40387 + // Cleanup tasksByHandleId should be handled before scheduleTask + // Since some zoneSpec may intercept and doesn't trigger + // scheduleFn(scheduleTask) provided here. + const { + handle, + handleId, + isPeriodic, + isRefreshable + } = options; + if (!isPeriodic && !isRefreshable) { + if (handleId) { + // in non-nodejs env, we remove timerId + // from local cache + delete tasksByHandleId[handleId]; + } else if (handle) { + // Node returns complex objects as handleIds + // we remove task reference from timer object + handle[taskSymbol] = null; + } + } + } + }; + const task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask); + if (!task) { + return task; + } + // Node.js must additionally support the ref and unref functions. + const { + handleId, + handle, + isRefreshable, + isPeriodic + } = task.data; + if (handleId) { + // for non nodejs env, we save handleId: task + // mapping in local cache for clearTimeout + tasksByHandleId[handleId] = task; + } else if (handle) { + // for nodejs env, we save task + // reference in timerId Object for clearTimeout + handle[taskSymbol] = task; + if (isRefreshable && !isPeriodic) { + const originalRefresh = handle.refresh; + handle.refresh = function () { + const { + zone, + state + } = task; + if (state === 'notScheduled') { + task._state = 'scheduled'; + zone._updateTaskCount(task, 1); + } else if (state === 'running') { + task._state = 'scheduling'; + } + return originalRefresh.call(this); + }; + } + } + return handle ?? handleId ?? task; + } else { + // cause an error by calling it directly. + return delegate.apply(window, args); + } + }); + clearNative = patchMethod(window, cancelName, delegate => function (self, args) { + const id = args[0]; + let task; + if (isNumber(id)) { + // non nodejs env. + task = tasksByHandleId[id]; + delete tasksByHandleId[id]; + } else { + // nodejs env ?? other environments. + task = id?.[taskSymbol]; + if (task) { + id[taskSymbol] = null; + } else { + task = id; + } + } + if (task?.type) { + if (task.cancelFn) { + // Do not cancel already canceled functions + task.zone.cancelTask(task); + } + } else { + // cause an error by calling it directly. + delegate.apply(window, args); + } + }); +} +function patchCustomElements(_global, api) { + const { + isBrowser, + isMix + } = api.getGlobalObjects(); + if (!isBrowser && !isMix || !_global['customElements'] || !('customElements' in _global)) { + return; + } + // https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-lifecycle-callbacks + const callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback', 'formAssociatedCallback', 'formDisabledCallback', 'formResetCallback', 'formStateRestoreCallback']; + api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks); +} +function eventTargetPatch(_global, api) { + if (Zone[api.symbol('patchEventTarget')]) { + // EventTarget is already patched. + return; + } + const { + eventNames, + zoneSymbolEventNames, + TRUE_STR, + FALSE_STR, + ZONE_SYMBOL_PREFIX + } = api.getGlobalObjects(); + // predefine all __zone_symbol__ + eventName + true/false string + for (let i = 0; i < eventNames.length; i++) { + const eventName = eventNames[i]; + const falseEventName = eventName + FALSE_STR; + const trueEventName = eventName + TRUE_STR; + const symbol = ZONE_SYMBOL_PREFIX + falseEventName; + const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; + zoneSymbolEventNames[eventName] = {}; + zoneSymbolEventNames[eventName][FALSE_STR] = symbol; + zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; + } + const EVENT_TARGET = _global['EventTarget']; + if (!EVENT_TARGET || !EVENT_TARGET.prototype) { + return; + } + api.patchEventTarget(_global, api, [EVENT_TARGET && EVENT_TARGET.prototype]); + return true; +} +function patchEvent(global, api) { + api.patchEventPrototype(global, api); +} + +/** + * @fileoverview + * @suppress {globalThis} + */ +function filterProperties(target, onProperties, ignoreProperties) { + if (!ignoreProperties || ignoreProperties.length === 0) { + return onProperties; + } + const tip = ignoreProperties.filter(ip => ip.target === target); + if (!tip || tip.length === 0) { + return onProperties; + } + const targetIgnoreProperties = tip[0].ignoreProperties; + return onProperties.filter(op => targetIgnoreProperties.indexOf(op) === -1); +} +function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) { + // check whether target is available, sometimes target will be undefined + // because different browser or some 3rd party plugin. + if (!target) { + return; + } + const filteredProperties = filterProperties(target, onProperties, ignoreProperties); + patchOnProperties(target, filteredProperties, prototype); +} +/** + * Get all event name properties which the event name startsWith `on` + * from the target object itself, inherited properties are not considered. + */ +function getOnEventNames(target) { + return Object.getOwnPropertyNames(target).filter(name => name.startsWith('on') && name.length > 2).map(name => name.substring(2)); +} +function propertyDescriptorPatch(api, _global) { + if (isNode && !isMix) { + return; + } + if (Zone[api.symbol('patchEvents')]) { + // events are already been patched by legacy patch. + return; + } + const ignoreProperties = _global['__Zone_ignore_on_properties']; + // for browsers that we can patch the descriptor: Chrome & Firefox + let patchTargets = []; + if (isBrowser) { + const internalWindow = window; + patchTargets = patchTargets.concat(['Document', 'SVGElement', 'Element', 'HTMLElement', 'HTMLBodyElement', 'HTMLMediaElement', 'HTMLFrameSetElement', 'HTMLFrameElement', 'HTMLIFrameElement', 'HTMLMarqueeElement', 'Worker']); + const ignoreErrorProperties = isIE() ? [{ + target: internalWindow, + ignoreProperties: ['error'] + }] : []; + // in IE/Edge, onProp not exist in window object, but in WindowPrototype + // so we need to pass WindowPrototype to check onProp exist or not + patchFilteredProperties(internalWindow, getOnEventNames(internalWindow), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow)); + } + patchTargets = patchTargets.concat(['XMLHttpRequest', 'XMLHttpRequestEventTarget', 'IDBIndex', 'IDBRequest', 'IDBOpenDBRequest', 'IDBDatabase', 'IDBTransaction', 'IDBCursor', 'WebSocket']); + for (let i = 0; i < patchTargets.length; i++) { + const target = _global[patchTargets[i]]; + target && target.prototype && patchFilteredProperties(target.prototype, getOnEventNames(target.prototype), ignoreProperties); + } +} + +/** + * @fileoverview + * @suppress {missingRequire} + */ +function patchBrowser(Zone) { + Zone.__load_patch('legacy', global => { + const legacyPatch = global[Zone.__symbol__('legacyPatch')]; + if (legacyPatch) { + legacyPatch(); + } + }); + Zone.__load_patch('timers', global => { + const set = 'set'; + const clear = 'clear'; + patchTimer(global, set, clear, 'Timeout'); + patchTimer(global, set, clear, 'Interval'); + patchTimer(global, set, clear, 'Immediate'); + }); + Zone.__load_patch('requestAnimationFrame', global => { + patchTimer(global, 'request', 'cancel', 'AnimationFrame'); + patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame'); + patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame'); + }); + Zone.__load_patch('blocking', (global, Zone) => { + const blockingMethods = ['alert', 'prompt', 'confirm']; + for (let i = 0; i < blockingMethods.length; i++) { + const name = blockingMethods[i]; + patchMethod(global, name, (delegate, symbol, name) => { + return function (s, args) { + return Zone.current.run(delegate, global, args, name); + }; + }); + } + }); + Zone.__load_patch('EventTarget', (global, Zone, api) => { + patchEvent(global, api); + eventTargetPatch(global, api); + // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener + const XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget']; + if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) { + api.patchEventTarget(global, api, [XMLHttpRequestEventTarget.prototype]); + } + }); + Zone.__load_patch('MutationObserver', (global, Zone, api) => { + patchClass('MutationObserver'); + patchClass('WebKitMutationObserver'); + }); + Zone.__load_patch('IntersectionObserver', (global, Zone, api) => { + patchClass('IntersectionObserver'); + }); + Zone.__load_patch('FileReader', (global, Zone, api) => { + patchClass('FileReader'); + }); + Zone.__load_patch('on_property', (global, Zone, api) => { + propertyDescriptorPatch(api, global); + }); + Zone.__load_patch('customElements', (global, Zone, api) => { + patchCustomElements(global, api); + }); + Zone.__load_patch('XHR', (global, Zone) => { + // Treat XMLHttpRequest as a macrotask. + patchXHR(global); + const XHR_TASK = zoneSymbol('xhrTask'); + const XHR_SYNC = zoneSymbol('xhrSync'); + const XHR_LISTENER = zoneSymbol('xhrListener'); + const XHR_SCHEDULED = zoneSymbol('xhrScheduled'); + const XHR_URL = zoneSymbol('xhrURL'); + const XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled'); + function patchXHR(window) { + const XMLHttpRequest = window['XMLHttpRequest']; + if (!XMLHttpRequest) { + // XMLHttpRequest is not available in service worker + return; + } + const XMLHttpRequestPrototype = XMLHttpRequest.prototype; + function findPendingTask(target) { + return target[XHR_TASK]; + } + let oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; + let oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; + if (!oriAddListener) { + const XMLHttpRequestEventTarget = window['XMLHttpRequestEventTarget']; + if (XMLHttpRequestEventTarget) { + const XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget.prototype; + oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; + oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; + } + } + const READY_STATE_CHANGE = 'readystatechange'; + const SCHEDULED = 'scheduled'; + function scheduleTask(task) { + const data = task.data; + const target = data.target; + target[XHR_SCHEDULED] = false; + target[XHR_ERROR_BEFORE_SCHEDULED] = false; + // remove existing event listener + const listener = target[XHR_LISTENER]; + if (!oriAddListener) { + oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER]; + oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; + } + if (listener) { + oriRemoveListener.call(target, READY_STATE_CHANGE, listener); + } + const newListener = target[XHR_LISTENER] = () => { + if (target.readyState === target.DONE) { + // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with + // readyState=4 multiple times, so we need to check task state here + if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) { + // check whether the xhr has registered onload listener + // if that is the case, the task should invoke after all + // onload listeners finish. + // Also if the request failed without response (status = 0), the load event handler + // will not be triggered, in that case, we should also invoke the placeholder callback + // to close the XMLHttpRequest::send macroTask. + // https://github.com/angular/angular/issues/38795 + const loadTasks = target[Zone.__symbol__('loadfalse')]; + if (target.status !== 0 && loadTasks && loadTasks.length > 0) { + const oriInvoke = task.invoke; + task.invoke = function () { + // need to load the tasks again, because in other + // load listener, they may remove themselves + const loadTasks = target[Zone.__symbol__('loadfalse')]; + for (let i = 0; i < loadTasks.length; i++) { + if (loadTasks[i] === task) { + loadTasks.splice(i, 1); + } + } + if (!data.aborted && task.state === SCHEDULED) { + oriInvoke.call(task); + } + }; + loadTasks.push(task); + } else { + task.invoke(); + } + } else if (!data.aborted && target[XHR_SCHEDULED] === false) { + // error occurs when xhr.send() + target[XHR_ERROR_BEFORE_SCHEDULED] = true; + } + } + }; + oriAddListener.call(target, READY_STATE_CHANGE, newListener); + const storedTask = target[XHR_TASK]; + if (!storedTask) { + target[XHR_TASK] = task; + } + sendNative.apply(target, data.args); + target[XHR_SCHEDULED] = true; + return task; + } + function placeholderCallback() {} + function clearTask(task) { + const data = task.data; + // Note - ideally, we would call data.target.removeEventListener here, but it's too late + // to prevent it from firing. So instead, we store info for the event listener. + data.aborted = true; + return abortNative.apply(data.target, data.args); + } + const openNative = patchMethod(XMLHttpRequestPrototype, 'open', () => function (self, args) { + self[XHR_SYNC] = args[2] == false; + self[XHR_URL] = args[1]; + return openNative.apply(self, args); + }); + const XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send'; + const fetchTaskAborting = zoneSymbol('fetchTaskAborting'); + const fetchTaskScheduling = zoneSymbol('fetchTaskScheduling'); + const sendNative = patchMethod(XMLHttpRequestPrototype, 'send', () => function (self, args) { + if (Zone.current[fetchTaskScheduling] === true) { + // a fetch is scheduling, so we are using xhr to polyfill fetch + // and because we already schedule macroTask for fetch, we should + // not schedule a macroTask for xhr again + return sendNative.apply(self, args); + } + if (self[XHR_SYNC]) { + // if the XHR is sync there is no task to schedule, just execute the code. + return sendNative.apply(self, args); + } else { + const options = { + target: self, + url: self[XHR_URL], + isPeriodic: false, + args: args, + aborted: false + }; + const task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask); + if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted && task.state === SCHEDULED) { + // xhr request throw error when send + // we should invoke task instead of leaving a scheduled + // pending macroTask + task.invoke(); + } + } + }); + const abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', () => function (self, args) { + const task = findPendingTask(self); + if (task && typeof task.type == 'string') { + // If the XHR has already completed, do nothing. + // If the XHR has already been aborted, do nothing. + // Fix #569, call abort multiple times before done will cause + // macroTask task count be negative number + if (task.cancelFn == null || task.data && task.data.aborted) { + return; + } + task.zone.cancelTask(task); + } else if (Zone.current[fetchTaskAborting] === true) { + // the abort is called from fetch polyfill, we need to call native abort of XHR. + return abortNative.apply(self, args); + } + // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no + // task + // to cancel. Do nothing. + }); + } + }); + Zone.__load_patch('geolocation', global => { + /// GEO_LOCATION + if (global['navigator'] && global['navigator'].geolocation) { + patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']); + } + }); + Zone.__load_patch('PromiseRejectionEvent', (global, Zone) => { + // handle unhandled promise rejection + function findPromiseRejectionHandler(evtName) { + return function (e) { + const eventTasks = findEventTasks(global, evtName); + eventTasks.forEach(eventTask => { + // windows has added unhandledrejection event listener + // trigger the event listener + const PromiseRejectionEvent = global['PromiseRejectionEvent']; + if (PromiseRejectionEvent) { + const evt = new PromiseRejectionEvent(evtName, { + promise: e.promise, + reason: e.rejection + }); + eventTask.invoke(evt); + } + }); + }; + } + if (global['PromiseRejectionEvent']) { + Zone[zoneSymbol('unhandledPromiseRejectionHandler')] = findPromiseRejectionHandler('unhandledrejection'); + Zone[zoneSymbol('rejectionHandledHandler')] = findPromiseRejectionHandler('rejectionhandled'); + } + }); + Zone.__load_patch('queueMicrotask', (global, Zone, api) => { + patchQueueMicrotask(global, api); + }); +} +function patchPromise(Zone) { + Zone.__load_patch('ZoneAwarePromise', (global, Zone, api) => { + const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + const ObjectDefineProperty = Object.defineProperty; + function readableObjectToString(obj) { + if (obj && obj.toString === Object.prototype.toString) { + const className = obj.constructor && obj.constructor.name; + return (className ? className : '') + ': ' + JSON.stringify(obj); + } + return obj ? obj.toString() : Object.prototype.toString.call(obj); + } + const __symbol__ = api.symbol; + const _uncaughtPromiseErrors = []; + const isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] !== false; + const symbolPromise = __symbol__('Promise'); + const symbolThen = __symbol__('then'); + const creationTrace = '__creationTrace__'; + api.onUnhandledError = e => { + if (api.showUncaughtError()) { + const rejection = e && e.rejection; + if (rejection) { + console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined); + } else { + console.error(e); + } + } + }; + api.microtaskDrainDone = () => { + while (_uncaughtPromiseErrors.length) { + const uncaughtPromiseError = _uncaughtPromiseErrors.shift(); + try { + uncaughtPromiseError.zone.runGuarded(() => { + if (uncaughtPromiseError.throwOriginal) { + throw uncaughtPromiseError.rejection; + } + throw uncaughtPromiseError; + }); + } catch (error) { + handleUnhandledRejection(error); + } + } + }; + const UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler'); + function handleUnhandledRejection(e) { + api.onUnhandledError(e); + try { + const handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL]; + if (typeof handler === 'function') { + handler.call(this, e); + } + } catch (err) {} + } + function isThenable(value) { + return value && value.then; + } + function forwardResolution(value) { + return value; + } + function forwardRejection(rejection) { + return ZoneAwarePromise.reject(rejection); + } + const symbolState = __symbol__('state'); + const symbolValue = __symbol__('value'); + const symbolFinally = __symbol__('finally'); + const symbolParentPromiseValue = __symbol__('parentPromiseValue'); + const symbolParentPromiseState = __symbol__('parentPromiseState'); + const source = 'Promise.then'; + const UNRESOLVED = null; + const RESOLVED = true; + const REJECTED = false; + const REJECTED_NO_CATCH = 0; + function makeResolver(promise, state) { + return v => { + try { + resolvePromise(promise, state, v); + } catch (err) { + resolvePromise(promise, false, err); + } + // Do not return value or you will break the Promise spec. + }; + } + const once = function () { + let wasCalled = false; + return function wrapper(wrappedFunction) { + return function () { + if (wasCalled) { + return; + } + wasCalled = true; + wrappedFunction.apply(null, arguments); + }; + }; + }; + const TYPE_ERROR = 'Promise resolved with itself'; + const CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace'); + // Promise Resolution + function resolvePromise(promise, state, value) { + const onceWrapper = once(); + if (promise === value) { + throw new TypeError(TYPE_ERROR); + } + if (promise[symbolState] === UNRESOLVED) { + // should only get value.then once based on promise spec. + let then = null; + try { + if (typeof value === 'object' || typeof value === 'function') { + then = value && value.then; + } + } catch (err) { + onceWrapper(() => { + resolvePromise(promise, false, err); + })(); + return promise; + } + // if (value instanceof ZoneAwarePromise) { + if (state !== REJECTED && value instanceof ZoneAwarePromise && value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) && value[symbolState] !== UNRESOLVED) { + clearRejectedNoCatch(value); + resolvePromise(promise, value[symbolState], value[symbolValue]); + } else if (state !== REJECTED && typeof then === 'function') { + try { + then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false))); + } catch (err) { + onceWrapper(() => { + resolvePromise(promise, false, err); + })(); + } + } else { + promise[symbolState] = state; + const queue = promise[symbolValue]; + promise[symbolValue] = value; + if (promise[symbolFinally] === symbolFinally) { + // the promise is generated by Promise.prototype.finally + if (state === RESOLVED) { + // the state is resolved, should ignore the value + // and use parent promise value + promise[symbolState] = promise[symbolParentPromiseState]; + promise[symbolValue] = promise[symbolParentPromiseValue]; + } + } + // record task information in value when error occurs, so we can + // do some additional work such as render longStackTrace + if (state === REJECTED && value instanceof Error) { + // check if longStackTraceZone is here + const trace = Zone.currentTask && Zone.currentTask.data && Zone.currentTask.data[creationTrace]; + if (trace) { + // only keep the long stack trace into error when in longStackTraceZone + ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { + configurable: true, + enumerable: false, + writable: true, + value: trace + }); + } + } + for (let i = 0; i < queue.length;) { + scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]); + } + if (queue.length == 0 && state == REJECTED) { + promise[symbolState] = REJECTED_NO_CATCH; + let uncaughtPromiseError = value; + try { + // Here we throws a new Error to print more readable error log + // and if the value is not an error, zone.js builds an `Error` + // Object here to attach the stack information. + throw new Error('Uncaught (in promise): ' + readableObjectToString(value) + (value && value.stack ? '\n' + value.stack : '')); + } catch (err) { + uncaughtPromiseError = err; + } + if (isDisableWrappingUncaughtPromiseRejection) { + // If disable wrapping uncaught promise reject + // use the value instead of wrapping it. + uncaughtPromiseError.throwOriginal = true; + } + uncaughtPromiseError.rejection = value; + uncaughtPromiseError.promise = promise; + uncaughtPromiseError.zone = Zone.current; + uncaughtPromiseError.task = Zone.currentTask; + _uncaughtPromiseErrors.push(uncaughtPromiseError); + api.scheduleMicroTask(); // to make sure that it is running + } + } + } + // Resolving an already resolved promise is a noop. + return promise; + } + const REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler'); + function clearRejectedNoCatch(promise) { + if (promise[symbolState] === REJECTED_NO_CATCH) { + // if the promise is rejected no catch status + // and queue.length > 0, means there is a error handler + // here to handle the rejected promise, we should trigger + // windows.rejectionhandled eventHandler or nodejs rejectionHandled + // eventHandler + try { + const handler = Zone[REJECTION_HANDLED_HANDLER]; + if (handler && typeof handler === 'function') { + handler.call(this, { + rejection: promise[symbolValue], + promise: promise + }); + } + } catch (err) {} + promise[symbolState] = REJECTED; + for (let i = 0; i < _uncaughtPromiseErrors.length; i++) { + if (promise === _uncaughtPromiseErrors[i].promise) { + _uncaughtPromiseErrors.splice(i, 1); + } + } + } + } + function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) { + clearRejectedNoCatch(promise); + const promiseState = promise[symbolState]; + const delegate = promiseState ? typeof onFulfilled === 'function' ? onFulfilled : forwardResolution : typeof onRejected === 'function' ? onRejected : forwardRejection; + zone.scheduleMicroTask(source, () => { + try { + const parentPromiseValue = promise[symbolValue]; + const isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally]; + if (isFinallyPromise) { + // if the promise is generated from finally call, keep parent promise's state and value + chainPromise[symbolParentPromiseValue] = parentPromiseValue; + chainPromise[symbolParentPromiseState] = promiseState; + } + // should not pass value to finally callback + const value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ? [] : [parentPromiseValue]); + resolvePromise(chainPromise, true, value); + } catch (error) { + // if error occurs, should always return this error + resolvePromise(chainPromise, false, error); + } + }, chainPromise); + } + const ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }'; + const noop = function () {}; + const AggregateError = global.AggregateError; + class ZoneAwarePromise { + static toString() { + return ZONE_AWARE_PROMISE_TO_STRING; + } + static resolve(value) { + if (value instanceof ZoneAwarePromise) { + return value; + } + return resolvePromise(new this(null), RESOLVED, value); + } + static reject(error) { + return resolvePromise(new this(null), REJECTED, error); + } + static withResolvers() { + const result = {}; + result.promise = new ZoneAwarePromise((res, rej) => { + result.resolve = res; + result.reject = rej; + }); + return result; + } + static any(values) { + if (!values || typeof values[Symbol.iterator] !== 'function') { + return Promise.reject(new AggregateError([], 'All promises were rejected')); + } + const promises = []; + let count = 0; + try { + for (let v of values) { + count++; + promises.push(ZoneAwarePromise.resolve(v)); + } + } catch (err) { + return Promise.reject(new AggregateError([], 'All promises were rejected')); + } + if (count === 0) { + return Promise.reject(new AggregateError([], 'All promises were rejected')); + } + let finished = false; + const errors = []; + return new ZoneAwarePromise((resolve, reject) => { + for (let i = 0; i < promises.length; i++) { + promises[i].then(v => { + if (finished) { + return; + } + finished = true; + resolve(v); + }, err => { + errors.push(err); + count--; + if (count === 0) { + finished = true; + reject(new AggregateError(errors, 'All promises were rejected')); + } + }); + } + }); + } + static race(values) { + let resolve; + let reject; + let promise = new this((res, rej) => { + resolve = res; + reject = rej; + }); + function onResolve(value) { + resolve(value); + } + function onReject(error) { + reject(error); + } + for (let value of values) { + if (!isThenable(value)) { + value = this.resolve(value); + } + value.then(onResolve, onReject); + } + return promise; + } + static all(values) { + return ZoneAwarePromise.allWithCallback(values); + } + static allSettled(values) { + const P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise; + return P.allWithCallback(values, { + thenCallback: value => ({ + status: 'fulfilled', + value + }), + errorCallback: err => ({ + status: 'rejected', + reason: err + }) + }); + } + static allWithCallback(values, callback) { + let resolve; + let reject; + let promise = new this((res, rej) => { + resolve = res; + reject = rej; + }); + // Start at 2 to prevent prematurely resolving if .then is called immediately. + let unresolvedCount = 2; + let valueIndex = 0; + const resolvedValues = []; + for (let value of values) { + if (!isThenable(value)) { + value = this.resolve(value); + } + const curValueIndex = valueIndex; + try { + value.then(value => { + resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value; + unresolvedCount--; + if (unresolvedCount === 0) { + resolve(resolvedValues); + } + }, err => { + if (!callback) { + reject(err); + } else { + resolvedValues[curValueIndex] = callback.errorCallback(err); + unresolvedCount--; + if (unresolvedCount === 0) { + resolve(resolvedValues); + } + } + }); + } catch (thenErr) { + reject(thenErr); + } + unresolvedCount++; + valueIndex++; + } + // Make the unresolvedCount zero-based again. + unresolvedCount -= 2; + if (unresolvedCount === 0) { + resolve(resolvedValues); + } + return promise; + } + constructor(executor) { + const promise = this; + if (!(promise instanceof ZoneAwarePromise)) { + throw new Error('Must be an instanceof Promise.'); + } + promise[symbolState] = UNRESOLVED; + promise[symbolValue] = []; // queue; + try { + const onceWrapper = once(); + executor && executor(onceWrapper(makeResolver(promise, RESOLVED)), onceWrapper(makeResolver(promise, REJECTED))); + } catch (error) { + resolvePromise(promise, false, error); + } + } + get [Symbol.toStringTag]() { + return 'Promise'; + } + get [Symbol.species]() { + return ZoneAwarePromise; + } + then(onFulfilled, onRejected) { + // We must read `Symbol.species` safely because `this` may be anything. For instance, `this` + // may be an object without a prototype (created through `Object.create(null)`); thus + // `this.constructor` will be undefined. One of the use cases is SystemJS creating + // prototype-less objects (modules) via `Object.create(null)`. The SystemJS creates an empty + // object and copies promise properties into that object (within the `getOrCreateLoad` + // function). The zone.js then checks if the resolved value has the `then` method and + // invokes it with the `value` context. Otherwise, this will throw an error: `TypeError: + // Cannot read properties of undefined (reading 'Symbol(Symbol.species)')`. + let C = this.constructor?.[Symbol.species]; + if (!C || typeof C !== 'function') { + C = this.constructor || ZoneAwarePromise; + } + const chainPromise = new C(noop); + const zone = Zone.current; + if (this[symbolState] == UNRESOLVED) { + this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected); + } else { + scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected); + } + return chainPromise; + } + catch(onRejected) { + return this.then(null, onRejected); + } + finally(onFinally) { + // See comment on the call to `then` about why thee `Symbol.species` is safely accessed. + let C = this.constructor?.[Symbol.species]; + if (!C || typeof C !== 'function') { + C = ZoneAwarePromise; + } + const chainPromise = new C(noop); + chainPromise[symbolFinally] = symbolFinally; + const zone = Zone.current; + if (this[symbolState] == UNRESOLVED) { + this[symbolValue].push(zone, chainPromise, onFinally, onFinally); + } else { + scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally); + } + return chainPromise; + } + } + // Protect against aggressive optimizers dropping seemingly unused properties. + // E.g. Closure Compiler in advanced mode. + ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve; + ZoneAwarePromise['reject'] = ZoneAwarePromise.reject; + ZoneAwarePromise['race'] = ZoneAwarePromise.race; + ZoneAwarePromise['all'] = ZoneAwarePromise.all; + const NativePromise = global[symbolPromise] = global['Promise']; + global['Promise'] = ZoneAwarePromise; + const symbolThenPatched = __symbol__('thenPatched'); + function patchThen(Ctor) { + const proto = Ctor.prototype; + const prop = ObjectGetOwnPropertyDescriptor(proto, 'then'); + if (prop && (prop.writable === false || !prop.configurable)) { + // check Ctor.prototype.then propertyDescriptor is writable or not + // in meteor env, writable is false, we should ignore such case + return; + } + const originalThen = proto.then; + // Keep a reference to the original method. + proto[symbolThen] = originalThen; + Ctor.prototype.then = function (onResolve, onReject) { + const wrapped = new ZoneAwarePromise((resolve, reject) => { + originalThen.call(this, resolve, reject); + }); + return wrapped.then(onResolve, onReject); + }; + Ctor[symbolThenPatched] = true; + } + api.patchThen = patchThen; + function zoneify(fn) { + return function (self, args) { + let resultPromise = fn.apply(self, args); + if (resultPromise instanceof ZoneAwarePromise) { + return resultPromise; + } + let ctor = resultPromise.constructor; + if (!ctor[symbolThenPatched]) { + patchThen(ctor); + } + return resultPromise; + }; + } + if (NativePromise) { + patchThen(NativePromise); + patchMethod(global, 'fetch', delegate => zoneify(delegate)); + } + // This is not part of public API, but it is useful for tests, so we expose it. + Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors; + return ZoneAwarePromise; + }); +} +function patchToString(Zone) { + // override Function.prototype.toString to make zone.js patched function + // look like native function + Zone.__load_patch('toString', global => { + // patch Func.prototype.toString to let them look like native + const originalFunctionToString = Function.prototype.toString; + const ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate'); + const PROMISE_SYMBOL = zoneSymbol('Promise'); + const ERROR_SYMBOL = zoneSymbol('Error'); + const newFunctionToString = function toString() { + if (typeof this === 'function') { + const originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL]; + if (originalDelegate) { + if (typeof originalDelegate === 'function') { + return originalFunctionToString.call(originalDelegate); + } else { + return Object.prototype.toString.call(originalDelegate); + } + } + if (this === Promise) { + const nativePromise = global[PROMISE_SYMBOL]; + if (nativePromise) { + return originalFunctionToString.call(nativePromise); + } + } + if (this === Error) { + const nativeError = global[ERROR_SYMBOL]; + if (nativeError) { + return originalFunctionToString.call(nativeError); + } + } + } + return originalFunctionToString.call(this); + }; + newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString; + Function.prototype.toString = newFunctionToString; + // patch Object.prototype.toString to let them look like native + const originalObjectToString = Object.prototype.toString; + const PROMISE_OBJECT_TO_STRING = '[object Promise]'; + Object.prototype.toString = function () { + if (typeof Promise === 'function' && this instanceof Promise) { + return PROMISE_OBJECT_TO_STRING; + } + return originalObjectToString.call(this); + }; + }); +} +function patchCallbacks(api, target, targetName, method, callbacks) { + const symbol = Zone.__symbol__(method); + if (target[symbol]) { + return; + } + const nativeDelegate = target[symbol] = target[method]; + target[method] = function (name, opts, options) { + if (opts && opts.prototype) { + callbacks.forEach(function (callback) { + const source = `${targetName}.${method}::` + callback; + const prototype = opts.prototype; + // Note: the `patchCallbacks` is used for patching the `document.registerElement` and + // `customElements.define`. We explicitly wrap the patching code into try-catch since + // callbacks may be already patched by other web components frameworks (e.g. LWC), and they + // make those properties non-writable. This means that patching callback will throw an error + // `cannot assign to read-only property`. See this code as an example: + // https://github.com/salesforce/lwc/blob/master/packages/@lwc/engine-core/src/framework/base-bridge-element.ts#L180-L186 + // We don't want to stop the application rendering if we couldn't patch some + // callback, e.g. `attributeChangedCallback`. + try { + if (prototype.hasOwnProperty(callback)) { + const descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback); + if (descriptor && descriptor.value) { + descriptor.value = api.wrapWithCurrentZone(descriptor.value, source); + api._redefineProperty(opts.prototype, callback, descriptor); + } else if (prototype[callback]) { + prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); + } + } else if (prototype[callback]) { + prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); + } + } catch { + // Note: we leave the catch block empty since there's no way to handle the error related + // to non-writable property. + } + }); + } + return nativeDelegate.call(target, name, opts, options); + }; + api.attachOriginToPatched(target[method], nativeDelegate); +} +function patchUtil(Zone) { + Zone.__load_patch('util', (global, Zone, api) => { + // Collect native event names by looking at properties + // on the global namespace, e.g. 'onclick'. + const eventNames = getOnEventNames(global); + api.patchOnProperties = patchOnProperties; + api.patchMethod = patchMethod; + api.bindArguments = bindArguments; + api.patchMacroTask = patchMacroTask; + // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS` + // to define which events will not be patched by `Zone.js`. In newer version (>=0.9.0), we + // change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep the name consistent with + // angular repo. The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be + // supported for backwards compatibility. + const SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS'); + const SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS'); + if (global[SYMBOL_UNPATCHED_EVENTS]) { + global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS]; + } + if (global[SYMBOL_BLACK_LISTED_EVENTS]) { + Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] = global[SYMBOL_BLACK_LISTED_EVENTS]; + } + api.patchEventPrototype = patchEventPrototype; + api.patchEventTarget = patchEventTarget; + api.isIEOrEdge = isIEOrEdge; + api.ObjectDefineProperty = ObjectDefineProperty; + api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor; + api.ObjectCreate = ObjectCreate; + api.ArraySlice = ArraySlice; + api.patchClass = patchClass; + api.wrapWithCurrentZone = wrapWithCurrentZone; + api.filterProperties = filterProperties; + api.attachOriginToPatched = attachOriginToPatched; + api._redefineProperty = Object.defineProperty; + api.patchCallbacks = patchCallbacks; + api.getGlobalObjects = () => ({ + globalSources, + zoneSymbolEventNames, + eventNames, + isBrowser, + isMix, + isNode, + TRUE_STR, + FALSE_STR, + ZONE_SYMBOL_PREFIX, + ADD_EVENT_LISTENER_STR, + REMOVE_EVENT_LISTENER_STR + }); + }); +} +function patchCommon(Zone) { + patchPromise(Zone); + patchToString(Zone); + patchUtil(Zone); +} +const Zone$1 = loadZone(); +patchCommon(Zone$1); +patchBrowser(Zone$1); + +/***/ }), + +/***/ 43051: +/*!************************************************!*\ + !*** ./node_modules/core-js/es/array/index.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.from */ 79653); +__webpack_require__(/*! ../../modules/es.array.is-array */ 51265); +__webpack_require__(/*! ../../modules/es.array.of */ 34652); +__webpack_require__(/*! ../../modules/es.array.at */ 82760); +__webpack_require__(/*! ../../modules/es.array.concat */ 18361); +__webpack_require__(/*! ../../modules/es.array.copy-within */ 89282); +__webpack_require__(/*! ../../modules/es.array.every */ 50254); +__webpack_require__(/*! ../../modules/es.array.fill */ 88768); +__webpack_require__(/*! ../../modules/es.array.filter */ 65111); +__webpack_require__(/*! ../../modules/es.array.find */ 34202); +__webpack_require__(/*! ../../modules/es.array.find-index */ 98991); +__webpack_require__(/*! ../../modules/es.array.find-last */ 24715); +__webpack_require__(/*! ../../modules/es.array.find-last-index */ 62810); +__webpack_require__(/*! ../../modules/es.array.flat */ 57962); +__webpack_require__(/*! ../../modules/es.array.flat-map */ 19357); +__webpack_require__(/*! ../../modules/es.array.for-each */ 51866); +__webpack_require__(/*! ../../modules/es.array.includes */ 95260); +__webpack_require__(/*! ../../modules/es.array.index-of */ 31471); +__webpack_require__(/*! ../../modules/es.array.iterator */ 20619); +__webpack_require__(/*! ../../modules/es.array.join */ 33901); +__webpack_require__(/*! ../../modules/es.array.last-index-of */ 20864); +__webpack_require__(/*! ../../modules/es.array.map */ 37223); +__webpack_require__(/*! ../../modules/es.array.push */ 98025); +__webpack_require__(/*! ../../modules/es.array.reduce */ 15595); +__webpack_require__(/*! ../../modules/es.array.reduce-right */ 23876); +__webpack_require__(/*! ../../modules/es.array.reverse */ 92999); +__webpack_require__(/*! ../../modules/es.array.slice */ 43563); +__webpack_require__(/*! ../../modules/es.array.some */ 35425); +__webpack_require__(/*! ../../modules/es.array.sort */ 59369); +__webpack_require__(/*! ../../modules/es.array.species */ 70499); +__webpack_require__(/*! ../../modules/es.array.splice */ 92505); +__webpack_require__(/*! ../../modules/es.array.to-reversed */ 39463); +__webpack_require__(/*! ../../modules/es.array.to-sorted */ 93328); +__webpack_require__(/*! ../../modules/es.array.to-spliced */ 85901); +__webpack_require__(/*! ../../modules/es.array.unscopables.flat */ 72633); +__webpack_require__(/*! ../../modules/es.array.unscopables.flat-map */ 82070); +__webpack_require__(/*! ../../modules/es.array.unshift */ 84980); +__webpack_require__(/*! ../../modules/es.array.with */ 23085); +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.string.iterator */ 5177); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Array; + + +/***/ }), + +/***/ 94102: +/*!***********************************************!*\ + !*** ./node_modules/core-js/es/date/index.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.date.get-year */ 5422); +__webpack_require__(/*! ../../modules/es.date.now */ 53498); +__webpack_require__(/*! ../../modules/es.date.set-year */ 18850); +__webpack_require__(/*! ../../modules/es.date.to-gmt-string */ 90868); +__webpack_require__(/*! ../../modules/es.date.to-iso-string */ 39083); +__webpack_require__(/*! ../../modules/es.date.to-json */ 57200); +__webpack_require__(/*! ../../modules/es.date.to-string */ 75431); +__webpack_require__(/*! ../../modules/es.date.to-primitive */ 43633); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Date; + + +/***/ }), + +/***/ 20230: +/*!***************************************************!*\ + !*** ./node_modules/core-js/es/function/index.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.function.bind */ 44915); +__webpack_require__(/*! ../../modules/es.function.name */ 64975); +__webpack_require__(/*! ../../modules/es.function.has-instance */ 46188); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Function; + + +/***/ }), + +/***/ 67240: +/*!**********************************************!*\ + !*** ./node_modules/core-js/es/map/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.iterator */ 20619); +__webpack_require__(/*! ../../modules/es.map */ 35196); +__webpack_require__(/*! ../../modules/es.map.group-by */ 9531); +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.string.iterator */ 5177); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Map; + + +/***/ }), + +/***/ 34220: +/*!***********************************************!*\ + !*** ./node_modules/core-js/es/math/index.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.math.acosh */ 60142); +__webpack_require__(/*! ../../modules/es.math.asinh */ 94245); +__webpack_require__(/*! ../../modules/es.math.atanh */ 9430); +__webpack_require__(/*! ../../modules/es.math.cbrt */ 56033); +__webpack_require__(/*! ../../modules/es.math.clz32 */ 44069); +__webpack_require__(/*! ../../modules/es.math.cosh */ 41795); +__webpack_require__(/*! ../../modules/es.math.expm1 */ 33821); +__webpack_require__(/*! ../../modules/es.math.fround */ 20132); +__webpack_require__(/*! ../../modules/es.math.hypot */ 62038); +__webpack_require__(/*! ../../modules/es.math.imul */ 62901); +__webpack_require__(/*! ../../modules/es.math.log10 */ 60167); +__webpack_require__(/*! ../../modules/es.math.log1p */ 67591); +__webpack_require__(/*! ../../modules/es.math.log2 */ 75538); +__webpack_require__(/*! ../../modules/es.math.sign */ 34707); +__webpack_require__(/*! ../../modules/es.math.sinh */ 83932); +__webpack_require__(/*! ../../modules/es.math.tanh */ 1959); +__webpack_require__(/*! ../../modules/es.math.to-string-tag */ 71396); +__webpack_require__(/*! ../../modules/es.math.trunc */ 51710); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Math; + + +/***/ }), + +/***/ 77311: +/*!*************************************************!*\ + !*** ./node_modules/core-js/es/number/index.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.number.constructor */ 54339); +__webpack_require__(/*! ../../modules/es.number.epsilon */ 64517); +__webpack_require__(/*! ../../modules/es.number.is-finite */ 2783); +__webpack_require__(/*! ../../modules/es.number.is-integer */ 60236); +__webpack_require__(/*! ../../modules/es.number.is-nan */ 20047); +__webpack_require__(/*! ../../modules/es.number.is-safe-integer */ 99478); +__webpack_require__(/*! ../../modules/es.number.max-safe-integer */ 64520); +__webpack_require__(/*! ../../modules/es.number.min-safe-integer */ 19658); +__webpack_require__(/*! ../../modules/es.number.parse-float */ 5883); +__webpack_require__(/*! ../../modules/es.number.parse-int */ 19004); +__webpack_require__(/*! ../../modules/es.number.to-exponential */ 41912); +__webpack_require__(/*! ../../modules/es.number.to-fixed */ 13937); +__webpack_require__(/*! ../../modules/es.number.to-precision */ 82103); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Number; + + +/***/ }), + +/***/ 55069: +/*!*************************************************!*\ + !*** ./node_modules/core-js/es/object/index.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.symbol */ 28092); +__webpack_require__(/*! ../../modules/es.object.assign */ 41812); +__webpack_require__(/*! ../../modules/es.object.create */ 60629); +__webpack_require__(/*! ../../modules/es.object.define-property */ 44198); +__webpack_require__(/*! ../../modules/es.object.define-properties */ 77450); +__webpack_require__(/*! ../../modules/es.object.entries */ 84577); +__webpack_require__(/*! ../../modules/es.object.freeze */ 72950); +__webpack_require__(/*! ../../modules/es.object.from-entries */ 81752); +__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptor */ 99956); +__webpack_require__(/*! ../../modules/es.object.get-own-property-descriptors */ 37403); +__webpack_require__(/*! ../../modules/es.object.get-own-property-names */ 21929); +__webpack_require__(/*! ../../modules/es.object.get-prototype-of */ 66814); +__webpack_require__(/*! ../../modules/es.object.group-by */ 71434); +__webpack_require__(/*! ../../modules/es.object.has-own */ 59024); +__webpack_require__(/*! ../../modules/es.object.is */ 6517); +__webpack_require__(/*! ../../modules/es.object.is-extensible */ 19307); +__webpack_require__(/*! ../../modules/es.object.is-frozen */ 67120); +__webpack_require__(/*! ../../modules/es.object.is-sealed */ 75634); +__webpack_require__(/*! ../../modules/es.object.keys */ 24397); +__webpack_require__(/*! ../../modules/es.object.prevent-extensions */ 95954); +__webpack_require__(/*! ../../modules/es.object.proto */ 7131); +__webpack_require__(/*! ../../modules/es.object.seal */ 20800); +__webpack_require__(/*! ../../modules/es.object.set-prototype-of */ 53546); +__webpack_require__(/*! ../../modules/es.object.values */ 95931); +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.object.define-getter */ 34128); +__webpack_require__(/*! ../../modules/es.object.define-setter */ 60404); +__webpack_require__(/*! ../../modules/es.object.lookup-getter */ 15875); +__webpack_require__(/*! ../../modules/es.object.lookup-setter */ 13063); +__webpack_require__(/*! ../../modules/es.json.to-string-tag */ 82856); +__webpack_require__(/*! ../../modules/es.math.to-string-tag */ 71396); +__webpack_require__(/*! ../../modules/es.reflect.to-string-tag */ 89181); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Object; + + +/***/ }), + +/***/ 93441: +/*!************************************************!*\ + !*** ./node_modules/core-js/es/parse-float.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/es.parse-float */ 56230); +var path = __webpack_require__(/*! ../internals/path */ 90422); + +module.exports = path.parseFloat; + + +/***/ }), + +/***/ 38414: +/*!**********************************************!*\ + !*** ./node_modules/core-js/es/parse-int.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../modules/es.parse-int */ 9241); +var path = __webpack_require__(/*! ../internals/path */ 90422); + +module.exports = path.parseInt; + + +/***/ }), + +/***/ 70279: +/*!**************************************************!*\ + !*** ./node_modules/core-js/es/reflect/index.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.reflect.apply */ 13945); +__webpack_require__(/*! ../../modules/es.reflect.construct */ 14268); +__webpack_require__(/*! ../../modules/es.reflect.define-property */ 48926); +__webpack_require__(/*! ../../modules/es.reflect.delete-property */ 47390); +__webpack_require__(/*! ../../modules/es.reflect.get */ 76293); +__webpack_require__(/*! ../../modules/es.reflect.get-own-property-descriptor */ 43180); +__webpack_require__(/*! ../../modules/es.reflect.get-prototype-of */ 92982); +__webpack_require__(/*! ../../modules/es.reflect.has */ 6761); +__webpack_require__(/*! ../../modules/es.reflect.is-extensible */ 29075); +__webpack_require__(/*! ../../modules/es.reflect.own-keys */ 38554); +__webpack_require__(/*! ../../modules/es.reflect.prevent-extensions */ 33946); +__webpack_require__(/*! ../../modules/es.reflect.set */ 7265); +__webpack_require__(/*! ../../modules/es.reflect.set-prototype-of */ 39778); +__webpack_require__(/*! ../../modules/es.reflect.to-string-tag */ 89181); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Reflect; + + +/***/ }), + +/***/ 30455: +/*!*************************************************!*\ + !*** ./node_modules/core-js/es/regexp/index.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.regexp.constructor */ 67607); +__webpack_require__(/*! ../../modules/es.regexp.to-string */ 35434); +__webpack_require__(/*! ../../modules/es.regexp.dot-all */ 56346); +__webpack_require__(/*! ../../modules/es.regexp.exec */ 42478); +__webpack_require__(/*! ../../modules/es.regexp.flags */ 82372); +__webpack_require__(/*! ../../modules/es.regexp.sticky */ 92780); +__webpack_require__(/*! ../../modules/es.regexp.test */ 84711); +__webpack_require__(/*! ../../modules/es.string.match */ 34278); +__webpack_require__(/*! ../../modules/es.string.replace */ 63859); +__webpack_require__(/*! ../../modules/es.string.search */ 93711); +__webpack_require__(/*! ../../modules/es.string.split */ 6235); + + +/***/ }), + +/***/ 56490: +/*!**********************************************!*\ + !*** ./node_modules/core-js/es/set/index.js ***! + \**********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.iterator */ 20619); +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.set */ 37726); +__webpack_require__(/*! ../../modules/es.set.difference.v2 */ 43407); +__webpack_require__(/*! ../../modules/es.set.intersection.v2 */ 87865); +__webpack_require__(/*! ../../modules/es.set.is-disjoint-from.v2 */ 90516); +__webpack_require__(/*! ../../modules/es.set.is-subset-of.v2 */ 19817); +__webpack_require__(/*! ../../modules/es.set.is-superset-of.v2 */ 32658); +__webpack_require__(/*! ../../modules/es.set.symmetric-difference.v2 */ 45081); +__webpack_require__(/*! ../../modules/es.set.union.v2 */ 96469); +__webpack_require__(/*! ../../modules/es.string.iterator */ 5177); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Set; + + +/***/ }), + +/***/ 57507: +/*!*************************************************!*\ + !*** ./node_modules/core-js/es/string/index.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.regexp.exec */ 42478); +__webpack_require__(/*! ../../modules/es.string.from-code-point */ 41114); +__webpack_require__(/*! ../../modules/es.string.raw */ 14781); +__webpack_require__(/*! ../../modules/es.string.code-point-at */ 20247); +__webpack_require__(/*! ../../modules/es.string.at-alternative */ 50988); +__webpack_require__(/*! ../../modules/es.string.ends-with */ 36550); +__webpack_require__(/*! ../../modules/es.string.includes */ 91826); +__webpack_require__(/*! ../../modules/es.string.is-well-formed */ 44206); +__webpack_require__(/*! ../../modules/es.string.match */ 34278); +__webpack_require__(/*! ../../modules/es.string.match-all */ 19528); +__webpack_require__(/*! ../../modules/es.string.pad-end */ 34634); +__webpack_require__(/*! ../../modules/es.string.pad-start */ 13911); +__webpack_require__(/*! ../../modules/es.string.repeat */ 82200); +__webpack_require__(/*! ../../modules/es.string.replace */ 63859); +__webpack_require__(/*! ../../modules/es.string.replace-all */ 60041); +__webpack_require__(/*! ../../modules/es.string.search */ 93711); +__webpack_require__(/*! ../../modules/es.string.split */ 6235); +__webpack_require__(/*! ../../modules/es.string.starts-with */ 50115); +__webpack_require__(/*! ../../modules/es.string.substr */ 39570); +__webpack_require__(/*! ../../modules/es.string.to-well-formed */ 84139); +__webpack_require__(/*! ../../modules/es.string.trim */ 1071); +__webpack_require__(/*! ../../modules/es.string.trim-start */ 73814); +__webpack_require__(/*! ../../modules/es.string.trim-end */ 13259); +__webpack_require__(/*! ../../modules/es.string.iterator */ 5177); +__webpack_require__(/*! ../../modules/es.string.anchor */ 21622); +__webpack_require__(/*! ../../modules/es.string.big */ 31045); +__webpack_require__(/*! ../../modules/es.string.blink */ 58069); +__webpack_require__(/*! ../../modules/es.string.bold */ 80468); +__webpack_require__(/*! ../../modules/es.string.fixed */ 48105); +__webpack_require__(/*! ../../modules/es.string.fontcolor */ 6203); +__webpack_require__(/*! ../../modules/es.string.fontsize */ 43575); +__webpack_require__(/*! ../../modules/es.string.italics */ 21902); +__webpack_require__(/*! ../../modules/es.string.link */ 21739); +__webpack_require__(/*! ../../modules/es.string.small */ 79936); +__webpack_require__(/*! ../../modules/es.string.strike */ 79945); +__webpack_require__(/*! ../../modules/es.string.sub */ 96817); +__webpack_require__(/*! ../../modules/es.string.sup */ 82207); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.String; + + +/***/ }), + +/***/ 71178: +/*!*************************************************!*\ + !*** ./node_modules/core-js/es/symbol/index.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.concat */ 18361); +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.symbol */ 28092); +__webpack_require__(/*! ../../modules/es.symbol.async-iterator */ 81909); +__webpack_require__(/*! ../../modules/es.symbol.description */ 89700); +__webpack_require__(/*! ../../modules/es.symbol.has-instance */ 66876); +__webpack_require__(/*! ../../modules/es.symbol.is-concat-spreadable */ 92513); +__webpack_require__(/*! ../../modules/es.symbol.iterator */ 29794); +__webpack_require__(/*! ../../modules/es.symbol.match */ 13875); +__webpack_require__(/*! ../../modules/es.symbol.match-all */ 17353); +__webpack_require__(/*! ../../modules/es.symbol.replace */ 23310); +__webpack_require__(/*! ../../modules/es.symbol.search */ 16328); +__webpack_require__(/*! ../../modules/es.symbol.species */ 72980); +__webpack_require__(/*! ../../modules/es.symbol.split */ 62042); +__webpack_require__(/*! ../../modules/es.symbol.to-primitive */ 9517); +__webpack_require__(/*! ../../modules/es.symbol.to-string-tag */ 64754); +__webpack_require__(/*! ../../modules/es.symbol.unscopables */ 74389); +__webpack_require__(/*! ../../modules/es.json.to-string-tag */ 82856); +__webpack_require__(/*! ../../modules/es.math.to-string-tag */ 71396); +__webpack_require__(/*! ../../modules/es.reflect.to-string-tag */ 89181); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.Symbol; + + +/***/ }), + +/***/ 56349: +/*!***************************************************!*\ + !*** ./node_modules/core-js/es/weak-map/index.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +__webpack_require__(/*! ../../modules/es.array.iterator */ 20619); +__webpack_require__(/*! ../../modules/es.object.to-string */ 32064); +__webpack_require__(/*! ../../modules/es.weak-map */ 57763); +var path = __webpack_require__(/*! ../../internals/path */ 90422); + +module.exports = path.WeakMap; + + +/***/ }), + +/***/ 80359: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/a-callable.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ 14824); + +var $TypeError = TypeError; + +// `Assert: IsCallable(argument) is true` +module.exports = function (argument) { + if (isCallable(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a function'); +}; + + +/***/ }), + +/***/ 27267: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/a-constructor.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ 93668); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ 14824); + +var $TypeError = TypeError; + +// `Assert: IsConstructor(argument) is true` +module.exports = function (argument) { + if (isConstructor(argument)) return argument; + throw new $TypeError(tryToString(argument) + ' is not a constructor'); +}; + + +/***/ }), + +/***/ 50387: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/a-possible-prototype.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPossiblePrototype = __webpack_require__(/*! ../internals/is-possible-prototype */ 83290); + +var $String = String; +var $TypeError = TypeError; + +module.exports = function (argument) { + if (isPossiblePrototype(argument)) return argument; + throw new $TypeError("Can't set " + $String(argument) + ' as a prototype'); +}; + + +/***/ }), + +/***/ 58359: +/*!*************************************************!*\ + !*** ./node_modules/core-js/internals/a-set.js ***! + \*************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var has = (__webpack_require__(/*! ../internals/set-helpers */ 82385).has); + +// Perform ? RequireInternalSlot(M, [[SetData]]) +module.exports = function (it) { + has(it); + return it; +}; + + +/***/ }), + +/***/ 19492: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/add-to-unscopables.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); + +var UNSCOPABLES = wellKnownSymbol('unscopables'); +var ArrayPrototype = Array.prototype; + +// Array.prototype[@@unscopables] +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +if (ArrayPrototype[UNSCOPABLES] === undefined) { + defineProperty(ArrayPrototype, UNSCOPABLES, { + configurable: true, + value: create(null) + }); +} + +// add a key to Array.prototype[@@unscopables] +module.exports = function (key) { + ArrayPrototype[UNSCOPABLES][key] = true; +}; + + +/***/ }), + +/***/ 20528: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/advance-string-index.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var charAt = (__webpack_require__(/*! ../internals/string-multibyte */ 88054).charAt); + +// `AdvanceStringIndex` abstract operation +// https://tc39.es/ecma262/#sec-advancestringindex +module.exports = function (S, index, unicode) { + return index + (unicode ? charAt(S, index).length : 1); +}; + + +/***/ }), + +/***/ 98852: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/an-instance.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); + +var $TypeError = TypeError; + +module.exports = function (it, Prototype) { + if (isPrototypeOf(Prototype, it)) return it; + throw new $TypeError('Incorrect invocation'); +}; + + +/***/ }), + +/***/ 46744: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/an-object.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); + +var $String = String; +var $TypeError = TypeError; + +// `Assert: Type(argument) is Object` +module.exports = function (argument) { + if (isObject(argument)) return argument; + throw new $TypeError($String(argument) + ' is not an object'); +}; + + +/***/ }), + +/***/ 74591: +/*!***********************************************************************!*\ + !*** ./node_modules/core-js/internals/array-buffer-non-extensible.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +module.exports = fails(function () { + if (typeof ArrayBuffer == 'function') { + var buffer = new ArrayBuffer(8); + // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe + if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 }); + } +}); + + +/***/ }), + +/***/ 49842: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/array-copy-within.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var deletePropertyOrThrow = __webpack_require__(/*! ../internals/delete-property-or-throw */ 83951); + +var min = Math.min; + +// `Array.prototype.copyWithin` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.copywithin +// eslint-disable-next-line es/no-array-prototype-copywithin -- safe +module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var to = toAbsoluteIndex(target, len); + var from = toAbsoluteIndex(start, len); + var end = arguments.length > 2 ? arguments[2] : undefined; + var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to); + var inc = 1; + if (from < to && to < from + count) { + inc = -1; + from += count - 1; + to += count - 1; + } + while (count-- > 0) { + if (from in O) O[to] = O[from]; + else deletePropertyOrThrow(O, to); + to += inc; + from += inc; + } return O; +}; + + +/***/ }), + +/***/ 4080: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/array-fill.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +// `Array.prototype.fill` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.fill +module.exports = function fill(value /* , start = 0, end = @length */) { + var O = toObject(this); + var length = lengthOfArrayLike(O); + var argumentsLength = arguments.length; + var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length); + var end = argumentsLength > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex(end, length); + while (endPos > index) O[index++] = value; + return O; +}; + + +/***/ }), + +/***/ 62410: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/array-for-each.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $forEach = (__webpack_require__(/*! ../internals/array-iteration */ 91982).forEach); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); + +var STRICT_METHOD = arrayMethodIsStrict('forEach'); + +// `Array.prototype.forEach` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.foreach +module.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) { + return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); +// eslint-disable-next-line es/no-array-prototype-foreach -- safe +} : [].forEach; + + +/***/ }), + +/***/ 90157: +/*!***************************************************************************!*\ + !*** ./node_modules/core-js/internals/array-from-constructor-and-list.js ***! + \***************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +module.exports = function (Constructor, list, $length) { + var index = 0; + var length = arguments.length > 2 ? $length : lengthOfArrayLike(list); + var result = new Constructor(length); + while (length > index) result[index] = list[index++]; + return result; +}; + + +/***/ }), + +/***/ 21909: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/array-from.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 41807); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ 28570); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 9516); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ 93668); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ 47716); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 94880); + +var $Array = Array; + +// `Array.from` method implementation +// https://tc39.es/ecma262/#sec-array.from +module.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { + var O = toObject(arrayLike); + var IS_CONSTRUCTOR = isConstructor(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined); + var iteratorMethod = getIteratorMethod(O); + var index = 0; + var length, result, step, iterator, next, value; + // if the target is not iterable or it's an array with the default iterator - use a simple case + if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) { + result = IS_CONSTRUCTOR ? new this() : []; + iterator = getIterator(O, iteratorMethod); + next = iterator.next; + for (;!(step = call(next, iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value; + createProperty(result, index, value); + } + } else { + length = lengthOfArrayLike(O); + result = IS_CONSTRUCTOR ? new this(length) : $Array(length); + for (;length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty(result, index, value); + } + } + result.length = index; + return result; +}; + + +/***/ }), + +/***/ 84556: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/array-includes.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +// `Array.prototype.{ indexOf, includes }` methods implementation +var createMethod = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + if (length === 0) return !IS_INCLUDES && -1; + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + if (IS_INCLUDES && el !== el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare -- NaN check + if (value !== value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + +module.exports = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod(false) +}; + + +/***/ }), + +/***/ 60780: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/internals/array-iteration-from-last.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 41807); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 79114); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +// `Array.prototype.{ findLast, findLastIndex }` methods implementation +var createMethod = function (TYPE) { + var IS_FIND_LAST_INDEX = TYPE === 1; + return function ($this, callbackfn, that) { + var O = toObject($this); + var self = IndexedObject(O); + var index = lengthOfArrayLike(self); + var boundFunction = bind(callbackfn, that); + var value, result; + while (index-- > 0) { + value = self[index]; + result = boundFunction(value, index, O); + if (result) switch (TYPE) { + case 0: return value; // findLast + case 1: return index; // findLastIndex + } + } + return IS_FIND_LAST_INDEX ? -1 : undefined; + }; +}; + +module.exports = { + // `Array.prototype.findLast` method + // https://github.com/tc39/proposal-array-find-from-last + findLast: createMethod(0), + // `Array.prototype.findLastIndex` method + // https://github.com/tc39/proposal-array-find-from-last + findLastIndex: createMethod(1) +}; + + +/***/ }), + +/***/ 91982: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/array-iteration.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 41807); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 79114); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 12928); + +var push = uncurryThis([].push); + +// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation +var createMethod = function (TYPE) { + var IS_MAP = TYPE === 1; + var IS_FILTER = TYPE === 2; + var IS_SOME = TYPE === 3; + var IS_EVERY = TYPE === 4; + var IS_FIND_INDEX = TYPE === 6; + var IS_FILTER_REJECT = TYPE === 7; + var NO_HOLES = TYPE === 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject($this); + var self = IndexedObject(O); + var length = lengthOfArrayLike(self); + var boundFunction = bind(callbackfn, that); + var index = 0; + var create = specificCreate || arraySpeciesCreate; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + for (;length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: return true; // some + case 5: return value; // find + case 6: return index; // findIndex + case 2: push(target, value); // filter + } else switch (TYPE) { + case 4: return false; // every + case 7: push(target, value); // filterReject + } + } + } + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +module.exports = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod(7) +}; + + +/***/ }), + +/***/ 11760: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/array-last-index-of.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-array-prototype-lastindexof -- safe */ +var apply = __webpack_require__(/*! ../internals/function-apply */ 62144); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); + +var min = Math.min; +var $lastIndexOf = [].lastIndexOf; +var NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; +var STRICT_METHOD = arrayMethodIsStrict('lastIndexOf'); +var FORCED = NEGATIVE_ZERO || !STRICT_METHOD; + +// `Array.prototype.lastIndexOf` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof +module.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) { + // convert -0 to +0 + if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0; + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + if (length === 0) return -1; + var index = length - 1; + if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1])); + if (index < 0) index = length + index; + for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; + return -1; +} : $lastIndexOf; + + +/***/ }), + +/***/ 5768: +/*!****************************************************************************!*\ + !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ 1462); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION >= 51 || !fails(function () { + var array = []; + var constructor = array.constructor = {}; + constructor[SPECIES] = function () { + return { foo: 1 }; + }; + return array[METHOD_NAME](Boolean).foo !== 1; + }); +}; + + +/***/ }), + +/***/ 86079: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/array-method-is-strict.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +module.exports = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails(function () { + // eslint-disable-next-line no-useless-call -- required for testing + method.call(null, argument || function () { return 1; }, 1); + }); +}; + + +/***/ }), + +/***/ 66587: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/array-reduce.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 79114); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +var $TypeError = TypeError; + +var REDUCE_EMPTY = 'Reduce of empty array with no initial value'; + +// `Array.prototype.{ reduce, reduceRight }` methods implementation +var createMethod = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + var O = toObject(that); + var self = IndexedObject(O); + var length = lengthOfArrayLike(O); + aCallable(callbackfn); + if (length === 0 && argumentsLength < 2) throw new $TypeError(REDUCE_EMPTY); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + index += i; + if (IS_RIGHT ? index < 0 : length <= index) { + throw new $TypeError(REDUCE_EMPTY); + } + } + for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + return memo; + }; +}; + +module.exports = { + // `Array.prototype.reduce` method + // https://tc39.es/ecma262/#sec-array.prototype.reduce + left: createMethod(false), + // `Array.prototype.reduceRight` method + // https://tc39.es/ecma262/#sec-array.prototype.reduceright + right: createMethod(true) +}; + + +/***/ }), + +/***/ 60530: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/array-set-length.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); + +var $TypeError = TypeError; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Safari < 13 does not throw an error in this case +var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () { + // makes no sense without proper strict mode support + if (this !== undefined) return true; + try { + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty([], 'length', { writable: false }).length = 1; + } catch (error) { + return error instanceof TypeError; + } +}(); + +module.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) { + if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) { + throw new $TypeError('Cannot set read only .length'); + } return O.length = length; +} : function (O, length) { + return O.length = length; +}; + + +/***/ }), + +/***/ 37147: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/array-slice.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +module.exports = uncurryThis([].slice); + + +/***/ }), + +/***/ 65305: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/array-sort.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ 37147); + +var floor = Math.floor; + +var sort = function (array, comparefn) { + var length = array.length; + + if (length < 8) { + // insertion sort + var i = 1; + var element, j; + + while (i < length) { + j = i; + element = array[i]; + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + if (j !== i++) array[j] = element; + } + } else { + // merge sort + var middle = floor(length / 2); + var left = sort(arraySlice(array, 0, middle), comparefn); + var right = sort(arraySlice(array, middle), comparefn); + var llength = left.length; + var rlength = right.length; + var lindex = 0; + var rindex = 0; + + while (lindex < llength || rindex < rlength) { + array[lindex + rindex] = (lindex < llength && rindex < rlength) + ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++] + : lindex < llength ? left[lindex++] : right[rindex++]; + } + } + + return array; +}; + +module.exports = sort; + + +/***/ }), + +/***/ 68674: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/internals/array-species-constructor.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ 93668); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var SPECIES = wellKnownSymbol('species'); +var $Array = Array; + +// a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray) { + var C; + if (isArray(originalArray)) { + C = originalArray.constructor; + // cross-realm fallback + if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined; + else if (isObject(C)) { + C = C[SPECIES]; + if (C === null) C = undefined; + } + } return C === undefined ? $Array : C; +}; + + +/***/ }), + +/***/ 12928: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/array-species-create.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var arraySpeciesConstructor = __webpack_require__(/*! ../internals/array-species-constructor */ 68674); + +// `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate +module.exports = function (originalArray, length) { + return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length); +}; + + +/***/ }), + +/***/ 77111: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/array-to-reversed.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed +// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed +module.exports = function (O, C) { + var len = lengthOfArrayLike(O); + var A = new C(len); + var k = 0; + for (; k < len; k++) A[k] = O[len - k - 1]; + return A; +}; + + +/***/ }), + +/***/ 58429: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/array-with.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); + +var $RangeError = RangeError; + +// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with +// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with +module.exports = function (O, C, index, value) { + var len = lengthOfArrayLike(O); + var relativeIndex = toIntegerOrInfinity(index); + var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex; + if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index'); + var A = new C(len); + var k = 0; + for (; k < len; k++) A[k] = k === actualIndex ? value : O[k]; + return A; +}; + + +/***/ }), + +/***/ 28570: +/*!****************************************************************************!*\ + !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! + \****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ 3554); + +// call something on iterator step with safe closing on error +module.exports = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } +}; + + +/***/ }), + +/***/ 7393: +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var ITERATOR = wellKnownSymbol('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { done: !!called++ }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + iteratorWithReturn[ITERATOR] = function () { + return this; + }; + // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + Array.from(iteratorWithReturn, function () { throw 2; }); +} catch (error) { /* empty */ } + +module.exports = function (exec, SKIP_CLOSING) { + try { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + } catch (error) { return false; } // workaround of old WebKit + `eval` bug + var ITERATION_SUPPORT = false; + try { + var object = {}; + object[ITERATOR] = function () { + return { + next: function () { + return { done: ITERATION_SUPPORT = true }; + } + }; + }; + exec(object); + } catch (error) { /* empty */ } + return ITERATION_SUPPORT; +}; + + +/***/ }), + +/***/ 45255: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/classof-raw.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +var toString = uncurryThis({}.toString); +var stringSlice = uncurryThis(''.slice); + +module.exports = function (it) { + return stringSlice(toString(it), 8, -1); +}; + + +/***/ }), + +/***/ 97988: +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/classof.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 28839); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var $Object = Object; + +// ES3 wrong here +var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { /* empty */ } +}; + +// getting tag from ES6+ `Object.prototype.toString` +module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag + // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) + // ES3 arguments fallback + : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; +}; + + +/***/ }), + +/***/ 2913: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/collection-strong.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ 85402); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 41807); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 98852); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var iterate = __webpack_require__(/*! ../internals/iterate */ 56239); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ 93167); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ 83049); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 69494); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var fastKey = (__webpack_require__(/*! ../internals/internal-metadata */ 54324).fastKey); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + index: create(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS) that.size = 0; + if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; + // change existing entry + if (entry) { + entry.value = value; + // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS) state.size++; + else that.size++; + // add to index + if (index !== 'F') state.index[index] = entry; + } return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); + // fast case + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; + // frozen object case + for (entry = state.first; entry; entry = entry.next) { + if (entry.key === key) return entry; + } + }; + + defineBuiltIns(Prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var entry = state.first; + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + entry = entry.next; + } + state.first = state.last = undefined; + state.index = create(null); + if (DESCRIPTORS) state.size = 0; + else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first === entry) state.first = next; + if (state.last === entry) state.last = prev; + if (DESCRIPTORS) state.size--; + else that.size--; + } return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn /* , that = undefined */) { + var state = getInternalState(this); + var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined); + var entry; + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + + defineBuiltIns(Prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', { + configurable: true, + get: function () { + return getInternalState(this).size; + } + }); + return Constructor; + }, + setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); + // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; + // revert to the last existing entry + while (entry && entry.removed) entry = entry.previous; + // get next entry + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return createIterResultObject(undefined, true); + } + // return step by kind + if (kind === 'keys') return createIterResultObject(entry.key, false); + if (kind === 'values') return createIterResultObject(entry.value, false); + return createIterResultObject([entry.key, entry.value], false); + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); + + // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + setSpecies(CONSTRUCTOR_NAME); + } +}; + + +/***/ }), + +/***/ 25270: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/collection-weak.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ 85402); +var getWeakData = (__webpack_require__(/*! ../internals/internal-metadata */ 54324).getWeakData); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 98852); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var iterate = __webpack_require__(/*! ../internals/iterate */ 56239); +var ArrayIterationModule = __webpack_require__(/*! ../internals/array-iteration */ 91982); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); + +var setInternalState = InternalStateModule.set; +var internalStateGetterFor = InternalStateModule.getterFor; +var find = ArrayIterationModule.find; +var findIndex = ArrayIterationModule.findIndex; +var splice = uncurryThis([].splice); +var id = 0; + +// fallback for uncaught frozen keys +var uncaughtFrozenStore = function (state) { + return state.frozen || (state.frozen = new UncaughtFrozenStore()); +}; + +var UncaughtFrozenStore = function () { + this.entries = []; +}; + +var findUncaughtFrozen = function (store, key) { + return find(store.entries, function (it) { + return it[0] === key; + }); +}; + +UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value; + else this.entries.push([key, value]); + }, + 'delete': function (key) { + var index = findIndex(this.entries, function (it) { + return it[0] === key; + }); + if (~index) splice(this.entries, index, 1); + return !!~index; + } +}; + +module.exports = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var Constructor = wrapper(function (that, iterable) { + anInstance(that, Prototype); + setInternalState(that, { + type: CONSTRUCTOR_NAME, + id: id++, + frozen: undefined + }); + if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + }); + + var Prototype = Constructor.prototype; + + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var data = getWeakData(anObject(key), true); + if (data === true) uncaughtFrozenStore(state).set(key, value); + else data[state.id] = value; + return that; + }; + + defineBuiltIns(Prototype, { + // `{ WeakMap, WeakSet }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-weakmap.prototype.delete + // https://tc39.es/ecma262/#sec-weakset.prototype.delete + 'delete': function (key) { + var state = getInternalState(this); + if (!isObject(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state)['delete'](key); + return data && hasOwn(data, state.id) && delete data[state.id]; + }, + // `{ WeakMap, WeakSet }.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-weakmap.prototype.has + // https://tc39.es/ecma262/#sec-weakset.prototype.has + has: function has(key) { + var state = getInternalState(this); + if (!isObject(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).has(key); + return data && hasOwn(data, state.id); + } + }); + + defineBuiltIns(Prototype, IS_MAP ? { + // `WeakMap.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-weakmap.prototype.get + get: function get(key) { + var state = getInternalState(this); + if (isObject(key)) { + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).get(key); + return data ? data[state.id] : undefined; + } + }, + // `WeakMap.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-weakmap.prototype.set + set: function set(key, value) { + return define(this, key, value); + } + } : { + // `WeakSet.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-weakset.prototype.add + add: function add(value) { + return define(this, value, true); + } + }); + + return Constructor; + } +}; + + +/***/ }), + +/***/ 42833: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/collection.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 78367); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ 54324); +var iterate = __webpack_require__(/*! ../internals/iterate */ 56239); +var anInstance = __webpack_require__(/*! ../internals/an-instance */ 98852); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 7393); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); +var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ 3180); + +module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = globalThis[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]); + defineBuiltIn(NativePrototype, KEY, + KEY === 'add' ? function add(value) { + uncurriedNativeMethod(this, value === 0 ? 0 : value); + return this; + } : KEY === 'delete' ? function (key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY === 'get' ? function get(key) { + return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : KEY === 'has' ? function has(key) { + return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key); + } : function set(key, value) { + uncurriedNativeMethod(this, key === 0 ? 0 : key, value); + return this; + } + ); + }; + + var REPLACE = isForced( + CONSTRUCTOR_NAME, + !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () { + new NativeConstructor().entries().next(); + })) + ); + + if (REPLACE) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule.enable(); + } else if (isForced(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); + // early implementations not supports chaining + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance; + // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); + // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new -- required for testing + var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); + // for early implementations -0 and +0 not the same + var BUGGY_ZERO = !IS_WEAK && fails(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + while (index--) $instance[ADDER](index, index); + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance(dummy, NativePrototype); + var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); + if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); + + // weak collections should not contains .clear method + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported); + + setToStringTag(Constructor, CONSTRUCTOR_NAME); + + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + + return Constructor; +}; + + +/***/ }), + +/***/ 43107: +/*!***********************************************************************!*\ + !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 91178); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); + +module.exports = function (target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + + +/***/ }), + +/***/ 74751: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/correct-is-regexp-logic.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var MATCH = wellKnownSymbol('match'); + +module.exports = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { /* empty */ } + } return false; +}; + + +/***/ }), + +/***/ 2430: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +module.exports = !fails(function () { + function F() { /* empty */ } + F.prototype.constructor = null; + // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + + +/***/ }), + +/***/ 68967: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/create-html.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); + +var quot = /"/g; +var replace = uncurryThis(''.replace); + +// `CreateHTML` abstract operation +// https://tc39.es/ecma262/#sec-createhtml +module.exports = function (string, tag, attribute, value) { + var S = toString(requireObjectCoercible(string)); + var p1 = '<' + tag; + if (attribute !== '') p1 += ' ' + attribute + '="' + replace(toString(value), quot, '"') + '"'; + return p1 + '>' + S + ''; +}; + + +/***/ }), + +/***/ 83049: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/internals/create-iter-result-object.js ***! + \*********************************************************************/ +/***/ ((module) => { + +"use strict"; + +// `CreateIterResultObject` abstract operation +// https://tc39.es/ecma262/#sec-createiterresultobject +module.exports = function (value, done) { + return { value: value, done: done }; +}; + + +/***/ }), + +/***/ 85250: +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 78113); + +module.exports = DESCRIPTORS ? function (object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), + +/***/ 78113: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! + \**********************************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), + +/***/ 85567: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/create-property.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 78113); + +module.exports = function (object, key, value) { + if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value)); + else object[key] = value; +}; + + +/***/ }), + +/***/ 59917: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/date-to-iso-string.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var padStart = (__webpack_require__(/*! ../internals/string-pad */ 9172).start); + +var $RangeError = RangeError; +var $isFinite = isFinite; +var abs = Math.abs; +var DatePrototype = Date.prototype; +var nativeDateToISOString = DatePrototype.toISOString; +var thisTimeValue = uncurryThis(DatePrototype.getTime); +var getUTCDate = uncurryThis(DatePrototype.getUTCDate); +var getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear); +var getUTCHours = uncurryThis(DatePrototype.getUTCHours); +var getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds); +var getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes); +var getUTCMonth = uncurryThis(DatePrototype.getUTCMonth); +var getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds); + +// `Date.prototype.toISOString` method implementation +// https://tc39.es/ecma262/#sec-date.prototype.toisostring +// PhantomJS / old WebKit fails here: +module.exports = (fails(function () { + return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z'; +}) || !fails(function () { + nativeDateToISOString.call(new Date(NaN)); +})) ? function toISOString() { + if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value'); + var date = this; + var year = getUTCFullYear(date); + var milliseconds = getUTCMilliseconds(date); + var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; + return sign + padStart(abs(year), sign ? 6 : 4, 0) + + '-' + padStart(getUTCMonth(date) + 1, 2, 0) + + '-' + padStart(getUTCDate(date), 2, 0) + + 'T' + padStart(getUTCHours(date), 2, 0) + + ':' + padStart(getUTCMinutes(date), 2, 0) + + ':' + padStart(getUTCSeconds(date), 2, 0) + + '.' + padStart(milliseconds, 3, 0) + + 'Z'; +} : nativeDateToISOString; + + +/***/ }), + +/***/ 30767: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/date-to-primitive.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ 12093); + +var $TypeError = TypeError; + +// `Date.prototype[@@toPrimitive](hint)` method implementation +// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive +module.exports = function (hint) { + anObject(this); + if (hint === 'string' || hint === 'default') hint = 'string'; + else if (hint !== 'number') throw new $TypeError('Incorrect hint'); + return ordinaryToPrimitive(this, hint); +}; + + +/***/ }), + +/***/ 78683: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/define-built-in-accessor.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var makeBuiltIn = __webpack_require__(/*! ../internals/make-built-in */ 30336); +var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ 82180); + +module.exports = function (target, name, descriptor) { + if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true }); + if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true }); + return defineProperty.f(target, name, descriptor); +}; + + +/***/ }), + +/***/ 97260: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/define-built-in.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var makeBuiltIn = __webpack_require__(/*! ../internals/make-built-in */ 30336); +var defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ 37612); + +module.exports = function (O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable(value)) makeBuiltIn(value, name, options); + if (options.global) { + if (simple) O[key] = value; + else defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; + else if (O[key]) simple = true; + } catch (error) { /* empty */ } + if (simple) O[key] = value; + else definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } return O; +}; + + +/***/ }), + +/***/ 85402: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/define-built-ins.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); + +module.exports = function (target, src, options) { + for (var key in src) defineBuiltIn(target, key, src[key], options); + return target; +}; + + +/***/ }), + +/***/ 37612: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/define-global-property.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; + +module.exports = function (key, value) { + try { + defineProperty(globalThis, key, { value: value, configurable: true, writable: true }); + } catch (error) { + globalThis[key] = value; + } return value; +}; + + +/***/ }), + +/***/ 83951: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/delete-property-or-throw.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ 14824); + +var $TypeError = TypeError; + +module.exports = function (O, P) { + if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O)); +}; + + +/***/ }), + +/***/ 94527: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/descriptors.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// Detect IE8's incomplete defineProperty implementation +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7; +}); + + +/***/ }), + +/***/ 69528: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/document-create-element.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); + +var document = globalThis.document; +// typeof document.createElement is 'object' in old IE +var EXISTS = isObject(document) && isObject(document.createElement); + +module.exports = function (it) { + return EXISTS ? document.createElement(it) : {}; +}; + + +/***/ }), + +/***/ 11600: +/*!************************************************************************!*\ + !*** ./node_modules/core-js/internals/does-not-exceed-safe-integer.js ***! + \************************************************************************/ +/***/ ((module) => { + +"use strict"; + +var $TypeError = TypeError; +var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991 + +module.exports = function (it) { + if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded'); + return it; +}; + + +/***/ }), + +/***/ 51616: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; + +// IE8- don't enum bug keys +module.exports = [ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' +]; + + +/***/ }), + +/***/ 92040: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/environment-ff-version.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ 25058); + +var firefox = userAgent.match(/firefox\/(\d+)/i); + +module.exports = !!firefox && +firefox[1]; + + +/***/ }), + +/***/ 55008: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/internals/environment-is-ie-or-edge.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var UA = __webpack_require__(/*! ../internals/environment-user-agent */ 25058); + +module.exports = /MSIE|Trident/.test(UA); + + +/***/ }), + +/***/ 65018: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/environment-is-node.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var ENVIRONMENT = __webpack_require__(/*! ../internals/environment */ 61848); + +module.exports = ENVIRONMENT === 'NODE'; + + +/***/ }), + +/***/ 25058: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/environment-user-agent.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +var navigator = globalThis.navigator; +var userAgent = navigator && navigator.userAgent; + +module.exports = userAgent ? String(userAgent) : ''; + + +/***/ }), + +/***/ 1462: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/environment-v8-version.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ 25058); + +var process = globalThis.process; +var Deno = globalThis.Deno; +var versions = process && process.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + // in old Chrome, versions of V8 isn't V8 = Chrome / 10 + // but their correct versions are not interesting for us + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); +} + +// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0` +// so check `userAgent` even if `.v8` exists, but 0 +if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } +} + +module.exports = version; + + +/***/ }), + +/***/ 24690: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/environment-webkit-version.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ 25058); + +var webkit = userAgent.match(/AppleWebKit\/(\d+)\./); + +module.exports = !!webkit && +webkit[1]; + + +/***/ }), + +/***/ 61848: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/environment.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* global Bun, Deno -- detection */ +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ 25058); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); + +var userAgentStartsWith = function (string) { + return userAgent.slice(0, string.length) === string; +}; + +module.exports = (function () { + if (userAgentStartsWith('Bun/')) return 'BUN'; + if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE'; + if (userAgentStartsWith('Deno/')) return 'DENO'; + if (userAgentStartsWith('Node.js/')) return 'NODE'; + if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN'; + if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO'; + if (classof(globalThis.process) === 'process') return 'NODE'; + if (globalThis.window && globalThis.document) return 'BROWSER'; + return 'REST'; +})(); + + +/***/ }), + +/***/ 12203: +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/export.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 85250); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ 37612); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 43107); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 78367); + +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.dontCallGetSet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ +module.exports = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = globalThis; + } else if (STATIC) { + target = globalThis[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = globalThis[TARGET] && globalThis[TARGET].prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); + // contained in target + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + // add a flag to not completely full polyfills + if (options.sham || (targetProperty && targetProperty.sham)) { + createNonEnumerableProperty(sourceProperty, 'sham', true); + } + defineBuiltIn(target, key, sourceProperty, options); + } +}; + + +/***/ }), + +/***/ 84948: +/*!*************************************************!*\ + !*** ./node_modules/core-js/internals/fails.js ***! + \*************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + + +/***/ }), + +/***/ 45365: +/*!******************************************************************************!*\ + !*** ./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js ***! + \******************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` since it's moved to entry points +__webpack_require__(/*! ../modules/es.regexp.exec */ 42478); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 90956); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 85250); + +var SPECIES = wellKnownSymbol('species'); +var RegExpPrototype = RegExp.prototype; + +module.exports = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol(KEY); + + var DELEGATES_TO_SYMBOL = !fails(function () { + // String methods call symbol-named RegExp methods + var O = {}; + O[SYMBOL] = function () { return 7; }; + return ''[KEY](O) !== 7; + }); + + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; + // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + re.constructor = {}; + re.constructor[SPECIES] = function () { return re; }; + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { + execCalled = true; + return null; + }; + + re[SYMBOL](''); + return !execCalled; + }); + + if ( + !DELEGATES_TO_SYMBOL || + !DELEGATES_TO_EXEC || + FORCED + ) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + if ($exec === regexpExec || $exec === RegExpPrototype.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) }; + } + return { done: true, value: call(nativeMethod, str, regexp, arg2) }; + } + return { done: false }; + }); + + defineBuiltIn(String.prototype, KEY, methods[0]); + defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true); +}; + + +/***/ }), + +/***/ 9838: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/flatten-into-array.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ 11600); +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 41807); + +// `FlattenIntoArray` abstract operation +// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray +var flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) { + var targetIndex = start; + var sourceIndex = 0; + var mapFn = mapper ? bind(mapper, thisArg) : false; + var element, elementLen; + + while (sourceIndex < sourceLen) { + if (sourceIndex in source) { + element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; + + if (depth > 0 && isArray(element)) { + elementLen = lengthOfArrayLike(element); + targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1; + } else { + doesNotExceedSafeInteger(targetIndex + 1); + target[targetIndex] = element; + } + + targetIndex++; + } + sourceIndex++; + } + return targetIndex; +}; + +module.exports = flattenIntoArray; + + +/***/ }), + +/***/ 16681: +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/freezing.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); +}); + + +/***/ }), + +/***/ 62144: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/function-apply.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ 27193); + +var FunctionPrototype = Function.prototype; +var apply = FunctionPrototype.apply; +var call = FunctionPrototype.call; + +// eslint-disable-next-line es/no-reflect -- safe +module.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () { + return call.apply(apply, arguments); +}); + + +/***/ }), + +/***/ 41807: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/function-bind-context.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ 68417); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ 27193); + +var bind = uncurryThis(uncurryThis.bind); + +// optional / simple context binding +module.exports = function (fn, that) { + aCallable(fn); + return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), + +/***/ 27193: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/function-bind-native.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +module.exports = !fails(function () { + // eslint-disable-next-line es/no-function-prototype-bind -- safe + var test = (function () { /* empty */ }).bind(); + // eslint-disable-next-line no-prototype-builtins -- safe + return typeof test != 'function' || test.hasOwnProperty('prototype'); +}); + + +/***/ }), + +/***/ 90265: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/function-bind.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ 37147); +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ 27193); + +var $Function = Function; +var concat = uncurryThis([].concat); +var join = uncurryThis([].join); +var factories = {}; + +var construct = function (C, argsLength, args) { + if (!hasOwn(factories, argsLength)) { + var list = []; + var i = 0; + for (; i < argsLength; i++) list[i] = 'a[' + i + ']'; + factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')'); + } return factories[argsLength](C, args); +}; + +// `Function.prototype.bind` method implementation +// https://tc39.es/ecma262/#sec-function.prototype.bind +// eslint-disable-next-line es/no-function-prototype-bind -- detection +module.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) { + var F = aCallable(this); + var Prototype = F.prototype; + var partArgs = arraySlice(arguments, 1); + var boundFunction = function bound(/* args... */) { + var args = concat(partArgs, arraySlice(arguments)); + return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args); + }; + if (isObject(Prototype)) boundFunction.prototype = Prototype; + return boundFunction; +}; + + +/***/ }), + +/***/ 90082: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/function-call.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ 27193); + +var call = Function.prototype.call; + +module.exports = NATIVE_BIND ? call.bind(call) : function () { + return call.apply(call, arguments); +}; + + +/***/ }), + +/***/ 26553: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/function-name.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); + +var FunctionPrototype = Function.prototype; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + +var EXISTS = hasOwn(FunctionPrototype, 'name'); +// additional protection from minified / mangled / dropped function names +var PROPER = EXISTS && (function something() { /* empty */ }).name === 'something'; +var CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable)); + +module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + + +/***/ }), + +/***/ 74807: +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/internals/function-uncurry-this-accessor.js ***! + \**************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); + +module.exports = function (object, key, method) { + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method])); + } catch (error) { /* empty */ } +}; + + +/***/ }), + +/***/ 68417: +/*!************************************************************************!*\ + !*** ./node_modules/core-js/internals/function-uncurry-this-clause.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +module.exports = function (fn) { + // Nashorn bug: + // https://github.com/zloirock/core-js/issues/1128 + // https://github.com/zloirock/core-js/issues/1130 + if (classofRaw(fn) === 'Function') return uncurryThis(fn); +}; + + +/***/ }), + +/***/ 14811: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/function-uncurry-this.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ 27193); + +var FunctionPrototype = Function.prototype; +var call = FunctionPrototype.call; +var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call); + +module.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) { + return function () { + return call.apply(fn, arguments); + }; +}; + + +/***/ }), + +/***/ 20795: +/*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/get-built-in-prototype-method.js ***! + \*************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +module.exports = function (CONSTRUCTOR, METHOD) { + var Constructor = globalThis[CONSTRUCTOR]; + var Prototype = Constructor && Constructor.prototype; + return Prototype && Prototype[METHOD]; +}; + + +/***/ }), + +/***/ 76102: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/get-built-in.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); + +var aFunction = function (argument) { + return isCallable(argument) ? argument : undefined; +}; + +module.exports = function (namespace, method) { + return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method]; +}; + + +/***/ }), + +/***/ 57084: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/get-iterator-direct.js ***! + \***************************************************************/ +/***/ ((module) => { + +"use strict"; + +// `GetIteratorDirect(obj)` abstract operation +// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect +module.exports = function (obj) { + return { + iterator: obj, + next: obj.next, + done: false + }; +}; + + +/***/ }), + +/***/ 94880: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/get-iterator-method.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof */ 97988); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 56438); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var ITERATOR = wellKnownSymbol('iterator'); + +module.exports = function (it) { + if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) + || getMethod(it, '@@iterator') + || Iterators[classof(it)]; +}; + + +/***/ }), + +/***/ 47716: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/get-iterator.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ 14824); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 94880); + +var $TypeError = TypeError; + +module.exports = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator; + if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument)); + throw new $TypeError(tryToString(argument) + ' is not iterable'); +}; + + +/***/ }), + +/***/ 72632: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/get-json-replacer-function.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); + +var push = uncurryThis([].push); + +module.exports = function (replacer) { + if (isCallable(replacer)) return replacer; + if (!isArray(replacer)) return; + var rawLength = replacer.length; + var keys = []; + for (var i = 0; i < rawLength; i++) { + var element = replacer[i]; + if (typeof element == 'string') push(keys, element); + else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element)); + } + var keysLength = keys.length; + var root = true; + return function (key, value) { + if (root) { + root = false; + return value; + } + if (isArray(this)) return value; + for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value; + }; +}; + + +/***/ }), + +/***/ 34639: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/get-method.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); + +// `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod +module.exports = function (V, P) { + var func = V[P]; + return isNullOrUndefined(func) ? undefined : aCallable(func); +}; + + +/***/ }), + +/***/ 72628: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/get-set-record.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var getIteratorDirect = __webpack_require__(/*! ../internals/get-iterator-direct */ 57084); + +var INVALID_SIZE = 'Invalid size'; +var $RangeError = RangeError; +var $TypeError = TypeError; +var max = Math.max; + +var SetRecord = function (set, intSize) { + this.set = set; + this.size = max(intSize, 0); + this.has = aCallable(set.has); + this.keys = aCallable(set.keys); +}; + +SetRecord.prototype = { + getIterator: function () { + return getIteratorDirect(anObject(call(this.keys, this.set))); + }, + includes: function (it) { + return call(this.has, this.set, it); + } +}; + +// `GetSetRecord` abstract operation +// https://tc39.es/proposal-set-methods/#sec-getsetrecord +module.exports = function (obj) { + anObject(obj); + var numSize = +obj.size; + // NOTE: If size is undefined, then numSize will be NaN + // eslint-disable-next-line no-self-compare -- NaN check + if (numSize !== numSize) throw new $TypeError(INVALID_SIZE); + var intSize = toIntegerOrInfinity(numSize); + if (intSize < 0) throw new $RangeError(INVALID_SIZE); + return new SetRecord(obj, intSize); +}; + + +/***/ }), + +/***/ 38239: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/get-substitution.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); + +var floor = Math.floor; +var charAt = uncurryThis(''.charAt); +var replace = uncurryThis(''.replace); +var stringSlice = uncurryThis(''.slice); +// eslint-disable-next-line redos/no-vulnerable -- safe +var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; +var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; + +// `GetSubstitution` abstract operation +// https://tc39.es/ecma262/#sec-getsubstitution +module.exports = function (matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + if (namedCaptures !== undefined) { + namedCaptures = toObject(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + return replace(replacement, symbols, function (match, ch) { + var capture; + switch (charAt(ch, 0)) { + case '$': return '$'; + case '&': return matched; + case '`': return stringSlice(str, 0, position); + case "'": return stringSlice(str, tailPos); + case '<': + capture = namedCaptures[stringSlice(ch, 1, -1)]; + break; + default: // \d\d? + var n = +ch; + if (n === 0) return match; + if (n > m) { + var f = floor(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1); + return match; + } + capture = captures[n - 1]; + } + return capture === undefined ? '' : capture; + }); +}; + + +/***/ }), + +/***/ 41991: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/global-this.js ***! + \*******************************************************/ +/***/ (function(module) { + +"use strict"; + +var check = function (it) { + return it && it.Math === Math && it; +}; + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +module.exports = + // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || + check(typeof window == 'object' && window) || + // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || + check(typeof global == 'object' && global) || + check(typeof this == 'object' && this) || + // eslint-disable-next-line no-new-func -- fallback + (function () { return this; })() || Function('return this')(); + + +/***/ }), + +/***/ 74404: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/has-own-property.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); + +var hasOwnProperty = uncurryThis({}.hasOwnProperty); + +// `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty +// eslint-disable-next-line es/no-object-hasown -- safe +module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); +}; + + +/***/ }), + +/***/ 81930: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/hidden-keys.js ***! + \*******************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ 83896: +/*!************************************************!*\ + !*** ./node_modules/core-js/internals/html.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); + +module.exports = getBuiltIn('document', 'documentElement'); + + +/***/ }), + +/***/ 51976: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var createElement = __webpack_require__(/*! ../internals/document-create-element */ 69528); + +// Thanks to IE8 for its funny defineProperty +module.exports = !DESCRIPTORS && !fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(createElement('div'), 'a', { + get: function () { return 7; } + }).a !== 7; +}); + + +/***/ }), + +/***/ 79114: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/indexed-object.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); + +var $Object = Object; +var split = uncurryThis(''.split); + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +module.exports = fails(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !$Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof(it) === 'String' ? split(it, '') : $Object(it); +} : $Object; + + +/***/ }), + +/***/ 3180: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/inherit-if-required.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 87888); + +// makes subclassing work correct for wrapped built-ins +module.exports = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( + // it can work only with native `setPrototypeOf` + setPrototypeOf && + // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable(NewTarget = dummy.constructor) && + NewTarget !== Wrapper && + isObject(NewTargetPrototype = NewTarget.prototype) && + NewTargetPrototype !== Wrapper.prototype + ) setPrototypeOf($this, NewTargetPrototype); + return $this; +}; + + +/***/ }), + +/***/ 48447: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/inspect-source.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var store = __webpack_require__(/*! ../internals/shared-store */ 10728); + +var functionToString = uncurryThis(Function.toString); + +// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper +if (!isCallable(store.inspectSource)) { + store.inspectSource = function (it) { + return functionToString(it); + }; +} + +module.exports = store.inspectSource; + + +/***/ }), + +/***/ 54324: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/internal-metadata.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 81930); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 92323); +var getOwnPropertyNamesExternalModule = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ 13207); +var isExtensible = __webpack_require__(/*! ../internals/object-is-extensible */ 55317); +var uid = __webpack_require__(/*! ../internals/uid */ 82459); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ 16681); + +var REQUIRED = false; +var METADATA = uid('meta'); +var id = 0; + +var setMetadata = function (it) { + defineProperty(it, METADATA, { value: { + objectID: 'O' + id++, // object ID + weakData: {} // weak collections IDs + } }); +}; + +var fastKey = function (it, create) { + // return a primitive with prefix + if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return 'F'; + // not necessary to add metadata + if (!create) return 'E'; + // add missing metadata + setMetadata(it); + // return object ID + } return it[METADATA].objectID; +}; + +var getWeakData = function (it, create) { + if (!hasOwn(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible(it)) return true; + // not necessary to add metadata + if (!create) return false; + // add missing metadata + setMetadata(it); + // return the store of weak collections IDs + } return it[METADATA].weakData; +}; + +// add metadata on freeze-family methods calling +var onFreeze = function (it) { + if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it); + return it; +}; + +var enable = function () { + meta.enable = function () { /* empty */ }; + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = uncurryThis([].splice); + var test = {}; + test[METADATA] = 1; + + // prevent exposing of metadata key + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function (it) { + var result = getOwnPropertyNames(it); + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice(result, i, 1); + break; + } + } return result; + }; + + $({ target: 'Object', stat: true, forced: true }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } +}; + +var meta = module.exports = { + enable: enable, + fastKey: fastKey, + getWeakData: getWeakData, + onFreeze: onFreeze +}; + +hiddenKeys[METADATA] = true; + + +/***/ }), + +/***/ 49804: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/internal-state.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/weak-map-basic-detection */ 13839); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 85250); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var shared = __webpack_require__(/*! ../internals/shared-store */ 10728); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 39733); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 81930); + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var TypeError = globalThis.TypeError; +var WeakMap = globalThis.WeakMap; +var set, get, has; + +var enforce = function (it) { + return has(it) ? get(it) : set(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw new TypeError('Incompatible receiver, ' + TYPE + ' required'); + } return state; + }; +}; + +if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + /* eslint-disable no-self-assign -- prototype methods protection */ + store.get = store.get; + store.has = store.has; + store.set = store.set; + /* eslint-enable no-self-assign -- prototype methods protection */ + set = function (it, metadata) { + if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + store.set(it, metadata); + return metadata; + }; + get = function (it) { + return store.get(it) || {}; + }; + has = function (it) { + return store.has(it); + }; +} else { + var STATE = sharedKey('state'); + hiddenKeys[STATE] = true; + set = function (it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function (it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function (it) { + return hasOwn(it, STATE); + }; +} + +module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor +}; + + +/***/ }), + +/***/ 9516: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 56438); + +var ITERATOR = wellKnownSymbol('iterator'); +var ArrayPrototype = Array.prototype; + +// check on default Array iterator +module.exports = function (it) { + return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); +}; + + +/***/ }), + +/***/ 6681: +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/is-array.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); + +// `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es/no-array-isarray -- safe +module.exports = Array.isArray || function isArray(argument) { + return classof(argument) === 'Array'; +}; + + +/***/ }), + +/***/ 74946: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/is-callable.js ***! + \*******************************************************/ +/***/ ((module) => { + +"use strict"; + +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot +var documentAll = typeof document == 'object' && document.all; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing +module.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) { + return typeof argument == 'function' || argument === documentAll; +} : function (argument) { + return typeof argument == 'function'; +}; + + +/***/ }), + +/***/ 93668: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/is-constructor.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var classof = __webpack_require__(/*! ../internals/classof */ 97988); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 48447); + +var noop = function () { /* empty */ }; +var construct = getBuiltIn('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec = uncurryThis(constructorRegExp.exec); +var INCORRECT_TO_STRING = !constructorRegExp.test(noop); + +var isConstructorModern = function isConstructor(argument) { + if (!isCallable(argument)) return false; + try { + construct(noop, [], argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function isConstructor(argument) { + if (!isCallable(argument)) return false; + switch (classof(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': return false; + } + try { + // we can't check .prototype since constructors produced by .bind haven't it + // `Function#toString` throws on some built-it function in some legacy engines + // (for example, `DOMQuad` and similar in FF41-) + return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument)); + } catch (error) { + return true; + } +}; + +isConstructorLegacy.sham = true; + +// `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor +module.exports = !construct || fails(function () { + var called; + return isConstructorModern(isConstructorModern.call) + || !isConstructorModern(Object) + || !isConstructorModern(function () { called = true; }) + || called; +}) ? isConstructorLegacy : isConstructorModern; + + +/***/ }), + +/***/ 84882: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/is-data-descriptor.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); + +module.exports = function (descriptor) { + return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable')); +}; + + +/***/ }), + +/***/ 78367: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-forced.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); + +var replacement = /#|\.prototype\./; + +var isForced = function (feature, detection) { + var value = data[normalize(feature)]; + return value === POLYFILL ? true + : value === NATIVE ? false + : isCallable(detection) ? fails(detection) + : !!detection; +}; + +var normalize = isForced.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced.data = {}; +var NATIVE = isForced.NATIVE = 'N'; +var POLYFILL = isForced.POLYFILL = 'P'; + +module.exports = isForced; + + +/***/ }), + +/***/ 46226: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/is-integral-number.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); + +var floor = Math.floor; + +// `IsIntegralNumber` abstract operation +// https://tc39.es/ecma262/#sec-isintegralnumber +// eslint-disable-next-line es/no-number-isinteger -- safe +module.exports = Number.isInteger || function isInteger(it) { + return !isObject(it) && isFinite(it) && floor(it) === it; +}; + + +/***/ }), + +/***/ 93448: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/is-null-or-undefined.js ***! + \****************************************************************/ +/***/ ((module) => { + +"use strict"; + +// we can't use just `it == null` since of `document.all` special case +// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec +module.exports = function (it) { + return it === null || it === undefined; +}; + + +/***/ }), + +/***/ 92181: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-object.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); + +module.exports = function (it) { + return typeof it == 'object' ? it !== null : isCallable(it); +}; + + +/***/ }), + +/***/ 83290: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/is-possible-prototype.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); + +module.exports = function (argument) { + return isObject(argument) || argument === null; +}; + + +/***/ }), + +/***/ 7064: +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/is-pure.js ***! + \***************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = false; + + +/***/ }), + +/***/ 71663: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-regexp.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var MATCH = wellKnownSymbol('match'); + +// `IsRegExp` abstract operation +// https://tc39.es/ecma262/#sec-isregexp +module.exports = function (it) { + var isRegExp; + return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp'); +}; + + +/***/ }), + +/***/ 25378: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/is-symbol.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 76015); + +var $Object = Object; + +module.exports = USE_SYMBOL_AS_UID ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn('Symbol'); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); +}; + + +/***/ }), + +/***/ 62710: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/iterate-simple.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); + +module.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) { + var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator; + var next = record.next; + var step, result; + while (!(step = call(next, iterator)).done) { + result = fn(step.value); + if (result !== undefined) return result; + } +}; + + +/***/ }), + +/***/ 56239: +/*!***************************************************!*\ + !*** ./node_modules/core-js/internals/iterate.js ***! + \***************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var bind = __webpack_require__(/*! ../internals/function-bind-context */ 41807); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ 14824); +var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ 9516); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var getIterator = __webpack_require__(/*! ../internals/get-iterator */ 47716); +var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ 94880); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ 3554); + +var $TypeError = TypeError; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var ResultPrototype = Result.prototype; + +module.exports = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_RECORD = !!(options && options.IS_RECORD); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind(unboundFunction, that); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_RECORD) { + iterator = iterable.iterator; + } else if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod(iterable); + if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable'); + // optimisation for array iterators + if (isArrayIteratorMethod(iterFn)) { + for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); + } + iterator = getIterator(iterable, iterFn); + } + + next = IS_RECORD ? iterable.next : iterator.next; + while (!(step = call(next, iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose(iterator, 'throw', error); + } + if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result; + } return new Result(false); +}; + + +/***/ }), + +/***/ 3554: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/iterator-close.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); + +module.exports = function (iterator, kind, value) { + var innerResult, innerError; + anObject(iterator); + try { + innerResult = getMethod(iterator, 'return'); + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + innerResult = call(innerResult, iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject(innerResult); + return value; +}; + + +/***/ }), + +/***/ 26501: +/*!***********************************************************************!*\ + !*** ./node_modules/core-js/internals/iterator-create-constructor.js ***! + \***********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IteratorPrototype = (__webpack_require__(/*! ../internals/iterators-core */ 45732).IteratorPrototype); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 78113); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 56438); + +var returnThis = function () { return this; }; + +module.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) }); + setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); + Iterators[TO_STRING_TAG] = returnThis; + return IteratorConstructor; +}; + + +/***/ }), + +/***/ 93167: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/iterator-define.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var FunctionName = __webpack_require__(/*! ../internals/function-name */ 26553); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ 26501); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 87888); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 85250); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 56438); +var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ 45732); + +var PROPER_FUNCTION_NAME = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var IteratorPrototype = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR = wellKnownSymbol('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { return this; }; + +module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; + case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; + case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; + } + + return function () { return new IteratorConstructor(this); }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR] + || IterablePrototype['@@iterator'] + || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; + + // fix native + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { + if (setPrototypeOf) { + setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); + } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) { + defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis); + } + } + // Set @@toStringTag to native iterators + setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); + if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; + } + } + + // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + defaultIterator = function values() { return call(nativeIterator, this); }; + } + } + + // export additional methods + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + defineBuiltIn(IterablePrototype, KEY, methods[KEY]); + } + } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); + } + + // define iterator + if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { + defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT }); + } + Iterators[NAME] = defaultIterator; + + return methods; +}; + + +/***/ }), + +/***/ 45732: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/iterators-core.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); + +var ITERATOR = wellKnownSymbol('iterator'); +var BUGGY_SAFARI_ITERATORS = false; + +// `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object +var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; + +/* eslint-disable es/no-array-prototype-keys -- safe */ +if ([].keys) { + arrayIterator = [].keys(); + // Safari 8 has buggy iterators w/o `next` + if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; + else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () { + var test = {}; + // FF44- legacy iterators case + return IteratorPrototype[ITERATOR].call(test) !== test; +}); + +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {}; +else if (IS_PURE) IteratorPrototype = create(IteratorPrototype); + +// `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator +if (!isCallable(IteratorPrototype[ITERATOR])) { + defineBuiltIn(IteratorPrototype, ITERATOR, function () { + return this; + }); +} + +module.exports = { + IteratorPrototype: IteratorPrototype, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS +}; + + +/***/ }), + +/***/ 56438: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/iterators.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + +module.exports = {}; + + +/***/ }), + +/***/ 45543: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/length-of-array-like.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); + +// `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike +module.exports = function (obj) { + return toLength(obj.length); +}; + + +/***/ }), + +/***/ 30336: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/make-built-in.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ 26553).CONFIGURABLE); +var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ 48447); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); + +var enforceInternalState = InternalStateModule.enforce; +var getInternalState = InternalStateModule.get; +var $String = String; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var defineProperty = Object.defineProperty; +var stringSlice = uncurryThis(''.slice); +var replace = uncurryThis(''.replace); +var join = uncurryThis([].join); + +var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () { + return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8; +}); + +var TEMPLATE = String(String).split('String'); + +var makeBuiltIn = module.exports = function (value, name, options) { + if (stringSlice($String(name), 0, 7) === 'Symbol(') { + name = '[' + replace($String(name), /^Symbol\(([^)]*)\).*$/, '$1') + ']'; + } + if (options && options.getter) name = 'get ' + name; + if (options && options.setter) name = 'set ' + name; + if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) { + if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true }); + else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) { + defineProperty(value, 'length', { value: options.arity }); + } + try { + if (options && hasOwn(options, 'constructor') && options.constructor) { + if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false }); + // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable + } else if (value.prototype) value.prototype = undefined; + } catch (error) { /* empty */ } + var state = enforceInternalState(value); + if (!hasOwn(state, 'source')) { + state.source = join(TEMPLATE, typeof name == 'string' ? name : ''); + } return value; +}; + +// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +// eslint-disable-next-line no-extend-native -- required +Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); +}, 'toString'); + + +/***/ }), + +/***/ 84671: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/map-helpers.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +// eslint-disable-next-line es/no-map -- safe +var MapPrototype = Map.prototype; + +module.exports = { + // eslint-disable-next-line es/no-map -- safe + Map: Map, + set: uncurryThis(MapPrototype.set), + get: uncurryThis(MapPrototype.get), + has: uncurryThis(MapPrototype.has), + remove: uncurryThis(MapPrototype['delete']), + proto: MapPrototype +}; + + +/***/ }), + +/***/ 62955: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/math-expm1.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +// eslint-disable-next-line es/no-math-expm1 -- safe +var $expm1 = Math.expm1; +var exp = Math.exp; + +// `Math.expm1` method implementation +// https://tc39.es/ecma262/#sec-math.expm1 +module.exports = (!$expm1 + // Old FF bug + // eslint-disable-next-line no-loss-of-precision -- required for old engines + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 + // Tor Browser bug + || $expm1(-2e-17) !== -2e-17 +) ? function expm1(x) { + var n = +x; + return n === 0 ? n : n > -1e-6 && n < 1e-6 ? n + n * n / 2 : exp(n) - 1; +} : $expm1; + + +/***/ }), + +/***/ 64609: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/math-float-round.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var sign = __webpack_require__(/*! ../internals/math-sign */ 40201); + +var abs = Math.abs; + +var EPSILON = 2.220446049250313e-16; // Number.EPSILON +var INVERSE_EPSILON = 1 / EPSILON; + +var roundTiesToEven = function (n) { + return n + INVERSE_EPSILON - INVERSE_EPSILON; +}; + +module.exports = function (x, FLOAT_EPSILON, FLOAT_MAX_VALUE, FLOAT_MIN_VALUE) { + var n = +x; + var absolute = abs(n); + var s = sign(n); + if (absolute < FLOAT_MIN_VALUE) return s * roundTiesToEven(absolute / FLOAT_MIN_VALUE / FLOAT_EPSILON) * FLOAT_MIN_VALUE * FLOAT_EPSILON; + var a = (1 + FLOAT_EPSILON / EPSILON) * absolute; + var result = a - (a - absolute); + // eslint-disable-next-line no-self-compare -- NaN check + if (result > FLOAT_MAX_VALUE || result !== result) return s * Infinity; + return s * result; +}; + + +/***/ }), + +/***/ 12150: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/math-fround.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var floatRound = __webpack_require__(/*! ../internals/math-float-round */ 64609); + +var FLOAT32_EPSILON = 1.1920928955078125e-7; // 2 ** -23; +var FLOAT32_MAX_VALUE = 3.4028234663852886e+38; // 2 ** 128 - 2 ** 104 +var FLOAT32_MIN_VALUE = 1.1754943508222875e-38; // 2 ** -126; + +// `Math.fround` method implementation +// https://tc39.es/ecma262/#sec-math.fround +// eslint-disable-next-line es/no-math-fround -- safe +module.exports = Math.fround || function fround(x) { + return floatRound(x, FLOAT32_EPSILON, FLOAT32_MAX_VALUE, FLOAT32_MIN_VALUE); +}; + + +/***/ }), + +/***/ 67349: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/math-log10.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +var log = Math.log; +var LOG10E = Math.LOG10E; + +// eslint-disable-next-line es/no-math-log10 -- safe +module.exports = Math.log10 || function log10(x) { + return log(x) * LOG10E; +}; + + +/***/ }), + +/***/ 32245: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/math-log1p.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +var log = Math.log; + +// `Math.log1p` method implementation +// https://tc39.es/ecma262/#sec-math.log1p +// eslint-disable-next-line es/no-math-log1p -- safe +module.exports = Math.log1p || function log1p(x) { + var n = +x; + return n > -1e-8 && n < 1e-8 ? n - n * n / 2 : log(1 + n); +}; + + +/***/ }), + +/***/ 40201: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/math-sign.js ***! + \*****************************************************/ +/***/ ((module) => { + +"use strict"; + +// `Math.sign` method implementation +// https://tc39.es/ecma262/#sec-math.sign +// eslint-disable-next-line es/no-math-sign -- safe +module.exports = Math.sign || function sign(x) { + var n = +x; + // eslint-disable-next-line no-self-compare -- NaN check + return n === 0 || n !== n ? n : n < 0 ? -1 : 1; +}; + + +/***/ }), + +/***/ 54896: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/math-trunc.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +var ceil = Math.ceil; +var floor = Math.floor; + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +// eslint-disable-next-line es/no-math-trunc -- safe +module.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); +}; + + +/***/ }), + +/***/ 66418: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/not-a-regexp.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 71663); + +var $TypeError = TypeError; + +module.exports = function (it) { + if (isRegExp(it)) { + throw new $TypeError("The method doesn't accept regular expressions"); + } return it; +}; + + +/***/ }), + +/***/ 96845: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/number-is-finite.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +var globalIsFinite = globalThis.isFinite; + +// `Number.isFinite` method +// https://tc39.es/ecma262/#sec-number.isfinite +// eslint-disable-next-line es/no-number-isfinite -- safe +module.exports = Number.isFinite || function isFinite(it) { + return typeof it == 'number' && globalIsFinite(it); +}; + + +/***/ }), + +/***/ 3301: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/number-parse-float.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var trim = (__webpack_require__(/*! ../internals/string-trim */ 7329).trim); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 4195); + +var charAt = uncurryThis(''.charAt); +var $parseFloat = globalThis.parseFloat; +var Symbol = globalThis.Symbol; +var ITERATOR = Symbol && Symbol.iterator; +var FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity + // MS Edge 18- broken with boxed symbols + || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); })); + +// `parseFloat` method +// https://tc39.es/ecma262/#sec-parsefloat-string +module.exports = FORCED ? function parseFloat(string) { + var trimmedString = trim(toString(string)); + var result = $parseFloat(trimmedString); + return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result; +} : $parseFloat; + + +/***/ }), + +/***/ 85890: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/number-parse-int.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var trim = (__webpack_require__(/*! ../internals/string-trim */ 7329).trim); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 4195); + +var $parseInt = globalThis.parseInt; +var Symbol = globalThis.Symbol; +var ITERATOR = Symbol && Symbol.iterator; +var hex = /^[+-]?0x/i; +var exec = uncurryThis(hex.exec); +var FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22 + // MS Edge 18- broken with boxed symbols + || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); })); + +// `parseInt` method +// https://tc39.es/ecma262/#sec-parseint-string-radix +module.exports = FORCED ? function parseInt(string, radix) { + var S = trim(toString(string)); + return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10)); +} : $parseInt; + + +/***/ }), + +/***/ 79898: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/object-assign.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 70707); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 36842); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 84038); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 79114); + +// eslint-disable-next-line es/no-object-assign -- safe +var $assign = Object.assign; +// eslint-disable-next-line es/no-object-defineproperty -- required for testing +var defineProperty = Object.defineProperty; +var concat = uncurryThis([].concat); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +module.exports = !$assign || fails(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', { + enumerable: true, + get: function () { + defineProperty(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { b: 2 })).b !== 1) return true; + // should work with symbols and should have deterministic property order (V8 bug) + var A = {}; + var B = {}; + // eslint-disable-next-line es/no-symbol -- safe + var symbol = Symbol('assign detection'); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { B[chr] = chr; }); + return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet; +}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } return T; +} : $assign; + + +/***/ }), + +/***/ 30067: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/object-create.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* global ActiveXObject -- old IE, WSH */ +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ 69444); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 51616); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 81930); +var html = __webpack_require__(/*! ../internals/html */ 83896); +var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ 69528); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 39733); + +var GT = '>'; +var LT = '<'; +var PROTOTYPE = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO = sharedKey('IE_PROTO'); + +var EmptyConstructor = function () { /* empty */ }; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; + +// Create object with fake `null` prototype: use ActiveX Object with cleared prototype +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + // eslint-disable-next-line no-useless-assignment -- avoid memory leak + activeXDocument = null; + return temp; +}; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html.appendChild(iframe); + // https://github.com/zloirock/core-js/issues/475 + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; + +// Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug +var activeXDocument; +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { /* ignore */ } + NullProtoObject = typeof document != 'undefined' + ? document.domain && activeXDocument + ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() + : NullProtoObjectViaActiveX(activeXDocument); // WSH + var length = enumBugKeys.length; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; + return NullProtoObject(); +}; + +hiddenKeys[IE_PROTO] = true; + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +// eslint-disable-next-line es/no-object-create -- safe +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + EmptyConstructor[PROTOTYPE] = anObject(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = NullProtoObject(); + return Properties === undefined ? result : definePropertiesModule.f(result, Properties); +}; + + +/***/ }), + +/***/ 69444: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/object-define-properties.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ 75229); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 70707); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +exports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var props = toIndexedObject(Properties); + var keys = objectKeys(Properties); + var length = keys.length; + var index = 0; + var key; + while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]); + return O; +}; + + +/***/ }), + +/***/ 82180: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-define-property.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 51976); +var V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ 75229); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); + +var $TypeError = TypeError; +// eslint-disable-next-line es/no-object-defineproperty -- safe +var $defineProperty = Object.defineProperty; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var ENUMERABLE = 'enumerable'; +var CONFIGURABLE = 'configurable'; +var WRITABLE = 'writable'; + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } return $defineProperty(O, P, Attributes); +} : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), + +/***/ 98158: +/*!******************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 84038); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 78113); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ 51976); + +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) { /* empty */ } + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); +}; + + +/***/ }), + +/***/ 13207: +/*!**********************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-names-external.js ***! + \**********************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-object-getownpropertynames -- safe */ +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var $getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ 92323).f); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ 37147); + +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return $getOwnPropertyNames(it); + } catch (error) { + return arraySlice(windowNames); + } +}; + +// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window +module.exports.f = function getOwnPropertyNames(it) { + return windowNames && classof(it) === 'Window' + ? getWindowNames(it) + : $getOwnPropertyNames(toIndexedObject(it)); +}; + + +/***/ }), + +/***/ 92323: +/*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 68573); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 51616); + +var hiddenKeys = enumBugKeys.concat('length', 'prototype'); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe +exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); +}; + + +/***/ }), + +/***/ 36842: +/*!***************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! + \***************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +exports.f = Object.getOwnPropertySymbols; + + +/***/ }), + +/***/ 63804: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 39733); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 2430); + +var IE_PROTO = sharedKey('IE_PROTO'); +var $Object = Object; +var ObjectPrototype = $Object.prototype; + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +// eslint-disable-next-line es/no-object-getprototypeof -- safe +module.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) { + var object = toObject(O); + if (hasOwn(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + if (isCallable(constructor) && object instanceof constructor) { + return constructor.prototype; + } return object instanceof $Object ? ObjectPrototype : null; +}; + + +/***/ }), + +/***/ 55317: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/object-is-extensible.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(/*! ../internals/array-buffer-non-extensible */ 74591); + +// eslint-disable-next-line es/no-object-isextensible -- safe +var $isExtensible = Object.isExtensible; +var FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); }); + +// `Object.isExtensible` method +// https://tc39.es/ecma262/#sec-object.isextensible +module.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) { + if (!isObject(it)) return false; + if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false; + return $isExtensible ? $isExtensible(it) : true; +} : $isExtensible; + + +/***/ }), + +/***/ 35824: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-is-prototype-of.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +module.exports = uncurryThis({}.isPrototypeOf); + + +/***/ }), + +/***/ 68573: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/object-keys-internal.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var indexOf = (__webpack_require__(/*! ../internals/array-includes */ 84556).indexOf); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 81930); + +var push = uncurryThis([].push); + +module.exports = function (object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + // Don't enum bug & hidden keys + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; +}; + + +/***/ }), + +/***/ 70707: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/object-keys.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ 68573); +var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ 51616); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe +module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); +}; + + +/***/ }), + +/***/ 84038: +/*!*************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +var $propertyIsEnumerable = {}.propertyIsEnumerable; +// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + +// Nashorn ~ JDK8 bug +var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1); + +// `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable +exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable; + + +/***/ }), + +/***/ 34104: +/*!*****************************************************************************!*\ + !*** ./node_modules/core-js/internals/object-prototype-accessors-forced.js ***! + \*****************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var WEBKIT = __webpack_require__(/*! ../internals/environment-webkit-version */ 24690); + +// Forced replacement object prototype accessors methods +module.exports = IS_PURE || !fails(function () { + // This feature detection crashes old WebKit + // https://github.com/zloirock/core-js/issues/232 + if (WEBKIT && WEBKIT < 535) return; + var key = Math.random(); + // In FF throws only define methods + // eslint-disable-next-line no-undef, no-useless-call, es/no-legacy-object-prototype-accessor-methods -- required for testing + __defineSetter__.call(null, key, function () { /* empty */ }); + delete globalThis[key]; +}); + + +/***/ }), + +/***/ 87888: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable no-proto -- safe */ +var uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ 74807); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 50387); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe +module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + try { + setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set'); + setter(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { /* empty */ } + return function setPrototypeOf(O, proto) { + requireObjectCoercible(O); + aPossiblePrototype(proto); + if (!isObject(O)) return O; + if (CORRECT_SETTER) setter(O, proto); + else O.__proto__ = proto; + return O; + }; +}() : undefined); + + +/***/ }), + +/***/ 73922: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/object-to-array.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var objectGetPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 70707); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var $propertyIsEnumerable = (__webpack_require__(/*! ../internals/object-property-is-enumerable */ 84038).f); + +var propertyIsEnumerable = uncurryThis($propertyIsEnumerable); +var push = uncurryThis([].push); + +// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys +// of `null` prototype objects +var IE_BUG = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-create -- safe + var O = Object.create(null); + O[2] = 2; + return !propertyIsEnumerable(O, 2); +}); + +// `Object.{ entries, values }` methods implementation +var createMethod = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null; + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) { + push(result, TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; +}; + +module.exports = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod(false) +}; + + +/***/ }), + +/***/ 54726: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/object-to-string.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 28839); +var classof = __webpack_require__(/*! ../internals/classof */ 97988); + +// `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring +module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() { + return '[object ' + classof(this) + ']'; +}; + + +/***/ }), + +/***/ 12093: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/ordinary-to-primitive.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); + +var $TypeError = TypeError; + +// `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive +module.exports = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw new $TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), + +/***/ 91178: +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/own-keys.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 92323); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 36842); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); + +var concat = uncurryThis([].concat); + +// all object keys, includes non-enumerable and symbols +module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; +}; + + +/***/ }), + +/***/ 90422: +/*!************************************************!*\ + !*** ./node_modules/core-js/internals/path.js ***! + \************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +module.exports = globalThis; + + +/***/ }), + +/***/ 73173: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/proxy-accessor.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); + +module.exports = function (Target, Source, key) { + key in Target || defineProperty(Target, key, { + configurable: true, + get: function () { return Source[key]; }, + set: function (it) { Source[key] = it; } + }); +}; + + +/***/ }), + +/***/ 8371: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-exec-abstract.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ 90956); + +var $TypeError = TypeError; + +// `RegExpExec` abstract operation +// https://tc39.es/ecma262/#sec-regexpexec +module.exports = function (R, S) { + var exec = R.exec; + if (isCallable(exec)) { + var result = call(exec, R, S); + if (result !== null) anObject(result); + return result; + } + if (classof(R) === 'RegExp') return call(regexpExec, R, S); + throw new $TypeError('RegExp#exec called on incompatible receiver'); +}; + + +/***/ }), + +/***/ 90956: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-exec.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ +/* eslint-disable regexp/no-useless-quantifier -- testing */ +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var regexpFlags = __webpack_require__(/*! ../internals/regexp-flags */ 35278); +var stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ 68622); +var shared = __webpack_require__(/*! ../internals/shared */ 27232); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var getInternalState = (__webpack_require__(/*! ../internals/internal-state */ 49804).get); +var UNSUPPORTED_DOT_ALL = __webpack_require__(/*! ../internals/regexp-unsupported-dot-all */ 26478); +var UNSUPPORTED_NCG = __webpack_require__(/*! ../internals/regexp-unsupported-ncg */ 95515); + +var nativeReplace = shared('native-string-replace', String.prototype.replace); +var nativeExec = RegExp.prototype.exec; +var patchedExec = nativeExec; +var charAt = uncurryThis(''.charAt); +var indexOf = uncurryThis(''.indexOf); +var replace = uncurryThis(''.replace); +var stringSlice = uncurryThis(''.slice); + +var UPDATES_LAST_INDEX_WRONG = (function () { + var re1 = /a/; + var re2 = /b*/g; + call(nativeExec, re1, 'a'); + call(nativeExec, re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; +})(); + +var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET; + +// nonparticipating capturing group, copied from es5-shim's String#split patch. +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + +if (PATCH) { + patchedExec = function exec(string) { + var re = this; + var state = getInternalState(re); + var str = toString(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = call(patchedExec, raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y && re.sticky; + var flags = call(regexpFlags, re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = replace(flags, 'y', ''); + if (indexOf(flags, 'g') === -1) { + flags += 'g'; + } + + strCopy = stringSlice(str, re.lastIndex); + // Support anchored sticky behavior. + if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } + // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + + match = call(nativeExec, sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = stringSlice(match.input, charsAdded); + match[0] = stringSlice(match[0], charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/ + call(nativeReplace, match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = create(null); + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; +} + +module.exports = patchedExec; + + +/***/ }), + +/***/ 35278: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-flags.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); + +// `RegExp.prototype.flags` getter implementation +// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags +module.exports = function () { + var that = anObject(this); + var result = ''; + if (that.hasIndices) result += 'd'; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.unicodeSets) result += 'v'; + if (that.sticky) result += 'y'; + return result; +}; + + +/***/ }), + +/***/ 83791: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-get-flags.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var regExpFlags = __webpack_require__(/*! ../internals/regexp-flags */ 35278); + +var RegExpPrototype = RegExp.prototype; + +module.exports = function (R) { + var flags = R.flags; + return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R) + ? call(regExpFlags, R) : flags; +}; + + +/***/ }), + +/***/ 68622: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-sticky-helpers.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError +var $RegExp = globalThis.RegExp; + +var UNSUPPORTED_Y = fails(function () { + var re = $RegExp('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') !== null; +}); + +// UC Browser bug +// https://github.com/zloirock/core-js/issues/1008 +var MISSED_STICKY = UNSUPPORTED_Y || fails(function () { + return !$RegExp('a', 'y').sticky; +}); + +var BROKEN_CARET = UNSUPPORTED_Y || fails(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') !== null; +}); + +module.exports = { + BROKEN_CARET: BROKEN_CARET, + MISSED_STICKY: MISSED_STICKY, + UNSUPPORTED_Y: UNSUPPORTED_Y +}; + + +/***/ }), + +/***/ 26478: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-unsupported-dot-all.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError +var $RegExp = globalThis.RegExp; + +module.exports = fails(function () { + var re = $RegExp('.', 's'); + return !(re.dotAll && re.test('\n') && re.flags === 's'); +}); + + +/***/ }), + +/***/ 95515: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/regexp-unsupported-ncg.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError +var $RegExp = globalThis.RegExp; + +module.exports = fails(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || + 'b'.replace(re, '$c') !== 'bc'; +}); + + +/***/ }), + +/***/ 13111: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/require-object-coercible.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); + +var $TypeError = TypeError; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +module.exports = function (it) { + if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), + +/***/ 33131: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/same-value.js ***! + \******************************************************/ +/***/ ((module) => { + +"use strict"; + +// `SameValue` abstract operation +// https://tc39.es/ecma262/#sec-samevalue +// eslint-disable-next-line es/no-object-is -- safe +module.exports = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y ? x !== 0 || 1 / x === 1 / y : x !== x && y !== y; +}; + + +/***/ }), + +/***/ 59209: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/set-clone.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ 82385); +var iterate = __webpack_require__(/*! ../internals/set-iterate */ 18586); + +var Set = SetHelpers.Set; +var add = SetHelpers.add; + +module.exports = function (set) { + var result = new Set(); + iterate(set, function (it) { + add(result, it); + }); + return result; +}; + + +/***/ }), + +/***/ 2153: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/internals/set-difference.js ***! + \**********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ 82385); +var clone = __webpack_require__(/*! ../internals/set-clone */ 59209); +var size = __webpack_require__(/*! ../internals/set-size */ 41287); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); +var iterateSet = __webpack_require__(/*! ../internals/set-iterate */ 18586); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); + +var has = SetHelpers.has; +var remove = SetHelpers.remove; + +// `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods +module.exports = function difference(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + var result = clone(O); + if (size(O) <= otherRec.size) iterateSet(O, function (e) { + if (otherRec.includes(e)) remove(result, e); + }); + else iterateSimple(otherRec.getIterator(), function (e) { + if (has(O, e)) remove(result, e); + }); + return result; +}; + + +/***/ }), + +/***/ 82385: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/set-helpers.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +// eslint-disable-next-line es/no-set -- safe +var SetPrototype = Set.prototype; + +module.exports = { + // eslint-disable-next-line es/no-set -- safe + Set: Set, + add: uncurryThis(SetPrototype.add), + has: uncurryThis(SetPrototype.has), + remove: uncurryThis(SetPrototype['delete']), + proto: SetPrototype +}; + + +/***/ }), + +/***/ 60139: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/set-intersection.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ 82385); +var size = __webpack_require__(/*! ../internals/set-size */ 41287); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); +var iterateSet = __webpack_require__(/*! ../internals/set-iterate */ 18586); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); + +var Set = SetHelpers.Set; +var add = SetHelpers.add; +var has = SetHelpers.has; + +// `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods +module.exports = function intersection(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + var result = new Set(); + + if (size(O) > otherRec.size) { + iterateSimple(otherRec.getIterator(), function (e) { + if (has(O, e)) add(result, e); + }); + } else { + iterateSet(O, function (e) { + if (otherRec.includes(e)) add(result, e); + }); + } + + return result; +}; + + +/***/ }), + +/***/ 43820: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/internals/set-is-disjoint-from.js ***! + \****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var has = (__webpack_require__(/*! ../internals/set-helpers */ 82385).has); +var size = __webpack_require__(/*! ../internals/set-size */ 41287); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); +var iterateSet = __webpack_require__(/*! ../internals/set-iterate */ 18586); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ 3554); + +// `Set.prototype.isDisjointFrom` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom +module.exports = function isDisjointFrom(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) <= otherRec.size) return iterateSet(O, function (e) { + if (otherRec.includes(e)) return false; + }, true) !== false; + var iterator = otherRec.getIterator(); + return iterateSimple(iterator, function (e) { + if (has(O, e)) return iteratorClose(iterator, 'normal', false); + }) !== false; +}; + + +/***/ }), + +/***/ 9195: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/set-is-subset-of.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var size = __webpack_require__(/*! ../internals/set-size */ 41287); +var iterate = __webpack_require__(/*! ../internals/set-iterate */ 18586); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); + +// `Set.prototype.isSubsetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf +module.exports = function isSubsetOf(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) > otherRec.size) return false; + return iterate(O, function (e) { + if (!otherRec.includes(e)) return false; + }, true) !== false; +}; + + +/***/ }), + +/***/ 29386: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/set-is-superset-of.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var has = (__webpack_require__(/*! ../internals/set-helpers */ 82385).has); +var size = __webpack_require__(/*! ../internals/set-size */ 41287); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); +var iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ 3554); + +// `Set.prototype.isSupersetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf +module.exports = function isSupersetOf(other) { + var O = aSet(this); + var otherRec = getSetRecord(other); + if (size(O) < otherRec.size) return false; + var iterator = otherRec.getIterator(); + return iterateSimple(iterator, function (e) { + if (!has(O, e)) return iteratorClose(iterator, 'normal', false); + }) !== false; +}; + + +/***/ }), + +/***/ 18586: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/set-iterate.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ 82385); + +var Set = SetHelpers.Set; +var SetPrototype = SetHelpers.proto; +var forEach = uncurryThis(SetPrototype.forEach); +var keys = uncurryThis(SetPrototype.keys); +var next = keys(new Set()).next; + +module.exports = function (set, fn, interruptible) { + return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn); +}; + + +/***/ }), + +/***/ 32093: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/set-method-accept-set-like.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); + +var createSetLike = function (size) { + return { + size: size, + has: function () { + return false; + }, + keys: function () { + return { + next: function () { + return { done: true }; + } + }; + } + }; +}; + +module.exports = function (name) { + var Set = getBuiltIn('Set'); + try { + new Set()[name](createSetLike(0)); + try { + // late spec change, early WebKit ~ Safari 17.0 beta implementation does not pass it + // https://github.com/tc39/proposal-set-methods/pull/88 + new Set()[name](createSetLike(-1)); + return false; + } catch (error2) { + return true; + } + } catch (error) { + return false; + } +}; + + +/***/ }), + +/***/ 41287: +/*!****************************************************!*\ + !*** ./node_modules/core-js/internals/set-size.js ***! + \****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ 74807); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ 82385); + +module.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) { + return set.size; +}; + + +/***/ }), + +/***/ 69494: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/set-species.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); + +var SPECIES = wellKnownSymbol('species'); + +module.exports = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn(CONSTRUCTOR_NAME); + + if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { + defineBuiltInAccessor(Constructor, SPECIES, { + configurable: true, + get: function () { return this; } + }); + } +}; + + +/***/ }), + +/***/ 68043: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/set-symmetric-difference.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ 82385); +var clone = __webpack_require__(/*! ../internals/set-clone */ 59209); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); + +var add = SetHelpers.add; +var has = SetHelpers.has; +var remove = SetHelpers.remove; + +// `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods +module.exports = function symmetricDifference(other) { + var O = aSet(this); + var keysIter = getSetRecord(other).getIterator(); + var result = clone(O); + iterateSimple(keysIter, function (e) { + if (has(O, e)) remove(result, e); + else add(result, e); + }); + return result; +}; + + +/***/ }), + +/***/ 39200: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); + +module.exports = function (target, TAG, STATIC) { + if (target && !STATIC) target = target.prototype; + if (target && !hasOwn(target, TO_STRING_TAG)) { + defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG }); + } +}; + + +/***/ }), + +/***/ 1039: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/set-union.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var aSet = __webpack_require__(/*! ../internals/a-set */ 58359); +var add = (__webpack_require__(/*! ../internals/set-helpers */ 82385).add); +var clone = __webpack_require__(/*! ../internals/set-clone */ 59209); +var getSetRecord = __webpack_require__(/*! ../internals/get-set-record */ 72628); +var iterateSimple = __webpack_require__(/*! ../internals/iterate-simple */ 62710); + +// `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods +module.exports = function union(other) { + var O = aSet(this); + var keysIter = getSetRecord(other).getIterator(); + var result = clone(O); + iterateSimple(keysIter, function (it) { + add(result, it); + }); + return result; +}; + + +/***/ }), + +/***/ 39733: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/shared-key.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var shared = __webpack_require__(/*! ../internals/shared */ 27232); +var uid = __webpack_require__(/*! ../internals/uid */ 82459); + +var keys = shared('keys'); + +module.exports = function (key) { + return keys[key] || (keys[key] = uid(key)); +}; + + +/***/ }), + +/***/ 10728: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/shared-store.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ 37612); + +var SHARED = '__core-js_shared__'; +var store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {}); + +(store.versions || (store.versions = [])).push({ + version: '3.38.0', + mode: IS_PURE ? 'pure' : 'global', + copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)', + license: 'https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE', + source: 'https://github.com/zloirock/core-js' +}); + + +/***/ }), + +/***/ 27232: +/*!**************************************************!*\ + !*** ./node_modules/core-js/internals/shared.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var store = __webpack_require__(/*! ../internals/shared-store */ 10728); + +module.exports = function (key, value) { + return store[key] || (store[key] = value || {}); +}; + + +/***/ }), + +/***/ 44090: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/internals/species-constructor.js ***! + \***************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var aConstructor = __webpack_require__(/*! ../internals/a-constructor */ 27267); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var SPECIES = wellKnownSymbol('species'); + +// `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor +module.exports = function (O, defaultConstructor) { + var C = anObject(O).constructor; + var S; + return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S); +}; + + +/***/ }), + +/***/ 95244: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/string-html-forced.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// check the existence of a method, lowercase +// of a tag and escaping quotes in arguments +module.exports = function (METHOD_NAME) { + return fails(function () { + var test = ''[METHOD_NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }); +}; + + +/***/ }), + +/***/ 88054: +/*!************************************************************!*\ + !*** ./node_modules/core-js/internals/string-multibyte.js ***! + \************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); + +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var stringSlice = uncurryThis(''.slice); + +var createMethod = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString(requireObjectCoercible($this)); + var position = toIntegerOrInfinity(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = charCodeAt(S, position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size + || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF + ? CONVERT_TO_STRING + ? charAt(S, position) + : first + : CONVERT_TO_STRING + ? stringSlice(S, position, position + 2) + : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +module.exports = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod(true) +}; + + +/***/ }), + +/***/ 35596: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/string-pad-webkit-bug.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// https://github.com/zloirock/core-js/issues/280 +var userAgent = __webpack_require__(/*! ../internals/environment-user-agent */ 25058); + +module.exports = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(userAgent); + + +/***/ }), + +/***/ 9172: +/*!******************************************************!*\ + !*** ./node_modules/core-js/internals/string-pad.js ***! + \******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// https://github.com/tc39/proposal-string-pad-start-end +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var $repeat = __webpack_require__(/*! ../internals/string-repeat */ 15834); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); + +var repeat = uncurryThis($repeat); +var stringSlice = uncurryThis(''.slice); +var ceil = Math.ceil; + +// `String.prototype.{ padStart, padEnd }` methods implementation +var createMethod = function (IS_END) { + return function ($this, maxLength, fillString) { + var S = toString(requireObjectCoercible($this)); + var intMaxLength = toLength(maxLength); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : toString(fillString); + var fillLen, stringFiller; + if (intMaxLength <= stringLength || fillStr === '') return S; + fillLen = intMaxLength - stringLength; + stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen); + return IS_END ? S + stringFiller : stringFiller + S; + }; +}; + +module.exports = { + // `String.prototype.padStart` method + // https://tc39.es/ecma262/#sec-string.prototype.padstart + start: createMethod(false), + // `String.prototype.padEnd` method + // https://tc39.es/ecma262/#sec-string.prototype.padend + end: createMethod(true) +}; + + +/***/ }), + +/***/ 15834: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/string-repeat.js ***! + \*********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); + +var $RangeError = RangeError; + +// `String.prototype.repeat` method implementation +// https://tc39.es/ecma262/#sec-string.prototype.repeat +module.exports = function repeat(count) { + var str = toString(requireObjectCoercible(this)); + var result = ''; + var n = toIntegerOrInfinity(count); + if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions'); + for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; + return result; +}; + + +/***/ }), + +/***/ 67297: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/string-trim-end.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $trimEnd = (__webpack_require__(/*! ../internals/string-trim */ 7329).end); +var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 30099); + +// `String.prototype.{ trimEnd, trimRight }` method +// https://tc39.es/ecma262/#sec-string.prototype.trimend +// https://tc39.es/ecma262/#String.prototype.trimright +module.exports = forcedStringTrimMethod('trimEnd') ? function trimEnd() { + return $trimEnd(this); +// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe +} : ''.trimEnd; + + +/***/ }), + +/***/ 30099: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/internals/string-trim-forced.js ***! + \**************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var PROPER_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ 26553).PROPER); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 4195); + +var non = '\u200B\u0085\u180E'; + +// check that a method works with the correct list +// of whitespaces and has a correct name +module.exports = function (METHOD_NAME) { + return fails(function () { + return !!whitespaces[METHOD_NAME]() + || non[METHOD_NAME]() !== non + || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME); + }); +}; + + +/***/ }), + +/***/ 34112: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/string-trim-start.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $trimStart = (__webpack_require__(/*! ../internals/string-trim */ 7329).start); +var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 30099); + +// `String.prototype.{ trimStart, trimLeft }` method +// https://tc39.es/ecma262/#sec-string.prototype.trimstart +// https://tc39.es/ecma262/#String.prototype.trimleft +module.exports = forcedStringTrimMethod('trimStart') ? function trimStart() { + return $trimStart(this); +// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe +} : ''.trimStart; + + +/***/ }), + +/***/ 7329: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/string-trim.js ***! + \*******************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ 4195); + +var replace = uncurryThis(''.replace); +var ltrim = RegExp('^[' + whitespaces + ']+'); +var rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$'); + +// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation +var createMethod = function (TYPE) { + return function ($this) { + var string = toString(requireObjectCoercible($this)); + if (TYPE & 1) string = replace(string, ltrim, ''); + if (TYPE & 2) string = replace(string, rtrim, '$1'); + return string; + }; +}; + +module.exports = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod(3) +}; + + +/***/ }), + +/***/ 1918: +/*!************************************************************************!*\ + !*** ./node_modules/core-js/internals/symbol-constructor-detection.js ***! + \************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-symbol -- required for testing */ +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ 1462); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); + +var $String = globalThis.String; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing +module.exports = !!Object.getOwnPropertySymbols && !fails(function () { + var symbol = Symbol('symbol detection'); + // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will, + // of course, fail. + return !$String(symbol) || !(Object(symbol) instanceof Symbol) || + // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION && V8_VERSION < 41; +}); + + +/***/ }), + +/***/ 2755: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/internals/symbol-define-to-primitive.js ***! + \**********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); + +module.exports = function () { + var Symbol = getBuiltIn('Symbol'); + var SymbolPrototype = Symbol && Symbol.prototype; + var valueOf = SymbolPrototype && SymbolPrototype.valueOf; + var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + + if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) { + // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive + // eslint-disable-next-line no-unused-vars -- required for .length + defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) { + return call(valueOf, this); + }, { arity: 1 }); + } +}; + + +/***/ }), + +/***/ 89075: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/internals/symbol-registry-detection.js ***! + \*********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ 1918); + +/* eslint-disable es/no-symbol -- safe */ +module.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor; + + +/***/ }), + +/***/ 92055: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/this-number-value.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +// `thisNumberValue` abstract operation +// https://tc39.es/ecma262/#sec-thisnumbervalue +module.exports = uncurryThis(1.0.valueOf); + + +/***/ }), + +/***/ 65129: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/to-absolute-index.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); + +var max = Math.max; +var min = Math.min; + +// Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). +module.exports = function (index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); +}; + + +/***/ }), + +/***/ 5654: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/to-indexed-object.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 79114); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); + +module.exports = function (it) { + return IndexedObject(requireObjectCoercible(it)); +}; + + +/***/ }), + +/***/ 88306: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/internals/to-integer-or-infinity.js ***! + \******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var trunc = __webpack_require__(/*! ../internals/math-trunc */ 54896); + +// `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity +module.exports = function (argument) { + var number = +argument; + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number || number === 0 ? 0 : trunc(number); +}; + + +/***/ }), + +/***/ 33065: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-length.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); + +var min = Math.min; + +// `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength +module.exports = function (argument) { + var len = toIntegerOrInfinity(argument); + return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + + +/***/ }), + +/***/ 19754: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-object.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); + +var $Object = Object; + +// `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject +module.exports = function (argument) { + return $Object(requireObjectCoercible(argument)); +}; + + +/***/ }), + +/***/ 90468: +/*!********************************************************!*\ + !*** ./node_modules/core-js/internals/to-primitive.js ***! + \********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ 25378); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ 12093); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var $TypeError = TypeError; +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); + +// `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive +module.exports = function (input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw new $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive(input, pref); +}; + + +/***/ }), + +/***/ 49278: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/internals/to-property-key.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 90468); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ 25378); + +// `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey +module.exports = function (argument) { + var key = toPrimitive(argument, 'string'); + return isSymbol(key) ? key : key + ''; +}; + + +/***/ }), + +/***/ 28839: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! + \*****************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var TO_STRING_TAG = wellKnownSymbol('toStringTag'); +var test = {}; + +test[TO_STRING_TAG] = 'z'; + +module.exports = String(test) === '[object z]'; + + +/***/ }), + +/***/ 21464: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/internals/to-string.js ***! + \*****************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var classof = __webpack_require__(/*! ../internals/classof */ 97988); + +var $String = String; + +module.exports = function (argument) { + if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string'); + return $String(argument); +}; + + +/***/ }), + +/***/ 14824: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/internals/try-to-string.js ***! + \*********************************************************/ +/***/ ((module) => { + +"use strict"; + +var $String = String; + +module.exports = function (argument) { + try { + return $String(argument); + } catch (error) { + return 'Object'; + } +}; + + +/***/ }), + +/***/ 82459: +/*!***********************************************!*\ + !*** ./node_modules/core-js/internals/uid.js ***! + \***********************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +var id = 0; +var postfix = Math.random(); +var toString = uncurryThis(1.0.toString); + +module.exports = function (key) { + return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36); +}; + + +/***/ }), + +/***/ 76015: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-symbol -- required for testing */ +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ 1918); + +module.exports = NATIVE_SYMBOL + && !Symbol.sham + && typeof Symbol.iterator == 'symbol'; + + +/***/ }), + +/***/ 75229: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/internals/v8-prototype-define-bug.js ***! + \*******************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// V8 ~ Chrome 36- +// https://bugs.chromium.org/p/v8/issues/detail?id=3334 +module.exports = DESCRIPTORS && fails(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty(function () { /* empty */ }, 'prototype', { + value: 42, + writable: false + }).prototype !== 42; +}); + + +/***/ }), + +/***/ 13839: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/weak-map-basic-detection.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); + +var WeakMap = globalThis.WeakMap; + +module.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap)); + + +/***/ }), + +/***/ 5430: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/internals/well-known-symbol-define.js ***! + \********************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var path = __webpack_require__(/*! ../internals/path */ 90422); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/well-known-symbol-wrapped */ 69736); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); + +module.exports = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, { + value: wrappedWellKnownSymbolModule.f(NAME) + }); +}; + + +/***/ }), + +/***/ 69736: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/internals/well-known-symbol-wrapped.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; + +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +exports.f = wellKnownSymbol; + + +/***/ }), + +/***/ 7920: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/internals/well-known-symbol.js ***! + \*************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var shared = __webpack_require__(/*! ../internals/shared */ 27232); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var uid = __webpack_require__(/*! ../internals/uid */ 82459); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ 1918); +var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ 76015); + +var Symbol = globalThis.Symbol; +var WellKnownSymbolsStore = shared('wks'); +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid; + +module.exports = function (name) { + if (!hasOwn(WellKnownSymbolsStore, name)) { + WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name) + ? Symbol[name] + : createWellKnownSymbol('Symbol.' + name); + } return WellKnownSymbolsStore[name]; +}; + + +/***/ }), + +/***/ 4195: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/internals/whitespaces.js ***! + \*******************************************************/ +/***/ ((module) => { + +"use strict"; + +// a string of all valid unicode whitespaces +module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + +/***/ }), + +/***/ 82760: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.at.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// `Array.prototype.at` method +// https://tc39.es/ecma262/#sec-array.prototype.at +$({ target: 'Array', proto: true }, { + at: function at(index) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var relativeIndex = toIntegerOrInfinity(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return (k < 0 || k >= len) ? undefined : O[k]; + } +}); + +addToUnscopables('at'); + + +/***/ }), + +/***/ 18361: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.concat.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ 11600); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 12928); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 5768); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var V8_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ 1462); + +var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); + +// We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 +var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; +}); + +var isConcatSpreadable = function (O) { + if (!isObject(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray(O); +}; + +var FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat'); + +// `Array.prototype.concat` method +// https://tc39.es/ecma262/#sec-array.prototype.concat +// with adding support of @@isConcatSpreadable and @@species +$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject(this); + var A = arraySpeciesCreate(O, 0); + var n = 0; + var i, k, length, len, E; + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike(E); + doesNotExceedSafeInteger(n + len); + for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); + } else { + doesNotExceedSafeInteger(n + 1); + createProperty(A, n++, E); + } + } + A.length = n; + return A; + } +}); + + +/***/ }), + +/***/ 89282: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.copy-within.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var copyWithin = __webpack_require__(/*! ../internals/array-copy-within */ 49842); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// `Array.prototype.copyWithin` method +// https://tc39.es/ecma262/#sec-array.prototype.copywithin +$({ target: 'Array', proto: true }, { + copyWithin: copyWithin +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('copyWithin'); + + +/***/ }), + +/***/ 50254: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.every.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $every = (__webpack_require__(/*! ../internals/array-iteration */ 91982).every); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); + +var STRICT_METHOD = arrayMethodIsStrict('every'); + +// `Array.prototype.every` method +// https://tc39.es/ecma262/#sec-array.prototype.every +$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, { + every: function every(callbackfn /* , thisArg */) { + return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 88768: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.fill.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fill = __webpack_require__(/*! ../internals/array-fill */ 4080); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// `Array.prototype.fill` method +// https://tc39.es/ecma262/#sec-array.prototype.fill +$({ target: 'Array', proto: true }, { + fill: fill +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('fill'); + + +/***/ }), + +/***/ 65111: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.filter.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $filter = (__webpack_require__(/*! ../internals/array-iteration */ 91982).filter); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 5768); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter'); + +// `Array.prototype.filter` method +// https://tc39.es/ecma262/#sec-array.prototype.filter +// with adding support of @@species +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { + filter: function filter(callbackfn /* , thisArg */) { + return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 98991: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.find-index.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $findIndex = (__webpack_require__(/*! ../internals/array-iteration */ 91982).findIndex); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +var FIND_INDEX = 'findIndex'; +var SKIPS_HOLES = true; + +// Shouldn't skip holes +// eslint-disable-next-line es/no-array-prototype-findindex -- testing +if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.findIndex` method +// https://tc39.es/ecma262/#sec-array.prototype.findindex +$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + findIndex: function findIndex(callbackfn /* , that = undefined */) { + return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND_INDEX); + + +/***/ }), + +/***/ 62810: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.find-last-index.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $findLastIndex = (__webpack_require__(/*! ../internals/array-iteration-from-last */ 60780).findLastIndex); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// `Array.prototype.findLastIndex` method +// https://tc39.es/ecma262/#sec-array.prototype.findlastindex +$({ target: 'Array', proto: true }, { + findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) { + return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +addToUnscopables('findLastIndex'); + + +/***/ }), + +/***/ 24715: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.find-last.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $findLast = (__webpack_require__(/*! ../internals/array-iteration-from-last */ 60780).findLast); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// `Array.prototype.findLast` method +// https://tc39.es/ecma262/#sec-array.prototype.findlast +$({ target: 'Array', proto: true }, { + findLast: function findLast(callbackfn /* , that = undefined */) { + return $findLast(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +addToUnscopables('findLast'); + + +/***/ }), + +/***/ 34202: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.find.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $find = (__webpack_require__(/*! ../internals/array-iteration */ 91982).find); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +var FIND = 'find'; +var SKIPS_HOLES = true; + +// Shouldn't skip holes +// eslint-disable-next-line es/no-array-prototype-find -- testing +if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; }); + +// `Array.prototype.find` method +// https://tc39.es/ecma262/#sec-array.prototype.find +$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, { + find: function find(callbackfn /* , that = undefined */) { + return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables(FIND); + + +/***/ }), + +/***/ 19357: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.flat-map.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var flattenIntoArray = __webpack_require__(/*! ../internals/flatten-into-array */ 9838); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 12928); + +// `Array.prototype.flatMap` method +// https://tc39.es/ecma262/#sec-array.prototype.flatmap +$({ target: 'Array', proto: true }, { + flatMap: function flatMap(callbackfn /* , thisArg */) { + var O = toObject(this); + var sourceLen = lengthOfArrayLike(O); + var A; + aCallable(callbackfn); + A = arraySpeciesCreate(O, 0); + A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return A; + } +}); + + +/***/ }), + +/***/ 57962: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.flat.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var flattenIntoArray = __webpack_require__(/*! ../internals/flatten-into-array */ 9838); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 12928); + +// `Array.prototype.flat` method +// https://tc39.es/ecma262/#sec-array.prototype.flat +$({ target: 'Array', proto: true }, { + flat: function flat(/* depthArg = 1 */) { + var depthArg = arguments.length ? arguments[0] : undefined; + var O = toObject(this); + var sourceLen = lengthOfArrayLike(O); + var A = arraySpeciesCreate(O, 0); + A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg)); + return A; + } +}); + + +/***/ }), + +/***/ 51866: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.for-each.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var forEach = __webpack_require__(/*! ../internals/array-for-each */ 62410); + +// `Array.prototype.forEach` method +// https://tc39.es/ecma262/#sec-array.prototype.foreach +// eslint-disable-next-line es/no-array-prototype-foreach -- safe +$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, { + forEach: forEach +}); + + +/***/ }), + +/***/ 79653: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.from.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var from = __webpack_require__(/*! ../internals/array-from */ 21909); +var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ 7393); + +var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) { + // eslint-disable-next-line es/no-array-from -- required for testing + Array.from(iterable); +}); + +// `Array.from` method +// https://tc39.es/ecma262/#sec-array.from +$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, { + from: from +}); + + +/***/ }), + +/***/ 95260: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.includes.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $includes = (__webpack_require__(/*! ../internals/array-includes */ 84556).includes); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// FF99+ bug +var BROKEN_ON_SPARSE = fails(function () { + // eslint-disable-next-line es/no-array-prototype-includes -- detection + return !Array(1).includes(); +}); + +// `Array.prototype.includes` method +// https://tc39.es/ecma262/#sec-array.prototype.includes +$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('includes'); + + +/***/ }), + +/***/ 31471: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.index-of.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-array-prototype-indexof -- required for testing */ +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ 68417); +var $indexOf = (__webpack_require__(/*! ../internals/array-includes */ 84556).indexOf); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); + +var nativeIndexOf = uncurryThis([].indexOf); + +var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0; +var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf'); + +// `Array.prototype.indexOf` method +// https://tc39.es/ecma262/#sec-array.prototype.indexof +$({ target: 'Array', proto: true, forced: FORCED }, { + indexOf: function indexOf(searchElement /* , fromIndex = 0 */) { + var fromIndex = arguments.length > 1 ? arguments[1] : undefined; + return NEGATIVE_ZERO + // convert -0 to +0 + ? nativeIndexOf(this, searchElement, fromIndex) || 0 + : $indexOf(this, searchElement, fromIndex); + } +}); + + +/***/ }), + +/***/ 51265: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.is-array.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); + +// `Array.isArray` method +// https://tc39.es/ecma262/#sec-array.isarray +$({ target: 'Array', stat: true }, { + isArray: isArray +}); + + +/***/ }), + +/***/ 20619: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.iterator.js ***! + \***********************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); +var Iterators = __webpack_require__(/*! ../internals/iterators */ 56438); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ 93167); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ 83049); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR); + +// `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator +module.exports = defineIterator(Array, 'Array', function (iterated, kind) { + setInternalState(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject(iterated), // target + index: 0, // next index + kind: kind // kind + }); +// `%ArrayIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState(this); + var target = state.target; + var index = state.index++; + if (!target || index >= target.length) { + state.target = undefined; + return createIterResultObject(undefined, true); + } + switch (state.kind) { + case 'keys': return createIterResultObject(index, false); + case 'values': return createIterResultObject(target[index], false); + } return createIterResultObject([index, target[index]], false); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject +var values = Iterators.Arguments = Iterators.Array; + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + +// V8 ~ Chrome 45- bug +if (!IS_PURE && DESCRIPTORS && values.name !== 'values') try { + defineProperty(values, 'name', { value: 'values' }); +} catch (error) { /* empty */ } + + +/***/ }), + +/***/ 33901: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.join.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ 79114); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); + +var nativeJoin = uncurryThis([].join); + +var ES3_STRINGS = IndexedObject !== Object; +var FORCED = ES3_STRINGS || !arrayMethodIsStrict('join', ','); + +// `Array.prototype.join` method +// https://tc39.es/ecma262/#sec-array.prototype.join +$({ target: 'Array', proto: true, forced: FORCED }, { + join: function join(separator) { + return nativeJoin(toIndexedObject(this), separator === undefined ? ',' : separator); + } +}); + + +/***/ }), + +/***/ 20864: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.last-index-of.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var lastIndexOf = __webpack_require__(/*! ../internals/array-last-index-of */ 11760); + +// `Array.prototype.lastIndexOf` method +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof +// eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing +$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, { + lastIndexOf: lastIndexOf +}); + + +/***/ }), + +/***/ 37223: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.map.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $map = (__webpack_require__(/*! ../internals/array-iteration */ 91982).map); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 5768); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); + +// `Array.prototype.map` method +// https://tc39.es/ecma262/#sec-array.prototype.map +// with adding support of @@species +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { + map: function map(callbackfn /* , thisArg */) { + return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 34652: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.of.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ 93668); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); + +var $Array = Array; + +var ISNT_GENERIC = fails(function () { + function F() { /* empty */ } + // eslint-disable-next-line es/no-array-of -- safe + return !($Array.of.call(F) instanceof F); +}); + +// `Array.of` method +// https://tc39.es/ecma262/#sec-array.of +// WebKit Array.of isn't generic +$({ target: 'Array', stat: true, forced: ISNT_GENERIC }, { + of: function of(/* ...args */) { + var index = 0; + var argumentsLength = arguments.length; + var result = new (isConstructor(this) ? this : $Array)(argumentsLength); + while (argumentsLength > index) createProperty(result, index, arguments[index++]); + result.length = argumentsLength; + return result; + } +}); + + +/***/ }), + +/***/ 98025: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.push.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var setArrayLength = __webpack_require__(/*! ../internals/array-set-length */ 60530); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ 11600); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var INCORRECT_TO_LENGTH = fails(function () { + return [].push.call({ length: 0x100000000 }, 1) !== 4294967297; +}); + +// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError +// https://bugs.chromium.org/p/v8/issues/detail?id=12681 +var properErrorOnNonWritableLength = function () { + try { + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty([], 'length', { writable: false }).push(); + } catch (error) { + return error instanceof TypeError; + } +}; + +var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength(); + +// `Array.prototype.push` method +// https://tc39.es/ecma262/#sec-array.prototype.push +$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + push: function push(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + doesNotExceedSafeInteger(len + argCount); + for (var i = 0; i < argCount; i++) { + O[len] = arguments[i]; + len++; + } + setArrayLength(O, len); + return len; + } +}); + + +/***/ }), + +/***/ 23876: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.reduce-right.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $reduceRight = (__webpack_require__(/*! ../internals/array-reduce */ 66587).right); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); +var CHROME_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ 1462); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ 65018); + +// Chrome 80-82 has a critical bug +// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 +var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83; +var FORCED = CHROME_BUG || !arrayMethodIsStrict('reduceRight'); + +// `Array.prototype.reduceRight` method +// https://tc39.es/ecma262/#sec-array.prototype.reduceright +$({ target: 'Array', proto: true, forced: FORCED }, { + reduceRight: function reduceRight(callbackfn /* , initialValue */) { + return $reduceRight(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 15595: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.reduce.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $reduce = (__webpack_require__(/*! ../internals/array-reduce */ 66587).left); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); +var CHROME_VERSION = __webpack_require__(/*! ../internals/environment-v8-version */ 1462); +var IS_NODE = __webpack_require__(/*! ../internals/environment-is-node */ 65018); + +// Chrome 80-82 has a critical bug +// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 +var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83; +var FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce'); + +// `Array.prototype.reduce` method +// https://tc39.es/ecma262/#sec-array.prototype.reduce +$({ target: 'Array', proto: true, forced: FORCED }, { + reduce: function reduce(callbackfn /* , initialValue */) { + var length = arguments.length; + return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 92999: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.reverse.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); + +var nativeReverse = uncurryThis([].reverse); +var test = [1, 2]; + +// `Array.prototype.reverse` method +// https://tc39.es/ecma262/#sec-array.prototype.reverse +// fix for Safari 12.0 bug +// https://bugs.webkit.org/show_bug.cgi?id=188794 +$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, { + reverse: function reverse() { + // eslint-disable-next-line no-self-assign -- dirty hack + if (isArray(this)) this.length = this.length; + return nativeReverse(this); + } +}); + + +/***/ }), + +/***/ 43563: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.slice.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isArray = __webpack_require__(/*! ../internals/is-array */ 6681); +var isConstructor = __webpack_require__(/*! ../internals/is-constructor */ 93668); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 5768); +var nativeSlice = __webpack_require__(/*! ../internals/array-slice */ 37147); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); + +var SPECIES = wellKnownSymbol('species'); +var $Array = Array; +var max = Math.max; + +// `Array.prototype.slice` method +// https://tc39.es/ecma262/#sec-array.prototype.slice +// fallback for not array-like ES3 strings and DOM objects +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { + slice: function slice(start, end) { + var O = toIndexedObject(this); + var length = lengthOfArrayLike(O); + var k = toAbsoluteIndex(start, length); + var fin = toAbsoluteIndex(end === undefined ? length : end, length); + // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + var Constructor, result, n; + if (isArray(O)) { + Constructor = O.constructor; + // cross-realm fallback + if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject(Constructor)) { + Constructor = Constructor[SPECIES]; + if (Constructor === null) Constructor = undefined; + } + if (Constructor === $Array || Constructor === undefined) { + return nativeSlice(O, k, fin); + } + } + result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0)); + for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); + result.length = n; + return result; + } +}); + + +/***/ }), + +/***/ 35425: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.some.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $some = (__webpack_require__(/*! ../internals/array-iteration */ 91982).some); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); + +var STRICT_METHOD = arrayMethodIsStrict('some'); + +// `Array.prototype.some` method +// https://tc39.es/ecma262/#sec-array.prototype.some +$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, { + some: function some(callbackfn /* , thisArg */) { + return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 59369: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.sort.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var deletePropertyOrThrow = __webpack_require__(/*! ../internals/delete-property-or-throw */ 83951); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var internalSort = __webpack_require__(/*! ../internals/array-sort */ 65305); +var arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ 86079); +var FF = __webpack_require__(/*! ../internals/environment-ff-version */ 92040); +var IE_OR_EDGE = __webpack_require__(/*! ../internals/environment-is-ie-or-edge */ 55008); +var V8 = __webpack_require__(/*! ../internals/environment-v8-version */ 1462); +var WEBKIT = __webpack_require__(/*! ../internals/environment-webkit-version */ 24690); + +var test = []; +var nativeSort = uncurryThis(test.sort); +var push = uncurryThis(test.push); + +// IE8- +var FAILS_ON_UNDEFINED = fails(function () { + test.sort(undefined); +}); +// V8 bug +var FAILS_ON_NULL = fails(function () { + test.sort(null); +}); +// Old WebKit +var STRICT_METHOD = arrayMethodIsStrict('sort'); + +var STABLE_SORT = !fails(function () { + // feature detection can be too slow, so check engines versions + if (V8) return V8 < 70; + if (FF && FF > 3) return; + if (IE_OR_EDGE) return true; + if (WEBKIT) return WEBKIT < 603; + + var result = ''; + var code, chr, value, index; + + // generate an array with more 512 elements (Chakra and old V8 fails only in this case) + for (code = 65; code < 76; code++) { + chr = String.fromCharCode(code); + + switch (code) { + case 66: case 69: case 70: case 72: value = 3; break; + case 68: case 71: value = 4; break; + default: value = 2; + } + + for (index = 0; index < 47; index++) { + test.push({ k: chr + index, v: value }); + } + } + + test.sort(function (a, b) { return b.v - a.v; }); + + for (index = 0; index < test.length; index++) { + chr = test[index].k.charAt(0); + if (result.charAt(result.length - 1) !== chr) result += chr; + } + + return result !== 'DGBEFHACIJK'; +}); + +var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT; + +var getSortCompare = function (comparefn) { + return function (x, y) { + if (y === undefined) return -1; + if (x === undefined) return 1; + if (comparefn !== undefined) return +comparefn(x, y) || 0; + return toString(x) > toString(y) ? 1 : -1; + }; +}; + +// `Array.prototype.sort` method +// https://tc39.es/ecma262/#sec-array.prototype.sort +$({ target: 'Array', proto: true, forced: FORCED }, { + sort: function sort(comparefn) { + if (comparefn !== undefined) aCallable(comparefn); + + var array = toObject(this); + + if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn); + + var items = []; + var arrayLength = lengthOfArrayLike(array); + var itemsLength, index; + + for (index = 0; index < arrayLength; index++) { + if (index in array) push(items, array[index]); + } + + internalSort(items, getSortCompare(comparefn)); + + itemsLength = lengthOfArrayLike(items); + index = 0; + + while (index < itemsLength) array[index] = items[index++]; + while (index < arrayLength) deletePropertyOrThrow(array, index++); + + return array; + } +}); + + +/***/ }), + +/***/ 70499: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.species.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 69494); + +// `Array[@@species]` getter +// https://tc39.es/ecma262/#sec-get-array-@@species +setSpecies('Array'); + + +/***/ }), + +/***/ 92505: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.splice.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var setArrayLength = __webpack_require__(/*! ../internals/array-set-length */ 60530); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ 11600); +var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ 12928); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); +var deletePropertyOrThrow = __webpack_require__(/*! ../internals/delete-property-or-throw */ 83951); +var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ 5768); + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice'); + +var max = Math.max; +var min = Math.min; + +// `Array.prototype.splice` method +// https://tc39.es/ecma262/#sec-array.prototype.splice +// with adding support of @@species +$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { + splice: function splice(start, deleteCount /* , ...items */) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var actualStart = toAbsoluteIndex(start, len); + var argumentsLength = arguments.length; + var insertCount, actualDeleteCount, A, k, from, to; + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart); + } + doesNotExceedSafeInteger(len + insertCount - actualDeleteCount); + A = arraySpeciesCreate(O, actualDeleteCount); + for (k = 0; k < actualDeleteCount; k++) { + from = actualStart + k; + if (from in O) createProperty(A, k, O[from]); + } + A.length = actualDeleteCount; + if (insertCount < actualDeleteCount) { + for (k = actualStart; k < len - actualDeleteCount; k++) { + from = k + actualDeleteCount; + to = k + insertCount; + if (from in O) O[to] = O[from]; + else deletePropertyOrThrow(O, to); + } + for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1); + } else if (insertCount > actualDeleteCount) { + for (k = len - actualDeleteCount; k > actualStart; k--) { + from = k + actualDeleteCount - 1; + to = k + insertCount - 1; + if (from in O) O[to] = O[from]; + else deletePropertyOrThrow(O, to); + } + } + for (k = 0; k < insertCount; k++) { + O[k + actualStart] = arguments[k + 2]; + } + setArrayLength(O, len - actualDeleteCount + insertCount); + return A; + } +}); + + +/***/ }), + +/***/ 39463: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.to-reversed.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var arrayToReversed = __webpack_require__(/*! ../internals/array-to-reversed */ 77111); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +var $Array = Array; + +// `Array.prototype.toReversed` method +// https://tc39.es/ecma262/#sec-array.prototype.toreversed +$({ target: 'Array', proto: true }, { + toReversed: function toReversed() { + return arrayToReversed(toIndexedObject(this), $Array); + } +}); + +addToUnscopables('toReversed'); + + +/***/ }), + +/***/ 93328: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.to-sorted.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var arrayFromConstructorAndList = __webpack_require__(/*! ../internals/array-from-constructor-and-list */ 90157); +var getBuiltInPrototypeMethod = __webpack_require__(/*! ../internals/get-built-in-prototype-method */ 20795); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +var $Array = Array; +var sort = uncurryThis(getBuiltInPrototypeMethod('Array', 'sort')); + +// `Array.prototype.toSorted` method +// https://tc39.es/ecma262/#sec-array.prototype.tosorted +$({ target: 'Array', proto: true }, { + toSorted: function toSorted(compareFn) { + if (compareFn !== undefined) aCallable(compareFn); + var O = toIndexedObject(this); + var A = arrayFromConstructorAndList($Array, O); + return sort(A, compareFn); + } +}); + +addToUnscopables('toSorted'); + + +/***/ }), + +/***/ 85901: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.to-spliced.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ 11600); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); + +var $Array = Array; +var max = Math.max; +var min = Math.min; + +// `Array.prototype.toSpliced` method +// https://tc39.es/ecma262/#sec-array.prototype.tospliced +$({ target: 'Array', proto: true }, { + toSpliced: function toSpliced(start, deleteCount /* , ...items */) { + var O = toIndexedObject(this); + var len = lengthOfArrayLike(O); + var actualStart = toAbsoluteIndex(start, len); + var argumentsLength = arguments.length; + var k = 0; + var insertCount, actualDeleteCount, newLen, A; + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart); + } + newLen = doesNotExceedSafeInteger(len + insertCount - actualDeleteCount); + A = $Array(newLen); + + for (; k < actualStart; k++) A[k] = O[k]; + for (; k < actualStart + insertCount; k++) A[k] = arguments[k - actualStart + 2]; + for (; k < newLen; k++) A[k] = O[k + actualDeleteCount - insertCount]; + + return A; + } +}); + +addToUnscopables('toSpliced'); + + +/***/ }), + +/***/ 82070: +/*!***********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.unscopables.flat-map.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// this method was added to unscopables after implementation +// in popular engines, so it's moved to a separate module +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('flatMap'); + + +/***/ }), + +/***/ 72633: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.unscopables.flat.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// this method was added to unscopables after implementation +// in popular engines, so it's moved to a separate module +var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ 19492); + +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables +addToUnscopables('flat'); + + +/***/ }), + +/***/ 84980: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.unshift.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); +var setArrayLength = __webpack_require__(/*! ../internals/array-set-length */ 60530); +var deletePropertyOrThrow = __webpack_require__(/*! ../internals/delete-property-or-throw */ 83951); +var doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ 11600); + +// IE8- +var INCORRECT_RESULT = [].unshift(0) !== 1; + +// V8 ~ Chrome < 71 and Safari <= 15.4, FF < 23 throws InternalError +var properErrorOnNonWritableLength = function () { + try { + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty([], 'length', { writable: false }).unshift(); + } catch (error) { + return error instanceof TypeError; + } +}; + +var FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength(); + +// `Array.prototype.unshift` method +// https://tc39.es/ecma262/#sec-array.prototype.unshift +$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + unshift: function unshift(item) { + var O = toObject(this); + var len = lengthOfArrayLike(O); + var argCount = arguments.length; + if (argCount) { + doesNotExceedSafeInteger(len + argCount); + var k = len; + while (k--) { + var to = k + argCount; + if (k in O) O[to] = O[k]; + else deletePropertyOrThrow(O, to); + } + for (var j = 0; j < argCount; j++) { + O[j] = arguments[j]; + } + } return setArrayLength(O, len + argCount); + } +}); + + +/***/ }), + +/***/ 23085: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.array.with.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var arrayWith = __webpack_require__(/*! ../internals/array-with */ 58429); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); + +var $Array = Array; + +// `Array.prototype.with` method +// https://tc39.es/ecma262/#sec-array.prototype.with +$({ target: 'Array', proto: true }, { + 'with': function (index, value) { + return arrayWith(toIndexedObject(this), $Array, index, value); + } +}); + + +/***/ }), + +/***/ 5422: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.get-year.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// IE8- non-standard case +var FORCED = fails(function () { + // eslint-disable-next-line es/no-date-prototype-getyear-setyear -- detection + return new Date(16e11).getYear() !== 120; +}); + +var getFullYear = uncurryThis(Date.prototype.getFullYear); + +// `Date.prototype.getYear` method +// https://tc39.es/ecma262/#sec-date.prototype.getyear +$({ target: 'Date', proto: true, forced: FORCED }, { + getYear: function getYear() { + return getFullYear(this) - 1900; + } +}); + + +/***/ }), + +/***/ 53498: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.now.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); + +var $Date = Date; +var thisTimeValue = uncurryThis($Date.prototype.getTime); + +// `Date.now` method +// https://tc39.es/ecma262/#sec-date.now +$({ target: 'Date', stat: true }, { + now: function now() { + return thisTimeValue(new $Date()); + } +}); + + +/***/ }), + +/***/ 18850: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.set-year.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); + +var DatePrototype = Date.prototype; +var thisTimeValue = uncurryThis(DatePrototype.getTime); +var setFullYear = uncurryThis(DatePrototype.setFullYear); + +// `Date.prototype.setYear` method +// https://tc39.es/ecma262/#sec-date.prototype.setyear +$({ target: 'Date', proto: true }, { + setYear: function setYear(year) { + // validate + thisTimeValue(this); + var yi = toIntegerOrInfinity(year); + var yyyy = yi >= 0 && yi <= 99 ? yi + 1900 : yi; + return setFullYear(this, yyyy); + } +}); + + +/***/ }), + +/***/ 90868: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.to-gmt-string.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// `Date.prototype.toGMTString` method +// https://tc39.es/ecma262/#sec-date.prototype.togmtstring +$({ target: 'Date', proto: true }, { + toGMTString: Date.prototype.toUTCString +}); + + +/***/ }), + +/***/ 39083: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.to-iso-string.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var toISOString = __webpack_require__(/*! ../internals/date-to-iso-string */ 59917); + +// `Date.prototype.toISOString` method +// https://tc39.es/ecma262/#sec-date.prototype.toisostring +// PhantomJS / old WebKit has a broken implementations +$({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== toISOString }, { + toISOString: toISOString +}); + + +/***/ }), + +/***/ 57200: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.to-json.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 90468); + +var FORCED = fails(function () { + return new Date(NaN).toJSON() !== null + || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1; +}); + +// `Date.prototype.toJSON` method +// https://tc39.es/ecma262/#sec-date.prototype.tojson +$({ target: 'Date', proto: true, arity: 1, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + toJSON: function toJSON(key) { + var O = toObject(this); + var pv = toPrimitive(O, 'number'); + return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); + } +}); + + +/***/ }), + +/***/ 43633: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.to-primitive.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var dateToPrimitive = __webpack_require__(/*! ../internals/date-to-primitive */ 30767); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); +var DatePrototype = Date.prototype; + +// `Date.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive +if (!hasOwn(DatePrototype, TO_PRIMITIVE)) { + defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive); +} + + +/***/ }), + +/***/ 75431: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.date.to-string.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); + +var DatePrototype = Date.prototype; +var INVALID_DATE = 'Invalid Date'; +var TO_STRING = 'toString'; +var nativeDateToString = uncurryThis(DatePrototype[TO_STRING]); +var thisTimeValue = uncurryThis(DatePrototype.getTime); + +// `Date.prototype.toString` method +// https://tc39.es/ecma262/#sec-date.prototype.tostring +if (String(new Date(NaN)) !== INVALID_DATE) { + defineBuiltIn(DatePrototype, TO_STRING, function toString() { + var value = thisTimeValue(this); + // eslint-disable-next-line no-self-compare -- NaN check + return value === value ? nativeDateToString(this) : INVALID_DATE; + }); +} + + +/***/ }), + +/***/ 44915: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.function.bind.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var bind = __webpack_require__(/*! ../internals/function-bind */ 90265); + +// `Function.prototype.bind` method +// https://tc39.es/ecma262/#sec-function.prototype.bind +// eslint-disable-next-line es/no-function-prototype-bind -- detection +$({ target: 'Function', proto: true, forced: Function.bind !== bind }, { + bind: bind +}); + + +/***/ }), + +/***/ 46188: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.function.has-instance.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var makeBuiltIn = __webpack_require__(/*! ../internals/make-built-in */ 30336); + +var HAS_INSTANCE = wellKnownSymbol('hasInstance'); +var FunctionPrototype = Function.prototype; + +// `Function.prototype[@@hasInstance]` method +// https://tc39.es/ecma262/#sec-function.prototype-@@hasinstance +if (!(HAS_INSTANCE in FunctionPrototype)) { + definePropertyModule.f(FunctionPrototype, HAS_INSTANCE, { value: makeBuiltIn(function (O) { + if (!isCallable(this) || !isObject(O)) return false; + var P = this.prototype; + return isObject(P) ? isPrototypeOf(P, O) : O instanceof this; + }, HAS_INSTANCE) }); +} + + +/***/ }), + +/***/ 64975: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.function.name.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var FUNCTION_NAME_EXISTS = (__webpack_require__(/*! ../internals/function-name */ 26553).EXISTS); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); + +var FunctionPrototype = Function.prototype; +var functionToString = uncurryThis(FunctionPrototype.toString); +var nameRE = /function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/; +var regExpExec = uncurryThis(nameRE.exec); +var NAME = 'name'; + +// Function instances `.name` property +// https://tc39.es/ecma262/#sec-function-instances-name +if (DESCRIPTORS && !FUNCTION_NAME_EXISTS) { + defineBuiltInAccessor(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return regExpExec(nameRE, functionToString(this))[1]; + } catch (error) { + return ''; + } + } + }); +} + + +/***/ }), + +/***/ 92161: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.json.stringify.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var apply = __webpack_require__(/*! ../internals/function-apply */ 62144); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ 25378); +var arraySlice = __webpack_require__(/*! ../internals/array-slice */ 37147); +var getReplacerFunction = __webpack_require__(/*! ../internals/get-json-replacer-function */ 72632); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ 1918); + +var $String = String; +var $stringify = getBuiltIn('JSON', 'stringify'); +var exec = uncurryThis(/./.exec); +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var replace = uncurryThis(''.replace); +var numberToString = uncurryThis(1.0.toString); + +var tester = /[\uD800-\uDFFF]/g; +var low = /^[\uD800-\uDBFF]$/; +var hi = /^[\uDC00-\uDFFF]$/; + +var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () { + var symbol = getBuiltIn('Symbol')('stringify detection'); + // MS Edge converts symbol values to JSON as {} + return $stringify([symbol]) !== '[null]' + // WebKit converts symbol values to JSON as null + || $stringify({ a: symbol }) !== '{}' + // V8 throws on boxed symbols + || $stringify(Object(symbol)) !== '{}'; +}); + +// https://github.com/tc39/proposal-well-formed-stringify +var ILL_FORMED_UNICODE = fails(function () { + return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' + || $stringify('\uDEAD') !== '"\\udead"'; +}); + +var stringifyWithSymbolsFix = function (it, replacer) { + var args = arraySlice(arguments); + var $replacer = getReplacerFunction(replacer); + if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined + args[1] = function (key, value) { + // some old implementations (like WebKit) could pass numbers as keys + if (isCallable($replacer)) value = call($replacer, this, $String(key), value); + if (!isSymbol(value)) return value; + }; + return apply($stringify, null, args); +}; + +var fixIllFormed = function (match, offset, string) { + var prev = charAt(string, offset - 1); + var next = charAt(string, offset + 1); + if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) { + return '\\u' + numberToString(charCodeAt(match, 0), 16); + } return match; +}; + +if ($stringify) { + // `JSON.stringify` method + // https://tc39.es/ecma262/#sec-json.stringify + $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = arraySlice(arguments); + var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args); + return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result; + } + }); +} + + +/***/ }), + +/***/ 82856: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.json.to-string-tag.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); + +// JSON[@@toStringTag] property +// https://tc39.es/ecma262/#sec-json-@@tostringtag +setToStringTag(globalThis.JSON, 'JSON', true); + + +/***/ }), + +/***/ 54978: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.map.constructor.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var collection = __webpack_require__(/*! ../internals/collection */ 42833); +var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ 2913); + +// `Map` constructor +// https://tc39.es/ecma262/#sec-map-objects +collection('Map', function (init) { + return function Map() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ 9531: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.map.group-by.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var iterate = __webpack_require__(/*! ../internals/iterate */ 56239); +var MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ 84671); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var Map = MapHelpers.Map; +var has = MapHelpers.has; +var get = MapHelpers.get; +var set = MapHelpers.set; +var push = uncurryThis([].push); + +var DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () { + return Map.groupBy('ab', function (it) { + return it; + }).get('a').length !== 1; +}); + +// `Map.groupBy` method +// https://github.com/tc39/proposal-array-grouping +$({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, { + groupBy: function groupBy(items, callbackfn) { + requireObjectCoercible(items); + aCallable(callbackfn); + var map = new Map(); + var k = 0; + iterate(items, function (value) { + var key = callbackfn(value, k++); + if (!has(map, key)) set(map, key, [value]); + else push(get(map, key), value); + }); + return map; + } +}); + + +/***/ }), + +/***/ 35196: +/*!************************************************!*\ + !*** ./node_modules/core-js/modules/es.map.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/es.map.constructor */ 54978); + + +/***/ }), + +/***/ 60142: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.acosh.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var log1p = __webpack_require__(/*! ../internals/math-log1p */ 32245); + +// eslint-disable-next-line es/no-math-acosh -- required for testing +var $acosh = Math.acosh; +var log = Math.log; +var sqrt = Math.sqrt; +var LN2 = Math.LN2; + +var FORCED = !$acosh + // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 + || Math.floor($acosh(Number.MAX_VALUE)) !== 710 + // Tor Browser bug: Math.acosh(Infinity) -> NaN + || $acosh(Infinity) !== Infinity; + +// `Math.acosh` method +// https://tc39.es/ecma262/#sec-math.acosh +$({ target: 'Math', stat: true, forced: FORCED }, { + acosh: function acosh(x) { + var n = +x; + return n < 1 ? NaN : n > 94906265.62425156 + ? log(n) + LN2 + : log1p(n - 1 + sqrt(n - 1) * sqrt(n + 1)); + } +}); + + +/***/ }), + +/***/ 94245: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.asinh.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// eslint-disable-next-line es/no-math-asinh -- required for testing +var $asinh = Math.asinh; +var log = Math.log; +var sqrt = Math.sqrt; + +function asinh(x) { + var n = +x; + return !isFinite(n) || n === 0 ? n : n < 0 ? -asinh(-n) : log(n + sqrt(n * n + 1)); +} + +var FORCED = !($asinh && 1 / $asinh(0) > 0); + +// `Math.asinh` method +// https://tc39.es/ecma262/#sec-math.asinh +// Tor Browser bug: Math.asinh(0) -> -0 +$({ target: 'Math', stat: true, forced: FORCED }, { + asinh: asinh +}); + + +/***/ }), + +/***/ 9430: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.atanh.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// eslint-disable-next-line es/no-math-atanh -- required for testing +var $atanh = Math.atanh; +var log = Math.log; + +var FORCED = !($atanh && 1 / $atanh(-0) < 0); + +// `Math.atanh` method +// https://tc39.es/ecma262/#sec-math.atanh +// Tor Browser bug: Math.atanh(-0) -> 0 +$({ target: 'Math', stat: true, forced: FORCED }, { + atanh: function atanh(x) { + var n = +x; + return n === 0 ? n : log((1 + n) / (1 - n)) / 2; + } +}); + + +/***/ }), + +/***/ 56033: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.cbrt.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var sign = __webpack_require__(/*! ../internals/math-sign */ 40201); + +var abs = Math.abs; +var pow = Math.pow; + +// `Math.cbrt` method +// https://tc39.es/ecma262/#sec-math.cbrt +$({ target: 'Math', stat: true }, { + cbrt: function cbrt(x) { + var n = +x; + return sign(n) * pow(abs(n), 1 / 3); + } +}); + + +/***/ }), + +/***/ 44069: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.clz32.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +var floor = Math.floor; +var log = Math.log; +var LOG2E = Math.LOG2E; + +// `Math.clz32` method +// https://tc39.es/ecma262/#sec-math.clz32 +$({ target: 'Math', stat: true }, { + clz32: function clz32(x) { + var n = x >>> 0; + return n ? 31 - floor(log(n + 0.5) * LOG2E) : 32; + } +}); + + +/***/ }), + +/***/ 41795: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.cosh.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var expm1 = __webpack_require__(/*! ../internals/math-expm1 */ 62955); + +// eslint-disable-next-line es/no-math-cosh -- required for testing +var $cosh = Math.cosh; +var abs = Math.abs; +var E = Math.E; + +var FORCED = !$cosh || $cosh(710) === Infinity; + +// `Math.cosh` method +// https://tc39.es/ecma262/#sec-math.cosh +$({ target: 'Math', stat: true, forced: FORCED }, { + cosh: function cosh(x) { + var t = expm1(abs(x) - 1) + 1; + return (t + 1 / (t * E * E)) * (E / 2); + } +}); + + +/***/ }), + +/***/ 33821: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.expm1.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var expm1 = __webpack_require__(/*! ../internals/math-expm1 */ 62955); + +// `Math.expm1` method +// https://tc39.es/ecma262/#sec-math.expm1 +// eslint-disable-next-line es/no-math-expm1 -- required for testing +$({ target: 'Math', stat: true, forced: expm1 !== Math.expm1 }, { expm1: expm1 }); + + +/***/ }), + +/***/ 20132: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.fround.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fround = __webpack_require__(/*! ../internals/math-fround */ 12150); + +// `Math.fround` method +// https://tc39.es/ecma262/#sec-math.fround +$({ target: 'Math', stat: true }, { fround: fround }); + + +/***/ }), + +/***/ 62038: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.hypot.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// eslint-disable-next-line es/no-math-hypot -- required for testing +var $hypot = Math.hypot; +var abs = Math.abs; +var sqrt = Math.sqrt; + +// Chrome 77 bug +// https://bugs.chromium.org/p/v8/issues/detail?id=9546 +var FORCED = !!$hypot && $hypot(Infinity, NaN) !== Infinity; + +// `Math.hypot` method +// https://tc39.es/ecma262/#sec-math.hypot +$({ target: 'Math', stat: true, arity: 2, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + hypot: function hypot(value1, value2) { + var sum = 0; + var i = 0; + var aLen = arguments.length; + var larg = 0; + var arg, div; + while (i < aLen) { + arg = abs(arguments[i++]); + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else sum += arg; + } + return larg === Infinity ? Infinity : larg * sqrt(sum); + } +}); + + +/***/ }), + +/***/ 62901: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.imul.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// eslint-disable-next-line es/no-math-imul -- required for testing +var $imul = Math.imul; + +var FORCED = fails(function () { + return $imul(0xFFFFFFFF, 5) !== -5 || $imul.length !== 2; +}); + +// `Math.imul` method +// https://tc39.es/ecma262/#sec-math.imul +// some WebKit versions fails with big numbers, some has wrong arity +$({ target: 'Math', stat: true, forced: FORCED }, { + imul: function imul(x, y) { + var UINT16 = 0xFFFF; + var xn = +x; + var yn = +y; + var xl = UINT16 & xn; + var yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } +}); + + +/***/ }), + +/***/ 60167: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.log10.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var log10 = __webpack_require__(/*! ../internals/math-log10 */ 67349); + +// `Math.log10` method +// https://tc39.es/ecma262/#sec-math.log10 +$({ target: 'Math', stat: true }, { + log10: log10 +}); + + +/***/ }), + +/***/ 67591: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.log1p.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var log1p = __webpack_require__(/*! ../internals/math-log1p */ 32245); + +// `Math.log1p` method +// https://tc39.es/ecma262/#sec-math.log1p +$({ target: 'Math', stat: true }, { log1p: log1p }); + + +/***/ }), + +/***/ 75538: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.log2.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +var log = Math.log; +var LN2 = Math.LN2; + +// `Math.log2` method +// https://tc39.es/ecma262/#sec-math.log2 +$({ target: 'Math', stat: true }, { + log2: function log2(x) { + return log(x) / LN2; + } +}); + + +/***/ }), + +/***/ 34707: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.sign.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var sign = __webpack_require__(/*! ../internals/math-sign */ 40201); + +// `Math.sign` method +// https://tc39.es/ecma262/#sec-math.sign +$({ target: 'Math', stat: true }, { + sign: sign +}); + + +/***/ }), + +/***/ 83932: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.sinh.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var expm1 = __webpack_require__(/*! ../internals/math-expm1 */ 62955); + +var abs = Math.abs; +var exp = Math.exp; +var E = Math.E; + +var FORCED = fails(function () { + // eslint-disable-next-line es/no-math-sinh -- required for testing + return Math.sinh(-2e-17) !== -2e-17; +}); + +// `Math.sinh` method +// https://tc39.es/ecma262/#sec-math.sinh +// V8 near Chromium 38 has a problem with very small numbers +$({ target: 'Math', stat: true, forced: FORCED }, { + sinh: function sinh(x) { + var n = +x; + return abs(n) < 1 ? (expm1(n) - expm1(-n)) / 2 : (exp(n - 1) - exp(-n - 1)) * (E / 2); + } +}); + + +/***/ }), + +/***/ 1959: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.tanh.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var expm1 = __webpack_require__(/*! ../internals/math-expm1 */ 62955); + +var exp = Math.exp; + +// `Math.tanh` method +// https://tc39.es/ecma262/#sec-math.tanh +$({ target: 'Math', stat: true }, { + tanh: function tanh(x) { + var n = +x; + var a = expm1(n); + var b = expm1(-n); + return a === Infinity ? 1 : b === Infinity ? -1 : (a - b) / (exp(n) + exp(-n)); + } +}); + + +/***/ }), + +/***/ 71396: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.to-string-tag.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); + +// Math[@@toStringTag] property +// https://tc39.es/ecma262/#sec-math-@@tostringtag +setToStringTag(Math, 'Math', true); + + +/***/ }), + +/***/ 51710: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.math.trunc.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var trunc = __webpack_require__(/*! ../internals/math-trunc */ 54896); + +// `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc +$({ target: 'Math', stat: true }, { + trunc: trunc +}); + + +/***/ }), + +/***/ 54339: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.constructor.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var path = __webpack_require__(/*! ../internals/path */ 90422); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 78367); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ 3180); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ 25378); +var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ 90468); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ 92323).f); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); +var thisNumberValue = __webpack_require__(/*! ../internals/this-number-value */ 92055); +var trim = (__webpack_require__(/*! ../internals/string-trim */ 7329).trim); + +var NUMBER = 'Number'; +var NativeNumber = globalThis[NUMBER]; +var PureNumberNamespace = path[NUMBER]; +var NumberPrototype = NativeNumber.prototype; +var TypeError = globalThis.TypeError; +var stringSlice = uncurryThis(''.slice); +var charCodeAt = uncurryThis(''.charCodeAt); + +// `ToNumeric` abstract operation +// https://tc39.es/ecma262/#sec-tonumeric +var toNumeric = function (value) { + var primValue = toPrimitive(value, 'number'); + return typeof primValue == 'bigint' ? primValue : toNumber(primValue); +}; + +// `ToNumber` abstract operation +// https://tc39.es/ecma262/#sec-tonumber +var toNumber = function (argument) { + var it = toPrimitive(argument, 'number'); + var first, third, radix, maxCode, digits, length, index, code; + if (isSymbol(it)) throw new TypeError('Cannot convert a Symbol value to a number'); + if (typeof it == 'string' && it.length > 2) { + it = trim(it); + first = charCodeAt(it, 0); + if (first === 43 || first === 45) { + third = charCodeAt(it, 2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (charCodeAt(it, 1)) { + // fast equal of /^0b[01]+$/i + case 66: + case 98: + radix = 2; + maxCode = 49; + break; + // fast equal of /^0o[0-7]+$/i + case 79: + case 111: + radix = 8; + maxCode = 55; + break; + default: + return +it; + } + digits = stringSlice(it, 2); + length = digits.length; + for (index = 0; index < length; index++) { + code = charCodeAt(digits, index); + // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + if (code < 48 || code > maxCode) return NaN; + } return parseInt(digits, radix); + } + } return +it; +}; + +var FORCED = isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1')); + +var calledWithNew = function (dummy) { + // includes check on 1..constructor(foo) case + return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); }); +}; + +// `Number` constructor +// https://tc39.es/ecma262/#sec-number-constructor +var NumberWrapper = function Number(value) { + var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); + return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n; +}; + +NumberWrapper.prototype = NumberPrototype; +if (FORCED && !IS_PURE) NumberPrototype.constructor = NumberWrapper; + +$({ global: true, constructor: true, wrap: true, forced: FORCED }, { + Number: NumberWrapper +}); + +// Use `internal/copy-constructor-properties` helper in `core-js@4` +var copyConstructorProperties = function (target, source) { + for (var keys = DESCRIPTORS ? getOwnPropertyNames(source) : ( + // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' + + // ESNext + 'fromString,range' + ).split(','), j = 0, key; keys.length > j; j++) { + if (hasOwn(source, key = keys[j]) && !hasOwn(target, key)) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } +}; + +if (IS_PURE && PureNumberNamespace) copyConstructorProperties(path[NUMBER], PureNumberNamespace); +if (FORCED || IS_PURE) copyConstructorProperties(path[NUMBER], NativeNumber); + + +/***/ }), + +/***/ 64517: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.epsilon.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// `Number.EPSILON` constant +// https://tc39.es/ecma262/#sec-number.epsilon +$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, { + EPSILON: Math.pow(2, -52) +}); + + +/***/ }), + +/***/ 2783: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.is-finite.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var numberIsFinite = __webpack_require__(/*! ../internals/number-is-finite */ 96845); + +// `Number.isFinite` method +// https://tc39.es/ecma262/#sec-number.isfinite +$({ target: 'Number', stat: true }, { isFinite: numberIsFinite }); + + +/***/ }), + +/***/ 60236: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.is-integer.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isIntegralNumber = __webpack_require__(/*! ../internals/is-integral-number */ 46226); + +// `Number.isInteger` method +// https://tc39.es/ecma262/#sec-number.isinteger +$({ target: 'Number', stat: true }, { + isInteger: isIntegralNumber +}); + + +/***/ }), + +/***/ 20047: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.is-nan.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// `Number.isNaN` method +// https://tc39.es/ecma262/#sec-number.isnan +$({ target: 'Number', stat: true }, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare -- NaN check + return number !== number; + } +}); + + +/***/ }), + +/***/ 99478: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.is-safe-integer.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isIntegralNumber = __webpack_require__(/*! ../internals/is-integral-number */ 46226); + +var abs = Math.abs; + +// `Number.isSafeInteger` method +// https://tc39.es/ecma262/#sec-number.issafeinteger +$({ target: 'Number', stat: true }, { + isSafeInteger: function isSafeInteger(number) { + return isIntegralNumber(number) && abs(number) <= 0x1FFFFFFFFFFFFF; + } +}); + + +/***/ }), + +/***/ 64520: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.max-safe-integer.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// `Number.MAX_SAFE_INTEGER` constant +// https://tc39.es/ecma262/#sec-number.max_safe_integer +$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, { + MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF +}); + + +/***/ }), + +/***/ 19658: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.min-safe-integer.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// `Number.MIN_SAFE_INTEGER` constant +// https://tc39.es/ecma262/#sec-number.min_safe_integer +$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, { + MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF +}); + + +/***/ }), + +/***/ 5883: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.parse-float.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var parseFloat = __webpack_require__(/*! ../internals/number-parse-float */ 3301); + +// `Number.parseFloat` method +// https://tc39.es/ecma262/#sec-number.parseFloat +// eslint-disable-next-line es/no-number-parsefloat -- required for testing +$({ target: 'Number', stat: true, forced: Number.parseFloat !== parseFloat }, { + parseFloat: parseFloat +}); + + +/***/ }), + +/***/ 19004: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.parse-int.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var parseInt = __webpack_require__(/*! ../internals/number-parse-int */ 85890); + +// `Number.parseInt` method +// https://tc39.es/ecma262/#sec-number.parseint +// eslint-disable-next-line es/no-number-parseint -- required for testing +$({ target: 'Number', stat: true, forced: Number.parseInt !== parseInt }, { + parseInt: parseInt +}); + + +/***/ }), + +/***/ 41912: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.to-exponential.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var thisNumberValue = __webpack_require__(/*! ../internals/this-number-value */ 92055); +var $repeat = __webpack_require__(/*! ../internals/string-repeat */ 15834); +var log10 = __webpack_require__(/*! ../internals/math-log10 */ 67349); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var $RangeError = RangeError; +var $String = String; +var $isFinite = isFinite; +var abs = Math.abs; +var floor = Math.floor; +var pow = Math.pow; +var round = Math.round; +var nativeToExponential = uncurryThis(1.0.toExponential); +var repeat = uncurryThis($repeat); +var stringSlice = uncurryThis(''.slice); + +// Edge 17- +var ROUNDS_PROPERLY = nativeToExponential(-6.9e-11, 4) === '-6.9000e-11' + // IE11- && Edge 14- + && nativeToExponential(1.255, 2) === '1.25e+0' + // FF86-, V8 ~ Chrome 49-50 + && nativeToExponential(12345, 3) === '1.235e+4' + // FF86-, V8 ~ Chrome 49-50 + && nativeToExponential(25, 0) === '3e+1'; + +// IE8- +var throwsOnInfinityFraction = function () { + return fails(function () { + nativeToExponential(1, Infinity); + }) && fails(function () { + nativeToExponential(1, -Infinity); + }); +}; + +// Safari <11 && FF <50 +var properNonFiniteThisCheck = function () { + return !fails(function () { + nativeToExponential(Infinity, Infinity); + nativeToExponential(NaN, Infinity); + }); +}; + +var FORCED = !ROUNDS_PROPERLY || !throwsOnInfinityFraction() || !properNonFiniteThisCheck(); + +// `Number.prototype.toExponential` method +// https://tc39.es/ecma262/#sec-number.prototype.toexponential +$({ target: 'Number', proto: true, forced: FORCED }, { + toExponential: function toExponential(fractionDigits) { + var x = thisNumberValue(this); + if (fractionDigits === undefined) return nativeToExponential(x); + var f = toIntegerOrInfinity(fractionDigits); + if (!$isFinite(x)) return String(x); + // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation + if (f < 0 || f > 20) throw new $RangeError('Incorrect fraction digits'); + if (ROUNDS_PROPERLY) return nativeToExponential(x, f); + var s = ''; + var m, e, c, d; + if (x < 0) { + s = '-'; + x = -x; + } + if (x === 0) { + e = 0; + m = repeat('0', f + 1); + } else { + // this block is based on https://gist.github.com/SheetJSDev/1100ad56b9f856c95299ed0e068eea08 + // TODO: improve accuracy with big fraction digits + var l = log10(x); + e = floor(l); + var w = pow(10, e - f); + var n = round(x / w); + if (2 * x >= (2 * n + 1) * w) { + n += 1; + } + if (n >= pow(10, f + 1)) { + n /= 10; + e += 1; + } + m = $String(n); + } + if (f !== 0) { + m = stringSlice(m, 0, 1) + '.' + stringSlice(m, 1); + } + if (e === 0) { + c = '+'; + d = '0'; + } else { + c = e > 0 ? '+' : '-'; + d = $String(abs(e)); + } + m += 'e' + c + d; + return s + m; + } +}); + + +/***/ }), + +/***/ 13937: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.to-fixed.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var thisNumberValue = __webpack_require__(/*! ../internals/this-number-value */ 92055); +var $repeat = __webpack_require__(/*! ../internals/string-repeat */ 15834); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var $RangeError = RangeError; +var $String = String; +var floor = Math.floor; +var repeat = uncurryThis($repeat); +var stringSlice = uncurryThis(''.slice); +var nativeToFixed = uncurryThis(1.0.toFixed); + +var pow = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); +}; + +var log = function (x) { + var n = 0; + var x2 = x; + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + while (x2 >= 2) { + n += 1; + x2 /= 2; + } return n; +}; + +var multiply = function (data, n, c) { + var index = -1; + var c2 = c; + while (++index < 6) { + c2 += n * data[index]; + data[index] = c2 % 1e7; + c2 = floor(c2 / 1e7); + } +}; + +var divide = function (data, n) { + var index = 6; + var c = 0; + while (--index >= 0) { + c += data[index]; + data[index] = floor(c / n); + c = (c % n) * 1e7; + } +}; + +var dataToString = function (data) { + var index = 6; + var s = ''; + while (--index >= 0) { + if (s !== '' || index === 0 || data[index] !== 0) { + var t = $String(data[index]); + s = s === '' ? t : s + repeat('0', 7 - t.length) + t; + } + } return s; +}; + +var FORCED = fails(function () { + return nativeToFixed(0.00008, 3) !== '0.000' || + nativeToFixed(0.9, 0) !== '1' || + nativeToFixed(1.255, 2) !== '1.25' || + nativeToFixed(1000000000000000128.0, 0) !== '1000000000000000128'; +}) || !fails(function () { + // V8 ~ Android 4.3- + nativeToFixed({}); +}); + +// `Number.prototype.toFixed` method +// https://tc39.es/ecma262/#sec-number.prototype.tofixed +$({ target: 'Number', proto: true, forced: FORCED }, { + toFixed: function toFixed(fractionDigits) { + var number = thisNumberValue(this); + var fractDigits = toIntegerOrInfinity(fractionDigits); + var data = [0, 0, 0, 0, 0, 0]; + var sign = ''; + var result = '0'; + var e, z, j, k; + + // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation + if (fractDigits < 0 || fractDigits > 20) throw new $RangeError('Incorrect fraction digits'); + // eslint-disable-next-line no-self-compare -- NaN check + if (number !== number) return 'NaN'; + if (number <= -1e21 || number >= 1e21) return $String(number); + if (number < 0) { + sign = '-'; + number = -number; + } + if (number > 1e-21) { + e = log(number * pow(2, 69, 1)) - 69; + z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + if (e > 0) { + multiply(data, 0, z); + j = fractDigits; + while (j >= 7) { + multiply(data, 1e7, 0); + j -= 7; + } + multiply(data, pow(10, j, 1), 0); + j = e - 1; + while (j >= 23) { + divide(data, 1 << 23); + j -= 23; + } + divide(data, 1 << j); + multiply(data, 1, 1); + divide(data, 2); + result = dataToString(data); + } else { + multiply(data, 0, z); + multiply(data, 1 << -e, 0); + result = dataToString(data) + repeat('0', fractDigits); + } + } + if (fractDigits > 0) { + k = result.length; + result = sign + (k <= fractDigits + ? '0.' + repeat('0', fractDigits - k) + result + : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits)); + } else { + result = sign + result; + } return result; + } +}); + + +/***/ }), + +/***/ 82103: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.number.to-precision.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var thisNumberValue = __webpack_require__(/*! ../internals/this-number-value */ 92055); + +var nativeToPrecision = uncurryThis(1.0.toPrecision); + +var FORCED = fails(function () { + // IE7- + return nativeToPrecision(1, undefined) !== '1'; +}) || !fails(function () { + // V8 ~ Android 4.3- + nativeToPrecision({}); +}); + +// `Number.prototype.toPrecision` method +// https://tc39.es/ecma262/#sec-number.prototype.toprecision +$({ target: 'Number', proto: true, forced: FORCED }, { + toPrecision: function toPrecision(precision) { + return precision === undefined + ? nativeToPrecision(thisNumberValue(this)) + : nativeToPrecision(thisNumberValue(this), precision); + } +}); + + +/***/ }), + +/***/ 41812: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.assign.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var assign = __webpack_require__(/*! ../internals/object-assign */ 79898); + +// `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es/no-object-assign -- required for testing +$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, { + assign: assign +}); + + +/***/ }), + +/***/ 60629: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.create.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); + +// `Object.create` method +// https://tc39.es/ecma262/#sec-object.create +$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { + create: create +}); + + +/***/ }), + +/***/ 34128: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.define-getter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var FORCED = __webpack_require__(/*! ../internals/object-prototype-accessors-forced */ 34104); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); + +// `Object.prototype.__defineGetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__ +if (DESCRIPTORS) { + $({ target: 'Object', proto: true, forced: FORCED }, { + __defineGetter__: function __defineGetter__(P, getter) { + definePropertyModule.f(toObject(this), P, { get: aCallable(getter), enumerable: true, configurable: true }); + } + }); +} + + +/***/ }), + +/***/ 77450: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.define-properties.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var defineProperties = (__webpack_require__(/*! ../internals/object-define-properties */ 69444).f); + +// `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe +$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, { + defineProperties: defineProperties +}); + + +/***/ }), + +/***/ 44198: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.define-property.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ 82180).f); + +// `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty +// eslint-disable-next-line es/no-object-defineproperty -- safe +$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, { + defineProperty: defineProperty +}); + + +/***/ }), + +/***/ 60404: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.define-setter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var FORCED = __webpack_require__(/*! ../internals/object-prototype-accessors-forced */ 34104); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); + +// `Object.prototype.__defineSetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__ +if (DESCRIPTORS) { + $({ target: 'Object', proto: true, forced: FORCED }, { + __defineSetter__: function __defineSetter__(P, setter) { + definePropertyModule.f(toObject(this), P, { set: aCallable(setter), enumerable: true, configurable: true }); + } + }); +} + + +/***/ }), + +/***/ 84577: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.entries.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $entries = (__webpack_require__(/*! ../internals/object-to-array */ 73922).entries); + +// `Object.entries` method +// https://tc39.es/ecma262/#sec-object.entries +$({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } +}); + + +/***/ }), + +/***/ 72950: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.freeze.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ 16681); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var onFreeze = (__webpack_require__(/*! ../internals/internal-metadata */ 54324).onFreeze); + +// eslint-disable-next-line es/no-object-freeze -- safe +var $freeze = Object.freeze; +var FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); }); + +// `Object.freeze` method +// https://tc39.es/ecma262/#sec-object.freeze +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, { + freeze: function freeze(it) { + return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it; + } +}); + + +/***/ }), + +/***/ 81752: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.from-entries.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var iterate = __webpack_require__(/*! ../internals/iterate */ 56239); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); + +// `Object.fromEntries` method +// https://github.com/tc39/proposal-object-from-entries +$({ target: 'Object', stat: true }, { + fromEntries: function fromEntries(iterable) { + var obj = {}; + iterate(iterable, function (k, v) { + createProperty(obj, k, v); + }, { AS_ENTRIES: true }); + return obj; + } +}); + + +/***/ }), + +/***/ 99956: +/*!*******************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.get-own-property-descriptor.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var nativeGetOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); + +var FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); }); + +// `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor +$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key); + } +}); + + +/***/ }), + +/***/ 37403: +/*!********************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.get-own-property-descriptors.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 91178); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158); +var createProperty = __webpack_require__(/*! ../internals/create-property */ 85567); + +// `Object.getOwnPropertyDescriptors` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors +$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var keys = ownKeys(O); + var result = {}; + var index = 0; + var key, descriptor; + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); + if (descriptor !== undefined) createProperty(result, key, descriptor); + } + return result; + } +}); + + +/***/ }), + +/***/ 21929: +/*!**************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.get-own-property-names.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names-external */ 13207).f); + +// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing +var FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); }); + +// `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + getOwnPropertyNames: getOwnPropertyNames +}); + + +/***/ }), + +/***/ 28440: +/*!****************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.get-own-property-symbols.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ 1918); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 36842); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); + +// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives +// https://bugs.chromium.org/p/v8/issues/detail?id=3443 +var FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); }); + +// `Object.getOwnPropertySymbols` method +// https://tc39.es/ecma262/#sec-object.getownpropertysymbols +$({ target: 'Object', stat: true, forced: FORCED }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : []; + } +}); + + +/***/ }), + +/***/ 66814: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.get-prototype-of.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var nativeGetPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 2430); + +var FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); }); + +// `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, { + getPrototypeOf: function getPrototypeOf(it) { + return nativeGetPrototypeOf(toObject(it)); + } +}); + + + +/***/ }), + +/***/ 71434: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.group-by.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); +var iterate = __webpack_require__(/*! ../internals/iterate */ 56239); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// eslint-disable-next-line es/no-object-groupby -- testing +var nativeGroupBy = Object.groupBy; +var create = getBuiltIn('Object', 'create'); +var push = uncurryThis([].push); + +var DOES_NOT_WORK_WITH_PRIMITIVES = !nativeGroupBy || fails(function () { + return nativeGroupBy('ab', function (it) { + return it; + }).a.length !== 1; +}); + +// `Object.groupBy` method +// https://github.com/tc39/proposal-array-grouping +$({ target: 'Object', stat: true, forced: DOES_NOT_WORK_WITH_PRIMITIVES }, { + groupBy: function groupBy(items, callbackfn) { + requireObjectCoercible(items); + aCallable(callbackfn); + var obj = create(null); + var k = 0; + iterate(items, function (value) { + var key = toPropertyKey(callbackfn(value, k++)); + // in some IE versions, `hasOwnProperty` returns incorrect result on integer keys + // but since it's a `null` prototype object, we can safely use `in` + if (key in obj) push(obj[key], value); + else obj[key] = [value]; + }); + return obj; + } +}); + + +/***/ }), + +/***/ 59024: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.has-own.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); + +// `Object.hasOwn` method +// https://tc39.es/ecma262/#sec-object.hasown +$({ target: 'Object', stat: true }, { + hasOwn: hasOwn +}); + + +/***/ }), + +/***/ 19307: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.is-extensible.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $isExtensible = __webpack_require__(/*! ../internals/object-is-extensible */ 55317); + +// `Object.isExtensible` method +// https://tc39.es/ecma262/#sec-object.isextensible +// eslint-disable-next-line es/no-object-isextensible -- safe +$({ target: 'Object', stat: true, forced: Object.isExtensible !== $isExtensible }, { + isExtensible: $isExtensible +}); + + +/***/ }), + +/***/ 67120: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.is-frozen.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(/*! ../internals/array-buffer-non-extensible */ 74591); + +// eslint-disable-next-line es/no-object-isfrozen -- safe +var $isFrozen = Object.isFrozen; + +var FORCED = ARRAY_BUFFER_NON_EXTENSIBLE || fails(function () { $isFrozen(1); }); + +// `Object.isFrozen` method +// https://tc39.es/ecma262/#sec-object.isfrozen +$({ target: 'Object', stat: true, forced: FORCED }, { + isFrozen: function isFrozen(it) { + if (!isObject(it)) return true; + if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return true; + return $isFrozen ? $isFrozen(it) : false; + } +}); + + +/***/ }), + +/***/ 75634: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.is-sealed.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(/*! ../internals/array-buffer-non-extensible */ 74591); + +// eslint-disable-next-line es/no-object-issealed -- safe +var $isSealed = Object.isSealed; + +var FORCED = ARRAY_BUFFER_NON_EXTENSIBLE || fails(function () { $isSealed(1); }); + +// `Object.isSealed` method +// https://tc39.es/ecma262/#sec-object.issealed +$({ target: 'Object', stat: true, forced: FORCED }, { + isSealed: function isSealed(it) { + if (!isObject(it)) return true; + if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return true; + return $isSealed ? $isSealed(it) : false; + } +}); + + +/***/ }), + +/***/ 6517: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.is.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var is = __webpack_require__(/*! ../internals/same-value */ 33131); + +// `Object.is` method +// https://tc39.es/ecma262/#sec-object.is +$({ target: 'Object', stat: true }, { + is: is +}); + + +/***/ }), + +/***/ 24397: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.keys.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var nativeKeys = __webpack_require__(/*! ../internals/object-keys */ 70707); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); }); + +// `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { + keys: function keys(it) { + return nativeKeys(toObject(it)); + } +}); + + +/***/ }), + +/***/ 15875: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.lookup-getter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var FORCED = __webpack_require__(/*! ../internals/object-prototype-accessors-forced */ 34104); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); + +// `Object.prototype.__lookupGetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__ +if (DESCRIPTORS) { + $({ target: 'Object', proto: true, forced: FORCED }, { + __lookupGetter__: function __lookupGetter__(P) { + var O = toObject(this); + var key = toPropertyKey(P); + var desc; + do { + if (desc = getOwnPropertyDescriptor(O, key)) return desc.get; + } while (O = getPrototypeOf(O)); + } + }); +} + + +/***/ }), + +/***/ 13063: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.lookup-setter.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var FORCED = __webpack_require__(/*! ../internals/object-prototype-accessors-forced */ 34104); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); + +// `Object.prototype.__lookupSetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__ +if (DESCRIPTORS) { + $({ target: 'Object', proto: true, forced: FORCED }, { + __lookupSetter__: function __lookupSetter__(P) { + var O = toObject(this); + var key = toPropertyKey(P); + var desc; + do { + if (desc = getOwnPropertyDescriptor(O, key)) return desc.set; + } while (O = getPrototypeOf(O)); + } + }); +} + + +/***/ }), + +/***/ 95954: +/*!**********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.prevent-extensions.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var onFreeze = (__webpack_require__(/*! ../internals/internal-metadata */ 54324).onFreeze); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ 16681); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// eslint-disable-next-line es/no-object-preventextensions -- safe +var $preventExtensions = Object.preventExtensions; +var FAILS_ON_PRIMITIVES = fails(function () { $preventExtensions(1); }); + +// `Object.preventExtensions` method +// https://tc39.es/ecma262/#sec-object.preventextensions +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, { + preventExtensions: function preventExtensions(it) { + return $preventExtensions && isObject(it) ? $preventExtensions(onFreeze(it)) : it; + } +}); + + +/***/ }), + +/***/ 7131: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.proto.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var isPossiblePrototype = __webpack_require__(/*! ../internals/is-possible-prototype */ 83290); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); + +// eslint-disable-next-line es/no-object-getprototypeof -- safe +var getPrototypeOf = Object.getPrototypeOf; +// eslint-disable-next-line es/no-object-setprototypeof -- safe +var setPrototypeOf = Object.setPrototypeOf; +var ObjectPrototype = Object.prototype; +var PROTO = '__proto__'; + +// `Object.prototype.__proto__` accessor +// https://tc39.es/ecma262/#sec-object.prototype.__proto__ +if (DESCRIPTORS && getPrototypeOf && setPrototypeOf && !(PROTO in ObjectPrototype)) try { + defineBuiltInAccessor(ObjectPrototype, PROTO, { + configurable: true, + get: function __proto__() { + return getPrototypeOf(toObject(this)); + }, + set: function __proto__(proto) { + var O = requireObjectCoercible(this); + if (isPossiblePrototype(proto) && isObject(O)) { + setPrototypeOf(O, proto); + } + } + }); +} catch (error) { /* empty */ } + + +/***/ }), + +/***/ 20800: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.seal.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var onFreeze = (__webpack_require__(/*! ../internals/internal-metadata */ 54324).onFreeze); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ 16681); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// eslint-disable-next-line es/no-object-seal -- safe +var $seal = Object.seal; +var FAILS_ON_PRIMITIVES = fails(function () { $seal(1); }); + +// `Object.seal` method +// https://tc39.es/ecma262/#sec-object.seal +$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, { + seal: function seal(it) { + return $seal && isObject(it) ? $seal(onFreeze(it)) : it; + } +}); + + +/***/ }), + +/***/ 53546: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.set-prototype-of.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 87888); + +// `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +$({ target: 'Object', stat: true }, { + setPrototypeOf: setPrototypeOf +}); + + +/***/ }), + +/***/ 32064: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.to-string.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ 28839); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var toString = __webpack_require__(/*! ../internals/object-to-string */ 54726); + +// `Object.prototype.toString` method +// https://tc39.es/ecma262/#sec-object.prototype.tostring +if (!TO_STRING_TAG_SUPPORT) { + defineBuiltIn(Object.prototype, 'toString', toString, { unsafe: true }); +} + + +/***/ }), + +/***/ 95931: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.object.values.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $values = (__webpack_require__(/*! ../internals/object-to-array */ 73922).values); + +// `Object.values` method +// https://tc39.es/ecma262/#sec-object.values +$({ target: 'Object', stat: true }, { + values: function values(O) { + return $values(O); + } +}); + + +/***/ }), + +/***/ 56230: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.parse-float.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $parseFloat = __webpack_require__(/*! ../internals/number-parse-float */ 3301); + +// `parseFloat` method +// https://tc39.es/ecma262/#sec-parsefloat-string +$({ global: true, forced: parseFloat !== $parseFloat }, { + parseFloat: $parseFloat +}); + + +/***/ }), + +/***/ 9241: +/*!******************************************************!*\ + !*** ./node_modules/core-js/modules/es.parse-int.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $parseInt = __webpack_require__(/*! ../internals/number-parse-int */ 85890); + +// `parseInt` method +// https://tc39.es/ecma262/#sec-parseint-string-radix +$({ global: true, forced: parseInt !== $parseInt }, { + parseInt: $parseInt +}); + + +/***/ }), + +/***/ 13945: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.apply.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var functionApply = __webpack_require__(/*! ../internals/function-apply */ 62144); +var aCallable = __webpack_require__(/*! ../internals/a-callable */ 80359); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// MS Edge argumentsList argument is optional +var OPTIONAL_ARGUMENTS_LIST = !fails(function () { + // eslint-disable-next-line es/no-reflect -- required for testing + Reflect.apply(function () { /* empty */ }); +}); + +// `Reflect.apply` method +// https://tc39.es/ecma262/#sec-reflect.apply +$({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, { + apply: function apply(target, thisArgument, argumentsList) { + return functionApply(aCallable(target), thisArgument, anObject(argumentsList)); + } +}); + + +/***/ }), + +/***/ 14268: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.construct.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var apply = __webpack_require__(/*! ../internals/function-apply */ 62144); +var bind = __webpack_require__(/*! ../internals/function-bind */ 90265); +var aConstructor = __webpack_require__(/*! ../internals/a-constructor */ 27267); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var nativeConstruct = getBuiltIn('Reflect', 'construct'); +var ObjectPrototype = Object.prototype; +var push = [].push; + +// `Reflect.construct` method +// https://tc39.es/ecma262/#sec-reflect.construct +// MS Edge supports only 2 arguments and argumentsList argument is optional +// FF Nightly sets third argument as `new.target`, but does not create `this` from it +var NEW_TARGET_BUG = fails(function () { + function F() { /* empty */ } + return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F); +}); + +var ARGS_BUG = !fails(function () { + nativeConstruct(function () { /* empty */ }); +}); + +var FORCED = NEW_TARGET_BUG || ARGS_BUG; + +$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, { + construct: function construct(Target, args /* , newTarget */) { + aConstructor(Target); + anObject(args); + var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]); + if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget); + if (Target === newTarget) { + // w/o altered newTarget, optimization for 0-4 arguments + switch (args.length) { + case 0: return new Target(); + case 1: return new Target(args[0]); + case 2: return new Target(args[0], args[1]); + case 3: return new Target(args[0], args[1], args[2]); + case 4: return new Target(args[0], args[1], args[2], args[3]); + } + // w/o altered newTarget, lot of arguments case + var $args = [null]; + apply(push, $args, args); + return new (apply(bind, Target, $args))(); + } + // with altered newTarget, not support built-in constructors + var proto = newTarget.prototype; + var instance = create(isObject(proto) ? proto : ObjectPrototype); + var result = apply(Target, instance, args); + return isObject(result) ? result : instance; + } +}); + + +/***/ }), + +/***/ 48926: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.define-property.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// MS Edge has broken Reflect.defineProperty - throwing instead of returning false +var ERROR_INSTEAD_OF_FALSE = fails(function () { + // eslint-disable-next-line es/no-reflect -- required for testing + Reflect.defineProperty(definePropertyModule.f({}, 1, { value: 1 }), 1, { value: 2 }); +}); + +// `Reflect.defineProperty` method +// https://tc39.es/ecma262/#sec-reflect.defineproperty +$({ target: 'Reflect', stat: true, forced: ERROR_INSTEAD_OF_FALSE, sham: !DESCRIPTORS }, { + defineProperty: function defineProperty(target, propertyKey, attributes) { + anObject(target); + var key = toPropertyKey(propertyKey); + anObject(attributes); + try { + definePropertyModule.f(target, key, attributes); + return true; + } catch (error) { + return false; + } + } +}); + + +/***/ }), + +/***/ 47390: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.delete-property.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); + +// `Reflect.deleteProperty` method +// https://tc39.es/ecma262/#sec-reflect.deleteproperty +$({ target: 'Reflect', stat: true }, { + deleteProperty: function deleteProperty(target, propertyKey) { + var descriptor = getOwnPropertyDescriptor(anObject(target), propertyKey); + return descriptor && !descriptor.configurable ? false : delete target[propertyKey]; + } +}); + + +/***/ }), + +/***/ 43180: +/*!********************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.get-own-property-descriptor.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158); + +// `Reflect.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-reflect.getownpropertydescriptor +$({ target: 'Reflect', stat: true, sham: !DESCRIPTORS }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { + return getOwnPropertyDescriptorModule.f(anObject(target), propertyKey); + } +}); + + +/***/ }), + +/***/ 92982: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.get-prototype-of.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var objectGetPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ 2430); + +// `Reflect.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-reflect.getprototypeof +$({ target: 'Reflect', stat: true, sham: !CORRECT_PROTOTYPE_GETTER }, { + getPrototypeOf: function getPrototypeOf(target) { + return objectGetPrototypeOf(anObject(target)); + } +}); + + +/***/ }), + +/***/ 76293: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.get.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isDataDescriptor = __webpack_require__(/*! ../internals/is-data-descriptor */ 84882); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); + +// `Reflect.get` method +// https://tc39.es/ecma262/#sec-reflect.get +function get(target, propertyKey /* , receiver */) { + var receiver = arguments.length < 3 ? target : arguments[2]; + var descriptor, prototype; + if (anObject(target) === receiver) return target[propertyKey]; + descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey); + if (descriptor) return isDataDescriptor(descriptor) + ? descriptor.value + : descriptor.get === undefined ? undefined : call(descriptor.get, receiver); + if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver); +} + +$({ target: 'Reflect', stat: true }, { + get: get +}); + + +/***/ }), + +/***/ 6761: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.has.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); + +// `Reflect.has` method +// https://tc39.es/ecma262/#sec-reflect.has +$({ target: 'Reflect', stat: true }, { + has: function has(target, propertyKey) { + return propertyKey in target; + } +}); + + +/***/ }), + +/***/ 29075: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.is-extensible.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var $isExtensible = __webpack_require__(/*! ../internals/object-is-extensible */ 55317); + +// `Reflect.isExtensible` method +// https://tc39.es/ecma262/#sec-reflect.isextensible +$({ target: 'Reflect', stat: true }, { + isExtensible: function isExtensible(target) { + anObject(target); + return $isExtensible(target); + } +}); + + +/***/ }), + +/***/ 38554: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.own-keys.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var ownKeys = __webpack_require__(/*! ../internals/own-keys */ 91178); + +// `Reflect.ownKeys` method +// https://tc39.es/ecma262/#sec-reflect.ownkeys +$({ target: 'Reflect', stat: true }, { + ownKeys: ownKeys +}); + + +/***/ }), + +/***/ 33946: +/*!***********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.prevent-extensions.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var FREEZING = __webpack_require__(/*! ../internals/freezing */ 16681); + +// `Reflect.preventExtensions` method +// https://tc39.es/ecma262/#sec-reflect.preventextensions +$({ target: 'Reflect', stat: true, sham: !FREEZING }, { + preventExtensions: function preventExtensions(target) { + anObject(target); + try { + var objectPreventExtensions = getBuiltIn('Object', 'preventExtensions'); + if (objectPreventExtensions) objectPreventExtensions(target); + return true; + } catch (error) { + return false; + } + } +}); + + +/***/ }), + +/***/ 39778: +/*!*********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.set-prototype-of.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ 50387); +var objectSetPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ 87888); + +// `Reflect.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-reflect.setprototypeof +if (objectSetPrototypeOf) $({ target: 'Reflect', stat: true }, { + setPrototypeOf: function setPrototypeOf(target, proto) { + anObject(target); + aPossiblePrototype(proto); + try { + objectSetPrototypeOf(target, proto); + return true; + } catch (error) { + return false; + } + } +}); + + +/***/ }), + +/***/ 7265: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.set.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var isDataDescriptor = __webpack_require__(/*! ../internals/is-data-descriptor */ 84882); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158); +var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ 63804); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 78113); + +// `Reflect.set` method +// https://tc39.es/ecma262/#sec-reflect.set +function set(target, propertyKey, V /* , receiver */) { + var receiver = arguments.length < 4 ? target : arguments[3]; + var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey); + var existingDescriptor, prototype, setter; + if (!ownDescriptor) { + if (isObject(prototype = getPrototypeOf(target))) { + return set(prototype, propertyKey, V, receiver); + } + ownDescriptor = createPropertyDescriptor(0); + } + if (isDataDescriptor(ownDescriptor)) { + if (ownDescriptor.writable === false || !isObject(receiver)) return false; + if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) { + if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; + existingDescriptor.value = V; + definePropertyModule.f(receiver, propertyKey, existingDescriptor); + } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V)); + } else { + setter = ownDescriptor.set; + if (setter === undefined) return false; + call(setter, receiver, V); + } return true; +} + +// MS Edge 17-18 Reflect.set allows setting the property to object +// with non-writable property on the prototype +var MS_EDGE_BUG = fails(function () { + var Constructor = function () { /* empty */ }; + var object = definePropertyModule.f(new Constructor(), 'a', { configurable: true }); + // eslint-disable-next-line es/no-reflect -- required for testing + return Reflect.set(Constructor.prototype, 'a', 1, object) !== false; +}); + +$({ target: 'Reflect', stat: true, forced: MS_EDGE_BUG }, { + set: set +}); + + +/***/ }), + +/***/ 89181: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.reflect.to-string-tag.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); + +$({ global: true }, { Reflect: {} }); + +// Reflect[@@toStringTag] property +// https://tc39.es/ecma262/#sec-reflect-@@tostringtag +setToStringTag(globalThis.Reflect, 'Reflect', true); + + +/***/ }), + +/***/ 67607: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.constructor.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var isForced = __webpack_require__(/*! ../internals/is-forced */ 78367); +var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ 3180); +var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ 85250); +var create = __webpack_require__(/*! ../internals/object-create */ 30067); +var getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ 92323).f); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 71663); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ 83791); +var stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ 68622); +var proxyAccessor = __webpack_require__(/*! ../internals/proxy-accessor */ 73173); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var enforceInternalState = (__webpack_require__(/*! ../internals/internal-state */ 49804).enforce); +var setSpecies = __webpack_require__(/*! ../internals/set-species */ 69494); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var UNSUPPORTED_DOT_ALL = __webpack_require__(/*! ../internals/regexp-unsupported-dot-all */ 26478); +var UNSUPPORTED_NCG = __webpack_require__(/*! ../internals/regexp-unsupported-ncg */ 95515); + +var MATCH = wellKnownSymbol('match'); +var NativeRegExp = globalThis.RegExp; +var RegExpPrototype = NativeRegExp.prototype; +var SyntaxError = globalThis.SyntaxError; +var exec = uncurryThis(RegExpPrototype.exec); +var charAt = uncurryThis(''.charAt); +var replace = uncurryThis(''.replace); +var stringIndexOf = uncurryThis(''.indexOf); +var stringSlice = uncurryThis(''.slice); +// TODO: Use only proper RegExpIdentifierName +var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/; +var re1 = /a/g; +var re2 = /a/g; + +// "new" should create a new object, old webkit bug +var CORRECT_NEW = new NativeRegExp(re1) !== re1; + +var MISSED_STICKY = stickyHelpers.MISSED_STICKY; +var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y; + +var BASE_FORCED = DESCRIPTORS && + (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () { + re2[MATCH] = false; + // RegExp constructor can alter flags and IsRegExp works correct with @@match + return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i'; + })); + +var handleDotAll = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var brackets = false; + var chr; + for (; index <= length; index++) { + chr = charAt(string, index); + if (chr === '\\') { + result += chr + charAt(string, ++index); + continue; + } + if (!brackets && chr === '.') { + result += '[\\s\\S]'; + } else { + if (chr === '[') { + brackets = true; + } else if (chr === ']') { + brackets = false; + } result += chr; + } + } return result; +}; + +var handleNCG = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var named = []; + var names = create(null); + var brackets = false; + var ncg = false; + var groupid = 0; + var groupname = ''; + var chr; + for (; index <= length; index++) { + chr = charAt(string, index); + if (chr === '\\') { + chr += charAt(string, ++index); + } else if (chr === ']') { + brackets = false; + } else if (!brackets) switch (true) { + case chr === '[': + brackets = true; + break; + case chr === '(': + result += chr; + // ignore non-capturing groups + if (stringSlice(string, index + 1, index + 3) === '?:') { + continue; + } + if (exec(IS_NCG, stringSlice(string, index + 1))) { + index += 2; + ncg = true; + } + groupid++; + continue; + case chr === '>' && ncg: + if (groupname === '' || hasOwn(names, groupname)) { + throw new SyntaxError('Invalid capture group name'); + } + names[groupname] = true; + named[named.length] = [groupname, groupid]; + ncg = false; + groupname = ''; + continue; + } + if (ncg) groupname += chr; + else result += chr; + } return [result, named]; +}; + +// `RegExp` constructor +// https://tc39.es/ecma262/#sec-regexp-constructor +if (isForced('RegExp', BASE_FORCED)) { + var RegExpWrapper = function RegExp(pattern, flags) { + var thisIsRegExp = isPrototypeOf(RegExpPrototype, this); + var patternIsRegExp = isRegExp(pattern); + var flagsAreUndefined = flags === undefined; + var groups = []; + var rawPattern = pattern; + var rawFlags, dotAll, sticky, handled, result, state; + + if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) { + return pattern; + } + + if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) { + pattern = pattern.source; + if (flagsAreUndefined) flags = getRegExpFlags(rawPattern); + } + + pattern = pattern === undefined ? '' : toString(pattern); + flags = flags === undefined ? '' : toString(flags); + rawPattern = pattern; + + if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) { + dotAll = !!flags && stringIndexOf(flags, 's') > -1; + if (dotAll) flags = replace(flags, /s/g, ''); + } + + rawFlags = flags; + + if (MISSED_STICKY && 'sticky' in re1) { + sticky = !!flags && stringIndexOf(flags, 'y') > -1; + if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, ''); + } + + if (UNSUPPORTED_NCG) { + handled = handleNCG(pattern); + pattern = handled[0]; + groups = handled[1]; + } + + result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper); + + if (dotAll || sticky || groups.length) { + state = enforceInternalState(result); + if (dotAll) { + state.dotAll = true; + state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags); + } + if (sticky) state.sticky = true; + if (groups.length) state.groups = groups; + } + + if (pattern !== rawPattern) try { + // fails in old engines, but we have no alternatives for unsupported regex syntax + createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern); + } catch (error) { /* empty */ } + + return result; + }; + + for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) { + proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]); + } + + RegExpPrototype.constructor = RegExpWrapper; + RegExpWrapper.prototype = RegExpPrototype; + defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true }); +} + +// https://tc39.es/ecma262/#sec-get-regexp-@@species +setSpecies('RegExp'); + + +/***/ }), + +/***/ 56346: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.dot-all.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var UNSUPPORTED_DOT_ALL = __webpack_require__(/*! ../internals/regexp-unsupported-dot-all */ 26478); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var getInternalState = (__webpack_require__(/*! ../internals/internal-state */ 49804).get); + +var RegExpPrototype = RegExp.prototype; +var $TypeError = TypeError; + +// `RegExp.prototype.dotAll` getter +// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall +if (DESCRIPTORS && UNSUPPORTED_DOT_ALL) { + defineBuiltInAccessor(RegExpPrototype, 'dotAll', { + configurable: true, + get: function dotAll() { + if (this === RegExpPrototype) return; + // We can't use InternalStateModule.getterFor because + // we don't add metadata for regexps created by a literal. + if (classof(this) === 'RegExp') { + return !!getInternalState(this).dotAll; + } + throw new $TypeError('Incompatible receiver, RegExp required'); + } + }); +} + + +/***/ }), + +/***/ 42478: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.exec.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var exec = __webpack_require__(/*! ../internals/regexp-exec */ 90956); + +// `RegExp.prototype.exec` method +// https://tc39.es/ecma262/#sec-regexp.prototype.exec +$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, { + exec: exec +}); + + +/***/ }), + +/***/ 82372: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.flags.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var regExpFlags = __webpack_require__(/*! ../internals/regexp-flags */ 35278); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError +var RegExp = globalThis.RegExp; +var RegExpPrototype = RegExp.prototype; + +var FORCED = DESCRIPTORS && fails(function () { + var INDICES_SUPPORT = true; + try { + RegExp('.', 'd'); + } catch (error) { + INDICES_SUPPORT = false; + } + + var O = {}; + // modern V8 bug + var calls = ''; + var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy'; + + var addGetter = function (key, chr) { + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(O, key, { get: function () { + calls += chr; + return true; + } }); + }; + + var pairs = { + dotAll: 's', + global: 'g', + ignoreCase: 'i', + multiline: 'm', + sticky: 'y' + }; + + if (INDICES_SUPPORT) pairs.hasIndices = 'd'; + + for (var key in pairs) addGetter(key, pairs[key]); + + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O); + + return result !== expected || calls !== expected; +}); + +// `RegExp.prototype.flags` getter +// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags +if (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', { + configurable: true, + get: regExpFlags +}); + + +/***/ }), + +/***/ 92780: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.sticky.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var MISSED_STICKY = (__webpack_require__(/*! ../internals/regexp-sticky-helpers */ 68622).MISSED_STICKY); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var getInternalState = (__webpack_require__(/*! ../internals/internal-state */ 49804).get); + +var RegExpPrototype = RegExp.prototype; +var $TypeError = TypeError; + +// `RegExp.prototype.sticky` getter +// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky +if (DESCRIPTORS && MISSED_STICKY) { + defineBuiltInAccessor(RegExpPrototype, 'sticky', { + configurable: true, + get: function sticky() { + if (this === RegExpPrototype) return; + // We can't use InternalStateModule.getterFor because + // we don't add metadata for regexps created by a literal. + if (classof(this) === 'RegExp') { + return !!getInternalState(this).sticky; + } + throw new $TypeError('Incompatible receiver, RegExp required'); + } + }); +} + + +/***/ }), + +/***/ 84711: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.test.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove from `core-js@4` since it's moved to entry points +__webpack_require__(/*! ../modules/es.regexp.exec */ 42478); +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); + +var DELEGATES_TO_EXEC = function () { + var execCalled = false; + var re = /[ac]/; + re.exec = function () { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + return re.test('abc') === true && execCalled; +}(); + +var nativeTest = /./.test; + +// `RegExp.prototype.test` method +// https://tc39.es/ecma262/#sec-regexp.prototype.test +$({ target: 'RegExp', proto: true, forced: !DELEGATES_TO_EXEC }, { + test: function (S) { + var R = anObject(this); + var string = toString(S); + var exec = R.exec; + if (!isCallable(exec)) return call(nativeTest, R, string); + var result = call(exec, R, string); + if (result === null) return false; + anObject(result); + return true; + } +}); + + +/***/ }), + +/***/ 35434: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var PROPER_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ 26553).PROPER); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var $toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ 83791); + +var TO_STRING = 'toString'; +var RegExpPrototype = RegExp.prototype; +var nativeToString = RegExpPrototype[TO_STRING]; + +var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) !== '/a/b'; }); +// FF44- RegExp#toString has a wrong name +var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING; + +// `RegExp.prototype.toString` method +// https://tc39.es/ecma262/#sec-regexp.prototype.tostring +if (NOT_GENERIC || INCORRECT_NAME) { + defineBuiltIn(RegExpPrototype, TO_STRING, function toString() { + var R = anObject(this); + var pattern = $toString(R.source); + var flags = $toString(getRegExpFlags(R)); + return '/' + pattern + '/' + flags; + }, { unsafe: true }); +} + + +/***/ }), + +/***/ 30632: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.constructor.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var collection = __webpack_require__(/*! ../internals/collection */ 42833); +var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ 2913); + +// `Set` constructor +// https://tc39.es/ecma262/#sec-set-objects +collection('Set', function (init) { + return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; +}, collectionStrong); + + +/***/ }), + +/***/ 43407: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.difference.v2.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var difference = __webpack_require__(/*! ../internals/set-difference */ 2153); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +// `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('difference') }, { + difference: difference +}); + + +/***/ }), + +/***/ 87865: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.intersection.v2.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var intersection = __webpack_require__(/*! ../internals/set-intersection */ 60139); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +var INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () { + // eslint-disable-next-line es/no-array-from, es/no-set -- testing + return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2'; +}); + +// `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, { + intersection: intersection +}); + + +/***/ }), + +/***/ 90516: +/*!********************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isDisjointFrom = __webpack_require__(/*! ../internals/set-is-disjoint-from */ 43820); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +// `Set.prototype.isDisjointFrom` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isDisjointFrom') }, { + isDisjointFrom: isDisjointFrom +}); + + +/***/ }), + +/***/ 19817: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.is-subset-of.v2.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isSubsetOf = __webpack_require__(/*! ../internals/set-is-subset-of */ 9195); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +// `Set.prototype.isSubsetOf` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSubsetOf') }, { + isSubsetOf: isSubsetOf +}); + + +/***/ }), + +/***/ 32658: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.is-superset-of.v2.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var isSupersetOf = __webpack_require__(/*! ../internals/set-is-superset-of */ 29386); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +// `Set.prototype.isSupersetOf` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSupersetOf') }, { + isSupersetOf: isSupersetOf +}); + + +/***/ }), + +/***/ 37726: +/*!************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/es.set.constructor */ 30632); + + +/***/ }), + +/***/ 45081: +/*!************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.symmetric-difference.v2.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var symmetricDifference = __webpack_require__(/*! ../internals/set-symmetric-difference */ 68043); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +// `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('symmetricDifference') }, { + symmetricDifference: symmetricDifference +}); + + +/***/ }), + +/***/ 96469: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.set.union.v2.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var union = __webpack_require__(/*! ../internals/set-union */ 1039); +var setMethodAcceptSetLike = __webpack_require__(/*! ../internals/set-method-accept-set-like */ 32093); + +// `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods +$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('union') }, { + union: union +}); + + +/***/ }), + +/***/ 21622: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.anchor.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.anchor` method +// https://tc39.es/ecma262/#sec-string.prototype.anchor +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, { + anchor: function anchor(name) { + return createHTML(this, 'a', 'name', name); + } +}); + + +/***/ }), + +/***/ 50988: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.at-alternative.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var charAt = uncurryThis(''.charAt); + +var FORCED = fails(function () { + // eslint-disable-next-line es/no-string-prototype-at -- safe + return '𠮷'.at(-2) !== '\uD842'; +}); + +// `String.prototype.at` method +// https://tc39.es/ecma262/#sec-string.prototype.at +$({ target: 'String', proto: true, forced: FORCED }, { + at: function at(index) { + var S = toString(requireObjectCoercible(this)); + var len = S.length; + var relativeIndex = toIntegerOrInfinity(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return (k < 0 || k >= len) ? undefined : charAt(S, k); + } +}); + + +/***/ }), + +/***/ 31045: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.big.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.big` method +// https://tc39.es/ecma262/#sec-string.prototype.big +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('big') }, { + big: function big() { + return createHTML(this, 'big', '', ''); + } +}); + + +/***/ }), + +/***/ 58069: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.blink.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.blink` method +// https://tc39.es/ecma262/#sec-string.prototype.blink +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('blink') }, { + blink: function blink() { + return createHTML(this, 'blink', '', ''); + } +}); + + +/***/ }), + +/***/ 80468: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.bold.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.bold` method +// https://tc39.es/ecma262/#sec-string.prototype.bold +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, { + bold: function bold() { + return createHTML(this, 'b', '', ''); + } +}); + + +/***/ }), + +/***/ 20247: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.code-point-at.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var codeAt = (__webpack_require__(/*! ../internals/string-multibyte */ 88054).codeAt); + +// `String.prototype.codePointAt` method +// https://tc39.es/ecma262/#sec-string.prototype.codepointat +$({ target: 'String', proto: true }, { + codePointAt: function codePointAt(pos) { + return codeAt(this, pos); + } +}); + + +/***/ }), + +/***/ 36550: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.ends-with.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ 68417); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ 66418); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ 74751); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); + +var slice = uncurryThis(''.slice); +var min = Math.min; + +var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith'); +// https://github.com/zloirock/core-js/pull/702 +var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () { + var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith'); + return descriptor && !descriptor.writable; +}(); + +// `String.prototype.endsWith` method +// https://tc39.es/ecma262/#sec-string.prototype.endswith +$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + endsWith: function endsWith(searchString /* , endPosition = @length */) { + var that = toString(requireObjectCoercible(this)); + notARegExp(searchString); + var endPosition = arguments.length > 1 ? arguments[1] : undefined; + var len = that.length; + var end = endPosition === undefined ? len : min(toLength(endPosition), len); + var search = toString(searchString); + return slice(that, end - search.length, end) === search; + } +}); + + +/***/ }), + +/***/ 48105: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.fixed.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.fixed` method +// https://tc39.es/ecma262/#sec-string.prototype.fixed +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fixed') }, { + fixed: function fixed() { + return createHTML(this, 'tt', '', ''); + } +}); + + +/***/ }), + +/***/ 6203: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.fontcolor.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.fontcolor` method +// https://tc39.es/ecma262/#sec-string.prototype.fontcolor +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontcolor') }, { + fontcolor: function fontcolor(color) { + return createHTML(this, 'font', 'color', color); + } +}); + + +/***/ }), + +/***/ 43575: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.fontsize.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.fontsize` method +// https://tc39.es/ecma262/#sec-string.prototype.fontsize +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontsize') }, { + fontsize: function fontsize(size) { + return createHTML(this, 'font', 'size', size); + } +}); + + +/***/ }), + +/***/ 41114: +/*!*******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.from-code-point.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ 65129); + +var $RangeError = RangeError; +var fromCharCode = String.fromCharCode; +// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing +var $fromCodePoint = String.fromCodePoint; +var join = uncurryThis([].join); + +// length should be 1, old FF problem +var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1; + +// `String.fromCodePoint` method +// https://tc39.es/ecma262/#sec-string.fromcodepoint +$({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + fromCodePoint: function fromCodePoint(x) { + var elements = []; + var length = arguments.length; + var i = 0; + var code; + while (length > i) { + code = +arguments[i++]; + if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw new $RangeError(code + ' is not a valid code point'); + elements[i] = code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00); + } return join(elements, ''); + } +}); + + +/***/ }), + +/***/ 91826: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.includes.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ 66418); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ 74751); + +var stringIndexOf = uncurryThis(''.indexOf); + +// `String.prototype.includes` method +// https://tc39.es/ecma262/#sec-string.prototype.includes +$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~stringIndexOf( + toString(requireObjectCoercible(this)), + toString(notARegExp(searchString)), + arguments.length > 1 ? arguments[1] : undefined + ); + } +}); + + +/***/ }), + +/***/ 44206: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.is-well-formed.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); + +var charCodeAt = uncurryThis(''.charCodeAt); + +// `String.prototype.isWellFormed` method +// https://github.com/tc39/proposal-is-usv-string +$({ target: 'String', proto: true }, { + isWellFormed: function isWellFormed() { + var S = toString(requireObjectCoercible(this)); + var length = S.length; + for (var i = 0; i < length; i++) { + var charCode = charCodeAt(S, i); + // single UTF-16 code unit + if ((charCode & 0xF800) !== 0xD800) continue; + // unpaired surrogate + if (charCode >= 0xDC00 || ++i >= length || (charCodeAt(S, i) & 0xFC00) !== 0xDC00) return false; + } return true; + } +}); + + +/***/ }), + +/***/ 21902: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.italics.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.italics` method +// https://tc39.es/ecma262/#sec-string.prototype.italics +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, { + italics: function italics() { + return createHTML(this, 'i', '', ''); + } +}); + + +/***/ }), + +/***/ 5177: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.iterator.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var charAt = (__webpack_require__(/*! ../internals/string-multibyte */ 88054).charAt); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); +var defineIterator = __webpack_require__(/*! ../internals/iterator-define */ 93167); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ 83049); + +var STRING_ITERATOR = 'String Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR); + +// `String.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-string.prototype-@@iterator +defineIterator(String, 'String', function (iterated) { + setInternalState(this, { + type: STRING_ITERATOR, + string: toString(iterated), + index: 0 + }); +// `%StringIteratorPrototype%.next` method +// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return createIterResultObject(undefined, true); + point = charAt(string, index); + state.index += point.length; + return createIterResultObject(point, false); +}); + + +/***/ }), + +/***/ 21739: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.link.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.link` method +// https://tc39.es/ecma262/#sec-string.prototype.link +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, { + link: function link(url) { + return createHTML(this, 'a', 'href', url); + } +}); + + +/***/ }), + +/***/ 19528: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.match-all.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +/* eslint-disable es/no-string-prototype-matchall -- safe */ +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ 68417); +var createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ 26501); +var createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ 83049); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var classof = __webpack_require__(/*! ../internals/classof-raw */ 45255); +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 71663); +var getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ 83791); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 44090); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 20528); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 8371); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); + +var MATCH_ALL = wellKnownSymbol('matchAll'); +var REGEXP_STRING = 'RegExp String'; +var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator'; +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR); +var RegExpPrototype = RegExp.prototype; +var $TypeError = TypeError; +var stringIndexOf = uncurryThis(''.indexOf); +var nativeMatchAll = uncurryThis(''.matchAll); + +var WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails(function () { + nativeMatchAll('a', /./); +}); + +var $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) { + setInternalState(this, { + type: REGEXP_STRING_ITERATOR, + regexp: regexp, + string: string, + global: $global, + unicode: fullUnicode, + done: false + }); +}, REGEXP_STRING, function next() { + var state = getInternalState(this); + if (state.done) return createIterResultObject(undefined, true); + var R = state.regexp; + var S = state.string; + var match = regExpExec(R, S); + if (match === null) { + state.done = true; + return createIterResultObject(undefined, true); + } + if (state.global) { + if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode); + return createIterResultObject(match, false); + } + state.done = true; + return createIterResultObject(match, false); +}); + +var $matchAll = function (string) { + var R = anObject(this); + var S = toString(string); + var C = speciesConstructor(R, RegExp); + var flags = toString(getRegExpFlags(R)); + var matcher, $global, fullUnicode; + matcher = new C(C === RegExp ? R.source : R, flags); + $global = !!~stringIndexOf(flags, 'g'); + fullUnicode = !!~stringIndexOf(flags, 'u'); + matcher.lastIndex = toLength(R.lastIndex); + return new $RegExpStringIterator(matcher, S, $global, fullUnicode); +}; + +// `String.prototype.matchAll` method +// https://tc39.es/ecma262/#sec-string.prototype.matchall +$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, { + matchAll: function matchAll(regexp) { + var O = requireObjectCoercible(this); + var flags, S, matcher, rx; + if (!isNullOrUndefined(regexp)) { + if (isRegExp(regexp)) { + flags = toString(requireObjectCoercible(getRegExpFlags(regexp))); + if (!~stringIndexOf(flags, 'g')) throw new $TypeError('`.matchAll` does not allow non-global regexes'); + } + if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp); + matcher = getMethod(regexp, MATCH_ALL); + if (matcher === undefined && IS_PURE && classof(regexp) === 'RegExp') matcher = $matchAll; + if (matcher) return call(matcher, regexp, O); + } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp); + S = toString(O); + rx = new RegExp(regexp, 'g'); + return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S); + } +}); + +IS_PURE || MATCH_ALL in RegExpPrototype || defineBuiltIn(RegExpPrototype, MATCH_ALL, $matchAll); + + +/***/ }), + +/***/ 34278: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.match.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 45365); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 20528); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 8371); + +// @@match logic +fixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) { + return [ + // `String.prototype.match` method + // https://tc39.es/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible(this); + var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH); + return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O)); + }, + // `RegExp.prototype[@@match]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@match + function (string) { + var rx = anObject(this); + var S = toString(string); + var res = maybeCallNative(nativeMatch, rx, S); + + if (res.done) return res.value; + + if (!rx.global) return regExpExec(rx, S); + + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + while ((result = regExpExec(rx, S)) !== null) { + var matchStr = toString(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + n++; + } + return n === 0 ? null : A; + } + ]; +}); + + +/***/ }), + +/***/ 34634: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.pad-end.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $padEnd = (__webpack_require__(/*! ../internals/string-pad */ 9172).end); +var WEBKIT_BUG = __webpack_require__(/*! ../internals/string-pad-webkit-bug */ 35596); + +// `String.prototype.padEnd` method +// https://tc39.es/ecma262/#sec-string.prototype.padend +$({ target: 'String', proto: true, forced: WEBKIT_BUG }, { + padEnd: function padEnd(maxLength /* , fillString = ' ' */) { + return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 13911: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.pad-start.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $padStart = (__webpack_require__(/*! ../internals/string-pad */ 9172).start); +var WEBKIT_BUG = __webpack_require__(/*! ../internals/string-pad-webkit-bug */ 35596); + +// `String.prototype.padStart` method +// https://tc39.es/ecma262/#sec-string.prototype.padstart +$({ target: 'String', proto: true, forced: WEBKIT_BUG }, { + padStart: function padStart(maxLength /* , fillString = ' ' */) { + return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } +}); + + +/***/ }), + +/***/ 14781: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.raw.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var toObject = __webpack_require__(/*! ../internals/to-object */ 19754); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ 45543); + +var push = uncurryThis([].push); +var join = uncurryThis([].join); + +// `String.raw` method +// https://tc39.es/ecma262/#sec-string.raw +$({ target: 'String', stat: true }, { + raw: function raw(template) { + var rawTemplate = toIndexedObject(toObject(template).raw); + var literalSegments = lengthOfArrayLike(rawTemplate); + if (!literalSegments) return ''; + var argumentsLength = arguments.length; + var elements = []; + var i = 0; + while (true) { + push(elements, toString(rawTemplate[i++])); + if (i === literalSegments) return join(elements, ''); + if (i < argumentsLength) push(elements, toString(arguments[i])); + } + } +}); + + +/***/ }), + +/***/ 82200: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.repeat.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var repeat = __webpack_require__(/*! ../internals/string-repeat */ 15834); + +// `String.prototype.repeat` method +// https://tc39.es/ecma262/#sec-string.prototype.repeat +$({ target: 'String', proto: true }, { + repeat: repeat +}); + + +/***/ }), + +/***/ 60041: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.replace-all.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ 71663); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ 83791); +var getSubstitution = __webpack_require__(/*! ../internals/get-substitution */ 38239); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); + +var REPLACE = wellKnownSymbol('replace'); +var $TypeError = TypeError; +var indexOf = uncurryThis(''.indexOf); +var replace = uncurryThis(''.replace); +var stringSlice = uncurryThis(''.slice); +var max = Math.max; + +// `String.prototype.replaceAll` method +// https://tc39.es/ecma262/#sec-string.prototype.replaceall +$({ target: 'String', proto: true }, { + replaceAll: function replaceAll(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, position, replacement; + var endOfLastMatch = 0; + var result = ''; + if (!isNullOrUndefined(searchValue)) { + IS_REG_EXP = isRegExp(searchValue); + if (IS_REG_EXP) { + flags = toString(requireObjectCoercible(getRegExpFlags(searchValue))); + if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes'); + } + replacer = getMethod(searchValue, REPLACE); + if (replacer) return call(replacer, searchValue, O, replaceValue); + if (IS_PURE && IS_REG_EXP) return replace(toString(O), searchValue, replaceValue); + } + string = toString(O); + searchString = toString(searchValue); + functionalReplace = isCallable(replaceValue); + if (!functionalReplace) replaceValue = toString(replaceValue); + searchLength = searchString.length; + advanceBy = max(1, searchLength); + position = indexOf(string, searchString); + while (position !== -1) { + replacement = functionalReplace + ? toString(replaceValue(searchString, position, string)) + : getSubstitution(searchString, string, position, [], undefined, replaceValue); + result += stringSlice(string, endOfLastMatch, position) + replacement; + endOfLastMatch = position + searchLength; + position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy); + } + if (endOfLastMatch < string.length) { + result += stringSlice(string, endOfLastMatch); + } + return result; + } +}); + + +/***/ }), + +/***/ 63859: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.replace.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var apply = __webpack_require__(/*! ../internals/function-apply */ 62144); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 45365); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 20528); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var getSubstitution = __webpack_require__(/*! ../internals/get-substitution */ 38239); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 8371); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); + +var REPLACE = wellKnownSymbol('replace'); +var max = Math.max; +var min = Math.min; +var concat = uncurryThis([].concat); +var push = uncurryThis([].push); +var stringIndexOf = uncurryThis(''.indexOf); +var stringSlice = uncurryThis(''.slice); + +var maybeToString = function (it) { + return it === undefined ? it : String(it); +}; + +// IE <= 11 replaces $0 with the whole match, as if it was $& +// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 +var REPLACE_KEEPS_$0 = (function () { + // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing + return 'a'.replace(/./, '$0') === '$0'; +})(); + +// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string +var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () { + if (/./[REPLACE]) { + return /./[REPLACE]('a', '$0') === ''; + } + return false; +})(); + +var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () { + var re = /./; + re.exec = function () { + var result = []; + result.groups = { a: '7' }; + return result; + }; + // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive + return ''.replace(re, '$') !== '7'; +}); + +// @@replace logic +fixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + + return [ + // `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible(this); + var replacer = isNullOrUndefined(searchValue) ? undefined : getMethod(searchValue, REPLACE); + return replacer + ? call(replacer, searchValue, O, replaceValue) + : call(nativeReplace, toString(O), searchValue, replaceValue); + }, + // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function (string, replaceValue) { + var rx = anObject(this); + var S = toString(string); + + if ( + typeof replaceValue == 'string' && + stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && + stringIndexOf(replaceValue, '$<') === -1 + ) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) return res.value; + } + + var functionalReplace = isCallable(replaceValue); + if (!functionalReplace) replaceValue = toString(replaceValue); + + var global = rx.global; + var fullUnicode; + if (global) { + fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + + var results = []; + var result; + while (true) { + result = regExpExec(rx, S); + if (result === null) break; + + push(results, result); + if (!global) break; + + var matchStr = toString(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + for (var i = 0; i < results.length; i++) { + result = results[i]; + + var matched = toString(result[0]); + var position = max(min(toIntegerOrInfinity(result.index), S.length), 0); + var captures = []; + var replacement; + // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j])); + var namedCaptures = result.groups; + if (functionalReplace) { + var replacerArgs = concat([matched], captures, position, S); + if (namedCaptures !== undefined) push(replacerArgs, namedCaptures); + replacement = toString(apply(replaceValue, undefined, replacerArgs)); + } else { + replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue); + } + if (position >= nextSourcePosition) { + accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + + return accumulatedResult + stringSlice(S, nextSourcePosition); + } + ]; +}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + + +/***/ }), + +/***/ 93711: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.search.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 45365); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var sameValue = __webpack_require__(/*! ../internals/same-value */ 33131); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 8371); + +// @@search logic +fixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) { + return [ + // `String.prototype.search` method + // https://tc39.es/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible(this); + var searcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, SEARCH); + return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O)); + }, + // `RegExp.prototype[@@search]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@search + function (string) { + var rx = anObject(this); + var S = toString(string); + var res = maybeCallNative(nativeSearch, rx, S); + + if (res.done) return res.value; + + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regExpExec(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + } + ]; +}); + + +/***/ }), + +/***/ 79936: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.small.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.small` method +// https://tc39.es/ecma262/#sec-string.prototype.small +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, { + small: function small() { + return createHTML(this, 'small', '', ''); + } +}); + + +/***/ }), + +/***/ 6235: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.split.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ 45365); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ 93448); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ 44090); +var advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ 20528); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var getMethod = __webpack_require__(/*! ../internals/get-method */ 34639); +var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ 8371); +var stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ 68622); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y; +var MAX_UINT32 = 0xFFFFFFFF; +var min = Math.min; +var push = uncurryThis([].push); +var stringSlice = uncurryThis(''.slice); + +// Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec +// Weex JS has frozen built-in prototypes, so use try / catch wrapper +var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () { + // eslint-disable-next-line regexp/no-empty-group -- required for testing + var re = /(?:)/; + var originalExec = re.exec; + re.exec = function () { return originalExec.apply(this, arguments); }; + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; +}); + +var BUGGY = 'abbc'.split(/(b)*/)[1] === 'c' || + // eslint-disable-next-line regexp/no-empty-group -- required for testing + 'test'.split(/(?:)/, -1).length !== 4 || + 'ab'.split(/(?:ab)*/).length !== 2 || + '.'.split(/(.?)(.?)/).length !== 4 || + // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing + '.'.split(/()()/).length > 1 || + ''.split(/.?/).length; + +// @@split logic +fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit = '0'.split(undefined, 0).length ? function (separator, limit) { + return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit); + } : nativeSplit; + + return [ + // `String.prototype.split` method + // https://tc39.es/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible(this); + var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT); + return splitter + ? call(splitter, separator, O, limit) + : call(internalSplit, toString(O), separator, limit); + }, + // `RegExp.prototype[@@split]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (string, limit) { + var rx = anObject(this); + var S = toString(string); + + if (!BUGGY) { + var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit); + if (res.done) return res.value; + } + + var C = speciesConstructor(rx, RegExp); + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + + (rx.multiline ? 'm' : '') + + (rx.unicode ? 'u' : '') + + (UNSUPPORTED_Y ? 'g' : 'y'); + // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return regExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + while (q < S.length) { + splitter.lastIndex = UNSUPPORTED_Y ? 0 : q; + var z = regExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S); + var e; + if ( + z === null || + (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p + ) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + push(A, stringSlice(S, p, q)); + if (A.length === lim) return A; + for (var i = 1; i <= z.length - 1; i++) { + push(A, z[i]); + if (A.length === lim) return A; + } + q = p = e; + } + } + push(A, stringSlice(S, p)); + return A; + } + ]; +}, BUGGY || !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y); + + +/***/ }), + +/***/ 50115: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.starts-with.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ 68417); +var getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158).f); +var toLength = __webpack_require__(/*! ../internals/to-length */ 33065); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ 66418); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ 74751); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); + +var stringSlice = uncurryThis(''.slice); +var min = Math.min; + +var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith'); +// https://github.com/zloirock/core-js/pull/702 +var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () { + var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith'); + return descriptor && !descriptor.writable; +}(); + +// `String.prototype.startsWith` method +// https://tc39.es/ecma262/#sec-string.prototype.startswith +$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, { + startsWith: function startsWith(searchString /* , position = 0 */) { + var that = toString(requireObjectCoercible(this)); + notARegExp(searchString); + var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = toString(searchString); + return stringSlice(that, index, index + search.length) === search; + } +}); + + +/***/ }), + +/***/ 79945: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.strike.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.strike` method +// https://tc39.es/ecma262/#sec-string.prototype.strike +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, { + strike: function strike() { + return createHTML(this, 'strike', '', ''); + } +}); + + +/***/ }), + +/***/ 96817: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.sub.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.sub` method +// https://tc39.es/ecma262/#sec-string.prototype.sub +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') }, { + sub: function sub() { + return createHTML(this, 'sub', '', ''); + } +}); + + +/***/ }), + +/***/ 39570: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.substr.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ 88306); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); + +var stringSlice = uncurryThis(''.slice); +var max = Math.max; +var min = Math.min; + +// eslint-disable-next-line unicorn/prefer-string-slice -- required for testing +var FORCED = !''.substr || 'ab'.substr(-1) !== 'b'; + +// `String.prototype.substr` method +// https://tc39.es/ecma262/#sec-string.prototype.substr +$({ target: 'String', proto: true, forced: FORCED }, { + substr: function substr(start, length) { + var that = toString(requireObjectCoercible(this)); + var size = that.length; + var intStart = toIntegerOrInfinity(start); + var intLength, intEnd; + if (intStart === Infinity) intStart = 0; + if (intStart < 0) intStart = max(size + intStart, 0); + intLength = length === undefined ? size : toIntegerOrInfinity(length); + if (intLength <= 0 || intLength === Infinity) return ''; + intEnd = min(intStart + intLength, size); + return intStart >= intEnd ? '' : stringSlice(that, intStart, intEnd); + } +}); + + +/***/ }), + +/***/ 82207: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.sup.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var createHTML = __webpack_require__(/*! ../internals/create-html */ 68967); +var forcedStringHTMLMethod = __webpack_require__(/*! ../internals/string-html-forced */ 95244); + +// `String.prototype.sup` method +// https://tc39.es/ecma262/#sec-string.prototype.sup +$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sup') }, { + sup: function sup() { + return createHTML(this, 'sup', '', ''); + } +}); + + +/***/ }), + +/***/ 84139: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.to-well-formed.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ 13111); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); + +var $Array = Array; +var charAt = uncurryThis(''.charAt); +var charCodeAt = uncurryThis(''.charCodeAt); +var join = uncurryThis([].join); +// eslint-disable-next-line es/no-string-prototype-towellformed -- safe +var $toWellFormed = ''.toWellFormed; +var REPLACEMENT_CHARACTER = '\uFFFD'; + +// Safari bug +var TO_STRING_CONVERSION_BUG = $toWellFormed && fails(function () { + return call($toWellFormed, 1) !== '1'; +}); + +// `String.prototype.toWellFormed` method +// https://github.com/tc39/proposal-is-usv-string +$({ target: 'String', proto: true, forced: TO_STRING_CONVERSION_BUG }, { + toWellFormed: function toWellFormed() { + var S = toString(requireObjectCoercible(this)); + if (TO_STRING_CONVERSION_BUG) return call($toWellFormed, S); + var length = S.length; + var result = $Array(length); + for (var i = 0; i < length; i++) { + var charCode = charCodeAt(S, i); + // single UTF-16 code unit + if ((charCode & 0xF800) !== 0xD800) result[i] = charAt(S, i); + // unpaired surrogate + else if (charCode >= 0xDC00 || i + 1 >= length || (charCodeAt(S, i + 1) & 0xFC00) !== 0xDC00) result[i] = REPLACEMENT_CHARACTER; + // surrogate pair + else { + result[i] = charAt(S, i); + result[++i] = charAt(S, i); + } + } return join(result, ''); + } +}); + + +/***/ }), + +/***/ 13259: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.trim-end.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this line from `core-js@4` +__webpack_require__(/*! ../modules/es.string.trim-right */ 96304); +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var trimEnd = __webpack_require__(/*! ../internals/string-trim-end */ 67297); + +// `String.prototype.trimEnd` method +// https://tc39.es/ecma262/#sec-string.prototype.trimend +// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe +$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimEnd !== trimEnd }, { + trimEnd: trimEnd +}); + + +/***/ }), + +/***/ 46249: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.trim-left.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var trimStart = __webpack_require__(/*! ../internals/string-trim-start */ 34112); + +// `String.prototype.trimLeft` method +// https://tc39.es/ecma262/#sec-string.prototype.trimleft +// eslint-disable-next-line es/no-string-prototype-trimleft-trimright -- safe +$({ target: 'String', proto: true, name: 'trimStart', forced: ''.trimLeft !== trimStart }, { + trimLeft: trimStart +}); + + +/***/ }), + +/***/ 96304: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.trim-right.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var trimEnd = __webpack_require__(/*! ../internals/string-trim-end */ 67297); + +// `String.prototype.trimRight` method +// https://tc39.es/ecma262/#sec-string.prototype.trimend +// eslint-disable-next-line es/no-string-prototype-trimleft-trimright -- safe +$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimRight !== trimEnd }, { + trimRight: trimEnd +}); + + +/***/ }), + +/***/ 73814: +/*!**************************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.trim-start.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this line from `core-js@4` +__webpack_require__(/*! ../modules/es.string.trim-left */ 46249); +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var trimStart = __webpack_require__(/*! ../internals/string-trim-start */ 34112); + +// `String.prototype.trimStart` method +// https://tc39.es/ecma262/#sec-string.prototype.trimstart +// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe +$({ target: 'String', proto: true, name: 'trimStart', forced: ''.trimStart !== trimStart }, { + trimStart: trimStart +}); + + +/***/ }), + +/***/ 1071: +/*!********************************************************!*\ + !*** ./node_modules/core-js/modules/es.string.trim.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var $trim = (__webpack_require__(/*! ../internals/string-trim */ 7329).trim); +var forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ 30099); + +// `String.prototype.trim` method +// https://tc39.es/ecma262/#sec-string.prototype.trim +$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, { + trim: function trim() { + return $trim(this); + } +}); + + +/***/ }), + +/***/ 81909: +/*!******************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.async-iterator.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.asyncIterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.asynciterator +defineWellKnownSymbol('asyncIterator'); + + +/***/ }), + +/***/ 55522: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.constructor.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var call = __webpack_require__(/*! ../internals/function-call */ 90082); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ 7064); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ 1918); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var anObject = __webpack_require__(/*! ../internals/an-object */ 46744); +var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ 5654); +var toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ 49278); +var $toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ 78113); +var nativeObjectCreate = __webpack_require__(/*! ../internals/object-create */ 30067); +var objectKeys = __webpack_require__(/*! ../internals/object-keys */ 70707); +var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ 92323); +var getOwnPropertyNamesExternal = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ 13207); +var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ 36842); +var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ 98158); +var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ 82180); +var definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ 69444); +var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ 84038); +var defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ 97260); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var shared = __webpack_require__(/*! ../internals/shared */ 27232); +var sharedKey = __webpack_require__(/*! ../internals/shared-key */ 39733); +var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ 81930); +var uid = __webpack_require__(/*! ../internals/uid */ 82459); +var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ 7920); +var wrappedWellKnownSymbolModule = __webpack_require__(/*! ../internals/well-known-symbol-wrapped */ 69736); +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); +var defineSymbolToPrimitive = __webpack_require__(/*! ../internals/symbol-define-to-primitive */ 2755); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); +var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ 49804); +var $forEach = (__webpack_require__(/*! ../internals/array-iteration */ 91982).forEach); + +var HIDDEN = sharedKey('hidden'); +var SYMBOL = 'Symbol'; +var PROTOTYPE = 'prototype'; + +var setInternalState = InternalStateModule.set; +var getInternalState = InternalStateModule.getterFor(SYMBOL); + +var ObjectPrototype = Object[PROTOTYPE]; +var $Symbol = globalThis.Symbol; +var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE]; +var RangeError = globalThis.RangeError; +var TypeError = globalThis.TypeError; +var QObject = globalThis.QObject; +var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; +var nativeDefineProperty = definePropertyModule.f; +var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; +var nativePropertyIsEnumerable = propertyIsEnumerableModule.f; +var push = uncurryThis([].push); + +var AllSymbols = shared('symbols'); +var ObjectPrototypeSymbols = shared('op-symbols'); +var WellKnownSymbolsStore = shared('wks'); + +// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 +var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; + +// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 +var fallbackDefineProperty = function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype[P]; + nativeDefineProperty(O, P, Attributes); + if (ObjectPrototypeDescriptor && O !== ObjectPrototype) { + nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor); + } +}; + +var setSymbolDescriptor = DESCRIPTORS && fails(function () { + return nativeObjectCreate(nativeDefineProperty({}, 'a', { + get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; } + })).a !== 7; +}) ? fallbackDefineProperty : nativeDefineProperty; + +var wrap = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype); + setInternalState(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS) symbol.description = description; + return symbol; +}; + +var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject(O); + var key = toPropertyKey(P); + anObject(Attributes); + if (hasOwn(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null))); + O[HIDDEN][key] = true; + } else { + if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); + } return setSymbolDescriptor(O, key, Attributes); + } return nativeDefineProperty(O, key, Attributes); +}; + +var $defineProperties = function defineProperties(O, Properties) { + anObject(O); + var properties = toIndexedObject(Properties); + var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); + $forEach(keys, function (key) { + if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; +}; + +var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); +}; + +var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey(V); + var enumerable = call(nativePropertyIsEnumerable, this, P); + if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false; + return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] + ? enumerable : true; +}; + +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject(O); + var key = toPropertyKey(P); + if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor(it, key); + if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + return descriptor; +}; + +var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key); + }); + return result; +}; + +var $getOwnPropertySymbols = function (O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O)); + var result = []; + $forEach(names, function (key) { + if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) { + push(result, AllSymbols[key]); + } + }); + return result; +}; + +// `Symbol` constructor +// https://tc39.es/ecma262/#sec-symbol-constructor +if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]); + var tag = uid(description); + var setter = function (value) { + var $this = this === undefined ? globalThis : this; + if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value); + if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false; + var descriptor = createPropertyDescriptor(1, value); + try { + setSymbolDescriptor($this, tag, descriptor); + } catch (error) { + if (!(error instanceof RangeError)) throw error; + fallbackDefineProperty($this, tag, descriptor); + } + }; + if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter }); + return wrap(tag, description); + }; + + SymbolPrototype = $Symbol[PROTOTYPE]; + + defineBuiltIn(SymbolPrototype, 'toString', function toString() { + return getInternalState(this).tag; + }); + + defineBuiltIn($Symbol, 'withoutSetter', function (description) { + return wrap(uid(description), description); + }); + + propertyIsEnumerableModule.f = $propertyIsEnumerable; + definePropertyModule.f = $defineProperty; + definePropertiesModule.f = $defineProperties; + getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap(wellKnownSymbol(name), name); + }; + + if (DESCRIPTORS) { + // https://github.com/tc39/proposal-Symbol-description + defineBuiltInAccessor(SymbolPrototype, 'description', { + configurable: true, + get: function description() { + return getInternalState(this).description; + } + }); + if (!IS_PURE) { + defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); + } + } +} + +$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { + Symbol: $Symbol +}); + +$forEach(objectKeys(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol(name); +}); + +$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, { + useSetter: function () { USE_SETTER = true; }, + useSimple: function () { USE_SETTER = false; } +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor +}); + +$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames +}); + +// `Symbol.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive +defineSymbolToPrimitive(); + +// `Symbol.prototype[@@toStringTag]` property +// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag +setToStringTag($Symbol, SYMBOL); + +hiddenKeys[HIDDEN] = true; + + +/***/ }), + +/***/ 89700: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.description.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; +// `Symbol.prototype.description` getter +// https://tc39.es/ecma262/#sec-symbol.prototype.description + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ 94527); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var isCallable = __webpack_require__(/*! ../internals/is-callable */ 74946); +var isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ 35824); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ 78683); +var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ 43107); + +var NativeSymbol = globalThis.Symbol; +var SymbolPrototype = NativeSymbol && NativeSymbol.prototype; + +if (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) || + // Safari 12 bug + NativeSymbol().description !== undefined +)) { + var EmptyStringDescriptionStore = {}; + // wrap Symbol constructor for correct work with undefined description + var SymbolWrapper = function Symbol() { + var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]); + var result = isPrototypeOf(SymbolPrototype, this) + ? new NativeSymbol(description) + // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + : description === undefined ? NativeSymbol() : NativeSymbol(description); + if (description === '') EmptyStringDescriptionStore[result] = true; + return result; + }; + + copyConstructorProperties(SymbolWrapper, NativeSymbol); + SymbolWrapper.prototype = SymbolPrototype; + SymbolPrototype.constructor = SymbolWrapper; + + var NATIVE_SYMBOL = String(NativeSymbol('description detection')) === 'Symbol(description detection)'; + var thisSymbolValue = uncurryThis(SymbolPrototype.valueOf); + var symbolDescriptiveString = uncurryThis(SymbolPrototype.toString); + var regexp = /^Symbol\((.*)\)[^)]+$/; + var replace = uncurryThis(''.replace); + var stringSlice = uncurryThis(''.slice); + + defineBuiltInAccessor(SymbolPrototype, 'description', { + configurable: true, + get: function description() { + var symbol = thisSymbolValue(this); + if (hasOwn(EmptyStringDescriptionStore, symbol)) return ''; + var string = symbolDescriptiveString(symbol); + var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1'); + return desc === '' ? undefined : desc; + } + }); + + $({ global: true, constructor: true, forced: true }, { + Symbol: SymbolWrapper + }); +} + + +/***/ }), + +/***/ 265: +/*!*******************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.for.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var toString = __webpack_require__(/*! ../internals/to-string */ 21464); +var shared = __webpack_require__(/*! ../internals/shared */ 27232); +var NATIVE_SYMBOL_REGISTRY = __webpack_require__(/*! ../internals/symbol-registry-detection */ 89075); + +var StringToSymbolRegistry = shared('string-to-symbol-registry'); +var SymbolToStringRegistry = shared('symbol-to-string-registry'); + +// `Symbol.for` method +// https://tc39.es/ecma262/#sec-symbol.for +$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + 'for': function (key) { + var string = toString(key); + if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = getBuiltIn('Symbol')(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + } +}); + + +/***/ }), + +/***/ 66876: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.has-instance.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.hasInstance` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.hasinstance +defineWellKnownSymbol('hasInstance'); + + +/***/ }), + +/***/ 92513: +/*!************************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.isConcatSpreadable` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable +defineWellKnownSymbol('isConcatSpreadable'); + + +/***/ }), + +/***/ 29794: +/*!************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.iterator.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.iterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.iterator +defineWellKnownSymbol('iterator'); + + +/***/ }), + +/***/ 28092: +/*!***************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's split to modules listed below +__webpack_require__(/*! ../modules/es.symbol.constructor */ 55522); +__webpack_require__(/*! ../modules/es.symbol.for */ 265); +__webpack_require__(/*! ../modules/es.symbol.key-for */ 19831); +__webpack_require__(/*! ../modules/es.json.stringify */ 92161); +__webpack_require__(/*! ../modules/es.object.get-own-property-symbols */ 28440); + + +/***/ }), + +/***/ 19831: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.key-for.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var $ = __webpack_require__(/*! ../internals/export */ 12203); +var hasOwn = __webpack_require__(/*! ../internals/has-own-property */ 74404); +var isSymbol = __webpack_require__(/*! ../internals/is-symbol */ 25378); +var tryToString = __webpack_require__(/*! ../internals/try-to-string */ 14824); +var shared = __webpack_require__(/*! ../internals/shared */ 27232); +var NATIVE_SYMBOL_REGISTRY = __webpack_require__(/*! ../internals/symbol-registry-detection */ 89075); + +var SymbolToStringRegistry = shared('symbol-to-string-registry'); + +// `Symbol.keyFor` method +// https://tc39.es/ecma262/#sec-symbol.keyfor +$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, { + keyFor: function keyFor(sym) { + if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol'); + if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + } +}); + + +/***/ }), + +/***/ 17353: +/*!*************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.match-all.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.matchAll` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.matchall +defineWellKnownSymbol('matchAll'); + + +/***/ }), + +/***/ 13875: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.match.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.match` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.match +defineWellKnownSymbol('match'); + + +/***/ }), + +/***/ 23310: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.replace.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.replace` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.replace +defineWellKnownSymbol('replace'); + + +/***/ }), + +/***/ 16328: +/*!**********************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.search.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.search` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.search +defineWellKnownSymbol('search'); + + +/***/ }), + +/***/ 72980: +/*!***********************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.species.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.species` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.species +defineWellKnownSymbol('species'); + + +/***/ }), + +/***/ 62042: +/*!*********************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.split.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.split` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.split +defineWellKnownSymbol('split'); + + +/***/ }), + +/***/ 9517: +/*!****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.to-primitive.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); +var defineSymbolToPrimitive = __webpack_require__(/*! ../internals/symbol-define-to-primitive */ 2755); + +// `Symbol.toPrimitive` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.toprimitive +defineWellKnownSymbol('toPrimitive'); + +// `Symbol.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive +defineSymbolToPrimitive(); + + +/***/ }), + +/***/ 64754: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.to-string-tag.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ 76102); +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); +var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ 39200); + +// `Symbol.toStringTag` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.tostringtag +defineWellKnownSymbol('toStringTag'); + +// `Symbol.prototype[@@toStringTag]` property +// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag +setToStringTag(getBuiltIn('Symbol'), 'Symbol'); + + +/***/ }), + +/***/ 74389: +/*!***************************************************************!*\ + !*** ./node_modules/core-js/modules/es.symbol.unscopables.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var defineWellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol-define */ 5430); + +// `Symbol.unscopables` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.unscopables +defineWellKnownSymbol('unscopables'); + + +/***/ }), + +/***/ 76105: +/*!*****************************************************************!*\ + !*** ./node_modules/core-js/modules/es.weak-map.constructor.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +var FREEZING = __webpack_require__(/*! ../internals/freezing */ 16681); +var globalThis = __webpack_require__(/*! ../internals/global-this */ 41991); +var uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ 14811); +var defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ 85402); +var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ 54324); +var collection = __webpack_require__(/*! ../internals/collection */ 42833); +var collectionWeak = __webpack_require__(/*! ../internals/collection-weak */ 25270); +var isObject = __webpack_require__(/*! ../internals/is-object */ 92181); +var enforceInternalState = (__webpack_require__(/*! ../internals/internal-state */ 49804).enforce); +var fails = __webpack_require__(/*! ../internals/fails */ 84948); +var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/weak-map-basic-detection */ 13839); + +var $Object = Object; +// eslint-disable-next-line es/no-array-isarray -- safe +var isArray = Array.isArray; +// eslint-disable-next-line es/no-object-isextensible -- safe +var isExtensible = $Object.isExtensible; +// eslint-disable-next-line es/no-object-isfrozen -- safe +var isFrozen = $Object.isFrozen; +// eslint-disable-next-line es/no-object-issealed -- safe +var isSealed = $Object.isSealed; +// eslint-disable-next-line es/no-object-freeze -- safe +var freeze = $Object.freeze; +// eslint-disable-next-line es/no-object-seal -- safe +var seal = $Object.seal; + +var IS_IE11 = !globalThis.ActiveXObject && 'ActiveXObject' in globalThis; +var InternalWeakMap; + +var wrapper = function (init) { + return function WeakMap() { + return init(this, arguments.length ? arguments[0] : undefined); + }; +}; + +// `WeakMap` constructor +// https://tc39.es/ecma262/#sec-weakmap-constructor +var $WeakMap = collection('WeakMap', wrapper, collectionWeak); +var WeakMapPrototype = $WeakMap.prototype; +var nativeSet = uncurryThis(WeakMapPrototype.set); + +// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them +var hasMSEdgeFreezingBug = function () { + return FREEZING && fails(function () { + var frozenArray = freeze([]); + nativeSet(new $WeakMap(), frozenArray, 1); + return !isFrozen(frozenArray); + }); +}; + +// IE11 WeakMap frozen keys fix +// We can't use feature detection because it crash some old IE builds +// https://github.com/zloirock/core-js/issues/485 +if (NATIVE_WEAK_MAP) if (IS_IE11) { + InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true); + InternalMetadataModule.enable(); + var nativeDelete = uncurryThis(WeakMapPrototype['delete']); + var nativeHas = uncurryThis(WeakMapPrototype.has); + var nativeGet = uncurryThis(WeakMapPrototype.get); + defineBuiltIns(WeakMapPrototype, { + 'delete': function (key) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceInternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeDelete(this, key) || state.frozen['delete'](key); + } return nativeDelete(this, key); + }, + has: function has(key) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceInternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas(this, key) || state.frozen.has(key); + } return nativeHas(this, key); + }, + get: function get(key) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceInternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key); + } return nativeGet(this, key); + }, + set: function set(key, value) { + if (isObject(key) && !isExtensible(key)) { + var state = enforceInternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value); + } else nativeSet(this, key, value); + return this; + } + }); +// Chakra Edge frozen keys fix +} else if (hasMSEdgeFreezingBug()) { + defineBuiltIns(WeakMapPrototype, { + set: function set(key, value) { + var arrayIntegrityLevel; + if (isArray(key)) { + if (isFrozen(key)) arrayIntegrityLevel = freeze; + else if (isSealed(key)) arrayIntegrityLevel = seal; + } + nativeSet(this, key, value); + if (arrayIntegrityLevel) arrayIntegrityLevel(key); + return this; + } + }); +} + + +/***/ }), + +/***/ 57763: +/*!*****************************************************!*\ + !*** ./node_modules/core-js/modules/es.weak-map.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => { + +"use strict"; + +// TODO: Remove this module from `core-js@4` since it's replaced to module below +__webpack_require__(/*! ../modules/es.weak-map.constructor */ 76105); + + +/***/ }) + +}, +/******/ __webpack_require__ => { // webpackRuntimeModules +/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId)) +/******/ var __webpack_exports__ = (__webpack_exec__(24050), __webpack_exec__(74124)); +/******/ } +]); +//# sourceMappingURL=polyfills.js.map \ No newline at end of file diff --git a/site/mitre/polyfills.js.map b/site/mitre/polyfills.js.map new file mode 100644 index 0000000..df08a05 --- /dev/null +++ b/site/mitre/polyfills.js.map @@ -0,0 +1 @@ +{"version":3,"file":"polyfills.js","mappings":"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CvC;AACA;AACA;;AAEA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV,OAAO;AACP,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,YAAY,SAAS;AACrB;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,UAAU,UAAU,aAAa,mCAAmC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL,UAAU,UAAU;AACpB;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7Ma;AACb,kBAAkB,mBAAO,CAAC,+CAAoC;AAC9D,qBAAqB,mBAAO,CAAC,0CAA+B;AAC5D,kBAAkB,8EAAqD;AACvE,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,eAAe,mBAAO,CAAC,mCAAwB;AAC/C,wBAAwB,mBAAO,CAAC,8CAAmC;AACnE,eAAe,mBAAO,CAAC,mCAAwB;AAC/C,cAAc,mBAAO,CAAC,iCAAsB;AAC5C,2BAA2B,mBAAO,CAAC,yCAA8B;AACjE,aAAa,mBAAO,CAAC,0CAA+B;AACpD,0BAA0B,mBAAO,CAAC,wCAA6B;;AAE/D;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,yEAAyE,gCAAgC;AACzG,KAAK;;AAEL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,YAAY,kBAAkB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;;;;;;;;;;;AClIa;AACb,QAAQ,mBAAO,CAAC,gCAAqB;AACrC,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,kBAAkB,mBAAO,CAAC,+CAAoC;AAC9D,eAAe,mBAAO,CAAC,mCAAwB;AAC/C,oBAAoB,mBAAO,CAAC,yCAA8B;AAC1D,6BAA6B,mBAAO,CAAC,2CAAgC;AACrE,cAAc,mBAAO,CAAC,iCAAsB;AAC5C,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,wBAAwB,mBAAO,CAAC,8CAAmC;AACnE,eAAe,mBAAO,CAAC,mCAAwB;AAC/C,YAAY,mBAAO,CAAC,+BAAoB;AACxC,kCAAkC,mBAAO,CAAC,uDAA6C;AACvF,qBAAqB,mBAAO,CAAC,2CAAgC;AAC7D,wBAAwB,mBAAO,CAAC,4CAAkC;;AAElE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA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DAA0C;AAClF,eAAe,mBAAO,CAAC,mCAAwB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,kEAAkE;AAClE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtDa;AACb;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;;;;;;;;;;;ACPa;AACb;AACA,mBAAO,CAAC,sCAA2B;AACnC,WAAW,mBAAO,CAAC,uCAA4B;AAC/C,oBAAoB,mBAAO,CAAC,yCAA8B;AAC1D,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,YAAY,mBAAO,CAAC,+BAAoB;AACxC,sBAAsB,mBAAO,CAAC,0CAAgC;AAC9D,kCAAkC,mBAAO,CAAC,wDAA6C;;AAEvF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,iBAAiB;AACjB;AACA,eAAe;AACf,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;;;;;;;;;;;;AC3Ea;AACb,cAAc,mBAAO,CAAC,iCAAuB;AAC7C,wBAAwB,mBAAO,CAAC,8CAAmC;AACnE,+BAA+B,mBAAO,CAAC,sDAA2C;AAClF,WAAW,mBAAO,CAAC,+CAAoC;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;A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AO,CAAC,mCAAwB;AAC/C,kCAAkC,mBAAO,CAAC,wDAA6C;AACvF,aAAa,mBAAO,CAAC,0CAA+B;AACpD,aAAa,mBAAO,CAAC,sCAA2B;AAChD,gBAAgB,mBAAO,CAAC,oCAAyB;AACjD,iBAAiB,mBAAO,CAAC,qCAA0B;;AAEnD;AACA;AACA;AACA;;AAEA;AACA,uCAAuC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtEa;AACb,sBAAsB,mBAAO,CAAC,0CAAgC;AAC9D,gBAAgB,mBAAO,CAAC,mCAAwB;;AAEhD;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;AACb,cAAc,mBAAO,CAAC,qCAA0B;;AAEhD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAE;AACF;AACA;;;;;;;;;;;;ACXa;AACb,kBAAkB,mBAAO,CAAC,+CAAoC;AAC9D,YAAY,mBAAO,CAAC,+BAAoB;AACxC,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,cAAc,mBAAO,CAAC,iCAAsB;AAC5C,iBAAiB,mBAAO,CAAC,sCAA2B;AACpD,oBAAoB,mBAAO,CAAC,wCAA6B;;AAEzD,yBAAyB;AACzB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,gBAAgB;AAC1D;AACA,CAAC;;;;;;;;;;;;ACnDY;AACb,aAA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AO,CAAC,wCAA6B;AACzD,0BAA0B,mBAAO,CAAC,wCAA6B;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsC,aAAa,cAAc,UAAU;AAC3E,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,iCAAiC;AACtF;AACA;AACA;AACA,sCAAsC,sBAAsB;AAC5D;AACA;AACA;AACA,4DAA4D,iBAAiB;AAC7E;AACA,MAAM;AACN,IAAI,gBAAgB;AACpB;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACtDY;AACb,kBAAkB,mBAAO,CAAC,+CAAoC;;AAE9D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACda;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;;;;;;;;;;;;AChBW;AACb,WAAW,mBAAO,CAAC,mCAAwB;;AAE3C;;AAEA,qCAAqC;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACtBa;AACb,iBAAiB,mBAAO,CAAC,0CAA+B;;AAExD,6CAA6C;AAC7C,gDAAgD;AAChD,gDAAgD;;AAEhD;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZa;AACb;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;;;;ACPa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACTa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACRa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVa;AACb,eAAe,mBAAO,CAAC,mCAAwB;;AAE/C;;AAEA;AACA;AACA;AACA,IAAI;AACJ;;;;;;;;;;;;ACTa;AACb,iBAAiB,mBAAO,CAAC,qCAA0B;;AAEnD;;AAEA;AACA;AACA;AACA;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AAC/C,kBAAkB,mBAAO,CAAC,sCAA2B;AACrD,oBAAoB,mBAAO,CAAC,+CAAoC;AAChE,aAAa,mBAAO,CAAC,gCAAqB;AAC1C,aAAa,mBAAO,CAAC,uCAA4B;AACjD,uBAAuB,mEAA0C;AACjE,0BAA0B,mBAAO,CAAC,oDAAyC;AAC3E,sBAAsB,mBAAO,CAAC,gDAAqC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,kBAAkB,mBAAmB;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACpHa;AACb,eAAe,mBAAO,CAAC,mCAAwB;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACjBa;AACb,WAAW,mBAAO,CAAC,uCAA4B;AAC/C,aAAa,mBAAO,CAAC,0CAA+B;AACpD,oBAAoB,mBAAO,CAAC,gDAAqC;AACjE,kBAAkB,mBAAO,CAAC,sCAA2B;;AAErD;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACZa;AACb,YAAY,mBAAO,CAAC,+BAAoB;AACxC,iBAAiB,mBAAO,CAAC,qCAA0B;;AAEnD;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA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AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,IAAI,+CAA+C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACjGY;AACb,QAAQ,mBAAO,CAAC,gCAAqB;AACrC,kBAAkB,mBAAO,CAAC,+CAAoC;AAC9D,0BAA0B,mBAAO,CAAC,gDAAqC;AACvE,sBAAsB,mBAAO,CAAC,2CAAgC;AAC9D,cAAc,mBAAO,CAAC,uCAA4B;AAClD,YAAY,mBAAO,CAAC,+BAAoB;;AAExC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,kBAAkB;AAClB,CAAC;;AAED;AACA;AACA,IAAI,+CAA+C;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;A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mBAAO,CAAC,+BAAoB;AACxC,aAAa,mBAAO,CAAC,0CAA+B;AACpD,2BAA2B,uEAA8C;AACzE,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,sBAAsB,mBAAO,CAAC,0CAAgC;AAC9D,0BAA0B,mBAAO,CAAC,oDAAyC;AAC3E,sBAAsB,mBAAO,CAAC,gDAAqC;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM,gBAAgB;;AAEtB;AACA;;AAEA,gEAAgE,oBAAoB;AACpF;AACA;;AAEA;AACA;AACA,uDAAuD,mBAAmB;AAC1E;;AAEA;AACA;;;;;;;;;;;;ACnMa;AACb,kBAAkB,mBAAO,CAAC,qCAA0B;AACpD,0BAA0B,mBAAO,CAAC,oDAAyC;AAC3E,cAAc,mBAAO,CAAC,qCAA0B;AAChD,4BAA4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oCAAyB;AACjD,sBAAsB,mBAAO,CAAC,0CAA+B;AAC7D,iBAAiB,mBAAO,CAAC,6CAAmC;AAC5D,sBAAsB,mBAAO,CAAC,0CAAgC;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,oBAAoB;AAC1C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;AC7IY;AACb,WAAW,mBAAO,CAAC,uCAA4B;AAC/C,oCAAoC,mBAAO,CAAC,4DAAiD;AAC7F,eAAe,mBAAO,CAAC,mCAAwB;AAC/C,wBAAwB,mBAAO,CAAC,8CAAmC;AACnE,6BAA6B,mBAAO,CAAC,kDAAuC;AAC5E,gBAAgB,mBAAO,CAAC,oCAAyB;AACjD,eAAe,mBAAO,CAAC,mCAAwB;AAC/C,gBAAgB,mBAAO,CAAC,oCAAyB;AACjD,iBAAiB,mBAAO,CAAC,6CAAmC;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;;;;;;;;;;ACrCY;AACb,QAAQ,mBAAO,CAAC,gCAAqB;AA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AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,oDAAoD,gDAAgD;AACpG,MAAM;AACN,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,+EAA+E,iCAAiC;AAChH;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sFAAsF,cAAc;AACpG;AACA;AACA;;AAEA,IAAI,2FAA2F;AAC/F;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED,IAAI,oDAAoD;AACxD,2BAA2B,oBAAoB;AAC/C,2BAA2B;AAC3B,CAAC;;AAED,IAAI,0EAA0E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,IAAI,sDAAsD;AAC1D;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;;;;;ACtQA;AACA;AACa;AACb,QAAQ,mBAAO,CAAC,gCAAqB;AACrC,kBAAkB,mBAAO,CAAC,qCAA0B;AACpD,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,kBAAkB,mBAAO,CAAC,+CAAoC;AAC9D,aAAa,mBAAO,CAAC,0CAA+B;AACpD,iBAAiB,mBAAO,CAAC,qCAA0B;AACnD,oBAAoB,mBAA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","sources":["./src/polyfills.ts","./node_modules/classlist.js/classList.js","./node_modules/zone.js/fesm2015/zone.js","./node_modules/core-js/es/array/index.js","./node_modules/core-js/es/date/index.js","./node_modules/core-js/es/function/index.js","./node_modules/core-js/es/map/index.js","./node_modules/core-js/es/math/index.js","./node_modules/core-js/es/number/index.js","./node_modules/core-js/es/object/index.js","./node_modules/core-js/es/parse-float.js","./node_modules/core-js/es/parse-int.js","./node_modules/core-js/es/reflect/index.js","./node_modules/core-js/es/regexp/index.js","./node_modules/core-js/es/set/index.js","./node_modules/core-js/es/string/index.js","./node_modules/core-js/es/symbol/index.js","./node_modules/core-js/es/weak-map/index.js","./node_modules/core-js/internals/a-callable.js","./node_modules/core-js/internals/a-constructor.js","./node_modules/core-js/internals/a-possible-prototype.js","./node_modules/core-js/internals/a-set.js","./node_modules/core-js/internals/add-to-unscopables.js","./node_modules/core-js/internals/advance-string-index.js","./node_modules/core-js/internals/an-instance.js","./node_modules/core-js/internals/an-object.js","./node_modules/core-js/internals/array-buffer-non-extensible.js","./node_modules/core-js/internals/array-copy-within.js","./node_modules/core-js/internals/array-fill.js","./node_modules/core-js/internals/array-for-each.js","./node_modules/core-js/internals/array-from-constructor-and-list.js","./node_modules/core-js/internals/array-from.js","./node_modules/core-js/internals/array-includes.js","./node_modules/core-js/internals/array-iteration-from-last.js","./node_modules/core-js/internals/array-iteration.js","./node_modules/core-js/internals/array-last-index-of.js","./node_modules/core-js/internals/array-method-has-species-support.js","./node_modules/core-js/internals/array-method-is-strict.js","./node_modules/core-js/internals/array-reduce.js","./node_modules/core-js/internals/array-set-length.js","./node_modules/core-js/internals/array-slice.js","./node_modules/core-js/internals/array-sort.js","./node_modules/core-js/internals/array-species-constructor.js","./node_modules/core-js/internals/array-species-create.js","./node_modules/core-js/internals/array-to-reversed.js","./node_modules/core-js/internals/array-with.js","./node_modules/core-js/internals/call-with-safe-iteration-closing.js","./node_modules/core-js/internals/check-correctness-of-iteration.js","./node_modules/core-js/internals/classof-raw.js","./node_modules/core-js/internals/classof.js","./node_modules/core-js/internals/collection-strong.js","./node_modules/core-js/internals/collection-weak.js","./node_modules/core-js/internals/collection.js","./node_modules/core-js/internals/copy-constructor-properties.js","./node_modules/core-js/internals/correct-is-regexp-logic.js","./node_modules/core-js/internals/correct-prototype-getter.js","./node_modules/core-js/internals/create-html.js","./node_modules/core-js/internals/create-iter-result-object.js","./node_modules/core-js/internals/create-non-enumerable-property.js","./node_modules/core-js/internals/create-property-descriptor.js","./node_modules/core-js/internals/create-property.js","./node_modules/core-js/internals/date-to-iso-string.js","./node_modules/core-js/internals/date-to-primitive.js","./node_modules/core-js/internals/define-built-in-accessor.js","./node_modules/core-js/internals/define-built-in.js","./node_modules/core-js/internals/define-built-ins.js","./node_modules/core-js/internals/define-global-property.js","./node_modules/core-js/internals/delete-property-or-throw.js","./node_modules/core-js/internals/descriptors.js","./node_modules/core-js/internals/document-create-element.js","./node_modules/core-js/internals/does-not-exceed-safe-integer.js","./node_modules/core-js/internals/enum-bug-keys.js","./node_modules/core-js/internals/environment-ff-version.js","./node_modules/core-js/internals/environment-is-ie-or-edge.js","./node_modules/core-js/internals/environment-is-node.js","./node_modules/core-js/internals/environment-user-agent.js","./node_modules/core-js/internals/environment-v8-version.js","./node_modules/core-js/internals/environment-webkit-version.js","./node_modules/core-js/internals/environment.js","./node_modules/core-js/internals/export.js","./node_modules/core-js/internals/fails.js","./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","./node_modules/core-js/internals/flatten-into-array.js","./node_modules/core-js/internals/freezing.js","./node_modules/core-js/internals/function-apply.js","./node_modules/core-js/internals/function-bind-context.js","./node_modules/core-js/internals/function-bind-native.js","./node_modules/core-js/internals/function-bind.js","./node_modules/core-js/internals/function-call.js","./node_modules/core-js/internals/function-name.js","./node_modules/core-js/internals/function-uncurry-this-accessor.js","./node_modules/core-js/internals/function-uncurry-this-clause.js","./node_modules/core-js/internals/function-uncurry-this.js","./node_modules/core-js/internals/get-built-in-prototype-method.js","./node_modules/core-js/internals/get-built-in.js","./node_modules/core-js/internals/get-iterator-direct.js","./node_modules/core-js/internals/get-iterator-method.js","./node_modules/core-js/internals/get-iterator.js","./node_modules/core-js/internals/get-json-replacer-function.js","./node_modules/core-js/internals/get-method.js","./node_modules/core-js/internals/get-set-record.js","./node_modules/core-js/internals/get-substitution.js","./node_modules/core-js/internals/global-this.js","./node_modules/core-js/internals/has-own-property.js","./node_modules/core-js/internals/hidden-keys.js","./node_modules/core-js/internals/html.js","./node_modules/core-js/internals/ie8-dom-define.js","./node_modules/core-js/internals/indexed-object.js","./node_modules/core-js/internals/inherit-if-required.js","./node_modules/core-js/internals/inspect-source.js","./node_modules/core-js/internals/internal-metadata.js","./node_modules/core-js/internals/internal-state.js","./node_modules/core-js/internals/is-array-iterator-method.js","./node_modules/core-js/internals/is-array.js","./node_modules/core-js/internals/is-callable.js","./node_modules/core-js/internals/is-constructor.js","./node_modules/core-js/internals/is-data-descriptor.js","./node_modules/core-js/internals/is-forced.js","./node_modules/core-js/internals/is-integral-number.js","./node_modules/core-js/internals/is-null-or-undefined.js","./node_modules/core-js/internals/is-object.js","./node_modules/core-js/internals/is-possible-prototype.js","./node_modules/core-js/internals/is-pure.js","./node_modules/core-js/internals/is-regexp.js","./node_modules/core-js/internals/is-symbol.js","./node_modules/core-js/internals/iterate-simple.js","./node_modules/core-js/internals/iterate.js","./node_modules/core-js/internals/iterator-close.js","./node_modules/core-js/internals/iterator-create-constructor.js","./node_modules/core-js/internals/iterator-define.js","./node_modules/core-js/internals/iterators-core.js","./node_modules/core-js/internals/iterators.js","./node_modules/core-js/internals/length-of-array-like.js","./node_modules/core-js/internals/make-built-in.js","./node_modules/core-js/internals/map-helpers.js","./node_modules/core-js/internals/math-expm1.js","./node_modules/core-js/internals/math-float-round.js","./node_modules/core-js/internals/math-fround.js","./node_modules/core-js/internals/math-log10.js","./node_modules/core-js/internals/math-log1p.js","./node_modules/core-js/internals/math-sign.js","./node_modules/core-js/internals/math-trunc.js","./node_modules/core-js/internals/not-a-regexp.js","./node_modules/core-js/internals/number-is-finite.js","./node_modules/core-js/internals/number-parse-float.js","./node_modules/core-js/internals/number-parse-int.js","./node_modules/core-js/internals/object-assign.js","./node_modules/core-js/internals/object-create.js","./node_modules/core-js/internals/object-define-properties.js","./node_modules/core-js/internals/object-define-property.js","./node_modules/core-js/internals/object-get-own-property-descriptor.js","./node_modules/core-js/internals/object-get-own-property-names-external.js","./node_modules/core-js/internals/object-get-own-property-names.js","./node_modules/core-js/internals/object-get-own-property-symbols.js","./node_modules/core-js/internals/object-get-prototype-of.js","./node_modules/core-js/internals/object-is-extensible.js","./node_modules/core-js/internals/object-is-prototype-of.js","./node_modules/core-js/internals/object-keys-internal.js","./node_modules/core-js/internals/object-keys.js","./node_modules/core-js/internals/object-property-is-enumerable.js","./node_modules/core-js/internals/object-prototype-accessors-forced.js","./node_modules/core-js/internals/object-set-prototype-of.js","./node_modules/core-js/internals/object-to-array.js","./node_modules/core-js/internals/object-to-string.js","./node_modules/core-js/internals/ordinary-to-primitive.js","./node_modules/core-js/internals/own-keys.js","./node_modules/core-js/internals/path.js","./node_modules/core-js/internals/proxy-accessor.js","./node_modules/core-js/internals/regexp-exec-abstract.js","./node_modules/core-js/internals/regexp-exec.js","./node_modules/core-js/internals/regexp-flags.js","./node_modules/core-js/internals/regexp-get-flags.js","./node_modules/core-js/internals/regexp-sticky-helpers.js","./node_modules/core-js/internals/regexp-unsupported-dot-all.js","./node_modules/core-js/internals/regexp-unsupported-ncg.js","./node_modules/core-js/internals/require-object-coercible.js","./node_modules/core-js/internals/same-value.js","./node_modules/core-js/internals/set-clone.js","./node_modules/core-js/internals/set-difference.js","./node_modules/core-js/internals/set-helpers.js","./node_modules/core-js/internals/set-intersection.js","./node_modules/core-js/internals/set-is-disjoint-from.js","./node_modules/core-js/internals/set-is-subset-of.js","./node_modules/core-js/internals/set-is-superset-of.js","./node_modules/core-js/internals/set-iterate.js","./node_modules/core-js/internals/set-method-accept-set-like.js","./node_modules/core-js/internals/set-size.js","./node_modules/core-js/internals/set-species.js","./node_modules/core-js/internals/set-symmetric-difference.js","./node_modules/core-js/internals/set-to-string-tag.js","./node_modules/core-js/internals/set-union.js","./node_modules/core-js/internals/shared-key.js","./node_modules/core-js/internals/shared-store.js","./node_modules/core-js/internals/shared.js","./node_modules/core-js/internals/species-constructor.js","./node_modules/core-js/internals/string-html-forced.js","./node_modules/core-js/internals/string-multibyte.js","./node_modules/core-js/internals/string-pad-webkit-bug.js","./node_modules/core-js/internals/string-pad.js","./node_modules/core-js/internals/string-repeat.js","./node_modules/core-js/internals/string-trim-end.js","./node_modules/core-js/internals/string-trim-forced.js","./node_modules/core-js/internals/string-trim-start.js","./node_modules/core-js/internals/string-trim.js","./node_modules/core-js/internals/symbol-constructor-detection.js","./node_modules/core-js/internals/symbol-define-to-primitive.js","./node_modules/core-js/internals/symbol-registry-detection.js","./node_modules/core-js/internals/this-number-value.js","./node_modules/core-js/internals/to-absolute-index.js","./node_modules/core-js/internals/to-indexed-object.js","./node_modules/core-js/internals/to-integer-or-infinity.js","./node_modules/core-js/internals/to-length.js","./node_modules/core-js/internals/to-object.js","./node_modules/core-js/internals/to-primitive.js","./node_modules/core-js/internals/to-property-key.js","./node_modules/core-js/internals/to-string-tag-support.js","./node_modules/core-js/internals/to-string.js","./node_modules/core-js/internals/try-to-string.js","./node_modules/core-js/internals/uid.js","./node_modules/core-js/internals/use-symbol-as-uid.js","./node_modules/core-js/internals/v8-prototype-define-bug.js","./node_modules/core-js/internals/weak-map-basic-detection.js","./node_modules/core-js/internals/well-known-symbol-define.js","./node_modules/core-js/internals/well-known-symbol-wrapped.js","./node_modules/core-js/internals/well-known-symbol.js","./node_modules/core-js/internals/whitespaces.js","./node_modules/core-js/modules/es.array.at.js","./node_modules/core-js/modules/es.array.concat.js","./node_modules/core-js/modules/es.array.copy-within.js","./node_modules/core-js/modules/es.array.every.js","./node_modules/core-js/modules/es.array.fill.js","./node_modules/core-js/modules/es.array.filter.js","./node_modules/core-js/modules/es.array.find-index.js","./node_modules/core-js/modules/es.array.find-last-index.js","./node_modules/core-js/modules/es.array.find-last.js","./node_modules/core-js/modules/es.array.find.js","./node_modules/core-js/modules/es.array.flat-map.js","./node_modules/core-js/modules/es.array.flat.js","./node_modules/core-js/modules/es.array.for-each.js","./node_modules/core-js/modules/es.array.from.js","./node_modules/core-js/modules/es.array.includes.js","./node_modules/core-js/modules/es.array.index-of.js","./node_modules/core-js/modules/es.array.is-array.js","./node_modules/core-js/modules/es.array.iterator.js","./node_modules/core-js/modules/es.array.join.js","./node_modules/core-js/modules/es.array.last-index-of.js","./node_modules/core-js/modules/es.array.map.js","./node_modules/core-js/modules/es.array.of.js","./node_modules/core-js/modules/es.array.push.js","./node_modules/core-js/modules/es.array.reduce-right.js","./node_modules/core-js/modules/es.array.reduce.js","./node_modules/core-js/modules/es.array.reverse.js","./node_modules/core-js/modules/es.array.slice.js","./node_modules/core-js/modules/es.array.some.js","./node_modules/core-js/modules/es.array.sort.js","./node_modules/core-js/modules/es.array.species.js","./node_modules/core-js/modules/es.array.splice.js","./node_modules/core-js/modules/es.array.to-reversed.js","./node_modules/core-js/modules/es.array.to-sorted.js","./node_modules/core-js/modules/es.array.to-spliced.js","./node_modules/core-js/modules/es.array.unscopables.flat-map.js","./node_modules/core-js/modules/es.array.unscopables.flat.js","./node_modules/core-js/modules/es.array.unshift.js","./node_modules/core-js/modules/es.array.with.js","./node_modules/core-js/modules/es.date.get-year.js","./node_modules/core-js/modules/es.date.now.js","./node_modules/core-js/modules/es.date.set-year.js","./node_modules/core-js/modules/es.date.to-gmt-string.js","./node_modules/core-js/modules/es.date.to-iso-string.js","./node_modules/core-js/modules/es.date.to-json.js","./node_modules/core-js/modules/es.date.to-primitive.js","./node_modules/core-js/modules/es.date.to-string.js","./node_modules/core-js/modules/es.function.bind.js","./node_modules/core-js/modules/es.function.has-instance.js","./node_modules/core-js/modules/es.function.name.js","./node_modules/core-js/modules/es.json.stringify.js","./node_modules/core-js/modules/es.json.to-string-tag.js","./node_modules/core-js/modules/es.map.constructor.js","./node_modules/core-js/modules/es.map.group-by.js","./node_modules/core-js/modules/es.map.js","./node_modules/core-js/modules/es.math.acosh.js","./node_modules/core-js/modules/es.math.asinh.js","./node_modules/core-js/modules/es.math.atanh.js","./node_modules/core-js/modules/es.math.cbrt.js","./node_modules/core-js/modules/es.math.clz32.js","./node_modules/core-js/modules/es.math.cosh.js","./node_modules/core-js/modules/es.math.expm1.js","./node_modules/core-js/modules/es.math.fround.js","./node_modules/core-js/modules/es.math.hypot.js","./node_modules/core-js/modules/es.math.imul.js","./node_modules/core-js/modules/es.math.log10.js","./node_modules/core-js/modules/es.math.log1p.js","./node_modules/core-js/modules/es.math.log2.js","./node_modules/core-js/modules/es.math.sign.js","./node_modules/core-js/modules/es.math.sinh.js","./node_modules/core-js/modules/es.math.tanh.js","./node_modules/core-js/modules/es.math.to-string-tag.js","./node_modules/core-js/modules/es.math.trunc.js","./node_modules/core-js/modules/es.number.constructor.js","./node_modules/core-js/modules/es.number.epsilon.js","./node_modules/core-js/modules/es.number.is-finite.js","./node_modules/core-js/modules/es.number.is-integer.js","./node_modules/core-js/modules/es.number.is-nan.js","./node_modules/core-js/modules/es.number.is-safe-integer.js","./node_modules/core-js/modules/es.number.max-safe-integer.js","./node_modules/core-js/modules/es.number.min-safe-integer.js","./node_modules/core-js/modules/es.number.parse-float.js","./node_modules/core-js/modules/es.number.parse-int.js","./node_modules/core-js/modules/es.number.to-exponential.js","./node_modules/core-js/modules/es.number.to-fixed.js","./node_modules/core-js/modules/es.number.to-precision.js","./node_modules/core-js/modules/es.object.assign.js","./node_modules/core-js/modules/es.object.create.js","./node_modules/core-js/modules/es.object.define-getter.js","./node_modules/core-js/modules/es.object.define-properties.js","./node_modules/core-js/modules/es.object.define-property.js","./node_modules/core-js/modules/es.object.define-setter.js","./node_modules/core-js/modules/es.object.entries.js","./node_modules/core-js/modules/es.object.freeze.js","./node_modules/core-js/modules/es.object.from-entries.js","./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","./node_modules/core-js/modules/es.object.get-own-property-names.js","./node_modules/core-js/modules/es.object.get-own-property-symbols.js","./node_modules/core-js/modules/es.object.get-prototype-of.js","./node_modules/core-js/modules/es.object.group-by.js","./node_modules/core-js/modules/es.object.has-own.js","./node_modules/core-js/modules/es.object.is-extensible.js","./node_modules/core-js/modules/es.object.is-frozen.js","./node_modules/core-js/modules/es.object.is-sealed.js","./node_modules/core-js/modules/es.object.is.js","./node_modules/core-js/modules/es.object.keys.js","./node_modules/core-js/modules/es.object.lookup-getter.js","./node_modules/core-js/modules/es.object.lookup-setter.js","./node_modules/core-js/modules/es.object.prevent-extensions.js","./node_modules/core-js/modules/es.object.proto.js","./node_modules/core-js/modules/es.object.seal.js","./node_modules/core-js/modules/es.object.set-prototype-of.js","./node_modules/core-js/modules/es.object.to-string.js","./node_modules/core-js/modules/es.object.values.js","./node_modules/core-js/modules/es.parse-float.js","./node_modules/core-js/modules/es.parse-int.js","./node_modules/core-js/modules/es.reflect.apply.js","./node_modules/core-js/modules/es.reflect.construct.js","./node_modules/core-js/modules/es.reflect.define-property.js","./node_modules/core-js/modules/es.reflect.delete-property.js","./node_modules/core-js/modules/es.reflect.get-own-property-descriptor.js","./node_modules/core-js/modules/es.reflect.get-prototype-of.js","./node_modules/core-js/modules/es.reflect.get.js","./node_modules/core-js/modules/es.reflect.has.js","./node_modules/core-js/modules/es.reflect.is-extensible.js","./node_modules/core-js/modules/es.reflect.own-keys.js","./node_modules/core-js/modules/es.reflect.prevent-extensions.js","./node_modules/core-js/modules/es.reflect.set-prototype-of.js","./node_modules/core-js/modules/es.reflect.set.js","./node_modules/core-js/modules/es.reflect.to-string-tag.js","./node_modules/core-js/modules/es.regexp.constructor.js","./node_modules/core-js/modules/es.regexp.dot-all.js","./node_modules/core-js/modules/es.regexp.exec.js","./node_modules/core-js/modules/es.regexp.flags.js","./node_modules/core-js/modules/es.regexp.sticky.js","./node_modules/core-js/modules/es.regexp.test.js","./node_modules/core-js/modules/es.regexp.to-string.js","./node_modules/core-js/modules/es.set.constructor.js","./node_modules/core-js/modules/es.set.difference.v2.js","./node_modules/core-js/modules/es.set.intersection.v2.js","./node_modules/core-js/modules/es.set.is-disjoint-from.v2.js","./node_modules/core-js/modules/es.set.is-subset-of.v2.js","./node_modules/core-js/modules/es.set.is-superset-of.v2.js","./node_modules/core-js/modules/es.set.js","./node_modules/core-js/modules/es.set.symmetric-difference.v2.js","./node_modules/core-js/modules/es.set.union.v2.js","./node_modules/core-js/modules/es.string.anchor.js","./node_modules/core-js/modules/es.string.at-alternative.js","./node_modules/core-js/modules/es.string.big.js","./node_modules/core-js/modules/es.string.blink.js","./node_modules/core-js/modules/es.string.bold.js","./node_modules/core-js/modules/es.string.code-point-at.js","./node_modules/core-js/modules/es.string.ends-with.js","./node_modules/core-js/modules/es.string.fixed.js","./node_modules/core-js/modules/es.string.fontcolor.js","./node_modules/core-js/modules/es.string.fontsize.js","./node_modules/core-js/modules/es.string.from-code-point.js","./node_modules/core-js/modules/es.string.includes.js","./node_modules/core-js/modules/es.string.is-well-formed.js","./node_modules/core-js/modules/es.string.italics.js","./node_modules/core-js/modules/es.string.iterator.js","./node_modules/core-js/modules/es.string.link.js","./node_modules/core-js/modules/es.string.match-all.js","./node_modules/core-js/modules/es.string.match.js","./node_modules/core-js/modules/es.string.pad-end.js","./node_modules/core-js/modules/es.string.pad-start.js","./node_modules/core-js/modules/es.string.raw.js","./node_modules/core-js/modules/es.string.repeat.js","./node_modules/core-js/modules/es.string.replace-all.js","./node_modules/core-js/modules/es.string.replace.js","./node_modules/core-js/modules/es.string.search.js","./node_modules/core-js/modules/es.string.small.js","./node_modules/core-js/modules/es.string.split.js","./node_modules/core-js/modules/es.string.starts-with.js","./node_modules/core-js/modules/es.string.strike.js","./node_modules/core-js/modules/es.string.sub.js","./node_modules/core-js/modules/es.string.substr.js","./node_modules/core-js/modules/es.string.sup.js","./node_modules/core-js/modules/es.string.to-well-formed.js","./node_modules/core-js/modules/es.string.trim-end.js","./node_modules/core-js/modules/es.string.trim-left.js","./node_modules/core-js/modules/es.string.trim-right.js","./node_modules/core-js/modules/es.string.trim-start.js","./node_modules/core-js/modules/es.string.trim.js","./node_modules/core-js/modules/es.symbol.async-iterator.js","./node_modules/core-js/modules/es.symbol.constructor.js","./node_modules/core-js/modules/es.symbol.description.js","./node_modules/core-js/modules/es.symbol.for.js","./node_modules/core-js/modules/es.symbol.has-instance.js","./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","./node_modules/core-js/modules/es.symbol.iterator.js","./node_modules/core-js/modules/es.symbol.js","./node_modules/core-js/modules/es.symbol.key-for.js","./node_modules/core-js/modules/es.symbol.match-all.js","./node_modules/core-js/modules/es.symbol.match.js","./node_modules/core-js/modules/es.symbol.replace.js","./node_modules/core-js/modules/es.symbol.search.js","./node_modules/core-js/modules/es.symbol.species.js","./node_modules/core-js/modules/es.symbol.split.js","./node_modules/core-js/modules/es.symbol.to-primitive.js","./node_modules/core-js/modules/es.symbol.to-string-tag.js","./node_modules/core-js/modules/es.symbol.unscopables.js","./node_modules/core-js/modules/es.weak-map.constructor.js","./node_modules/core-js/modules/es.weak-map.js"],"sourcesContent":["/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n * 2. Application imports. Files imported after ZoneJS that should be loaded before your main\n * file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE9, IE10 and IE11 requires all of the following polyfills. **/\nimport 'core-js/es/symbol';\nimport 'core-js/es/object';\nimport 'core-js/es/function';\nimport 'core-js/es/parse-int';\nimport 'core-js/es/parse-float';\nimport 'core-js/es/number';\nimport 'core-js/es/math';\nimport 'core-js/es/string';\nimport 'core-js/es/date';\nimport 'core-js/es/array';\nimport 'core-js/es/regexp';\nimport 'core-js/es/map';\nimport 'core-js/es/weak-map';\nimport 'core-js/es/set';\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\nimport 'classlist.js'; // Run `npm install --save classlist.js`.\n\n/** IE10 and IE11 requires the following for the Reflect API. */\nimport 'core-js/es/reflect';\n\n/** Evergreen browsers require these. **/\n// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.\n\n/**\n * Required to support Web Animations `@angular/platform-browser/animations`.\n * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation\n **/\n// import 'web-animations-js'; // Run `npm install --save web-animations-js`.\n\n/***************************************************************************************************\n * Zone JS is required by Angular itself.\n */\nimport 'zone.js'; // Included with Angular CLI.\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n\n/**\n * Date, currency, decimal and percent pipes.\n * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10\n */\n// import 'intl'; // Run `npm install --save intl`.\n/**\n * Need to import at least one locale-data with intl.\n */\n// import 'intl/locale-data/jsonp/en';\nif (!Element.prototype.matches) {\n Element.prototype.matches = (Element.prototype).msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n","/*\n * classList.js: Cross-browser full element.classList implementation.\n * 1.1.20150312\n *\n * By Eli Grey, http://eligrey.com\n * License: Dedicated to the public domain.\n * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md\n */\n\n/*global self, document, DOMException */\n\n/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */\n\nif (\"document\" in self) {\n\n// Full polyfill for browsers with no classList support\n// Including IE < Edge missing SVGElement.classList\nif (!(\"classList\" in document.createElement(\"_\")) \n\t|| document.createElementNS && !(\"classList\" in document.createElementNS(\"http://www.w3.org/2000/svg\",\"g\"))) {\n\n(function (view) {\n\n\"use strict\";\n\nif (!('Element' in view)) return;\n\nvar\n\t classListProp = \"classList\"\n\t, protoProp = \"prototype\"\n\t, elemCtrProto = view.Element[protoProp]\n\t, objCtr = Object\n\t, strTrim = String[protoProp].trim || function () {\n\t\treturn this.replace(/^\\s+|\\s+$/g, \"\");\n\t}\n\t, arrIndexOf = Array[protoProp].indexOf || function (item) {\n\t\tvar\n\t\t\t i = 0\n\t\t\t, len = this.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tif (i in this && this[i] === item) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\t// Vendors: please allow content code to instantiate DOMExceptions\n\t, DOMEx = function (type, message) {\n\t\tthis.name = type;\n\t\tthis.code = DOMException[type];\n\t\tthis.message = message;\n\t}\n\t, checkTokenAndGetIndex = function (classList, token) {\n\t\tif (token === \"\") {\n\t\t\tthrow new DOMEx(\n\t\t\t\t \"SYNTAX_ERR\"\n\t\t\t\t, \"An invalid or illegal string was specified\"\n\t\t\t);\n\t\t}\n\t\tif (/\\s/.test(token)) {\n\t\t\tthrow new DOMEx(\n\t\t\t\t \"INVALID_CHARACTER_ERR\"\n\t\t\t\t, \"String contains an invalid character\"\n\t\t\t);\n\t\t}\n\t\treturn arrIndexOf.call(classList, token);\n\t}\n\t, ClassList = function (elem) {\n\t\tvar\n\t\t\t trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\")\n\t\t\t, classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : []\n\t\t\t, i = 0\n\t\t\t, len = classes.length\n\t\t;\n\t\tfor (; i < len; i++) {\n\t\t\tthis.push(classes[i]);\n\t\t}\n\t\tthis._updateClassName = function () {\n\t\t\telem.setAttribute(\"class\", this.toString());\n\t\t};\n\t}\n\t, classListProto = ClassList[protoProp] = []\n\t, classListGetter = function () {\n\t\treturn new ClassList(this);\n\t}\n;\n// Most DOMException implementations don't allow calling DOMException's toString()\n// on non-DOMExceptions. Error's toString() is sufficient here.\nDOMEx[protoProp] = Error[protoProp];\nclassListProto.item = function (i) {\n\treturn this[i] || null;\n};\nclassListProto.contains = function (token) {\n\ttoken += \"\";\n\treturn checkTokenAndGetIndex(this, token) !== -1;\n};\nclassListProto.add = function () {\n\tvar\n\t\t tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tif (checkTokenAndGetIndex(this, token) === -1) {\n\t\t\tthis.push(token);\n\t\t\tupdated = true;\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.remove = function () {\n\tvar\n\t\t tokens = arguments\n\t\t, i = 0\n\t\t, l = tokens.length\n\t\t, token\n\t\t, updated = false\n\t\t, index\n\t;\n\tdo {\n\t\ttoken = tokens[i] + \"\";\n\t\tindex = checkTokenAndGetIndex(this, token);\n\t\twhile (index !== -1) {\n\t\t\tthis.splice(index, 1);\n\t\t\tupdated = true;\n\t\t\tindex = checkTokenAndGetIndex(this, token);\n\t\t}\n\t}\n\twhile (++i < l);\n\n\tif (updated) {\n\t\tthis._updateClassName();\n\t}\n};\nclassListProto.toggle = function (token, force) {\n\ttoken += \"\";\n\n\tvar\n\t\t result = this.contains(token)\n\t\t, method = result ?\n\t\t\tforce !== true && \"remove\"\n\t\t:\n\t\t\tforce !== false && \"add\"\n\t;\n\n\tif (method) {\n\t\tthis[method](token);\n\t}\n\n\tif (force === true || force === false) {\n\t\treturn force;\n\t} else {\n\t\treturn !result;\n\t}\n};\nclassListProto.toString = function () {\n\treturn this.join(\" \");\n};\n\nif (objCtr.defineProperty) {\n\tvar classListPropDesc = {\n\t\t get: classListGetter\n\t\t, enumerable: true\n\t\t, configurable: true\n\t};\n\ttry {\n\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t} catch (ex) { // IE 8 doesn't support enumerable:true\n\t\tif (ex.number === -0x7FF5EC54) {\n\t\t\tclassListPropDesc.enumerable = false;\n\t\t\tobjCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n\t\t}\n\t}\n} else if (objCtr[protoProp].__defineGetter__) {\n\telemCtrProto.__defineGetter__(classListProp, classListGetter);\n}\n\n}(self));\n\n} else {\n// There is full or partial native classList support, so just check if we need\n// to normalize the add/remove and toggle APIs.\n\n(function () {\n\t\"use strict\";\n\n\tvar testElement = document.createElement(\"_\");\n\n\ttestElement.classList.add(\"c1\", \"c2\");\n\n\t// Polyfill for IE 10/11 and Firefox <26, where classList.add and\n\t// classList.remove exist but support only one argument at a time.\n\tif (!testElement.classList.contains(\"c2\")) {\n\t\tvar createMethod = function(method) {\n\t\t\tvar original = DOMTokenList.prototype[method];\n\n\t\t\tDOMTokenList.prototype[method] = function(token) {\n\t\t\t\tvar i, len = arguments.length;\n\n\t\t\t\tfor (i = 0; i < len; i++) {\n\t\t\t\t\ttoken = arguments[i];\n\t\t\t\t\toriginal.call(this, token);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t\tcreateMethod('add');\n\t\tcreateMethod('remove');\n\t}\n\n\ttestElement.classList.toggle(\"c3\", false);\n\n\t// Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n\t// support the second argument.\n\tif (testElement.classList.contains(\"c3\")) {\n\t\tvar _toggle = DOMTokenList.prototype.toggle;\n\n\t\tDOMTokenList.prototype.toggle = function(token, force) {\n\t\t\tif (1 in arguments && !this.contains(token) === !force) {\n\t\t\t\treturn force;\n\t\t\t} else {\n\t\t\t\treturn _toggle.call(this, token);\n\t\t\t}\n\t\t};\n\n\t}\n\n\ttestElement = null;\n}());\n\n}\n\n}\n\n","'use strict';\n/**\n * @license Angular v\n * (c) 2010-2024 Google LLC. https://angular.io/\n * License: MIT\n */\nconst global = globalThis;\n// __Zone_symbol_prefix global can be used to override the default zone\n// symbol prefix with a custom one if needed.\nfunction __symbol__(name) {\n const symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__';\n return symbolPrefix + name;\n}\nfunction initZone() {\n const performance = global['performance'];\n function mark(name) {\n performance && performance['mark'] && performance['mark'](name);\n }\n function performanceMeasure(name, label) {\n performance && performance['measure'] && performance['measure'](name, label);\n }\n mark('Zone');\n class ZoneImpl {\n // tslint:disable-next-line:require-internal-with-underscore\n static { this.__symbol__ = __symbol__; }\n static assertZonePatched() {\n if (global['Promise'] !== patches['ZoneAwarePromise']) {\n throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' +\n 'has been overwritten.\\n' +\n 'Most likely cause is that a Promise polyfill has been loaded ' +\n 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' +\n 'If you must load one, do so before loading zone.js.)');\n }\n }\n static get root() {\n let zone = ZoneImpl.current;\n while (zone.parent) {\n zone = zone.parent;\n }\n return zone;\n }\n static get current() {\n return _currentZoneFrame.zone;\n }\n static get currentTask() {\n return _currentTask;\n }\n // tslint:disable-next-line:require-internal-with-underscore\n static __load_patch(name, fn, ignoreDuplicate = false) {\n if (patches.hasOwnProperty(name)) {\n // `checkDuplicate` option is defined from global variable\n // so it works for all modules.\n // `ignoreDuplicate` can work for the specified module\n const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;\n if (!ignoreDuplicate && checkDuplicate) {\n throw Error('Already loaded patch: ' + name);\n }\n }\n else if (!global['__Zone_disable_' + name]) {\n const perfName = 'Zone:' + name;\n mark(perfName);\n patches[name] = fn(global, ZoneImpl, _api);\n performanceMeasure(perfName, perfName);\n }\n }\n get parent() {\n return this._parent;\n }\n get name() {\n return this._name;\n }\n constructor(parent, zoneSpec) {\n this._parent = parent;\n this._name = zoneSpec ? zoneSpec.name || 'unnamed' : '';\n this._properties = (zoneSpec && zoneSpec.properties) || {};\n this._zoneDelegate = new _ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec);\n }\n get(key) {\n const zone = this.getZoneWith(key);\n if (zone)\n return zone._properties[key];\n }\n getZoneWith(key) {\n let current = this;\n while (current) {\n if (current._properties.hasOwnProperty(key)) {\n return current;\n }\n current = current._parent;\n }\n return null;\n }\n fork(zoneSpec) {\n if (!zoneSpec)\n throw new Error('ZoneSpec required!');\n return this._zoneDelegate.fork(this, zoneSpec);\n }\n wrap(callback, source) {\n if (typeof callback !== 'function') {\n throw new Error('Expecting function got: ' + callback);\n }\n const _callback = this._zoneDelegate.intercept(this, callback, source);\n const zone = this;\n return function () {\n return zone.runGuarded(_callback, this, arguments, source);\n };\n }\n run(callback, applyThis, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n }\n runGuarded(callback, applyThis = null, applyArgs, source) {\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n try {\n return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n _currentZoneFrame = _currentZoneFrame.parent;\n }\n }\n runTask(task, applyThis, applyArgs) {\n if (task.zone != this) {\n throw new Error('A task can only be run in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name +\n '; Execution: ' +\n this.name +\n ')');\n }\n const zoneTask = task;\n // https://github.com/angular/zone.js/issues/778, sometimes eventTask\n // will run in notScheduled(canceled) state, we should not try to\n // run such kind of task but just return\n const { type, data: { isPeriodic = false, isRefreshable = false } = {} } = task;\n if (task.state === notScheduled && (type === eventTask || type === macroTask)) {\n return;\n }\n const reEntryGuard = task.state != running;\n reEntryGuard && zoneTask._transitionTo(running, scheduled);\n const previousTask = _currentTask;\n _currentTask = zoneTask;\n _currentZoneFrame = { parent: _currentZoneFrame, zone: this };\n try {\n if (type == macroTask && task.data && !isPeriodic && !isRefreshable) {\n task.cancelFn = undefined;\n }\n try {\n return this._zoneDelegate.invokeTask(this, zoneTask, applyThis, applyArgs);\n }\n catch (error) {\n if (this._zoneDelegate.handleError(this, error)) {\n throw error;\n }\n }\n }\n finally {\n // if the task's state is notScheduled or unknown, then it has already been cancelled\n // we should not reset the state to scheduled\n const state = task.state;\n if (state !== notScheduled && state !== unknown) {\n if (type == eventTask || isPeriodic || (isRefreshable && state === scheduling)) {\n reEntryGuard && zoneTask._transitionTo(scheduled, running, scheduling);\n }\n else {\n const zoneDelegates = zoneTask._zoneDelegates;\n this._updateTaskCount(zoneTask, -1);\n reEntryGuard && zoneTask._transitionTo(notScheduled, running, notScheduled);\n if (isRefreshable) {\n zoneTask._zoneDelegates = zoneDelegates;\n }\n }\n }\n _currentZoneFrame = _currentZoneFrame.parent;\n _currentTask = previousTask;\n }\n }\n scheduleTask(task) {\n if (task.zone && task.zone !== this) {\n // check if the task was rescheduled, the newZone\n // should not be the children of the original zone\n let newZone = this;\n while (newZone) {\n if (newZone === task.zone) {\n throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${task.zone.name}`);\n }\n newZone = newZone.parent;\n }\n }\n task._transitionTo(scheduling, notScheduled);\n const zoneDelegates = [];\n task._zoneDelegates = zoneDelegates;\n task._zone = this;\n try {\n task = this._zoneDelegate.scheduleTask(this, task);\n }\n catch (err) {\n // should set task's state to unknown when scheduleTask throw error\n // because the err may from reschedule, so the fromState maybe notScheduled\n task._transitionTo(unknown, scheduling, notScheduled);\n // TODO: @JiaLiPassion, should we check the result from handleError?\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n if (task._zoneDelegates === zoneDelegates) {\n // we have to check because internally the delegate can reschedule the task.\n this._updateTaskCount(task, 1);\n }\n if (task.state == scheduling) {\n task._transitionTo(scheduled, scheduling);\n }\n return task;\n }\n scheduleMicroTask(source, callback, data, customSchedule) {\n return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined));\n }\n scheduleMacroTask(source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel));\n }\n scheduleEventTask(source, callback, data, customSchedule, customCancel) {\n return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel));\n }\n cancelTask(task) {\n if (task.zone != this)\n throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' +\n (task.zone || NO_ZONE).name +\n '; Execution: ' +\n this.name +\n ')');\n if (task.state !== scheduled && task.state !== running) {\n return;\n }\n task._transitionTo(canceling, scheduled, running);\n try {\n this._zoneDelegate.cancelTask(this, task);\n }\n catch (err) {\n // if error occurs when cancelTask, transit the state to unknown\n task._transitionTo(unknown, canceling);\n this._zoneDelegate.handleError(this, err);\n throw err;\n }\n this._updateTaskCount(task, -1);\n task._transitionTo(notScheduled, canceling);\n task.runCount = -1;\n return task;\n }\n _updateTaskCount(task, count) {\n const zoneDelegates = task._zoneDelegates;\n if (count == -1) {\n task._zoneDelegates = null;\n }\n for (let i = 0; i < zoneDelegates.length; i++) {\n zoneDelegates[i]._updateTaskCount(task.type, count);\n }\n }\n }\n const DELEGATE_ZS = {\n name: '',\n onHasTask: (delegate, _, target, hasTaskState) => delegate.hasTask(target, hasTaskState),\n onScheduleTask: (delegate, _, target, task) => delegate.scheduleTask(target, task),\n onInvokeTask: (delegate, _, target, task, applyThis, applyArgs) => delegate.invokeTask(target, task, applyThis, applyArgs),\n onCancelTask: (delegate, _, target, task) => delegate.cancelTask(target, task),\n };\n class _ZoneDelegate {\n get zone() {\n return this._zone;\n }\n constructor(zone, parentDelegate, zoneSpec) {\n this._taskCounts = {\n 'microTask': 0,\n 'macroTask': 0,\n 'eventTask': 0,\n };\n this._zone = zone;\n this._parentDelegate = parentDelegate;\n this._forkZS = zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS);\n this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt);\n this._forkCurrZone =\n zoneSpec && (zoneSpec.onFork ? this._zone : parentDelegate._forkCurrZone);\n this._interceptZS =\n zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS);\n this._interceptDlgt =\n zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt);\n this._interceptCurrZone =\n zoneSpec && (zoneSpec.onIntercept ? this._zone : parentDelegate._interceptCurrZone);\n this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS);\n this._invokeDlgt =\n zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt);\n this._invokeCurrZone =\n zoneSpec && (zoneSpec.onInvoke ? this._zone : parentDelegate._invokeCurrZone);\n this._handleErrorZS =\n zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS);\n this._handleErrorDlgt =\n zoneSpec && (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt);\n this._handleErrorCurrZone =\n zoneSpec && (zoneSpec.onHandleError ? this._zone : parentDelegate._handleErrorCurrZone);\n this._scheduleTaskZS =\n zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS);\n this._scheduleTaskDlgt =\n zoneSpec && (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt);\n this._scheduleTaskCurrZone =\n zoneSpec && (zoneSpec.onScheduleTask ? this._zone : parentDelegate._scheduleTaskCurrZone);\n this._invokeTaskZS =\n zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS);\n this._invokeTaskDlgt =\n zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt);\n this._invokeTaskCurrZone =\n zoneSpec && (zoneSpec.onInvokeTask ? this._zone : parentDelegate._invokeTaskCurrZone);\n this._cancelTaskZS =\n zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS);\n this._cancelTaskDlgt =\n zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt);\n this._cancelTaskCurrZone =\n zoneSpec && (zoneSpec.onCancelTask ? this._zone : parentDelegate._cancelTaskCurrZone);\n this._hasTaskZS = null;\n this._hasTaskDlgt = null;\n this._hasTaskDlgtOwner = null;\n this._hasTaskCurrZone = null;\n const zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask;\n const parentHasTask = parentDelegate && parentDelegate._hasTaskZS;\n if (zoneSpecHasTask || parentHasTask) {\n // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such\n // a case all task related interceptors must go through this ZD. We can't short circuit it.\n this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS;\n this._hasTaskDlgt = parentDelegate;\n this._hasTaskDlgtOwner = this;\n this._hasTaskCurrZone = this._zone;\n if (!zoneSpec.onScheduleTask) {\n this._scheduleTaskZS = DELEGATE_ZS;\n this._scheduleTaskDlgt = parentDelegate;\n this._scheduleTaskCurrZone = this._zone;\n }\n if (!zoneSpec.onInvokeTask) {\n this._invokeTaskZS = DELEGATE_ZS;\n this._invokeTaskDlgt = parentDelegate;\n this._invokeTaskCurrZone = this._zone;\n }\n if (!zoneSpec.onCancelTask) {\n this._cancelTaskZS = DELEGATE_ZS;\n this._cancelTaskDlgt = parentDelegate;\n this._cancelTaskCurrZone = this._zone;\n }\n }\n }\n fork(targetZone, zoneSpec) {\n return this._forkZS\n ? this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec)\n : new ZoneImpl(targetZone, zoneSpec);\n }\n intercept(targetZone, callback, source) {\n return this._interceptZS\n ? this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source)\n : callback;\n }\n invoke(targetZone, callback, applyThis, applyArgs, source) {\n return this._invokeZS\n ? this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source)\n : callback.apply(applyThis, applyArgs);\n }\n handleError(targetZone, error) {\n return this._handleErrorZS\n ? this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error)\n : true;\n }\n scheduleTask(targetZone, task) {\n let returnTask = task;\n if (this._scheduleTaskZS) {\n if (this._hasTaskZS) {\n returnTask._zoneDelegates.push(this._hasTaskDlgtOwner);\n }\n returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task);\n if (!returnTask)\n returnTask = task;\n }\n else {\n if (task.scheduleFn) {\n task.scheduleFn(task);\n }\n else if (task.type == microTask) {\n scheduleMicroTask(task);\n }\n else {\n throw new Error('Task is missing scheduleFn.');\n }\n }\n return returnTask;\n }\n invokeTask(targetZone, task, applyThis, applyArgs) {\n return this._invokeTaskZS\n ? this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs)\n : task.callback.apply(applyThis, applyArgs);\n }\n cancelTask(targetZone, task) {\n let value;\n if (this._cancelTaskZS) {\n value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task);\n }\n else {\n if (!task.cancelFn) {\n throw Error('Task is not cancelable');\n }\n value = task.cancelFn(task);\n }\n return value;\n }\n hasTask(targetZone, isEmpty) {\n // hasTask should not throw error so other ZoneDelegate\n // can still trigger hasTask callback\n try {\n this._hasTaskZS &&\n this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty);\n }\n catch (err) {\n this.handleError(targetZone, err);\n }\n }\n // tslint:disable-next-line:require-internal-with-underscore\n _updateTaskCount(type, count) {\n const counts = this._taskCounts;\n const prev = counts[type];\n const next = (counts[type] = prev + count);\n if (next < 0) {\n throw new Error('More tasks executed then were scheduled.');\n }\n if (prev == 0 || next == 0) {\n const isEmpty = {\n microTask: counts['microTask'] > 0,\n macroTask: counts['macroTask'] > 0,\n eventTask: counts['eventTask'] > 0,\n change: type,\n };\n this.hasTask(this._zone, isEmpty);\n }\n }\n }\n class ZoneTask {\n constructor(type, source, callback, options, scheduleFn, cancelFn) {\n // tslint:disable-next-line:require-internal-with-underscore\n this._zone = null;\n this.runCount = 0;\n // tslint:disable-next-line:require-internal-with-underscore\n this._zoneDelegates = null;\n // tslint:disable-next-line:require-internal-with-underscore\n this._state = 'notScheduled';\n this.type = type;\n this.source = source;\n this.data = options;\n this.scheduleFn = scheduleFn;\n this.cancelFn = cancelFn;\n if (!callback) {\n throw new Error('callback is not defined');\n }\n this.callback = callback;\n const self = this;\n // TODO: @JiaLiPassion options should have interface\n if (type === eventTask && options && options.useG) {\n this.invoke = ZoneTask.invokeTask;\n }\n else {\n this.invoke = function () {\n return ZoneTask.invokeTask.call(global, self, this, arguments);\n };\n }\n }\n static invokeTask(task, target, args) {\n if (!task) {\n task = this;\n }\n _numberOfNestedTaskFrames++;\n try {\n task.runCount++;\n return task.zone.runTask(task, target, args);\n }\n finally {\n if (_numberOfNestedTaskFrames == 1) {\n drainMicroTaskQueue();\n }\n _numberOfNestedTaskFrames--;\n }\n }\n get zone() {\n return this._zone;\n }\n get state() {\n return this._state;\n }\n cancelScheduleRequest() {\n this._transitionTo(notScheduled, scheduling);\n }\n // tslint:disable-next-line:require-internal-with-underscore\n _transitionTo(toState, fromState1, fromState2) {\n if (this._state === fromState1 || this._state === fromState2) {\n this._state = toState;\n if (toState == notScheduled) {\n this._zoneDelegates = null;\n }\n }\n else {\n throw new Error(`${this.type} '${this.source}': can not transition to '${toState}', expecting state '${fromState1}'${fromState2 ? \" or '\" + fromState2 + \"'\" : ''}, was '${this._state}'.`);\n }\n }\n toString() {\n if (this.data && typeof this.data.handleId !== 'undefined') {\n return this.data.handleId.toString();\n }\n else {\n return Object.prototype.toString.call(this);\n }\n }\n // add toJSON method to prevent cyclic error when\n // call JSON.stringify(zoneTask)\n toJSON() {\n return {\n type: this.type,\n state: this.state,\n source: this.source,\n zone: this.zone.name,\n runCount: this.runCount,\n };\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// MICROTASK QUEUE\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n const symbolSetTimeout = __symbol__('setTimeout');\n const symbolPromise = __symbol__('Promise');\n const symbolThen = __symbol__('then');\n let _microTaskQueue = [];\n let _isDrainingMicrotaskQueue = false;\n let nativeMicroTaskQueuePromise;\n function nativeScheduleMicroTask(func) {\n if (!nativeMicroTaskQueuePromise) {\n if (global[symbolPromise]) {\n nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0);\n }\n }\n if (nativeMicroTaskQueuePromise) {\n let nativeThen = nativeMicroTaskQueuePromise[symbolThen];\n if (!nativeThen) {\n // native Promise is not patchable, we need to use `then` directly\n // issue 1078\n nativeThen = nativeMicroTaskQueuePromise['then'];\n }\n nativeThen.call(nativeMicroTaskQueuePromise, func);\n }\n else {\n global[symbolSetTimeout](func, 0);\n }\n }\n function scheduleMicroTask(task) {\n // if we are not running in any task, and there has not been anything scheduled\n // we must bootstrap the initial task creation by manually scheduling the drain\n if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) {\n // We are not running in Task, so we need to kickstart the microtask queue.\n nativeScheduleMicroTask(drainMicroTaskQueue);\n }\n task && _microTaskQueue.push(task);\n }\n function drainMicroTaskQueue() {\n if (!_isDrainingMicrotaskQueue) {\n _isDrainingMicrotaskQueue = true;\n while (_microTaskQueue.length) {\n const queue = _microTaskQueue;\n _microTaskQueue = [];\n for (let i = 0; i < queue.length; i++) {\n const task = queue[i];\n try {\n task.zone.runTask(task, null, null);\n }\n catch (error) {\n _api.onUnhandledError(error);\n }\n }\n }\n _api.microtaskDrainDone();\n _isDrainingMicrotaskQueue = false;\n }\n }\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n /// BOOTSTRAP\n //////////////////////////////////////////////////////\n //////////////////////////////////////////////////////\n const NO_ZONE = { name: 'NO ZONE' };\n const notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown';\n const microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask';\n const patches = {};\n const _api = {\n symbol: __symbol__,\n currentZoneFrame: () => _currentZoneFrame,\n onUnhandledError: noop,\n microtaskDrainDone: noop,\n scheduleMicroTask: scheduleMicroTask,\n showUncaughtError: () => !ZoneImpl[__symbol__('ignoreConsoleErrorUncaughtError')],\n patchEventTarget: () => [],\n patchOnProperties: noop,\n patchMethod: () => noop,\n bindArguments: () => [],\n patchThen: () => noop,\n patchMacroTask: () => noop,\n patchEventPrototype: () => noop,\n isIEOrEdge: () => false,\n getGlobalObjects: () => undefined,\n ObjectDefineProperty: () => noop,\n ObjectGetOwnPropertyDescriptor: () => undefined,\n ObjectCreate: () => undefined,\n ArraySlice: () => [],\n patchClass: () => noop,\n wrapWithCurrentZone: () => noop,\n filterProperties: () => [],\n attachOriginToPatched: () => noop,\n _redefineProperty: () => noop,\n patchCallbacks: () => noop,\n nativeScheduleMicroTask: nativeScheduleMicroTask,\n };\n let _currentZoneFrame = { parent: null, zone: new ZoneImpl(null, null) };\n let _currentTask = null;\n let _numberOfNestedTaskFrames = 0;\n function noop() { }\n performanceMeasure('Zone', 'Zone');\n return ZoneImpl;\n}\n\nfunction loadZone() {\n // if global['Zone'] already exists (maybe zone.js was already loaded or\n // some other lib also registered a global object named Zone), we may need\n // to throw an error, but sometimes user may not want this error.\n // For example,\n // we have two web pages, page1 includes zone.js, page2 doesn't.\n // and the 1st time user load page1 and page2, everything work fine,\n // but when user load page2 again, error occurs because global['Zone'] already exists.\n // so we add a flag to let user choose whether to throw this error or not.\n // By default, if existing Zone is from zone.js, we will not throw the error.\n const global = globalThis;\n const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true;\n if (global['Zone'] && (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function')) {\n throw new Error('Zone already loaded.');\n }\n // Initialize global `Zone` constant.\n global['Zone'] ??= initZone();\n return global['Zone'];\n}\n\n/**\n * Suppress closure compiler errors about unknown 'Zone' variable\n * @fileoverview\n * @suppress {undefinedVars,globalThis,missingRequire}\n */\n// issue #989, to reduce bundle size, use short name\n/** Object.getOwnPropertyDescriptor */\nconst ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n/** Object.defineProperty */\nconst ObjectDefineProperty = Object.defineProperty;\n/** Object.getPrototypeOf */\nconst ObjectGetPrototypeOf = Object.getPrototypeOf;\n/** Object.create */\nconst ObjectCreate = Object.create;\n/** Array.prototype.slice */\nconst ArraySlice = Array.prototype.slice;\n/** addEventListener string const */\nconst ADD_EVENT_LISTENER_STR = 'addEventListener';\n/** removeEventListener string const */\nconst REMOVE_EVENT_LISTENER_STR = 'removeEventListener';\n/** zoneSymbol addEventListener */\nconst ZONE_SYMBOL_ADD_EVENT_LISTENER = __symbol__(ADD_EVENT_LISTENER_STR);\n/** zoneSymbol removeEventListener */\nconst ZONE_SYMBOL_REMOVE_EVENT_LISTENER = __symbol__(REMOVE_EVENT_LISTENER_STR);\n/** true string const */\nconst TRUE_STR = 'true';\n/** false string const */\nconst FALSE_STR = 'false';\n/** Zone symbol prefix string const. */\nconst ZONE_SYMBOL_PREFIX = __symbol__('');\nfunction wrapWithCurrentZone(callback, source) {\n return Zone.current.wrap(callback, source);\n}\nfunction scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) {\n return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel);\n}\nconst zoneSymbol = __symbol__;\nconst isWindowExists = typeof window !== 'undefined';\nconst internalWindow = isWindowExists ? window : undefined;\nconst _global = (isWindowExists && internalWindow) || globalThis;\nconst REMOVE_ATTRIBUTE = 'removeAttribute';\nfunction bindArguments(args, source) {\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === 'function') {\n args[i] = wrapWithCurrentZone(args[i], source + '_' + i);\n }\n }\n return args;\n}\nfunction patchPrototype(prototype, fnNames) {\n const source = prototype.constructor['name'];\n for (let i = 0; i < fnNames.length; i++) {\n const name = fnNames[i];\n const delegate = prototype[name];\n if (delegate) {\n const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name);\n if (!isPropertyWritable(prototypeDesc)) {\n continue;\n }\n prototype[name] = ((delegate) => {\n const patched = function () {\n return delegate.apply(this, bindArguments(arguments, source + '.' + name));\n };\n attachOriginToPatched(patched, delegate);\n return patched;\n })(delegate);\n }\n }\n}\nfunction isPropertyWritable(propertyDesc) {\n if (!propertyDesc) {\n return true;\n }\n if (propertyDesc.writable === false) {\n return false;\n }\n return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined');\n}\nconst isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nconst isNode = !('nw' in _global) &&\n typeof _global.process !== 'undefined' &&\n _global.process.toString() === '[object process]';\nconst isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']);\n// we are in electron of nw, so we are both browser and nodejs\n// Make sure to access `process` through `_global` so that WebPack does not accidentally browserify\n// this code.\nconst isMix = typeof _global.process !== 'undefined' &&\n _global.process.toString() === '[object process]' &&\n !isWebWorker &&\n !!(isWindowExists && internalWindow['HTMLElement']);\nconst zoneSymbolEventNames$1 = {};\nconst enableBeforeunloadSymbol = zoneSymbol('enable_beforeunload');\nconst wrapFn = function (event) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n let eventNameSymbol = zoneSymbolEventNames$1[event.type];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames$1[event.type] = zoneSymbol('ON_PROPERTY' + event.type);\n }\n const target = this || event.target || _global;\n const listener = target[eventNameSymbol];\n let result;\n if (isBrowser && target === internalWindow && event.type === 'error') {\n // window.onerror have different signature\n // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror\n // and onerror callback will prevent default when callback return true\n const errorEvent = event;\n result =\n listener &&\n listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error);\n if (result === true) {\n event.preventDefault();\n }\n }\n else {\n result = listener && listener.apply(this, arguments);\n if (\n // https://github.com/angular/angular/issues/47579\n // https://www.w3.org/TR/2011/WD-html5-20110525/history.html#beforeunloadevent\n // This is the only specific case we should check for. The spec defines that the\n // `returnValue` attribute represents the message to show the user. When the event\n // is created, this attribute must be set to the empty string.\n event.type === 'beforeunload' &&\n // To prevent any breaking changes resulting from this change, given that\n // it was already causing a significant number of failures in G3, we have hidden\n // that behavior behind a global configuration flag. Consumers can enable this\n // flag explicitly if they want the `beforeunload` event to be handled as defined\n // in the specification.\n _global[enableBeforeunloadSymbol] &&\n // The IDL event definition is `attribute DOMString returnValue`, so we check whether\n // `typeof result` is a string.\n typeof result === 'string') {\n event.returnValue = result;\n }\n else if (result != undefined && !result) {\n event.preventDefault();\n }\n }\n return result;\n};\nfunction patchProperty(obj, prop, prototype) {\n let desc = ObjectGetOwnPropertyDescriptor(obj, prop);\n if (!desc && prototype) {\n // when patch window object, use prototype to check prop exist or not\n const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop);\n if (prototypeDesc) {\n desc = { enumerable: true, configurable: true };\n }\n }\n // if the descriptor not exists or is not configurable\n // just return\n if (!desc || !desc.configurable) {\n return;\n }\n const onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched');\n if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) {\n return;\n }\n // A property descriptor cannot have getter/setter and be writable\n // deleting the writable and value properties avoids this error:\n //\n // TypeError: property descriptors must not specify a value or be writable when a\n // getter or setter has been specified\n delete desc.writable;\n delete desc.value;\n const originalDescGet = desc.get;\n const originalDescSet = desc.set;\n // slice(2) cuz 'onclick' -> 'click', etc\n const eventName = prop.slice(2);\n let eventNameSymbol = zoneSymbolEventNames$1[eventName];\n if (!eventNameSymbol) {\n eventNameSymbol = zoneSymbolEventNames$1[eventName] = zoneSymbol('ON_PROPERTY' + eventName);\n }\n desc.set = function (newValue) {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n let target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return;\n }\n const previousValue = target[eventNameSymbol];\n if (typeof previousValue === 'function') {\n target.removeEventListener(eventName, wrapFn);\n }\n // issue #978, when onload handler was added before loading zone.js\n // we should remove it with originalDescSet\n originalDescSet && originalDescSet.call(target, null);\n target[eventNameSymbol] = newValue;\n if (typeof newValue === 'function') {\n target.addEventListener(eventName, wrapFn, false);\n }\n };\n // The getter would return undefined for unassigned properties but the default value of an\n // unassigned property is null\n desc.get = function () {\n // in some of windows's onproperty callback, this is undefined\n // so we need to check it\n let target = this;\n if (!target && obj === _global) {\n target = _global;\n }\n if (!target) {\n return null;\n }\n const listener = target[eventNameSymbol];\n if (listener) {\n return listener;\n }\n else if (originalDescGet) {\n // result will be null when use inline event attribute,\n // such as \n // because the onclick function is internal raw uncompiled handler\n // the onclick will be evaluated when first time event was triggered or\n // the property is accessed, https://github.com/angular/zone.js/issues/525\n // so we should use original native get to retrieve the handler\n let value = originalDescGet.call(this);\n if (value) {\n desc.set.call(this, value);\n if (typeof target[REMOVE_ATTRIBUTE] === 'function') {\n target.removeAttribute(prop);\n }\n return value;\n }\n }\n return null;\n };\n ObjectDefineProperty(obj, prop, desc);\n obj[onPropPatchedSymbol] = true;\n}\nfunction patchOnProperties(obj, properties, prototype) {\n if (properties) {\n for (let i = 0; i < properties.length; i++) {\n patchProperty(obj, 'on' + properties[i], prototype);\n }\n }\n else {\n const onProperties = [];\n for (const prop in obj) {\n if (prop.slice(0, 2) == 'on') {\n onProperties.push(prop);\n }\n }\n for (let j = 0; j < onProperties.length; j++) {\n patchProperty(obj, onProperties[j], prototype);\n }\n }\n}\nconst originalInstanceKey = zoneSymbol('originalInstance');\n// wrap some native API on `window`\nfunction patchClass(className) {\n const OriginalClass = _global[className];\n if (!OriginalClass)\n return;\n // keep original class in global\n _global[zoneSymbol(className)] = OriginalClass;\n _global[className] = function () {\n const a = bindArguments(arguments, className);\n switch (a.length) {\n case 0:\n this[originalInstanceKey] = new OriginalClass();\n break;\n case 1:\n this[originalInstanceKey] = new OriginalClass(a[0]);\n break;\n case 2:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1]);\n break;\n case 3:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]);\n break;\n case 4:\n this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]);\n break;\n default:\n throw new Error('Arg list too long.');\n }\n };\n // attach original delegate to patched function\n attachOriginToPatched(_global[className], OriginalClass);\n const instance = new OriginalClass(function () { });\n let prop;\n for (prop in instance) {\n // https://bugs.webkit.org/show_bug.cgi?id=44721\n if (className === 'XMLHttpRequest' && prop === 'responseBlob')\n continue;\n (function (prop) {\n if (typeof instance[prop] === 'function') {\n _global[className].prototype[prop] = function () {\n return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments);\n };\n }\n else {\n ObjectDefineProperty(_global[className].prototype, prop, {\n set: function (fn) {\n if (typeof fn === 'function') {\n this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop);\n // keep callback in wrapped function so we can\n // use it in Function.prototype.toString to return\n // the native one.\n attachOriginToPatched(this[originalInstanceKey][prop], fn);\n }\n else {\n this[originalInstanceKey][prop] = fn;\n }\n },\n get: function () {\n return this[originalInstanceKey][prop];\n },\n });\n }\n })(prop);\n }\n for (prop in OriginalClass) {\n if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) {\n _global[className][prop] = OriginalClass[prop];\n }\n }\n}\nfunction patchMethod(target, name, patchFn) {\n let proto = target;\n while (proto && !proto.hasOwnProperty(name)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && target[name]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = target;\n }\n const delegateName = zoneSymbol(name);\n let delegate = null;\n if (proto && (!(delegate = proto[delegateName]) || !proto.hasOwnProperty(delegateName))) {\n delegate = proto[delegateName] = proto[name];\n // check whether proto[name] is writable\n // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob\n const desc = proto && ObjectGetOwnPropertyDescriptor(proto, name);\n if (isPropertyWritable(desc)) {\n const patchDelegate = patchFn(delegate, delegateName, name);\n proto[name] = function () {\n return patchDelegate(this, arguments);\n };\n attachOriginToPatched(proto[name], delegate);\n }\n }\n return delegate;\n}\n// TODO: @JiaLiPassion, support cancel task later if necessary\nfunction patchMacroTask(obj, funcName, metaCreator) {\n let setNative = null;\n function scheduleTask(task) {\n const data = task.data;\n data.args[data.cbIdx] = function () {\n task.invoke.apply(this, arguments);\n };\n setNative.apply(data.target, data.args);\n return task;\n }\n setNative = patchMethod(obj, funcName, (delegate) => function (self, args) {\n const meta = metaCreator(self, args);\n if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') {\n return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask);\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(self, args);\n }\n });\n}\nfunction attachOriginToPatched(patched, original) {\n patched[zoneSymbol('OriginalDelegate')] = original;\n}\nlet isDetectedIEOrEdge = false;\nlet ieOrEdge = false;\nfunction isIE() {\n try {\n const ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) {\n return true;\n }\n }\n catch (error) { }\n return false;\n}\nfunction isIEOrEdge() {\n if (isDetectedIEOrEdge) {\n return ieOrEdge;\n }\n isDetectedIEOrEdge = true;\n try {\n const ua = internalWindow.navigator.userAgent;\n if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) {\n ieOrEdge = true;\n }\n }\n catch (error) { }\n return ieOrEdge;\n}\nfunction isFunction(value) {\n return typeof value === 'function';\n}\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\n// Note that passive event listeners are now supported by most modern browsers,\n// including Chrome, Firefox, Safari, and Edge. There's a pending change that\n// would remove support for legacy browsers by zone.js. Removing `passiveSupported`\n// from the codebase will reduce the final code size for existing apps that still use zone.js.\nlet passiveSupported = false;\nif (typeof window !== 'undefined') {\n try {\n const options = Object.defineProperty({}, 'passive', {\n get: function () {\n passiveSupported = true;\n },\n });\n // Note: We pass the `options` object as the event handler too. This is not compatible with the\n // signature of `addEventListener` or `removeEventListener` but enables us to remove the handler\n // without an actual handler.\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, options);\n }\n catch (err) {\n passiveSupported = false;\n }\n}\n// an identifier to tell ZoneTask do not create a new invoke closure\nconst OPTIMIZED_ZONE_EVENT_TASK_DATA = {\n useG: true,\n};\nconst zoneSymbolEventNames = {};\nconst globalSources = {};\nconst EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\\\w+)(true|false)$');\nconst IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped');\nfunction prepareEventNames(eventName, eventNameToString) {\n const falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR;\n const trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR;\n const symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n}\nfunction patchEventTarget(_global, api, apis, patchOptions) {\n const ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR;\n const REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR;\n const LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners';\n const REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners';\n const zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER);\n const ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':';\n const PREPEND_EVENT_LISTENER = 'prependListener';\n const PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':';\n const invokeTask = function (task, target, event) {\n // for better performance, check isRemoved which is set\n // by removeEventListener\n if (task.isRemoved) {\n return;\n }\n const delegate = task.callback;\n if (typeof delegate === 'object' && delegate.handleEvent) {\n // create the bind version of handleEvent when invoke\n task.callback = (event) => delegate.handleEvent(event);\n task.originalDelegate = delegate;\n }\n // invoke static task.invoke\n // need to try/catch error here, otherwise, the error in one event listener\n // will break the executions of the other event listeners. Also error will\n // not remove the event listener when `once` options is true.\n let error;\n try {\n task.invoke(task, target, [event]);\n }\n catch (err) {\n error = err;\n }\n const options = task.options;\n if (options && typeof options === 'object' && options.once) {\n // if options.once is true, after invoke once remove listener here\n // only browser need to do this, nodejs eventEmitter will cal removeListener\n // inside EventEmitter.once\n const delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate, options);\n }\n return error;\n };\n function globalCallback(context, event, isCapture) {\n // https://github.com/angular/zone.js/issues/911, in IE, sometimes\n // event will be undefined, so we need to use window.event\n event = event || _global.event;\n if (!event) {\n return;\n }\n // event.target is needed for Samsung TV and SourceBuffer\n // || global is needed https://github.com/angular/zone.js/issues/190\n const target = context || event.target || _global;\n const tasks = target[zoneSymbolEventNames[event.type][isCapture ? TRUE_STR : FALSE_STR]];\n if (tasks) {\n const errors = [];\n // invoke all tasks which attached to current target with given event.type and capture = false\n // for performance concern, if task.length === 1, just invoke\n if (tasks.length === 1) {\n const err = invokeTask(tasks[0], target, event);\n err && errors.push(err);\n }\n else {\n // https://github.com/angular/zone.js/issues/836\n // copy the tasks array before invoke, to avoid\n // the callback will remove itself or other listener\n const copyTasks = tasks.slice();\n for (let i = 0; i < copyTasks.length; i++) {\n if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) {\n break;\n }\n const err = invokeTask(copyTasks[i], target, event);\n err && errors.push(err);\n }\n }\n // Since there is only one error, we don't need to schedule microTask\n // to throw the error.\n if (errors.length === 1) {\n throw errors[0];\n }\n else {\n for (let i = 0; i < errors.length; i++) {\n const err = errors[i];\n api.nativeScheduleMicroTask(() => {\n throw err;\n });\n }\n }\n }\n }\n // global shared zoneAwareCallback to handle all event callback with capture = false\n const globalZoneAwareCallback = function (event) {\n return globalCallback(this, event, false);\n };\n // global shared zoneAwareCallback to handle all event callback with capture = true\n const globalZoneAwareCaptureCallback = function (event) {\n return globalCallback(this, event, true);\n };\n function patchEventTargetMethods(obj, patchOptions) {\n if (!obj) {\n return false;\n }\n let useGlobalCallback = true;\n if (patchOptions && patchOptions.useG !== undefined) {\n useGlobalCallback = patchOptions.useG;\n }\n const validateHandler = patchOptions && patchOptions.vh;\n let checkDuplicate = true;\n if (patchOptions && patchOptions.chkDup !== undefined) {\n checkDuplicate = patchOptions.chkDup;\n }\n let returnTarget = false;\n if (patchOptions && patchOptions.rt !== undefined) {\n returnTarget = patchOptions.rt;\n }\n let proto = obj;\n while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) {\n proto = ObjectGetPrototypeOf(proto);\n }\n if (!proto && obj[ADD_EVENT_LISTENER]) {\n // somehow we did not find it, but we can see it. This happens on IE for Window properties.\n proto = obj;\n }\n if (!proto) {\n return false;\n }\n if (proto[zoneSymbolAddEventListener]) {\n return false;\n }\n const eventNameToString = patchOptions && patchOptions.eventNameToString;\n // We use a shared global `taskData` to pass data for `scheduleEventTask`,\n // eliminating the need to create a new object solely for passing data.\n // WARNING: This object has a static lifetime, meaning it is not created\n // each time `addEventListener` is called. It is instantiated only once\n // and captured by reference inside the `addEventListener` and\n // `removeEventListener` functions. Do not add any new properties to this\n // object, as doing so would necessitate maintaining the information\n // between `addEventListener` calls.\n const taskData = {};\n const nativeAddEventListener = (proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]);\n const nativeRemoveEventListener = (proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =\n proto[REMOVE_EVENT_LISTENER]);\n const nativeListeners = (proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =\n proto[LISTENERS_EVENT_LISTENER]);\n const nativeRemoveAllListeners = (proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]);\n let nativePrependEventListener;\n if (patchOptions && patchOptions.prepend) {\n nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] =\n proto[patchOptions.prepend];\n }\n /**\n * This util function will build an option object with passive option\n * to handle all possible input from the user.\n */\n function buildEventListenerOptions(options, passive) {\n if (!passiveSupported && typeof options === 'object' && options) {\n // doesn't support passive but user want to pass an object as options.\n // this will not work on some old browser, so we just pass a boolean\n // as useCapture parameter\n return !!options.capture;\n }\n if (!passiveSupported || !passive) {\n return options;\n }\n if (typeof options === 'boolean') {\n return { capture: options, passive: true };\n }\n if (!options) {\n return { passive: true };\n }\n if (typeof options === 'object' && options.passive !== false) {\n return { ...options, passive: true };\n }\n return options;\n }\n const customScheduleGlobal = function (task) {\n // if there is already a task for the eventName + capture,\n // just return, because we use the shared globalZoneAwareCallback here.\n if (taskData.isExisting) {\n return;\n }\n return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options);\n };\n /**\n * In the context of events and listeners, this function will be\n * called at the end by `cancelTask`, which, in turn, calls `task.cancelFn`.\n * Cancelling a task is primarily used to remove event listeners from\n * the task target.\n */\n const customCancelGlobal = function (task) {\n // if task is not marked as isRemoved, this call is directly\n // from Zone.prototype.cancelTask, we should remove the task\n // from tasksList of target first\n if (!task.isRemoved) {\n const symbolEventNames = zoneSymbolEventNames[task.eventName];\n let symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR];\n }\n const existingTasks = symbolEventName && task.target[symbolEventName];\n if (existingTasks) {\n for (let i = 0; i < existingTasks.length; i++) {\n const existingTask = existingTasks[i];\n if (existingTask === task) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n task.isRemoved = true;\n if (task.removeAbortListener) {\n task.removeAbortListener();\n task.removeAbortListener = null;\n }\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n task.allRemoved = true;\n task.target[symbolEventName] = null;\n }\n break;\n }\n }\n }\n }\n // if all tasks for the eventName + capture have gone,\n // we will really remove the global event callback,\n // if not, return\n if (!task.allRemoved) {\n return;\n }\n return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options);\n };\n const customScheduleNonGlobal = function (task) {\n return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n const customSchedulePrepend = function (task) {\n return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options);\n };\n const customCancelNonGlobal = function (task) {\n return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options);\n };\n const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal;\n const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal;\n const compareTaskCallbackVsDelegate = function (task, delegate) {\n const typeOfDelegate = typeof delegate;\n return ((typeOfDelegate === 'function' && task.callback === delegate) ||\n (typeOfDelegate === 'object' && task.originalDelegate === delegate));\n };\n const compare = patchOptions && patchOptions.diff ? patchOptions.diff : compareTaskCallbackVsDelegate;\n const unpatchedEvents = Zone[zoneSymbol('UNPATCHED_EVENTS')];\n const passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')];\n function copyEventListenerOptions(options) {\n if (typeof options === 'object' && options !== null) {\n // We need to destructure the target `options` object since it may\n // be frozen or sealed (possibly provided implicitly by a third-party\n // library), or its properties may be readonly.\n const newOptions = { ...options };\n // The `signal` option was recently introduced, which caused regressions in\n // third-party scenarios where `AbortController` was directly provided to\n // `addEventListener` as options. For instance, in cases like\n // `document.addEventListener('keydown', callback, abortControllerInstance)`,\n // which is valid because `AbortController` includes a `signal` getter, spreading\n // `{...options}` wouldn't copy the `signal`. Additionally, using `Object.create`\n // isn't feasible since `AbortController` is a built-in object type, and attempting\n // to create a new object directly with it as the prototype might result in\n // unexpected behavior.\n if (options.signal) {\n newOptions.signal = options.signal;\n }\n return newOptions;\n }\n return options;\n }\n const makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget = false, prepend = false) {\n return function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n let delegate = arguments[1];\n if (!delegate) {\n return nativeListener.apply(this, arguments);\n }\n if (isNode && eventName === 'uncaughtException') {\n // don't patch uncaughtException of nodejs to prevent endless loop\n return nativeListener.apply(this, arguments);\n }\n // don't create the bind delegate function for handleEvent\n // case here to improve addEventListener performance\n // we will create the bind delegate when invoke\n let isHandleEvent = false;\n if (typeof delegate !== 'function') {\n if (!delegate.handleEvent) {\n return nativeListener.apply(this, arguments);\n }\n isHandleEvent = true;\n }\n if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) {\n return;\n }\n const passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1;\n const options = copyEventListenerOptions(buildEventListenerOptions(arguments[2], passive));\n const signal = options?.signal;\n if (signal?.aborted) {\n // the signal is an aborted one, just return without attaching the event listener.\n return;\n }\n if (unpatchedEvents) {\n // check unpatched list\n for (let i = 0; i < unpatchedEvents.length; i++) {\n if (eventName === unpatchedEvents[i]) {\n if (passive) {\n return nativeListener.call(target, eventName, delegate, options);\n }\n else {\n return nativeListener.apply(this, arguments);\n }\n }\n }\n }\n const capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n const once = options && typeof options === 'object' ? options.once : false;\n const zone = Zone.current;\n let symbolEventNames = zoneSymbolEventNames[eventName];\n if (!symbolEventNames) {\n prepareEventNames(eventName, eventNameToString);\n symbolEventNames = zoneSymbolEventNames[eventName];\n }\n const symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n let existingTasks = target[symbolEventName];\n let isExisting = false;\n if (existingTasks) {\n // already have task registered\n isExisting = true;\n if (checkDuplicate) {\n for (let i = 0; i < existingTasks.length; i++) {\n if (compare(existingTasks[i], delegate)) {\n // same callback, same capture, same event name, just return\n return;\n }\n }\n }\n }\n else {\n existingTasks = target[symbolEventName] = [];\n }\n let source;\n const constructorName = target.constructor['name'];\n const targetSource = globalSources[constructorName];\n if (targetSource) {\n source = targetSource[eventName];\n }\n if (!source) {\n source =\n constructorName +\n addSource +\n (eventNameToString ? eventNameToString(eventName) : eventName);\n }\n // In the code below, `options` should no longer be reassigned; instead, it\n // should only be mutated. This is because we pass that object to the native\n // `addEventListener`.\n // It's generally recommended to use the same object reference for options.\n // This ensures consistency and avoids potential issues.\n taskData.options = options;\n if (once) {\n // When using `addEventListener` with the `once` option, we don't pass\n // the `once` option directly to the native `addEventListener` method.\n // Instead, we keep the `once` setting and handle it ourselves.\n taskData.options.once = false;\n }\n taskData.target = target;\n taskData.capture = capture;\n taskData.eventName = eventName;\n taskData.isExisting = isExisting;\n const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined;\n // keep taskData into data to allow onScheduleEventTask to access the task information\n if (data) {\n data.taskData = taskData;\n }\n if (signal) {\n // When using `addEventListener` with the `signal` option, we don't pass\n // the `signal` option directly to the native `addEventListener` method.\n // Instead, we keep the `signal` setting and handle it ourselves.\n taskData.options.signal = undefined;\n }\n // The `scheduleEventTask` function will ultimately call `customScheduleGlobal`,\n // which in turn calls the native `addEventListener`. This is why `taskData.options`\n // is updated before scheduling the task, as `customScheduleGlobal` uses\n // `taskData.options` to pass it to the native `addEventListener`.\n const task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn);\n if (signal) {\n // after task is scheduled, we need to store the signal back to task.options\n taskData.options.signal = signal;\n // Wrapping `task` in a weak reference would not prevent memory leaks. Weak references are\n // primarily used for preventing strong references cycles. `onAbort` is always reachable\n // as it's an event listener, so its closure retains a strong reference to the `task`.\n const onAbort = () => task.zone.cancelTask(task);\n nativeListener.call(signal, 'abort', onAbort, { once: true });\n // We need to remove the `abort` listener when the event listener is going to be removed,\n // as it creates a closure that captures `task`. This closure retains a reference to the\n // `task` object even after it goes out of scope, preventing `task` from being garbage\n // collected.\n task.removeAbortListener = () => signal.removeEventListener('abort', onAbort);\n }\n // should clear taskData.target to avoid memory leak\n // issue, https://github.com/angular/angular/issues/20442\n taskData.target = null;\n // need to clear up taskData because it is a global object\n if (data) {\n data.taskData = null;\n }\n // have to save those information to task in case\n // application may call task.zone.cancelTask() directly\n if (once) {\n taskData.options.once = true;\n }\n if (!(!passiveSupported && typeof task.options === 'boolean')) {\n // if not support passive, and we pass an option object\n // to addEventListener, we should save the options to task\n task.options = options;\n }\n task.target = target;\n task.capture = capture;\n task.eventName = eventName;\n if (isHandleEvent) {\n // save original delegate for compare to check duplicate\n task.originalDelegate = delegate;\n }\n if (!prepend) {\n existingTasks.push(task);\n }\n else {\n existingTasks.unshift(task);\n }\n if (returnTarget) {\n return target;\n }\n };\n };\n proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget);\n if (nativePrependEventListener) {\n proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true);\n }\n proto[REMOVE_EVENT_LISTENER] = function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n const options = arguments[2];\n const capture = !options ? false : typeof options === 'boolean' ? true : options.capture;\n const delegate = arguments[1];\n if (!delegate) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (validateHandler &&\n !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) {\n return;\n }\n const symbolEventNames = zoneSymbolEventNames[eventName];\n let symbolEventName;\n if (symbolEventNames) {\n symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR];\n }\n const existingTasks = symbolEventName && target[symbolEventName];\n // `existingTasks` may not exist if the `addEventListener` was called before\n // it was patched by zone.js. Please refer to the attached issue for\n // clarification, particularly after the `if` condition, before calling\n // the native `removeEventListener`.\n if (existingTasks) {\n for (let i = 0; i < existingTasks.length; i++) {\n const existingTask = existingTasks[i];\n if (compare(existingTask, delegate)) {\n existingTasks.splice(i, 1);\n // set isRemoved to data for faster invokeTask check\n existingTask.isRemoved = true;\n if (existingTasks.length === 0) {\n // all tasks for the eventName + capture have gone,\n // remove globalZoneAwareCallback and remove the task cache from target\n existingTask.allRemoved = true;\n target[symbolEventName] = null;\n // in the target, we have an event listener which is added by on_property\n // such as target.onclick = function() {}, so we need to clear this internal\n // property too if all delegates with capture=false were removed\n // https:// github.com/angular/angular/issues/31643\n // https://github.com/angular/angular/issues/54581\n if (!capture && typeof eventName === 'string') {\n const onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName;\n target[onPropertySymbol] = null;\n }\n }\n // In all other conditions, when `addEventListener` is called after being\n // patched by zone.js, we would always find an event task on the `EventTarget`.\n // This will trigger `cancelFn` on the `existingTask`, leading to `customCancelGlobal`,\n // which ultimately removes an event listener and cleans up the abort listener\n // (if an `AbortSignal` was provided when scheduling a task).\n existingTask.zone.cancelTask(existingTask);\n if (returnTarget) {\n return target;\n }\n return;\n }\n }\n }\n // https://github.com/angular/zone.js/issues/930\n // We may encounter a situation where the `addEventListener` was\n // called on the event target before zone.js is loaded, resulting\n // in no task being stored on the event target due to its invocation\n // of the native implementation. In this scenario, we simply need to\n // invoke the native `removeEventListener`.\n return nativeRemoveEventListener.apply(this, arguments);\n };\n proto[LISTENERS_EVENT_LISTENER] = function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n const listeners = [];\n const tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName);\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n let delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n listeners.push(delegate);\n }\n return listeners;\n };\n proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () {\n const target = this || _global;\n let eventName = arguments[0];\n if (!eventName) {\n const keys = Object.keys(target);\n for (let i = 0; i < keys.length; i++) {\n const prop = keys[i];\n const match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n let evtName = match && match[1];\n // in nodejs EventEmitter, removeListener event is\n // used for monitoring the removeListener call,\n // so just keep removeListener eventListener until\n // all other eventListeners are removed\n if (evtName && evtName !== 'removeListener') {\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName);\n }\n }\n // remove removeListener listener finally\n this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener');\n }\n else {\n if (patchOptions && patchOptions.transferEventName) {\n eventName = patchOptions.transferEventName(eventName);\n }\n const symbolEventNames = zoneSymbolEventNames[eventName];\n if (symbolEventNames) {\n const symbolEventName = symbolEventNames[FALSE_STR];\n const symbolCaptureEventName = symbolEventNames[TRUE_STR];\n const tasks = target[symbolEventName];\n const captureTasks = target[symbolCaptureEventName];\n if (tasks) {\n const removeTasks = tasks.slice();\n for (let i = 0; i < removeTasks.length; i++) {\n const task = removeTasks[i];\n let delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n if (captureTasks) {\n const removeTasks = captureTasks.slice();\n for (let i = 0; i < removeTasks.length; i++) {\n const task = removeTasks[i];\n let delegate = task.originalDelegate ? task.originalDelegate : task.callback;\n this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options);\n }\n }\n }\n }\n if (returnTarget) {\n return this;\n }\n };\n // for native toString patch\n attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener);\n attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener);\n if (nativeRemoveAllListeners) {\n attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners);\n }\n if (nativeListeners) {\n attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners);\n }\n return true;\n }\n let results = [];\n for (let i = 0; i < apis.length; i++) {\n results[i] = patchEventTargetMethods(apis[i], patchOptions);\n }\n return results;\n}\nfunction findEventTasks(target, eventName) {\n if (!eventName) {\n const foundTasks = [];\n for (let prop in target) {\n const match = EVENT_NAME_SYMBOL_REGX.exec(prop);\n let evtName = match && match[1];\n if (evtName && (!eventName || evtName === eventName)) {\n const tasks = target[prop];\n if (tasks) {\n for (let i = 0; i < tasks.length; i++) {\n foundTasks.push(tasks[i]);\n }\n }\n }\n }\n return foundTasks;\n }\n let symbolEventName = zoneSymbolEventNames[eventName];\n if (!symbolEventName) {\n prepareEventNames(eventName);\n symbolEventName = zoneSymbolEventNames[eventName];\n }\n const captureFalseTasks = target[symbolEventName[FALSE_STR]];\n const captureTrueTasks = target[symbolEventName[TRUE_STR]];\n if (!captureFalseTasks) {\n return captureTrueTasks ? captureTrueTasks.slice() : [];\n }\n else {\n return captureTrueTasks\n ? captureFalseTasks.concat(captureTrueTasks)\n : captureFalseTasks.slice();\n }\n}\nfunction patchEventPrototype(global, api) {\n const Event = global['Event'];\n if (Event && Event.prototype) {\n api.patchMethod(Event.prototype, 'stopImmediatePropagation', (delegate) => function (self, args) {\n self[IMMEDIATE_PROPAGATION_SYMBOL] = true;\n // we need to call the native stopImmediatePropagation\n // in case in some hybrid application, some part of\n // application will be controlled by zone, some are not\n delegate && delegate.apply(self, args);\n });\n }\n}\n\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nfunction patchQueueMicrotask(global, api) {\n api.patchMethod(global, 'queueMicrotask', (delegate) => {\n return function (self, args) {\n Zone.current.scheduleMicroTask('queueMicrotask', args[0]);\n };\n });\n}\n\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nconst taskSymbol = zoneSymbol('zoneTask');\nfunction patchTimer(window, setName, cancelName, nameSuffix) {\n let setNative = null;\n let clearNative = null;\n setName += nameSuffix;\n cancelName += nameSuffix;\n const tasksByHandleId = {};\n function scheduleTask(task) {\n const data = task.data;\n data.args[0] = function () {\n return task.invoke.apply(this, arguments);\n };\n const handleOrId = setNative.apply(window, data.args);\n // Whlist on Node.js when get can the ID by using `[Symbol.toPrimitive]()` we do\n // to this so that we do not cause potentally leaks when using `setTimeout`\n // since this can be periodic when using `.refresh`.\n if (isNumber(handleOrId)) {\n data.handleId = handleOrId;\n }\n else {\n data.handle = handleOrId;\n // On Node.js a timeout and interval can be restarted over and over again by using the `.refresh` method.\n data.isRefreshable = isFunction(handleOrId.refresh);\n }\n return task;\n }\n function clearTask(task) {\n const { handle, handleId } = task.data;\n return clearNative.call(window, handle ?? handleId);\n }\n setNative = patchMethod(window, setName, (delegate) => function (self, args) {\n if (isFunction(args[0])) {\n const options = {\n isRefreshable: false,\n isPeriodic: nameSuffix === 'Interval',\n delay: nameSuffix === 'Timeout' || nameSuffix === 'Interval' ? args[1] || 0 : undefined,\n args: args,\n };\n const callback = args[0];\n args[0] = function timer() {\n try {\n return callback.apply(this, arguments);\n }\n finally {\n // issue-934, task will be cancelled\n // even it is a periodic task such as\n // setInterval\n // https://github.com/angular/angular/issues/40387\n // Cleanup tasksByHandleId should be handled before scheduleTask\n // Since some zoneSpec may intercept and doesn't trigger\n // scheduleFn(scheduleTask) provided here.\n const { handle, handleId, isPeriodic, isRefreshable } = options;\n if (!isPeriodic && !isRefreshable) {\n if (handleId) {\n // in non-nodejs env, we remove timerId\n // from local cache\n delete tasksByHandleId[handleId];\n }\n else if (handle) {\n // Node returns complex objects as handleIds\n // we remove task reference from timer object\n handle[taskSymbol] = null;\n }\n }\n }\n };\n const task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask);\n if (!task) {\n return task;\n }\n // Node.js must additionally support the ref and unref functions.\n const { handleId, handle, isRefreshable, isPeriodic } = task.data;\n if (handleId) {\n // for non nodejs env, we save handleId: task\n // mapping in local cache for clearTimeout\n tasksByHandleId[handleId] = task;\n }\n else if (handle) {\n // for nodejs env, we save task\n // reference in timerId Object for clearTimeout\n handle[taskSymbol] = task;\n if (isRefreshable && !isPeriodic) {\n const originalRefresh = handle.refresh;\n handle.refresh = function () {\n const { zone, state } = task;\n if (state === 'notScheduled') {\n task._state = 'scheduled';\n zone._updateTaskCount(task, 1);\n }\n else if (state === 'running') {\n task._state = 'scheduling';\n }\n return originalRefresh.call(this);\n };\n }\n }\n return handle ?? handleId ?? task;\n }\n else {\n // cause an error by calling it directly.\n return delegate.apply(window, args);\n }\n });\n clearNative = patchMethod(window, cancelName, (delegate) => function (self, args) {\n const id = args[0];\n let task;\n if (isNumber(id)) {\n // non nodejs env.\n task = tasksByHandleId[id];\n delete tasksByHandleId[id];\n }\n else {\n // nodejs env ?? other environments.\n task = id?.[taskSymbol];\n if (task) {\n id[taskSymbol] = null;\n }\n else {\n task = id;\n }\n }\n if (task?.type) {\n if (task.cancelFn) {\n // Do not cancel already canceled functions\n task.zone.cancelTask(task);\n }\n }\n else {\n // cause an error by calling it directly.\n delegate.apply(window, args);\n }\n });\n}\n\nfunction patchCustomElements(_global, api) {\n const { isBrowser, isMix } = api.getGlobalObjects();\n if ((!isBrowser && !isMix) || !_global['customElements'] || !('customElements' in _global)) {\n return;\n }\n // https://html.spec.whatwg.org/multipage/custom-elements.html#concept-custom-element-definition-lifecycle-callbacks\n const callbacks = [\n 'connectedCallback',\n 'disconnectedCallback',\n 'adoptedCallback',\n 'attributeChangedCallback',\n 'formAssociatedCallback',\n 'formDisabledCallback',\n 'formResetCallback',\n 'formStateRestoreCallback',\n ];\n api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks);\n}\n\nfunction eventTargetPatch(_global, api) {\n if (Zone[api.symbol('patchEventTarget')]) {\n // EventTarget is already patched.\n return;\n }\n const { eventNames, zoneSymbolEventNames, TRUE_STR, FALSE_STR, ZONE_SYMBOL_PREFIX } = api.getGlobalObjects();\n // predefine all __zone_symbol__ + eventName + true/false string\n for (let i = 0; i < eventNames.length; i++) {\n const eventName = eventNames[i];\n const falseEventName = eventName + FALSE_STR;\n const trueEventName = eventName + TRUE_STR;\n const symbol = ZONE_SYMBOL_PREFIX + falseEventName;\n const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName;\n zoneSymbolEventNames[eventName] = {};\n zoneSymbolEventNames[eventName][FALSE_STR] = symbol;\n zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture;\n }\n const EVENT_TARGET = _global['EventTarget'];\n if (!EVENT_TARGET || !EVENT_TARGET.prototype) {\n return;\n }\n api.patchEventTarget(_global, api, [EVENT_TARGET && EVENT_TARGET.prototype]);\n return true;\n}\nfunction patchEvent(global, api) {\n api.patchEventPrototype(global, api);\n}\n\n/**\n * @fileoverview\n * @suppress {globalThis}\n */\nfunction filterProperties(target, onProperties, ignoreProperties) {\n if (!ignoreProperties || ignoreProperties.length === 0) {\n return onProperties;\n }\n const tip = ignoreProperties.filter((ip) => ip.target === target);\n if (!tip || tip.length === 0) {\n return onProperties;\n }\n const targetIgnoreProperties = tip[0].ignoreProperties;\n return onProperties.filter((op) => targetIgnoreProperties.indexOf(op) === -1);\n}\nfunction patchFilteredProperties(target, onProperties, ignoreProperties, prototype) {\n // check whether target is available, sometimes target will be undefined\n // because different browser or some 3rd party plugin.\n if (!target) {\n return;\n }\n const filteredProperties = filterProperties(target, onProperties, ignoreProperties);\n patchOnProperties(target, filteredProperties, prototype);\n}\n/**\n * Get all event name properties which the event name startsWith `on`\n * from the target object itself, inherited properties are not considered.\n */\nfunction getOnEventNames(target) {\n return Object.getOwnPropertyNames(target)\n .filter((name) => name.startsWith('on') && name.length > 2)\n .map((name) => name.substring(2));\n}\nfunction propertyDescriptorPatch(api, _global) {\n if (isNode && !isMix) {\n return;\n }\n if (Zone[api.symbol('patchEvents')]) {\n // events are already been patched by legacy patch.\n return;\n }\n const ignoreProperties = _global['__Zone_ignore_on_properties'];\n // for browsers that we can patch the descriptor: Chrome & Firefox\n let patchTargets = [];\n if (isBrowser) {\n const internalWindow = window;\n patchTargets = patchTargets.concat([\n 'Document',\n 'SVGElement',\n 'Element',\n 'HTMLElement',\n 'HTMLBodyElement',\n 'HTMLMediaElement',\n 'HTMLFrameSetElement',\n 'HTMLFrameElement',\n 'HTMLIFrameElement',\n 'HTMLMarqueeElement',\n 'Worker',\n ]);\n const ignoreErrorProperties = isIE()\n ? [{ target: internalWindow, ignoreProperties: ['error'] }]\n : [];\n // in IE/Edge, onProp not exist in window object, but in WindowPrototype\n // so we need to pass WindowPrototype to check onProp exist or not\n patchFilteredProperties(internalWindow, getOnEventNames(internalWindow), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow));\n }\n patchTargets = patchTargets.concat([\n 'XMLHttpRequest',\n 'XMLHttpRequestEventTarget',\n 'IDBIndex',\n 'IDBRequest',\n 'IDBOpenDBRequest',\n 'IDBDatabase',\n 'IDBTransaction',\n 'IDBCursor',\n 'WebSocket',\n ]);\n for (let i = 0; i < patchTargets.length; i++) {\n const target = _global[patchTargets[i]];\n target &&\n target.prototype &&\n patchFilteredProperties(target.prototype, getOnEventNames(target.prototype), ignoreProperties);\n }\n}\n\n/**\n * @fileoverview\n * @suppress {missingRequire}\n */\nfunction patchBrowser(Zone) {\n Zone.__load_patch('legacy', (global) => {\n const legacyPatch = global[Zone.__symbol__('legacyPatch')];\n if (legacyPatch) {\n legacyPatch();\n }\n });\n Zone.__load_patch('timers', (global) => {\n const set = 'set';\n const clear = 'clear';\n patchTimer(global, set, clear, 'Timeout');\n patchTimer(global, set, clear, 'Interval');\n patchTimer(global, set, clear, 'Immediate');\n });\n Zone.__load_patch('requestAnimationFrame', (global) => {\n patchTimer(global, 'request', 'cancel', 'AnimationFrame');\n patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame');\n patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame');\n });\n Zone.__load_patch('blocking', (global, Zone) => {\n const blockingMethods = ['alert', 'prompt', 'confirm'];\n for (let i = 0; i < blockingMethods.length; i++) {\n const name = blockingMethods[i];\n patchMethod(global, name, (delegate, symbol, name) => {\n return function (s, args) {\n return Zone.current.run(delegate, global, args, name);\n };\n });\n }\n });\n Zone.__load_patch('EventTarget', (global, Zone, api) => {\n patchEvent(global, api);\n eventTargetPatch(global, api);\n // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener\n const XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) {\n api.patchEventTarget(global, api, [XMLHttpRequestEventTarget.prototype]);\n }\n });\n Zone.__load_patch('MutationObserver', (global, Zone, api) => {\n patchClass('MutationObserver');\n patchClass('WebKitMutationObserver');\n });\n Zone.__load_patch('IntersectionObserver', (global, Zone, api) => {\n patchClass('IntersectionObserver');\n });\n Zone.__load_patch('FileReader', (global, Zone, api) => {\n patchClass('FileReader');\n });\n Zone.__load_patch('on_property', (global, Zone, api) => {\n propertyDescriptorPatch(api, global);\n });\n Zone.__load_patch('customElements', (global, Zone, api) => {\n patchCustomElements(global, api);\n });\n Zone.__load_patch('XHR', (global, Zone) => {\n // Treat XMLHttpRequest as a macrotask.\n patchXHR(global);\n const XHR_TASK = zoneSymbol('xhrTask');\n const XHR_SYNC = zoneSymbol('xhrSync');\n const XHR_LISTENER = zoneSymbol('xhrListener');\n const XHR_SCHEDULED = zoneSymbol('xhrScheduled');\n const XHR_URL = zoneSymbol('xhrURL');\n const XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled');\n function patchXHR(window) {\n const XMLHttpRequest = window['XMLHttpRequest'];\n if (!XMLHttpRequest) {\n // XMLHttpRequest is not available in service worker\n return;\n }\n const XMLHttpRequestPrototype = XMLHttpRequest.prototype;\n function findPendingTask(target) {\n return target[XHR_TASK];\n }\n let oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n let oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n if (!oriAddListener) {\n const XMLHttpRequestEventTarget = window['XMLHttpRequestEventTarget'];\n if (XMLHttpRequestEventTarget) {\n const XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget.prototype;\n oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n }\n const READY_STATE_CHANGE = 'readystatechange';\n const SCHEDULED = 'scheduled';\n function scheduleTask(task) {\n const data = task.data;\n const target = data.target;\n target[XHR_SCHEDULED] = false;\n target[XHR_ERROR_BEFORE_SCHEDULED] = false;\n // remove existing event listener\n const listener = target[XHR_LISTENER];\n if (!oriAddListener) {\n oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER];\n oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER];\n }\n if (listener) {\n oriRemoveListener.call(target, READY_STATE_CHANGE, listener);\n }\n const newListener = (target[XHR_LISTENER] = () => {\n if (target.readyState === target.DONE) {\n // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with\n // readyState=4 multiple times, so we need to check task state here\n if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) {\n // check whether the xhr has registered onload listener\n // if that is the case, the task should invoke after all\n // onload listeners finish.\n // Also if the request failed without response (status = 0), the load event handler\n // will not be triggered, in that case, we should also invoke the placeholder callback\n // to close the XMLHttpRequest::send macroTask.\n // https://github.com/angular/angular/issues/38795\n const loadTasks = target[Zone.__symbol__('loadfalse')];\n if (target.status !== 0 && loadTasks && loadTasks.length > 0) {\n const oriInvoke = task.invoke;\n task.invoke = function () {\n // need to load the tasks again, because in other\n // load listener, they may remove themselves\n const loadTasks = target[Zone.__symbol__('loadfalse')];\n for (let i = 0; i < loadTasks.length; i++) {\n if (loadTasks[i] === task) {\n loadTasks.splice(i, 1);\n }\n }\n if (!data.aborted && task.state === SCHEDULED) {\n oriInvoke.call(task);\n }\n };\n loadTasks.push(task);\n }\n else {\n task.invoke();\n }\n }\n else if (!data.aborted && target[XHR_SCHEDULED] === false) {\n // error occurs when xhr.send()\n target[XHR_ERROR_BEFORE_SCHEDULED] = true;\n }\n }\n });\n oriAddListener.call(target, READY_STATE_CHANGE, newListener);\n const storedTask = target[XHR_TASK];\n if (!storedTask) {\n target[XHR_TASK] = task;\n }\n sendNative.apply(target, data.args);\n target[XHR_SCHEDULED] = true;\n return task;\n }\n function placeholderCallback() { }\n function clearTask(task) {\n const data = task.data;\n // Note - ideally, we would call data.target.removeEventListener here, but it's too late\n // to prevent it from firing. So instead, we store info for the event listener.\n data.aborted = true;\n return abortNative.apply(data.target, data.args);\n }\n const openNative = patchMethod(XMLHttpRequestPrototype, 'open', () => function (self, args) {\n self[XHR_SYNC] = args[2] == false;\n self[XHR_URL] = args[1];\n return openNative.apply(self, args);\n });\n const XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send';\n const fetchTaskAborting = zoneSymbol('fetchTaskAborting');\n const fetchTaskScheduling = zoneSymbol('fetchTaskScheduling');\n const sendNative = patchMethod(XMLHttpRequestPrototype, 'send', () => function (self, args) {\n if (Zone.current[fetchTaskScheduling] === true) {\n // a fetch is scheduling, so we are using xhr to polyfill fetch\n // and because we already schedule macroTask for fetch, we should\n // not schedule a macroTask for xhr again\n return sendNative.apply(self, args);\n }\n if (self[XHR_SYNC]) {\n // if the XHR is sync there is no task to schedule, just execute the code.\n return sendNative.apply(self, args);\n }\n else {\n const options = {\n target: self,\n url: self[XHR_URL],\n isPeriodic: false,\n args: args,\n aborted: false,\n };\n const task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask);\n if (self &&\n self[XHR_ERROR_BEFORE_SCHEDULED] === true &&\n !options.aborted &&\n task.state === SCHEDULED) {\n // xhr request throw error when send\n // we should invoke task instead of leaving a scheduled\n // pending macroTask\n task.invoke();\n }\n }\n });\n const abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', () => function (self, args) {\n const task = findPendingTask(self);\n if (task && typeof task.type == 'string') {\n // If the XHR has already completed, do nothing.\n // If the XHR has already been aborted, do nothing.\n // Fix #569, call abort multiple times before done will cause\n // macroTask task count be negative number\n if (task.cancelFn == null || (task.data && task.data.aborted)) {\n return;\n }\n task.zone.cancelTask(task);\n }\n else if (Zone.current[fetchTaskAborting] === true) {\n // the abort is called from fetch polyfill, we need to call native abort of XHR.\n return abortNative.apply(self, args);\n }\n // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no\n // task\n // to cancel. Do nothing.\n });\n }\n });\n Zone.__load_patch('geolocation', (global) => {\n /// GEO_LOCATION\n if (global['navigator'] && global['navigator'].geolocation) {\n patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']);\n }\n });\n Zone.__load_patch('PromiseRejectionEvent', (global, Zone) => {\n // handle unhandled promise rejection\n function findPromiseRejectionHandler(evtName) {\n return function (e) {\n const eventTasks = findEventTasks(global, evtName);\n eventTasks.forEach((eventTask) => {\n // windows has added unhandledrejection event listener\n // trigger the event listener\n const PromiseRejectionEvent = global['PromiseRejectionEvent'];\n if (PromiseRejectionEvent) {\n const evt = new PromiseRejectionEvent(evtName, {\n promise: e.promise,\n reason: e.rejection,\n });\n eventTask.invoke(evt);\n }\n });\n };\n }\n if (global['PromiseRejectionEvent']) {\n Zone[zoneSymbol('unhandledPromiseRejectionHandler')] =\n findPromiseRejectionHandler('unhandledrejection');\n Zone[zoneSymbol('rejectionHandledHandler')] =\n findPromiseRejectionHandler('rejectionhandled');\n }\n });\n Zone.__load_patch('queueMicrotask', (global, Zone, api) => {\n patchQueueMicrotask(global, api);\n });\n}\n\nfunction patchPromise(Zone) {\n Zone.__load_patch('ZoneAwarePromise', (global, Zone, api) => {\n const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n const ObjectDefineProperty = Object.defineProperty;\n function readableObjectToString(obj) {\n if (obj && obj.toString === Object.prototype.toString) {\n const className = obj.constructor && obj.constructor.name;\n return (className ? className : '') + ': ' + JSON.stringify(obj);\n }\n return obj ? obj.toString() : Object.prototype.toString.call(obj);\n }\n const __symbol__ = api.symbol;\n const _uncaughtPromiseErrors = [];\n const isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] !== false;\n const symbolPromise = __symbol__('Promise');\n const symbolThen = __symbol__('then');\n const creationTrace = '__creationTrace__';\n api.onUnhandledError = (e) => {\n if (api.showUncaughtError()) {\n const rejection = e && e.rejection;\n if (rejection) {\n console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined);\n }\n else {\n console.error(e);\n }\n }\n };\n api.microtaskDrainDone = () => {\n while (_uncaughtPromiseErrors.length) {\n const uncaughtPromiseError = _uncaughtPromiseErrors.shift();\n try {\n uncaughtPromiseError.zone.runGuarded(() => {\n if (uncaughtPromiseError.throwOriginal) {\n throw uncaughtPromiseError.rejection;\n }\n throw uncaughtPromiseError;\n });\n }\n catch (error) {\n handleUnhandledRejection(error);\n }\n }\n };\n const UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler');\n function handleUnhandledRejection(e) {\n api.onUnhandledError(e);\n try {\n const handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL];\n if (typeof handler === 'function') {\n handler.call(this, e);\n }\n }\n catch (err) { }\n }\n function isThenable(value) {\n return value && value.then;\n }\n function forwardResolution(value) {\n return value;\n }\n function forwardRejection(rejection) {\n return ZoneAwarePromise.reject(rejection);\n }\n const symbolState = __symbol__('state');\n const symbolValue = __symbol__('value');\n const symbolFinally = __symbol__('finally');\n const symbolParentPromiseValue = __symbol__('parentPromiseValue');\n const symbolParentPromiseState = __symbol__('parentPromiseState');\n const source = 'Promise.then';\n const UNRESOLVED = null;\n const RESOLVED = true;\n const REJECTED = false;\n const REJECTED_NO_CATCH = 0;\n function makeResolver(promise, state) {\n return (v) => {\n try {\n resolvePromise(promise, state, v);\n }\n catch (err) {\n resolvePromise(promise, false, err);\n }\n // Do not return value or you will break the Promise spec.\n };\n }\n const once = function () {\n let wasCalled = false;\n return function wrapper(wrappedFunction) {\n return function () {\n if (wasCalled) {\n return;\n }\n wasCalled = true;\n wrappedFunction.apply(null, arguments);\n };\n };\n };\n const TYPE_ERROR = 'Promise resolved with itself';\n const CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace');\n // Promise Resolution\n function resolvePromise(promise, state, value) {\n const onceWrapper = once();\n if (promise === value) {\n throw new TypeError(TYPE_ERROR);\n }\n if (promise[symbolState] === UNRESOLVED) {\n // should only get value.then once based on promise spec.\n let then = null;\n try {\n if (typeof value === 'object' || typeof value === 'function') {\n then = value && value.then;\n }\n }\n catch (err) {\n onceWrapper(() => {\n resolvePromise(promise, false, err);\n })();\n return promise;\n }\n // if (value instanceof ZoneAwarePromise) {\n if (state !== REJECTED &&\n value instanceof ZoneAwarePromise &&\n value.hasOwnProperty(symbolState) &&\n value.hasOwnProperty(symbolValue) &&\n value[symbolState] !== UNRESOLVED) {\n clearRejectedNoCatch(value);\n resolvePromise(promise, value[symbolState], value[symbolValue]);\n }\n else if (state !== REJECTED && typeof then === 'function') {\n try {\n then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false)));\n }\n catch (err) {\n onceWrapper(() => {\n resolvePromise(promise, false, err);\n })();\n }\n }\n else {\n promise[symbolState] = state;\n const queue = promise[symbolValue];\n promise[symbolValue] = value;\n if (promise[symbolFinally] === symbolFinally) {\n // the promise is generated by Promise.prototype.finally\n if (state === RESOLVED) {\n // the state is resolved, should ignore the value\n // and use parent promise value\n promise[symbolState] = promise[symbolParentPromiseState];\n promise[symbolValue] = promise[symbolParentPromiseValue];\n }\n }\n // record task information in value when error occurs, so we can\n // do some additional work such as render longStackTrace\n if (state === REJECTED && value instanceof Error) {\n // check if longStackTraceZone is here\n const trace = Zone.currentTask &&\n Zone.currentTask.data &&\n Zone.currentTask.data[creationTrace];\n if (trace) {\n // only keep the long stack trace into error when in longStackTraceZone\n ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: trace,\n });\n }\n }\n for (let i = 0; i < queue.length;) {\n scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]);\n }\n if (queue.length == 0 && state == REJECTED) {\n promise[symbolState] = REJECTED_NO_CATCH;\n let uncaughtPromiseError = value;\n try {\n // Here we throws a new Error to print more readable error log\n // and if the value is not an error, zone.js builds an `Error`\n // Object here to attach the stack information.\n throw new Error('Uncaught (in promise): ' +\n readableObjectToString(value) +\n (value && value.stack ? '\\n' + value.stack : ''));\n }\n catch (err) {\n uncaughtPromiseError = err;\n }\n if (isDisableWrappingUncaughtPromiseRejection) {\n // If disable wrapping uncaught promise reject\n // use the value instead of wrapping it.\n uncaughtPromiseError.throwOriginal = true;\n }\n uncaughtPromiseError.rejection = value;\n uncaughtPromiseError.promise = promise;\n uncaughtPromiseError.zone = Zone.current;\n uncaughtPromiseError.task = Zone.currentTask;\n _uncaughtPromiseErrors.push(uncaughtPromiseError);\n api.scheduleMicroTask(); // to make sure that it is running\n }\n }\n }\n // Resolving an already resolved promise is a noop.\n return promise;\n }\n const REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler');\n function clearRejectedNoCatch(promise) {\n if (promise[symbolState] === REJECTED_NO_CATCH) {\n // if the promise is rejected no catch status\n // and queue.length > 0, means there is a error handler\n // here to handle the rejected promise, we should trigger\n // windows.rejectionhandled eventHandler or nodejs rejectionHandled\n // eventHandler\n try {\n const handler = Zone[REJECTION_HANDLED_HANDLER];\n if (handler && typeof handler === 'function') {\n handler.call(this, { rejection: promise[symbolValue], promise: promise });\n }\n }\n catch (err) { }\n promise[symbolState] = REJECTED;\n for (let i = 0; i < _uncaughtPromiseErrors.length; i++) {\n if (promise === _uncaughtPromiseErrors[i].promise) {\n _uncaughtPromiseErrors.splice(i, 1);\n }\n }\n }\n }\n function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) {\n clearRejectedNoCatch(promise);\n const promiseState = promise[symbolState];\n const delegate = promiseState\n ? typeof onFulfilled === 'function'\n ? onFulfilled\n : forwardResolution\n : typeof onRejected === 'function'\n ? onRejected\n : forwardRejection;\n zone.scheduleMicroTask(source, () => {\n try {\n const parentPromiseValue = promise[symbolValue];\n const isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally];\n if (isFinallyPromise) {\n // if the promise is generated from finally call, keep parent promise's state and value\n chainPromise[symbolParentPromiseValue] = parentPromiseValue;\n chainPromise[symbolParentPromiseState] = promiseState;\n }\n // should not pass value to finally callback\n const value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution\n ? []\n : [parentPromiseValue]);\n resolvePromise(chainPromise, true, value);\n }\n catch (error) {\n // if error occurs, should always return this error\n resolvePromise(chainPromise, false, error);\n }\n }, chainPromise);\n }\n const ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }';\n const noop = function () { };\n const AggregateError = global.AggregateError;\n class ZoneAwarePromise {\n static toString() {\n return ZONE_AWARE_PROMISE_TO_STRING;\n }\n static resolve(value) {\n if (value instanceof ZoneAwarePromise) {\n return value;\n }\n return resolvePromise(new this(null), RESOLVED, value);\n }\n static reject(error) {\n return resolvePromise(new this(null), REJECTED, error);\n }\n static withResolvers() {\n const result = {};\n result.promise = new ZoneAwarePromise((res, rej) => {\n result.resolve = res;\n result.reject = rej;\n });\n return result;\n }\n static any(values) {\n if (!values || typeof values[Symbol.iterator] !== 'function') {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n const promises = [];\n let count = 0;\n try {\n for (let v of values) {\n count++;\n promises.push(ZoneAwarePromise.resolve(v));\n }\n }\n catch (err) {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n if (count === 0) {\n return Promise.reject(new AggregateError([], 'All promises were rejected'));\n }\n let finished = false;\n const errors = [];\n return new ZoneAwarePromise((resolve, reject) => {\n for (let i = 0; i < promises.length; i++) {\n promises[i].then((v) => {\n if (finished) {\n return;\n }\n finished = true;\n resolve(v);\n }, (err) => {\n errors.push(err);\n count--;\n if (count === 0) {\n finished = true;\n reject(new AggregateError(errors, 'All promises were rejected'));\n }\n });\n }\n });\n }\n static race(values) {\n let resolve;\n let reject;\n let promise = new this((res, rej) => {\n resolve = res;\n reject = rej;\n });\n function onResolve(value) {\n resolve(value);\n }\n function onReject(error) {\n reject(error);\n }\n for (let value of values) {\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n value.then(onResolve, onReject);\n }\n return promise;\n }\n static all(values) {\n return ZoneAwarePromise.allWithCallback(values);\n }\n static allSettled(values) {\n const P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise;\n return P.allWithCallback(values, {\n thenCallback: (value) => ({ status: 'fulfilled', value }),\n errorCallback: (err) => ({ status: 'rejected', reason: err }),\n });\n }\n static allWithCallback(values, callback) {\n let resolve;\n let reject;\n let promise = new this((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // Start at 2 to prevent prematurely resolving if .then is called immediately.\n let unresolvedCount = 2;\n let valueIndex = 0;\n const resolvedValues = [];\n for (let value of values) {\n if (!isThenable(value)) {\n value = this.resolve(value);\n }\n const curValueIndex = valueIndex;\n try {\n value.then((value) => {\n resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value;\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }, (err) => {\n if (!callback) {\n reject(err);\n }\n else {\n resolvedValues[curValueIndex] = callback.errorCallback(err);\n unresolvedCount--;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n }\n });\n }\n catch (thenErr) {\n reject(thenErr);\n }\n unresolvedCount++;\n valueIndex++;\n }\n // Make the unresolvedCount zero-based again.\n unresolvedCount -= 2;\n if (unresolvedCount === 0) {\n resolve(resolvedValues);\n }\n return promise;\n }\n constructor(executor) {\n const promise = this;\n if (!(promise instanceof ZoneAwarePromise)) {\n throw new Error('Must be an instanceof Promise.');\n }\n promise[symbolState] = UNRESOLVED;\n promise[symbolValue] = []; // queue;\n try {\n const onceWrapper = once();\n executor &&\n executor(onceWrapper(makeResolver(promise, RESOLVED)), onceWrapper(makeResolver(promise, REJECTED)));\n }\n catch (error) {\n resolvePromise(promise, false, error);\n }\n }\n get [Symbol.toStringTag]() {\n return 'Promise';\n }\n get [Symbol.species]() {\n return ZoneAwarePromise;\n }\n then(onFulfilled, onRejected) {\n // We must read `Symbol.species` safely because `this` may be anything. For instance, `this`\n // may be an object without a prototype (created through `Object.create(null)`); thus\n // `this.constructor` will be undefined. One of the use cases is SystemJS creating\n // prototype-less objects (modules) via `Object.create(null)`. The SystemJS creates an empty\n // object and copies promise properties into that object (within the `getOrCreateLoad`\n // function). The zone.js then checks if the resolved value has the `then` method and\n // invokes it with the `value` context. Otherwise, this will throw an error: `TypeError:\n // Cannot read properties of undefined (reading 'Symbol(Symbol.species)')`.\n let C = this.constructor?.[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = this.constructor || ZoneAwarePromise;\n }\n const chainPromise = new C(noop);\n const zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected);\n }\n return chainPromise;\n }\n catch(onRejected) {\n return this.then(null, onRejected);\n }\n finally(onFinally) {\n // See comment on the call to `then` about why thee `Symbol.species` is safely accessed.\n let C = this.constructor?.[Symbol.species];\n if (!C || typeof C !== 'function') {\n C = ZoneAwarePromise;\n }\n const chainPromise = new C(noop);\n chainPromise[symbolFinally] = symbolFinally;\n const zone = Zone.current;\n if (this[symbolState] == UNRESOLVED) {\n this[symbolValue].push(zone, chainPromise, onFinally, onFinally);\n }\n else {\n scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally);\n }\n return chainPromise;\n }\n }\n // Protect against aggressive optimizers dropping seemingly unused properties.\n // E.g. Closure Compiler in advanced mode.\n ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve;\n ZoneAwarePromise['reject'] = ZoneAwarePromise.reject;\n ZoneAwarePromise['race'] = ZoneAwarePromise.race;\n ZoneAwarePromise['all'] = ZoneAwarePromise.all;\n const NativePromise = (global[symbolPromise] = global['Promise']);\n global['Promise'] = ZoneAwarePromise;\n const symbolThenPatched = __symbol__('thenPatched');\n function patchThen(Ctor) {\n const proto = Ctor.prototype;\n const prop = ObjectGetOwnPropertyDescriptor(proto, 'then');\n if (prop && (prop.writable === false || !prop.configurable)) {\n // check Ctor.prototype.then propertyDescriptor is writable or not\n // in meteor env, writable is false, we should ignore such case\n return;\n }\n const originalThen = proto.then;\n // Keep a reference to the original method.\n proto[symbolThen] = originalThen;\n Ctor.prototype.then = function (onResolve, onReject) {\n const wrapped = new ZoneAwarePromise((resolve, reject) => {\n originalThen.call(this, resolve, reject);\n });\n return wrapped.then(onResolve, onReject);\n };\n Ctor[symbolThenPatched] = true;\n }\n api.patchThen = patchThen;\n function zoneify(fn) {\n return function (self, args) {\n let resultPromise = fn.apply(self, args);\n if (resultPromise instanceof ZoneAwarePromise) {\n return resultPromise;\n }\n let ctor = resultPromise.constructor;\n if (!ctor[symbolThenPatched]) {\n patchThen(ctor);\n }\n return resultPromise;\n };\n }\n if (NativePromise) {\n patchThen(NativePromise);\n patchMethod(global, 'fetch', (delegate) => zoneify(delegate));\n }\n // This is not part of public API, but it is useful for tests, so we expose it.\n Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors;\n return ZoneAwarePromise;\n });\n}\n\nfunction patchToString(Zone) {\n // override Function.prototype.toString to make zone.js patched function\n // look like native function\n Zone.__load_patch('toString', (global) => {\n // patch Func.prototype.toString to let them look like native\n const originalFunctionToString = Function.prototype.toString;\n const ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate');\n const PROMISE_SYMBOL = zoneSymbol('Promise');\n const ERROR_SYMBOL = zoneSymbol('Error');\n const newFunctionToString = function toString() {\n if (typeof this === 'function') {\n const originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL];\n if (originalDelegate) {\n if (typeof originalDelegate === 'function') {\n return originalFunctionToString.call(originalDelegate);\n }\n else {\n return Object.prototype.toString.call(originalDelegate);\n }\n }\n if (this === Promise) {\n const nativePromise = global[PROMISE_SYMBOL];\n if (nativePromise) {\n return originalFunctionToString.call(nativePromise);\n }\n }\n if (this === Error) {\n const nativeError = global[ERROR_SYMBOL];\n if (nativeError) {\n return originalFunctionToString.call(nativeError);\n }\n }\n }\n return originalFunctionToString.call(this);\n };\n newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString;\n Function.prototype.toString = newFunctionToString;\n // patch Object.prototype.toString to let them look like native\n const originalObjectToString = Object.prototype.toString;\n const PROMISE_OBJECT_TO_STRING = '[object Promise]';\n Object.prototype.toString = function () {\n if (typeof Promise === 'function' && this instanceof Promise) {\n return PROMISE_OBJECT_TO_STRING;\n }\n return originalObjectToString.call(this);\n };\n });\n}\n\nfunction patchCallbacks(api, target, targetName, method, callbacks) {\n const symbol = Zone.__symbol__(method);\n if (target[symbol]) {\n return;\n }\n const nativeDelegate = (target[symbol] = target[method]);\n target[method] = function (name, opts, options) {\n if (opts && opts.prototype) {\n callbacks.forEach(function (callback) {\n const source = `${targetName}.${method}::` + callback;\n const prototype = opts.prototype;\n // Note: the `patchCallbacks` is used for patching the `document.registerElement` and\n // `customElements.define`. We explicitly wrap the patching code into try-catch since\n // callbacks may be already patched by other web components frameworks (e.g. LWC), and they\n // make those properties non-writable. This means that patching callback will throw an error\n // `cannot assign to read-only property`. See this code as an example:\n // https://github.com/salesforce/lwc/blob/master/packages/@lwc/engine-core/src/framework/base-bridge-element.ts#L180-L186\n // We don't want to stop the application rendering if we couldn't patch some\n // callback, e.g. `attributeChangedCallback`.\n try {\n if (prototype.hasOwnProperty(callback)) {\n const descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback);\n if (descriptor && descriptor.value) {\n descriptor.value = api.wrapWithCurrentZone(descriptor.value, source);\n api._redefineProperty(opts.prototype, callback, descriptor);\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n else if (prototype[callback]) {\n prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source);\n }\n }\n catch {\n // Note: we leave the catch block empty since there's no way to handle the error related\n // to non-writable property.\n }\n });\n }\n return nativeDelegate.call(target, name, opts, options);\n };\n api.attachOriginToPatched(target[method], nativeDelegate);\n}\n\nfunction patchUtil(Zone) {\n Zone.__load_patch('util', (global, Zone, api) => {\n // Collect native event names by looking at properties\n // on the global namespace, e.g. 'onclick'.\n const eventNames = getOnEventNames(global);\n api.patchOnProperties = patchOnProperties;\n api.patchMethod = patchMethod;\n api.bindArguments = bindArguments;\n api.patchMacroTask = patchMacroTask;\n // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS`\n // to define which events will not be patched by `Zone.js`. In newer version (>=0.9.0), we\n // change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep the name consistent with\n // angular repo. The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be\n // supported for backwards compatibility.\n const SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS');\n const SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS');\n if (global[SYMBOL_UNPATCHED_EVENTS]) {\n global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS];\n }\n if (global[SYMBOL_BLACK_LISTED_EVENTS]) {\n Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] =\n global[SYMBOL_BLACK_LISTED_EVENTS];\n }\n api.patchEventPrototype = patchEventPrototype;\n api.patchEventTarget = patchEventTarget;\n api.isIEOrEdge = isIEOrEdge;\n api.ObjectDefineProperty = ObjectDefineProperty;\n api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor;\n api.ObjectCreate = ObjectCreate;\n api.ArraySlice = ArraySlice;\n api.patchClass = patchClass;\n api.wrapWithCurrentZone = wrapWithCurrentZone;\n api.filterProperties = filterProperties;\n api.attachOriginToPatched = attachOriginToPatched;\n api._redefineProperty = Object.defineProperty;\n api.patchCallbacks = patchCallbacks;\n api.getGlobalObjects = () => ({\n globalSources,\n zoneSymbolEventNames,\n eventNames,\n isBrowser,\n isMix,\n isNode,\n TRUE_STR,\n FALSE_STR,\n ZONE_SYMBOL_PREFIX,\n ADD_EVENT_LISTENER_STR,\n REMOVE_EVENT_LISTENER_STR,\n });\n });\n}\n\nfunction patchCommon(Zone) {\n patchPromise(Zone);\n patchToString(Zone);\n patchUtil(Zone);\n}\n\nconst Zone$1 = loadZone();\npatchCommon(Zone$1);\npatchBrowser(Zone$1);\n","'use strict';\nrequire('../../modules/es.array.from');\nrequire('../../modules/es.array.is-array');\nrequire('../../modules/es.array.of');\nrequire('../../modules/es.array.at');\nrequire('../../modules/es.array.concat');\nrequire('../../modules/es.array.copy-within');\nrequire('../../modules/es.array.every');\nrequire('../../modules/es.array.fill');\nrequire('../../modules/es.array.filter');\nrequire('../../modules/es.array.find');\nrequire('../../modules/es.array.find-index');\nrequire('../../modules/es.array.find-last');\nrequire('../../modules/es.array.find-last-index');\nrequire('../../modules/es.array.flat');\nrequire('../../modules/es.array.flat-map');\nrequire('../../modules/es.array.for-each');\nrequire('../../modules/es.array.includes');\nrequire('../../modules/es.array.index-of');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.array.join');\nrequire('../../modules/es.array.last-index-of');\nrequire('../../modules/es.array.map');\nrequire('../../modules/es.array.push');\nrequire('../../modules/es.array.reduce');\nrequire('../../modules/es.array.reduce-right');\nrequire('../../modules/es.array.reverse');\nrequire('../../modules/es.array.slice');\nrequire('../../modules/es.array.some');\nrequire('../../modules/es.array.sort');\nrequire('../../modules/es.array.species');\nrequire('../../modules/es.array.splice');\nrequire('../../modules/es.array.to-reversed');\nrequire('../../modules/es.array.to-sorted');\nrequire('../../modules/es.array.to-spliced');\nrequire('../../modules/es.array.unscopables.flat');\nrequire('../../modules/es.array.unscopables.flat-map');\nrequire('../../modules/es.array.unshift');\nrequire('../../modules/es.array.with');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Array;\n","'use strict';\nrequire('../../modules/es.date.get-year');\nrequire('../../modules/es.date.now');\nrequire('../../modules/es.date.set-year');\nrequire('../../modules/es.date.to-gmt-string');\nrequire('../../modules/es.date.to-iso-string');\nrequire('../../modules/es.date.to-json');\nrequire('../../modules/es.date.to-string');\nrequire('../../modules/es.date.to-primitive');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Date;\n","'use strict';\nrequire('../../modules/es.function.bind');\nrequire('../../modules/es.function.name');\nrequire('../../modules/es.function.has-instance');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Function;\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.map');\nrequire('../../modules/es.map.group-by');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Map;\n","'use strict';\nrequire('../../modules/es.math.acosh');\nrequire('../../modules/es.math.asinh');\nrequire('../../modules/es.math.atanh');\nrequire('../../modules/es.math.cbrt');\nrequire('../../modules/es.math.clz32');\nrequire('../../modules/es.math.cosh');\nrequire('../../modules/es.math.expm1');\nrequire('../../modules/es.math.fround');\nrequire('../../modules/es.math.hypot');\nrequire('../../modules/es.math.imul');\nrequire('../../modules/es.math.log10');\nrequire('../../modules/es.math.log1p');\nrequire('../../modules/es.math.log2');\nrequire('../../modules/es.math.sign');\nrequire('../../modules/es.math.sinh');\nrequire('../../modules/es.math.tanh');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.math.trunc');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Math;\n","'use strict';\nrequire('../../modules/es.number.constructor');\nrequire('../../modules/es.number.epsilon');\nrequire('../../modules/es.number.is-finite');\nrequire('../../modules/es.number.is-integer');\nrequire('../../modules/es.number.is-nan');\nrequire('../../modules/es.number.is-safe-integer');\nrequire('../../modules/es.number.max-safe-integer');\nrequire('../../modules/es.number.min-safe-integer');\nrequire('../../modules/es.number.parse-float');\nrequire('../../modules/es.number.parse-int');\nrequire('../../modules/es.number.to-exponential');\nrequire('../../modules/es.number.to-fixed');\nrequire('../../modules/es.number.to-precision');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Number;\n","'use strict';\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.object.assign');\nrequire('../../modules/es.object.create');\nrequire('../../modules/es.object.define-property');\nrequire('../../modules/es.object.define-properties');\nrequire('../../modules/es.object.entries');\nrequire('../../modules/es.object.freeze');\nrequire('../../modules/es.object.from-entries');\nrequire('../../modules/es.object.get-own-property-descriptor');\nrequire('../../modules/es.object.get-own-property-descriptors');\nrequire('../../modules/es.object.get-own-property-names');\nrequire('../../modules/es.object.get-prototype-of');\nrequire('../../modules/es.object.group-by');\nrequire('../../modules/es.object.has-own');\nrequire('../../modules/es.object.is');\nrequire('../../modules/es.object.is-extensible');\nrequire('../../modules/es.object.is-frozen');\nrequire('../../modules/es.object.is-sealed');\nrequire('../../modules/es.object.keys');\nrequire('../../modules/es.object.prevent-extensions');\nrequire('../../modules/es.object.proto');\nrequire('../../modules/es.object.seal');\nrequire('../../modules/es.object.set-prototype-of');\nrequire('../../modules/es.object.values');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.object.define-getter');\nrequire('../../modules/es.object.define-setter');\nrequire('../../modules/es.object.lookup-getter');\nrequire('../../modules/es.object.lookup-setter');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object;\n","'use strict';\nrequire('../modules/es.parse-float');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseFloat;\n","'use strict';\nrequire('../modules/es.parse-int');\nvar path = require('../internals/path');\n\nmodule.exports = path.parseInt;\n","'use strict';\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.reflect.apply');\nrequire('../../modules/es.reflect.construct');\nrequire('../../modules/es.reflect.define-property');\nrequire('../../modules/es.reflect.delete-property');\nrequire('../../modules/es.reflect.get');\nrequire('../../modules/es.reflect.get-own-property-descriptor');\nrequire('../../modules/es.reflect.get-prototype-of');\nrequire('../../modules/es.reflect.has');\nrequire('../../modules/es.reflect.is-extensible');\nrequire('../../modules/es.reflect.own-keys');\nrequire('../../modules/es.reflect.prevent-extensions');\nrequire('../../modules/es.reflect.set');\nrequire('../../modules/es.reflect.set-prototype-of');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Reflect;\n","'use strict';\nrequire('../../modules/es.regexp.constructor');\nrequire('../../modules/es.regexp.to-string');\nrequire('../../modules/es.regexp.dot-all');\nrequire('../../modules/es.regexp.exec');\nrequire('../../modules/es.regexp.flags');\nrequire('../../modules/es.regexp.sticky');\nrequire('../../modules/es.regexp.test');\nrequire('../../modules/es.string.match');\nrequire('../../modules/es.string.replace');\nrequire('../../modules/es.string.search');\nrequire('../../modules/es.string.split');\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.set');\nrequire('../../modules/es.set.difference.v2');\nrequire('../../modules/es.set.intersection.v2');\nrequire('../../modules/es.set.is-disjoint-from.v2');\nrequire('../../modules/es.set.is-subset-of.v2');\nrequire('../../modules/es.set.is-superset-of.v2');\nrequire('../../modules/es.set.symmetric-difference.v2');\nrequire('../../modules/es.set.union.v2');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Set;\n","'use strict';\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.regexp.exec');\nrequire('../../modules/es.string.from-code-point');\nrequire('../../modules/es.string.raw');\nrequire('../../modules/es.string.code-point-at');\nrequire('../../modules/es.string.at-alternative');\nrequire('../../modules/es.string.ends-with');\nrequire('../../modules/es.string.includes');\nrequire('../../modules/es.string.is-well-formed');\nrequire('../../modules/es.string.match');\nrequire('../../modules/es.string.match-all');\nrequire('../../modules/es.string.pad-end');\nrequire('../../modules/es.string.pad-start');\nrequire('../../modules/es.string.repeat');\nrequire('../../modules/es.string.replace');\nrequire('../../modules/es.string.replace-all');\nrequire('../../modules/es.string.search');\nrequire('../../modules/es.string.split');\nrequire('../../modules/es.string.starts-with');\nrequire('../../modules/es.string.substr');\nrequire('../../modules/es.string.to-well-formed');\nrequire('../../modules/es.string.trim');\nrequire('../../modules/es.string.trim-start');\nrequire('../../modules/es.string.trim-end');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/es.string.anchor');\nrequire('../../modules/es.string.big');\nrequire('../../modules/es.string.blink');\nrequire('../../modules/es.string.bold');\nrequire('../../modules/es.string.fixed');\nrequire('../../modules/es.string.fontcolor');\nrequire('../../modules/es.string.fontsize');\nrequire('../../modules/es.string.italics');\nrequire('../../modules/es.string.link');\nrequire('../../modules/es.string.small');\nrequire('../../modules/es.string.strike');\nrequire('../../modules/es.string.sub');\nrequire('../../modules/es.string.sup');\nvar path = require('../../internals/path');\n\nmodule.exports = path.String;\n","'use strict';\nrequire('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.match-all');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.json.to-string-tag');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.reflect.to-string-tag');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Symbol;\n","'use strict';\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.weak-map');\nvar path = require('../../internals/path');\n\nmodule.exports = path.WeakMap;\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a constructor');\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (isPossiblePrototype(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\nvar has = require('../internals/set-helpers').has;\n\n// Perform ? RequireInternalSlot(M, [[SetData]])\nmodule.exports = function (it) {\n has(it);\n return it;\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","'use strict';\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw new $TypeError('Incorrect invocation');\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\nvar fails = require('../internals/fails');\n\nmodule.exports = fails(function () {\n if (typeof ArrayBuffer == 'function') {\n var buffer = new ArrayBuffer(8);\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\n }\n});\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nmodule.exports = function (Constructor, list, $length) {\n var index = 0;\n var length = arguments.length > 2 ? $length : lengthOfArrayLike(list);\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $Array = Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {\n result = IS_CONSTRUCTOR ? new this() : [];\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : $Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n if (length === 0) return !IS_INCLUDES && -1;\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ findLast, findLastIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_FIND_LAST_INDEX = TYPE === 1;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var index = lengthOfArrayLike(self);\n var boundFunction = bind(callbackfn, that);\n var value, result;\n while (index-- > 0) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (result) switch (TYPE) {\n case 0: return value; // findLast\n case 1: return index; // findLastIndex\n }\n }\n return IS_FIND_LAST_INDEX ? -1 : undefined;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.findLast` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLast: createMethod(0),\n // `Array.prototype.findLastIndex` method\n // https://github.com/tc39/proposal-array-find-from-last\n findLastIndex: createMethod(1)\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE === 1;\n var IS_FILTER = TYPE === 2;\n var IS_SOME = TYPE === 3;\n var IS_EVERY = TYPE === 4;\n var IS_FIND_INDEX = TYPE === 6;\n var IS_FILTER_REJECT = TYPE === 7;\n var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(self);\n var boundFunction = bind(callbackfn, that);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n if (length === 0) return -1;\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : $lastIndexOf;\n","'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/environment-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call -- required for testing\n method.call(null, argument || function () { return 1; }, 1);\n });\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar $TypeError = TypeError;\n\nvar REDUCE_EMPTY = 'Reduce of empty array with no initial value';\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n aCallable(callbackfn);\n if (length === 0 && argumentsLength < 2) throw new $TypeError(REDUCE_EMPTY);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw new $TypeError(REDUCE_EMPTY);\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar isArray = require('../internals/is-array');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Safari < 13 does not throw an error in this case\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\n // makes no sense without proper strict mode support\n if (this !== undefined) return true;\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).length = 1;\n } catch (error) {\n return error instanceof TypeError;\n }\n}();\n\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\n throw new $TypeError('Cannot set read only .length');\n } return O.length = length;\n} : function (O, length) {\n return O.length = length;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","'use strict';\nvar arraySlice = require('../internals/array-slice');\n\nvar floor = Math.floor;\n\nvar sort = function (array, comparefn) {\n var length = array.length;\n\n if (length < 8) {\n // insertion sort\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n }\n } else {\n // merge sort\n var middle = floor(length / 2);\n var left = sort(arraySlice(array, 0, middle), comparefn);\n var right = sort(arraySlice(array, middle), comparefn);\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n }\n }\n\n return array;\n};\n\nmodule.exports = sort;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n","'use strict';\nvar arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed\nmodule.exports = function (O, C) {\n var len = lengthOfArrayLike(O);\n var A = new C(len);\n var k = 0;\n for (; k < len; k++) A[k] = O[len - k - 1];\n return A;\n};\n","'use strict';\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $RangeError = RangeError;\n\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with\nmodule.exports = function (O, C, index, value) {\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\n if (actualIndex >= len || actualIndex < 0) throw new $RangeError('Incorrect index');\n var A = new C(len);\n var k = 0;\n for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];\n return A;\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n try {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n } catch (error) { return false; } // workaround of old WebKit + `eval` bug\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar create = require('../internals/object-create');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key === key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n entry = entry.next;\n }\n state.first = state.last = undefined;\n state.index = create(null);\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first === entry) state.first = next;\n if (state.last === entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineBuiltInAccessor(Prototype, 'size', {\n configurable: true,\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n // return step by kind\n if (kind === 'keys') return createIterResultObject(entry.key, false);\n if (kind === 'values') return createIterResultObject(entry.value, false);\n return createIterResultObject([entry.key, entry.value], false);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anInstance = require('../internals/an-instance');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isObject = require('../internals/is-object');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (state) {\n return state.frozen || (state.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = globalThis[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n defineBuiltIn(NativePrototype, KEY,\n KEY === 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY === 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY === 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY === 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = toString(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));\n else object[key] = value;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar padStart = require('../internals/string-pad').start;\n\nvar $RangeError = RangeError;\nvar $isFinite = isFinite;\nvar abs = Math.abs;\nvar DatePrototype = Date.prototype;\nvar nativeDateToISOString = DatePrototype.toISOString;\nvar thisTimeValue = uncurryThis(DatePrototype.getTime);\nvar getUTCDate = uncurryThis(DatePrototype.getUTCDate);\nvar getUTCFullYear = uncurryThis(DatePrototype.getUTCFullYear);\nvar getUTCHours = uncurryThis(DatePrototype.getUTCHours);\nvar getUTCMilliseconds = uncurryThis(DatePrototype.getUTCMilliseconds);\nvar getUTCMinutes = uncurryThis(DatePrototype.getUTCMinutes);\nvar getUTCMonth = uncurryThis(DatePrototype.getUTCMonth);\nvar getUTCSeconds = uncurryThis(DatePrototype.getUTCSeconds);\n\n// `Date.prototype.toISOString` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit fails here:\nmodule.exports = (fails(function () {\n return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n nativeDateToISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value');\n var date = this;\n var year = getUTCFullYear(date);\n var milliseconds = getUTCMilliseconds(date);\n var sign = year < 0 ? '-' : year > 9999 ? '+' : '';\n return sign + padStart(abs(year), sign ? 6 : 4, 0) +\n '-' + padStart(getUTCMonth(date) + 1, 2, 0) +\n '-' + padStart(getUTCDate(date), 2, 0) +\n 'T' + padStart(getUTCHours(date), 2, 0) +\n ':' + padStart(getUTCMinutes(date), 2, 0) +\n ':' + padStart(getUTCSeconds(date), 2, 0) +\n '.' + padStart(milliseconds, 3, 0) +\n 'Z';\n} : nativeDateToISOString;\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\n\nvar $TypeError = TypeError;\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n anObject(this);\n if (hint === 'string' || hint === 'default') hint = 'string';\n else if (hint !== 'number') throw new $TypeError('Incorrect hint');\n return ordinaryToPrimitive(this, hint);\n};\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","'use strict';\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw new $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n return it;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar userAgent = require('../internals/environment-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","'use strict';\nvar UA = require('../internals/environment-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","'use strict';\nvar ENVIRONMENT = require('../internals/environment');\n\nmodule.exports = ENVIRONMENT === 'NODE';\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\nvar userAgent = require('../internals/environment-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","'use strict';\n/* global Bun, Deno -- detection */\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\nvar classof = require('../internals/classof-raw');\n\nvar userAgentStartsWith = function (string) {\n return userAgent.slice(0, string.length) === string;\n};\n\nmodule.exports = (function () {\n if (userAgentStartsWith('Bun/')) return 'BUN';\n if (userAgentStartsWith('Cloudflare-Workers')) return 'CLOUDFLARE';\n if (userAgentStartsWith('Deno/')) return 'DENO';\n if (userAgentStartsWith('Node.js/')) return 'NODE';\n if (globalThis.Bun && typeof Bun.version == 'string') return 'BUN';\n if (globalThis.Deno && typeof Deno.version == 'object') return 'DENO';\n if (classof(globalThis.process) === 'process') return 'NODE';\n if (globalThis.window && globalThis.document) return 'BROWSER';\n return 'REST';\n})();\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = globalThis;\n } else if (STATIC) {\n target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = globalThis[TARGET] && globalThis[TARGET].prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegExp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) !== 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () {\n execCalled = true;\n return null;\n };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };\n }\n return { done: true, value: call(nativeMethod, str, regexp, arg2) };\n }\n return { done: false };\n });\n\n defineBuiltIn(String.prototype, KEY, methods[0]);\n defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar bind = require('../internals/function-bind-context');\n\n// `FlattenIntoArray` abstract operation\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? bind(mapper, thisArg) : false;\n var element, elementLen;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n if (depth > 0 && isArray(element)) {\n elementLen = lengthOfArrayLike(element);\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\n } else {\n doesNotExceedSafeInteger(targetIndex + 1);\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n};\n\nmodule.exports = flattenIntoArray;\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar $Function = Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n var list = [];\n var i = 0;\n for (; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\nmodule.exports = NATIVE_BIND ? $Function.bind : function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar classofRaw = require('../internals/classof-raw');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = function (fn) {\n // Nashorn bug:\n // https://github.com/zloirock/core-js/issues/1128\n // https://github.com/zloirock/core-js/issues/1130\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nmodule.exports = function (CONSTRUCTOR, METHOD) {\n var Constructor = globalThis[CONSTRUCTOR];\n var Prototype = Constructor && Constructor.prototype;\n return Prototype && Prototype[METHOD];\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\n// `GetIteratorDirect(obj)` abstract operation\n// https://tc39.es/proposal-iterator-helpers/#sec-getiteratordirect\nmodule.exports = function (obj) {\n return {\n iterator: obj,\n next: obj.next,\n done: false\n };\n};\n","'use strict';\nvar classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw new $TypeError(tryToString(argument) + ' is not iterable');\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar toString = require('../internals/to-string');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (replacer) {\n if (isCallable(replacer)) return replacer;\n if (!isArray(replacer)) return;\n var rawLength = replacer.length;\n var keys = [];\n for (var i = 0; i < rawLength; i++) {\n var element = replacer[i];\n if (typeof element == 'string') push(keys, element);\n else if (typeof element == 'number' || classof(element) === 'Number' || classof(element) === 'String') push(keys, toString(element));\n }\n var keysLength = keys.length;\n var root = true;\n return function (key, value) {\n if (root) {\n root = false;\n return value;\n }\n if (isArray(this)) return value;\n for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\n };\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar call = require('../internals/function-call');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar getIteratorDirect = require('../internals/get-iterator-direct');\n\nvar INVALID_SIZE = 'Invalid size';\nvar $RangeError = RangeError;\nvar $TypeError = TypeError;\nvar max = Math.max;\n\nvar SetRecord = function (set, intSize) {\n this.set = set;\n this.size = max(intSize, 0);\n this.has = aCallable(set.has);\n this.keys = aCallable(set.keys);\n};\n\nSetRecord.prototype = {\n getIterator: function () {\n return getIteratorDirect(anObject(call(this.keys, this.set)));\n },\n includes: function (it) {\n return call(this.has, this.set, it);\n }\n};\n\n// `GetSetRecord` abstract operation\n// https://tc39.es/proposal-set-methods/#sec-getsetrecord\nmodule.exports = function (obj) {\n anObject(obj);\n var numSize = +obj.size;\n // NOTE: If size is undefined, then numSize will be NaN\n // eslint-disable-next-line no-self-compare -- NaN check\n if (numSize !== numSize) throw new $TypeError(INVALID_SIZE);\n var intSize = toIntegerOrInfinity(numSize);\n if (intSize < 0) throw new $RangeError(INVALID_SIZE);\n return new SetRecord(obj, intSize);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","'use strict';\nvar classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) === 'Array';\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.test(noop);\n\nvar isConstructorModern = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, [], argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function isConstructor(argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n }\n try {\n // we can't check .prototype since constructors produced by .bind haven't it\n // `Function#toString` throws on some built-it function in some legacy engines\n // (for example, `DOMQuad` and similar in FF41-)\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n } catch (error) {\n return true;\n }\n};\n\nisConstructorLegacy.sham = true;\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\n\nmodule.exports = function (descriptor) {\n return descriptor !== undefined && (hasOwn(descriptor, 'value') || hasOwn(descriptor, 'writable'));\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n return isObject(argument) || argument === null;\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar call = require('../internals/function-call');\n\nmodule.exports = function (record, fn, ITERATOR_INSTEAD_OF_RECORD) {\n var iterator = ITERATOR_INSTEAD_OF_RECORD ? record : record.iterator;\n var next = record.next;\n var step, result;\n while (!(step = call(next, iterator)).done) {\n result = fn(step.value);\n if (result !== undefined) return result;\n }\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw new $TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-map -- safe\nvar MapPrototype = Map.prototype;\n\nmodule.exports = {\n // eslint-disable-next-line es/no-map -- safe\n Map: Map,\n set: uncurryThis(MapPrototype.set),\n get: uncurryThis(MapPrototype.get),\n has: uncurryThis(MapPrototype.has),\n remove: uncurryThis(MapPrototype['delete']),\n proto: MapPrototype\n};\n","'use strict';\n// eslint-disable-next-line es/no-math-expm1 -- safe\nvar $expm1 = Math.expm1;\nvar exp = Math.exp;\n\n// `Math.expm1` method implementation\n// https://tc39.es/ecma262/#sec-math.expm1\nmodule.exports = (!$expm1\n // Old FF bug\n // eslint-disable-next-line no-loss-of-precision -- required for old engines\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) !== -2e-17\n) ? function expm1(x) {\n var n = +x;\n return n === 0 ? n : n > -1e-6 && n < 1e-6 ? n + n * n / 2 : exp(n) - 1;\n} : $expm1;\n","'use strict';\nvar sign = require('../internals/math-sign');\n\nvar abs = Math.abs;\n\nvar EPSILON = 2.220446049250313e-16; // Number.EPSILON\nvar INVERSE_EPSILON = 1 / EPSILON;\n\nvar roundTiesToEven = function (n) {\n return n + INVERSE_EPSILON - INVERSE_EPSILON;\n};\n\nmodule.exports = function (x, FLOAT_EPSILON, FLOAT_MAX_VALUE, FLOAT_MIN_VALUE) {\n var n = +x;\n var absolute = abs(n);\n var s = sign(n);\n if (absolute < FLOAT_MIN_VALUE) return s * roundTiesToEven(absolute / FLOAT_MIN_VALUE / FLOAT_EPSILON) * FLOAT_MIN_VALUE * FLOAT_EPSILON;\n var a = (1 + FLOAT_EPSILON / EPSILON) * absolute;\n var result = a - (a - absolute);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (result > FLOAT_MAX_VALUE || result !== result) return s * Infinity;\n return s * result;\n};\n","'use strict';\nvar floatRound = require('../internals/math-float-round');\n\nvar FLOAT32_EPSILON = 1.1920928955078125e-7; // 2 ** -23;\nvar FLOAT32_MAX_VALUE = 3.4028234663852886e+38; // 2 ** 128 - 2 ** 104\nvar FLOAT32_MIN_VALUE = 1.1754943508222875e-38; // 2 ** -126;\n\n// `Math.fround` method implementation\n// https://tc39.es/ecma262/#sec-math.fround\n// eslint-disable-next-line es/no-math-fround -- safe\nmodule.exports = Math.fround || function fround(x) {\n return floatRound(x, FLOAT32_EPSILON, FLOAT32_MAX_VALUE, FLOAT32_MIN_VALUE);\n};\n","'use strict';\nvar log = Math.log;\nvar LOG10E = Math.LOG10E;\n\n// eslint-disable-next-line es/no-math-log10 -- safe\nmodule.exports = Math.log10 || function log10(x) {\n return log(x) * LOG10E;\n};\n","'use strict';\nvar log = Math.log;\n\n// `Math.log1p` method implementation\n// https://tc39.es/ecma262/#sec-math.log1p\n// eslint-disable-next-line es/no-math-log1p -- safe\nmodule.exports = Math.log1p || function log1p(x) {\n var n = +x;\n return n > -1e-8 && n < 1e-8 ? n - n * n / 2 : log(1 + n);\n};\n","'use strict';\n// `Math.sign` method implementation\n// https://tc39.es/ecma262/#sec-math.sign\n// eslint-disable-next-line es/no-math-sign -- safe\nmodule.exports = Math.sign || function sign(x) {\n var n = +x;\n // eslint-disable-next-line no-self-compare -- NaN check\n return n === 0 || n !== n ? n : n < 0 ? -1 : 1;\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar isRegExp = require('../internals/is-regexp');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw new $TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar globalIsFinite = globalThis.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar charAt = uncurryThis(''.charAt);\nvar $parseFloat = globalThis.parseFloat;\nvar Symbol = globalThis.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\nmodule.exports = FORCED ? function parseFloat(string) {\n var trimmedString = trim(toString(string));\n var result = $parseFloat(trimmedString);\n return result === 0 && charAt(trimmedString, 0) === '-' ? -0 : result;\n} : $parseFloat;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = globalThis.parseInt;\nvar Symbol = globalThis.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol('assign detection');\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] !== 7 || objectKeys($assign({}, B)).join('') !== alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n activeXDocument = null;\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\n/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) === 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar fails = require('../internals/fails');\nvar WEBKIT = require('../internals/environment-webkit-version');\n\n// Forced replacement object prototype accessors methods\nmodule.exports = IS_PURE || !fails(function () {\n // This feature detection crashes old WebKit\n // https://github.com/zloirock/core-js/issues/232\n if (WEBKIT && WEBKIT < 535) return;\n var key = Math.random();\n // In FF throws only define methods\n // eslint-disable-next-line no-undef, no-useless-call, es/no-legacy-object-prototype-accessor-methods -- required for testing\n __defineSetter__.call(null, key, function () { /* empty */ });\n delete globalThis[key];\n});\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n requireObjectCoercible(O);\n aPossiblePrototype(proto);\n if (!isObject(O)) return O;\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// in some IE versions, `propertyIsEnumerable` returns incorrect result on integer keys\n// of `null` prototype objects\nvar IE_BUG = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-create -- safe\n var O = Object.create(null);\n O[2] = 2;\n return !propertyIsEnumerable(O, 2);\n});\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var IE_WORKAROUND = IE_BUG && objectGetPrototypeOf(O) === null;\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || (IE_WORKAROUND ? key in O : propertyIsEnumerable(O, key))) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nmodule.exports = globalThis;\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n key in Target || defineProperty(Target, key, {\n configurable: true,\n get: function () { return Source[key]; },\n set: function (it) { Source[key] = it; }\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar $TypeError = TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw new $TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') !== null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') !== null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.test('\\n') && re.flags === 's');\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$c') !== 'bc';\n});\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x !== x && y !== y;\n};\n","'use strict';\nvar SetHelpers = require('../internals/set-helpers');\nvar iterate = require('../internals/set-iterate');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\n\nmodule.exports = function (set) {\n var result = new Set();\n iterate(set, function (it) {\n add(result, it);\n });\n return result;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function difference(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n var result = clone(O);\n if (size(O) <= otherRec.size) iterateSet(O, function (e) {\n if (otherRec.includes(e)) remove(result, e);\n });\n else iterateSimple(otherRec.getIterator(), function (e) {\n if (has(O, e)) remove(result, e);\n });\n return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// eslint-disable-next-line es/no-set -- safe\nvar SetPrototype = Set.prototype;\n\nmodule.exports = {\n // eslint-disable-next-line es/no-set -- safe\n Set: Set,\n add: uncurryThis(SetPrototype.add),\n has: uncurryThis(SetPrototype.has),\n remove: uncurryThis(SetPrototype['delete']),\n proto: SetPrototype\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar Set = SetHelpers.Set;\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function intersection(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n var result = new Set();\n\n if (size(O) > otherRec.size) {\n iterateSimple(otherRec.getIterator(), function (e) {\n if (has(O, e)) add(result, e);\n });\n } else {\n iterateSet(O, function (e) {\n if (otherRec.includes(e)) add(result, e);\n });\n }\n\n return result;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSet = require('../internals/set-iterate');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom\nmodule.exports = function isDisjointFrom(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) <= otherRec.size) return iterateSet(O, function (e) {\n if (otherRec.includes(e)) return false;\n }, true) !== false;\n var iterator = otherRec.getIterator();\n return iterateSimple(iterator, function (e) {\n if (has(O, e)) return iteratorClose(iterator, 'normal', false);\n }) !== false;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar size = require('../internals/set-size');\nvar iterate = require('../internals/set-iterate');\nvar getSetRecord = require('../internals/get-set-record');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf\nmodule.exports = function isSubsetOf(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) > otherRec.size) return false;\n return iterate(O, function (e) {\n if (!otherRec.includes(e)) return false;\n }, true) !== false;\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar has = require('../internals/set-helpers').has;\nvar size = require('../internals/set-size');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\nvar iteratorClose = require('../internals/iterator-close');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf\nmodule.exports = function isSupersetOf(other) {\n var O = aSet(this);\n var otherRec = getSetRecord(other);\n if (size(O) < otherRec.size) return false;\n var iterator = otherRec.getIterator();\n return iterateSimple(iterator, function (e) {\n if (!has(O, e)) return iteratorClose(iterator, 'normal', false);\n }) !== false;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar iterateSimple = require('../internals/iterate-simple');\nvar SetHelpers = require('../internals/set-helpers');\n\nvar Set = SetHelpers.Set;\nvar SetPrototype = SetHelpers.proto;\nvar forEach = uncurryThis(SetPrototype.forEach);\nvar keys = uncurryThis(SetPrototype.keys);\nvar next = keys(new Set()).next;\n\nmodule.exports = function (set, fn, interruptible) {\n return interruptible ? iterateSimple({ iterator: keys(set), next: next }, fn) : forEach(set, fn);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nvar createSetLike = function (size) {\n return {\n size: size,\n has: function () {\n return false;\n },\n keys: function () {\n return {\n next: function () {\n return { done: true };\n }\n };\n }\n };\n};\n\nmodule.exports = function (name) {\n var Set = getBuiltIn('Set');\n try {\n new Set()[name](createSetLike(0));\n try {\n // late spec change, early WebKit ~ Safari 17.0 beta implementation does not pass it\n // https://github.com/tc39/proposal-set-methods/pull/88\n new Set()[name](createSetLike(-1));\n return false;\n } catch (error2) {\n return true;\n }\n } catch (error) {\n return false;\n }\n};\n","'use strict';\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar SetHelpers = require('../internals/set-helpers');\n\nmodule.exports = uncurryThisAccessor(SetHelpers.proto, 'size', 'get') || function (set) {\n return set.size;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar SetHelpers = require('../internals/set-helpers');\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\nvar add = SetHelpers.add;\nvar has = SetHelpers.has;\nvar remove = SetHelpers.remove;\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function symmetricDifference(other) {\n var O = aSet(this);\n var keysIter = getSetRecord(other).getIterator();\n var result = clone(O);\n iterateSimple(keysIter, function (e) {\n if (has(O, e)) remove(result, e);\n else add(result, e);\n });\n return result;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar aSet = require('../internals/a-set');\nvar add = require('../internals/set-helpers').add;\nvar clone = require('../internals/set-clone');\nvar getSetRecord = require('../internals/get-set-record');\nvar iterateSimple = require('../internals/iterate-simple');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\nmodule.exports = function union(other) {\n var O = aSet(this);\n var keysIter = getSetRecord(other).getIterator();\n var result = clone(O);\n iterateSimple(keysIter, function (it) {\n add(result, it);\n });\n return result;\n};\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.38.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n var test = ''[METHOD_NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n });\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\n// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/environment-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr === '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $RangeError = RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","'use strict';\nvar $trimEnd = require('../internals/string-trim').end;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.{ trimEnd, trimRight }` method\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\n// https://tc39.es/ecma262/#String.prototype.trimright\nmodule.exports = forcedStringTrimMethod('trimEnd') ? function trimEnd() {\n return $trimEnd(this);\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\n} : ''.trimEnd;\n","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $trimStart = require('../internals/string-trim').start;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.{ trimStart, trimLeft }` method\n// https://tc39.es/ecma262/#sec-string.prototype.trimstart\n// https://tc39.es/ecma262/#String.prototype.trimleft\nmodule.exports = forcedStringTrimMethod('trimStart') ? function trimStart() {\n return $trimStart(this);\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\n} : ''.trimStart;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar getBuiltIn = require('../internals/get-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function () {\n var Symbol = getBuiltIn('Symbol');\n var SymbolPrototype = Symbol && Symbol.prototype;\n var valueOf = SymbolPrototype && SymbolPrototype.valueOf;\n var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {\n // `Symbol.prototype[@@toPrimitive]` method\n // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\n // eslint-disable-next-line no-unused-vars -- required for .length\n defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n return call(valueOf, this);\n }, { arity: 1 });\n }\n};\n","'use strict';\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\n/* eslint-disable es/no-symbol -- safe */\nmodule.exports = NATIVE_SYMBOL && !!Symbol['for'] && !!Symbol.keyFor;\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n var len = toIntegerOrInfinity(argument);\n return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.at` method\n// https://tc39.es/ecma262/#sec-array.prototype.at\n$({ target: 'Array', proto: true }, {\n at: function at(index) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : O[k];\n }\n});\n\naddToUnscopables('at');\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/environment-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n doesNotExceedSafeInteger(n + len);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n doesNotExceedSafeInteger(n + 1);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar copyWithin = require('../internals/array-copy-within');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n","'use strict';\nvar $ = require('../internals/export');\nvar $every = require('../internals/array-iteration').every;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('every');\n\n// `Array.prototype.every` method\n// https://tc39.es/ecma262/#sec-array.prototype.every\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $findIndex = require('../internals/array-iteration').findIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\n// eslint-disable-next-line es/no-array-prototype-findindex -- testing\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findindex\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND_INDEX);\n","'use strict';\nvar $ = require('../internals/export');\nvar $findLastIndex = require('../internals/array-iteration-from-last').findLastIndex;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.findLastIndex` method\n// https://tc39.es/ecma262/#sec-array.prototype.findlastindex\n$({ target: 'Array', proto: true }, {\n findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) {\n return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\naddToUnscopables('findLastIndex');\n","'use strict';\nvar $ = require('../internals/export');\nvar $findLast = require('../internals/array-iteration-from-last').findLast;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.findLast` method\n// https://tc39.es/ecma262/#sec-array.prototype.findlast\n$({ target: 'Array', proto: true }, {\n findLast: function findLast(callbackfn /* , that = undefined */) {\n return $findLast(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\naddToUnscopables('findLast');\n","'use strict';\nvar $ = require('../internals/export');\nvar $find = require('../internals/array-iteration').find;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\n// eslint-disable-next-line es/no-array-prototype-find -- testing\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.es/ecma262/#sec-array.prototype.find\n$({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables(FIND);\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flatMap` method\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\n$({ target: 'Array', proto: true }, {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A;\n aCallable(callbackfn);\n A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar flattenIntoArray = require('../internals/flatten-into-array');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.flat` method\n// https://tc39.es/ecma262/#sec-array.prototype.flat\n$({ target: 'Array', proto: true }, {\n flat: function flat(/* depthArg = 1 */) {\n var depthArg = arguments.length ? arguments[0] : undefined;\n var O = toObject(this);\n var sourceLen = lengthOfArrayLike(O);\n var A = arraySpeciesCreate(O, 0);\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity(depthArg));\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar forEach = require('../internals/array-for-each');\n\n// `Array.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n$({ target: 'Array', proto: true, forced: [].forEach !== forEach }, {\n forEach: forEach\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar fails = require('../internals/fails');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// FF99+ bug\nvar BROKEN_ON_SPARSE = fails(function () {\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\n return !Array(1).includes();\n});\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\n/* eslint-disable es/no-array-prototype-indexof -- required for testing */\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar $indexOf = require('../internals/array-includes').indexOf;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeIndexOf = uncurryThis([].indexOf);\n\nvar NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;\nvar FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');\n\n// `Array.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.indexof\n$({ target: 'Array', proto: true, forced: FORCED }, {\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n var fromIndex = arguments.length > 1 ? arguments[1] : undefined;\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? nativeIndexOf(this, searchElement, fromIndex) || 0\n : $indexOf(this, searchElement, fromIndex);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\n\n// `Array.isArray` method\n// https://tc39.es/ecma262/#sec-array.isarray\n$({ target: 'Array', stat: true }, {\n isArray: isArray\n});\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return createIterResultObject(undefined, true);\n }\n switch (state.kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject !== Object;\nvar FORCED = ES3_STRINGS || !arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: FORCED }, {\n join: function join(separator) {\n return nativeJoin(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar lastIndexOf = require('../internals/array-last-index-of');\n\n// `Array.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\n// eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing\n$({ target: 'Array', proto: true, forced: lastIndexOf !== [].lastIndexOf }, {\n lastIndexOf: lastIndexOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isConstructor = require('../internals/is-constructor');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\n\nvar ISNT_GENERIC = fails(function () {\n function F() { /* empty */ }\n // eslint-disable-next-line es/no-array-of -- safe\n return !($Array.of.call(F) instanceof F);\n});\n\n// `Array.of` method\n// https://tc39.es/ecma262/#sec-array.of\n// WebKit Array.of isn't generic\n$({ target: 'Array', stat: true, forced: ISNT_GENERIC }, {\n of: function of(/* ...args */) {\n var index = 0;\n var argumentsLength = arguments.length;\n var result = new (isConstructor(this) ? this : $Array)(argumentsLength);\n while (argumentsLength > index) createProperty(result, index, arguments[index++]);\n result.length = argumentsLength;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar fails = require('../internals/fails');\n\nvar INCORRECT_TO_LENGTH = fails(function () {\n return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\n});\n\n// V8 <= 121 and Safari <= 15.4; FF < 23 throws InternalError\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\nvar properErrorOnNonWritableLength = function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).push();\n } catch (error) {\n return error instanceof TypeError;\n }\n};\n\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\n\n// `Array.prototype.push` method\n// https://tc39.es/ecma262/#sec-array.prototype.push\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n push: function push(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n doesNotExceedSafeInteger(len + argCount);\n for (var i = 0; i < argCount; i++) {\n O[len] = arguments[i];\n len++;\n }\n setArrayLength(O, len);\n return len;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduceRight = require('../internals/array-reduce').right;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/environment-v8-version');\nvar IS_NODE = require('../internals/environment-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduceRight');\n\n// `Array.prototype.reduceRight` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduceright\n$({ target: 'Array', proto: true, forced: FORCED }, {\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduceRight(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/environment-v8-version');\nvar IS_NODE = require('../internals/environment-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: FORCED }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isArray = require('../internals/is-array');\n\nvar nativeReverse = uncurryThis([].reverse);\nvar test = [1, 2];\n\n// `Array.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-array.prototype.reverse\n// fix for Safari 12.0 bug\n// https://bugs.webkit.org/show_bug.cgi?id=188794\n$({ target: 'Array', proto: true, forced: String(test) === String(test.reverse()) }, {\n reverse: function reverse() {\n // eslint-disable-next-line no-self-assign -- dirty hack\n if (isArray(this)) this.length = this.length;\n return nativeReverse(this);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar nativeSlice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === $Array || Constructor === undefined) {\n return nativeSlice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $some = require('../internals/array-iteration').some;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('some');\n\n// `Array.prototype.some` method\n// https://tc39.es/ecma262/#sec-array.prototype.some\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD }, {\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/environment-ff-version');\nvar IE_OR_EDGE = require('../internals/environment-is-ie-or-edge');\nvar V8 = require('../internals/environment-v8-version');\nvar WEBKIT = require('../internals/environment-webkit-version');\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = lengthOfArrayLike(items);\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\n","'use strict';\nvar setSpecies = require('../internals/set-species');\n\n// `Array[@@species]` getter\n// https://tc39.es/ecma262/#sec-get-array-@@species\nsetSpecies('Array');\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) deletePropertyOrThrow(O, k - 1);\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else deletePropertyOrThrow(O, to);\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n setArrayLength(O, len - actualDeleteCount + insertCount);\n return A;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar arrayToReversed = require('../internals/array-to-reversed');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar $Array = Array;\n\n// `Array.prototype.toReversed` method\n// https://tc39.es/ecma262/#sec-array.prototype.toreversed\n$({ target: 'Array', proto: true }, {\n toReversed: function toReversed() {\n return arrayToReversed(toIndexedObject(this), $Array);\n }\n});\n\naddToUnscopables('toReversed');\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar getBuiltInPrototypeMethod = require('../internals/get-built-in-prototype-method');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\nvar $Array = Array;\nvar sort = uncurryThis(getBuiltInPrototypeMethod('Array', 'sort'));\n\n// `Array.prototype.toSorted` method\n// https://tc39.es/ecma262/#sec-array.prototype.tosorted\n$({ target: 'Array', proto: true }, {\n toSorted: function toSorted(compareFn) {\n if (compareFn !== undefined) aCallable(compareFn);\n var O = toIndexedObject(this);\n var A = arrayFromConstructorAndList($Array, O);\n return sort(A, compareFn);\n }\n});\n\naddToUnscopables('toSorted');\n","'use strict';\nvar $ = require('../internals/export');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar $Array = Array;\nvar max = Math.max;\nvar min = Math.min;\n\n// `Array.prototype.toSpliced` method\n// https://tc39.es/ecma262/#sec-array.prototype.tospliced\n$({ target: 'Array', proto: true }, {\n toSpliced: function toSpliced(start, deleteCount /* , ...items */) {\n var O = toIndexedObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var k = 0;\n var insertCount, actualDeleteCount, newLen, A;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n newLen = doesNotExceedSafeInteger(len + insertCount - actualDeleteCount);\n A = $Array(newLen);\n\n for (; k < actualStart; k++) A[k] = O[k];\n for (; k < actualStart + insertCount; k++) A[k] = arguments[k - actualStart + 2];\n for (; k < newLen; k++) A[k] = O[k + actualDeleteCount - insertCount];\n\n return A;\n }\n});\n\naddToUnscopables('toSpliced');\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flatMap');\n","'use strict';\n// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('flat');\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar setArrayLength = require('../internals/array-set-length');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\n\n// IE8-\nvar INCORRECT_RESULT = [].unshift(0) !== 1;\n\n// V8 ~ Chrome < 71 and Safari <= 15.4, FF < 23 throws InternalError\nvar properErrorOnNonWritableLength = function () {\n try {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty([], 'length', { writable: false }).unshift();\n } catch (error) {\n return error instanceof TypeError;\n }\n};\n\nvar FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength();\n\n// `Array.prototype.unshift` method\n// https://tc39.es/ecma262/#sec-array.prototype.unshift\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n unshift: function unshift(item) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var argCount = arguments.length;\n if (argCount) {\n doesNotExceedSafeInteger(len + argCount);\n var k = len;\n while (k--) {\n var to = k + argCount;\n if (k in O) O[to] = O[k];\n else deletePropertyOrThrow(O, to);\n }\n for (var j = 0; j < argCount; j++) {\n O[j] = arguments[j];\n }\n } return setArrayLength(O, len + argCount);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar arrayWith = require('../internals/array-with');\nvar toIndexedObject = require('../internals/to-indexed-object');\n\nvar $Array = Array;\n\n// `Array.prototype.with` method\n// https://tc39.es/ecma262/#sec-array.prototype.with\n$({ target: 'Array', proto: true }, {\n 'with': function (index, value) {\n return arrayWith(toIndexedObject(this), $Array, index, value);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\n\n// IE8- non-standard case\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-date-prototype-getyear-setyear -- detection\n return new Date(16e11).getYear() !== 120;\n});\n\nvar getFullYear = uncurryThis(Date.prototype.getFullYear);\n\n// `Date.prototype.getYear` method\n// https://tc39.es/ecma262/#sec-date.prototype.getyear\n$({ target: 'Date', proto: true, forced: FORCED }, {\n getYear: function getYear() {\n return getFullYear(this) - 1900;\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar $Date = Date;\nvar thisTimeValue = uncurryThis($Date.prototype.getTime);\n\n// `Date.now` method\n// https://tc39.es/ecma262/#sec-date.now\n$({ target: 'Date', stat: true }, {\n now: function now() {\n return thisTimeValue(new $Date());\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar DatePrototype = Date.prototype;\nvar thisTimeValue = uncurryThis(DatePrototype.getTime);\nvar setFullYear = uncurryThis(DatePrototype.setFullYear);\n\n// `Date.prototype.setYear` method\n// https://tc39.es/ecma262/#sec-date.prototype.setyear\n$({ target: 'Date', proto: true }, {\n setYear: function setYear(year) {\n // validate\n thisTimeValue(this);\n var yi = toIntegerOrInfinity(year);\n var yyyy = yi >= 0 && yi <= 99 ? yi + 1900 : yi;\n return setFullYear(this, yyyy);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Date.prototype.toGMTString` method\n// https://tc39.es/ecma262/#sec-date.prototype.togmtstring\n$({ target: 'Date', proto: true }, {\n toGMTString: Date.prototype.toUTCString\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toISOString = require('../internals/date-to-iso-string');\n\n// `Date.prototype.toISOString` method\n// https://tc39.es/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit has a broken implementations\n$({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== toISOString }, {\n toISOString: toISOString\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar FORCED = fails(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n});\n\n// `Date.prototype.toJSON` method\n// https://tc39.es/ecma262/#sec-date.prototype.tojson\n$({ target: 'Date', proto: true, arity: 1, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O, 'number');\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar dateToPrimitive = require('../internals/date-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!hasOwn(DatePrototype, TO_PRIMITIVE)) {\n defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIn = require('../internals/define-built-in');\n\nvar DatePrototype = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar nativeDateToString = uncurryThis(DatePrototype[TO_STRING]);\nvar thisTimeValue = uncurryThis(DatePrototype.getTime);\n\n// `Date.prototype.toString` method\n// https://tc39.es/ecma262/#sec-date.prototype.tostring\nif (String(new Date(NaN)) !== INVALID_DATE) {\n defineBuiltIn(DatePrototype, TO_STRING, function toString() {\n var value = thisTimeValue(this);\n // eslint-disable-next-line no-self-compare -- NaN check\n return value === value ? nativeDateToString(this) : INVALID_DATE;\n });\n}\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar bind = require('../internals/function-bind');\n\n// `Function.prototype.bind` method\n// https://tc39.es/ecma262/#sec-function.prototype.bind\n// eslint-disable-next-line es/no-function-prototype-bind -- detection\n$({ target: 'Function', proto: true, forced: Function.bind !== bind }, {\n bind: bind\n});\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar definePropertyModule = require('../internals/object-define-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar makeBuiltIn = require('../internals/make-built-in');\n\nvar HAS_INSTANCE = wellKnownSymbol('hasInstance');\nvar FunctionPrototype = Function.prototype;\n\n// `Function.prototype[@@hasInstance]` method\n// https://tc39.es/ecma262/#sec-function.prototype-@@hasinstance\nif (!(HAS_INSTANCE in FunctionPrototype)) {\n definePropertyModule.f(FunctionPrototype, HAS_INSTANCE, { value: makeBuiltIn(function (O) {\n if (!isCallable(this) || !isObject(O)) return false;\n var P = this.prototype;\n return isObject(P) ? isPrototypeOf(P, O) : O instanceof this;\n }, HAS_INSTANCE) });\n}\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineBuiltInAccessor(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isSymbol = require('../internals/is-symbol');\nvar arraySlice = require('../internals/array-slice');\nvar getReplacerFunction = require('../internals/get-json-replacer-function');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nvar $String = String;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar exec = uncurryThis(/./.exec);\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar replace = uncurryThis(''.replace);\nvar numberToString = uncurryThis(1.0.toString);\n\nvar tester = /[\\uD800-\\uDFFF]/g;\nvar low = /^[\\uD800-\\uDBFF]$/;\nvar hi = /^[\\uDC00-\\uDFFF]$/;\n\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\n var symbol = getBuiltIn('Symbol')('stringify detection');\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) !== '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) !== '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) !== '{}';\n});\n\n// https://github.com/tc39/proposal-well-formed-stringify\nvar ILL_FORMED_UNICODE = fails(function () {\n return $stringify('\\uDF06\\uD834') !== '\"\\\\udf06\\\\ud834\"'\n || $stringify('\\uDEAD') !== '\"\\\\udead\"';\n});\n\nvar stringifyWithSymbolsFix = function (it, replacer) {\n var args = arraySlice(arguments);\n var $replacer = getReplacerFunction(replacer);\n if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\n args[1] = function (key, value) {\n // some old implementations (like WebKit) could pass numbers as keys\n if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\n if (!isSymbol(value)) return value;\n };\n return apply($stringify, null, args);\n};\n\nvar fixIllFormed = function (match, offset, string) {\n var prev = charAt(string, offset - 1);\n var next = charAt(string, offset + 1);\n if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\n return '\\\\u' + numberToString(charCodeAt(match, 0), 16);\n } return match;\n};\n\nif ($stringify) {\n // `JSON.stringify` method\n // https://tc39.es/ecma262/#sec-json.stringify\n $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\n return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\n }\n });\n}\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(globalThis.JSON, 'JSON', true);\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar iterate = require('../internals/iterate');\nvar MapHelpers = require('../internals/map-helpers');\nvar IS_PURE = require('../internals/is-pure');\nvar fails = require('../internals/fails');\n\nvar Map = MapHelpers.Map;\nvar has = MapHelpers.has;\nvar get = MapHelpers.get;\nvar set = MapHelpers.set;\nvar push = uncurryThis([].push);\n\nvar DOES_NOT_WORK_WITH_PRIMITIVES = IS_PURE || fails(function () {\n return Map.groupBy('ab', function (it) {\n return it;\n }).get('a').length !== 1;\n});\n\n// `Map.groupBy` method\n// https://github.com/tc39/proposal-array-grouping\n$({ target: 'Map', stat: true, forced: IS_PURE || DOES_NOT_WORK_WITH_PRIMITIVES }, {\n groupBy: function groupBy(items, callbackfn) {\n requireObjectCoercible(items);\n aCallable(callbackfn);\n var map = new Map();\n var k = 0;\n iterate(items, function (value) {\n var key = callbackfn(value, k++);\n if (!has(map, key)) set(map, key, [value]);\n else push(get(map, key), value);\n });\n return map;\n }\n});\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.map.constructor');\n","'use strict';\nvar $ = require('../internals/export');\nvar log1p = require('../internals/math-log1p');\n\n// eslint-disable-next-line es/no-math-acosh -- required for testing\nvar $acosh = Math.acosh;\nvar log = Math.log;\nvar sqrt = Math.sqrt;\nvar LN2 = Math.LN2;\n\nvar FORCED = !$acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n || Math.floor($acosh(Number.MAX_VALUE)) !== 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n || $acosh(Infinity) !== Infinity;\n\n// `Math.acosh` method\n// https://tc39.es/ecma262/#sec-math.acosh\n$({ target: 'Math', stat: true, forced: FORCED }, {\n acosh: function acosh(x) {\n var n = +x;\n return n < 1 ? NaN : n > 94906265.62425156\n ? log(n) + LN2\n : log1p(n - 1 + sqrt(n - 1) * sqrt(n + 1));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// eslint-disable-next-line es/no-math-asinh -- required for testing\nvar $asinh = Math.asinh;\nvar log = Math.log;\nvar sqrt = Math.sqrt;\n\nfunction asinh(x) {\n var n = +x;\n return !isFinite(n) || n === 0 ? n : n < 0 ? -asinh(-n) : log(n + sqrt(n * n + 1));\n}\n\nvar FORCED = !($asinh && 1 / $asinh(0) > 0);\n\n// `Math.asinh` method\n// https://tc39.es/ecma262/#sec-math.asinh\n// Tor Browser bug: Math.asinh(0) -> -0\n$({ target: 'Math', stat: true, forced: FORCED }, {\n asinh: asinh\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// eslint-disable-next-line es/no-math-atanh -- required for testing\nvar $atanh = Math.atanh;\nvar log = Math.log;\n\nvar FORCED = !($atanh && 1 / $atanh(-0) < 0);\n\n// `Math.atanh` method\n// https://tc39.es/ecma262/#sec-math.atanh\n// Tor Browser bug: Math.atanh(-0) -> 0\n$({ target: 'Math', stat: true, forced: FORCED }, {\n atanh: function atanh(x) {\n var n = +x;\n return n === 0 ? n : log((1 + n) / (1 - n)) / 2;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar sign = require('../internals/math-sign');\n\nvar abs = Math.abs;\nvar pow = Math.pow;\n\n// `Math.cbrt` method\n// https://tc39.es/ecma262/#sec-math.cbrt\n$({ target: 'Math', stat: true }, {\n cbrt: function cbrt(x) {\n var n = +x;\n return sign(n) * pow(abs(n), 1 / 3);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\n\nvar floor = Math.floor;\nvar log = Math.log;\nvar LOG2E = Math.LOG2E;\n\n// `Math.clz32` method\n// https://tc39.es/ecma262/#sec-math.clz32\n$({ target: 'Math', stat: true }, {\n clz32: function clz32(x) {\n var n = x >>> 0;\n return n ? 31 - floor(log(n + 0.5) * LOG2E) : 32;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\n// eslint-disable-next-line es/no-math-cosh -- required for testing\nvar $cosh = Math.cosh;\nvar abs = Math.abs;\nvar E = Math.E;\n\nvar FORCED = !$cosh || $cosh(710) === Infinity;\n\n// `Math.cosh` method\n// https://tc39.es/ecma262/#sec-math.cosh\n$({ target: 'Math', stat: true, forced: FORCED }, {\n cosh: function cosh(x) {\n var t = expm1(abs(x) - 1) + 1;\n return (t + 1 / (t * E * E)) * (E / 2);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\n// `Math.expm1` method\n// https://tc39.es/ecma262/#sec-math.expm1\n// eslint-disable-next-line es/no-math-expm1 -- required for testing\n$({ target: 'Math', stat: true, forced: expm1 !== Math.expm1 }, { expm1: expm1 });\n","'use strict';\nvar $ = require('../internals/export');\nvar fround = require('../internals/math-fround');\n\n// `Math.fround` method\n// https://tc39.es/ecma262/#sec-math.fround\n$({ target: 'Math', stat: true }, { fround: fround });\n","'use strict';\nvar $ = require('../internals/export');\n\n// eslint-disable-next-line es/no-math-hypot -- required for testing\nvar $hypot = Math.hypot;\nvar abs = Math.abs;\nvar sqrt = Math.sqrt;\n\n// Chrome 77 bug\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\nvar FORCED = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\n\n// `Math.hypot` method\n// https://tc39.es/ecma262/#sec-math.hypot\n$({ target: 'Math', stat: true, arity: 2, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n hypot: function hypot(value1, value2) {\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * sqrt(sum);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-math-imul -- required for testing\nvar $imul = Math.imul;\n\nvar FORCED = fails(function () {\n return $imul(0xFFFFFFFF, 5) !== -5 || $imul.length !== 2;\n});\n\n// `Math.imul` method\n// https://tc39.es/ecma262/#sec-math.imul\n// some WebKit versions fails with big numbers, some has wrong arity\n$({ target: 'Math', stat: true, forced: FORCED }, {\n imul: function imul(x, y) {\n var UINT16 = 0xFFFF;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar log10 = require('../internals/math-log10');\n\n// `Math.log10` method\n// https://tc39.es/ecma262/#sec-math.log10\n$({ target: 'Math', stat: true }, {\n log10: log10\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar log1p = require('../internals/math-log1p');\n\n// `Math.log1p` method\n// https://tc39.es/ecma262/#sec-math.log1p\n$({ target: 'Math', stat: true }, { log1p: log1p });\n","'use strict';\nvar $ = require('../internals/export');\n\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\n// `Math.log2` method\n// https://tc39.es/ecma262/#sec-math.log2\n$({ target: 'Math', stat: true }, {\n log2: function log2(x) {\n return log(x) / LN2;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar sign = require('../internals/math-sign');\n\n// `Math.sign` method\n// https://tc39.es/ecma262/#sec-math.sign\n$({ target: 'Math', stat: true }, {\n sign: sign\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar expm1 = require('../internals/math-expm1');\n\nvar abs = Math.abs;\nvar exp = Math.exp;\nvar E = Math.E;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-math-sinh -- required for testing\n return Math.sinh(-2e-17) !== -2e-17;\n});\n\n// `Math.sinh` method\n// https://tc39.es/ecma262/#sec-math.sinh\n// V8 near Chromium 38 has a problem with very small numbers\n$({ target: 'Math', stat: true, forced: FORCED }, {\n sinh: function sinh(x) {\n var n = +x;\n return abs(n) < 1 ? (expm1(n) - expm1(-n)) / 2 : (exp(n - 1) - exp(-n - 1)) * (E / 2);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar expm1 = require('../internals/math-expm1');\n\nvar exp = Math.exp;\n\n// `Math.tanh` method\n// https://tc39.es/ecma262/#sec-math.tanh\n$({ target: 'Math', stat: true }, {\n tanh: function tanh(x) {\n var n = +x;\n var a = expm1(n);\n var b = expm1(-n);\n return a === Infinity ? 1 : b === Infinity ? -1 : (a - b) / (exp(n) + exp(-n));\n }\n});\n","'use strict';\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","'use strict';\nvar $ = require('../internals/export');\nvar trunc = require('../internals/math-trunc');\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n$({ target: 'Math', stat: true }, {\n trunc: trunc\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar path = require('../internals/path');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar hasOwn = require('../internals/has-own-property');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar thisNumberValue = require('../internals/this-number-value');\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = globalThis[NUMBER];\nvar PureNumberNamespace = path[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = globalThis.TypeError;\nvar stringSlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n var primValue = toPrimitive(value, 'number');\n return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (isSymbol(it)) throw new TypeError('Cannot convert a Symbol value to a number');\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = charCodeAt(it, 0);\n if (first === 43 || first === 45) {\n third = charCodeAt(it, 2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (charCodeAt(it, 1)) {\n // fast equal of /^0b[01]+$/i\n case 66:\n case 98:\n radix = 2;\n maxCode = 49;\n break;\n // fast equal of /^0o[0-7]+$/i\n case 79:\n case 111:\n radix = 8;\n maxCode = 55;\n break;\n default:\n return +it;\n }\n digits = stringSlice(it, 2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = charCodeAt(digits, index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nvar FORCED = isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'));\n\nvar calledWithNew = function (dummy) {\n // includes check on 1..constructor(foo) case\n return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); });\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nvar NumberWrapper = function Number(value) {\n var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n;\n};\n\nNumberWrapper.prototype = NumberPrototype;\nif (FORCED && !IS_PURE) NumberPrototype.constructor = NumberWrapper;\n\n$({ global: true, constructor: true, wrap: true, forced: FORCED }, {\n Number: NumberWrapper\n});\n\n// Use `internal/copy-constructor-properties` helper in `core-js@4`\nvar copyConstructorProperties = function (target, source) {\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(source) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (hasOwn(source, key = keys[j]) && !hasOwn(target, key)) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n\nif (IS_PURE && PureNumberNamespace) copyConstructorProperties(path[NUMBER], PureNumberNamespace);\nif (FORCED || IS_PURE) copyConstructorProperties(path[NUMBER], NativeNumber);\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, {\n EPSILON: Math.pow(2, -52)\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","'use strict';\nvar $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.isNaN` method\n// https://tc39.es/ecma262/#sec-number.isnan\n$({ target: 'Number', stat: true }, {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\nvar abs = Math.abs;\n\n// `Number.isSafeInteger` method\n// https://tc39.es/ecma262/#sec-number.issafeinteger\n$({ target: 'Number', stat: true }, {\n isSafeInteger: function isSafeInteger(number) {\n return isIntegralNumber(number) && abs(number) <= 0x1FFFFFFFFFFFFF;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.MAX_SAFE_INTEGER` constant\n// https://tc39.es/ecma262/#sec-number.max_safe_integer\n$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, {\n MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Number.MIN_SAFE_INTEGER` constant\n// https://tc39.es/ecma262/#sec-number.min_safe_integer\n$({ target: 'Number', stat: true, nonConfigurable: true, nonWritable: true }, {\n MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar parseFloat = require('../internals/number-parse-float');\n\n// `Number.parseFloat` method\n// https://tc39.es/ecma262/#sec-number.parseFloat\n// eslint-disable-next-line es/no-number-parsefloat -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseFloat !== parseFloat }, {\n parseFloat: parseFloat\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar parseInt = require('../internals/number-parse-int');\n\n// `Number.parseInt` method\n// https://tc39.es/ecma262/#sec-number.parseint\n// eslint-disable-next-line es/no-number-parseint -- required for testing\n$({ target: 'Number', stat: true, forced: Number.parseInt !== parseInt }, {\n parseInt: parseInt\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar log10 = require('../internals/math-log10');\nvar fails = require('../internals/fails');\n\nvar $RangeError = RangeError;\nvar $String = String;\nvar $isFinite = isFinite;\nvar abs = Math.abs;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar round = Math.round;\nvar nativeToExponential = uncurryThis(1.0.toExponential);\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\n\n// Edge 17-\nvar ROUNDS_PROPERLY = nativeToExponential(-6.9e-11, 4) === '-6.9000e-11'\n // IE11- && Edge 14-\n && nativeToExponential(1.255, 2) === '1.25e+0'\n // FF86-, V8 ~ Chrome 49-50\n && nativeToExponential(12345, 3) === '1.235e+4'\n // FF86-, V8 ~ Chrome 49-50\n && nativeToExponential(25, 0) === '3e+1';\n\n// IE8-\nvar throwsOnInfinityFraction = function () {\n return fails(function () {\n nativeToExponential(1, Infinity);\n }) && fails(function () {\n nativeToExponential(1, -Infinity);\n });\n};\n\n// Safari <11 && FF <50\nvar properNonFiniteThisCheck = function () {\n return !fails(function () {\n nativeToExponential(Infinity, Infinity);\n nativeToExponential(NaN, Infinity);\n });\n};\n\nvar FORCED = !ROUNDS_PROPERLY || !throwsOnInfinityFraction() || !properNonFiniteThisCheck();\n\n// `Number.prototype.toExponential` method\n// https://tc39.es/ecma262/#sec-number.prototype.toexponential\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toExponential: function toExponential(fractionDigits) {\n var x = thisNumberValue(this);\n if (fractionDigits === undefined) return nativeToExponential(x);\n var f = toIntegerOrInfinity(fractionDigits);\n if (!$isFinite(x)) return String(x);\n // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n if (f < 0 || f > 20) throw new $RangeError('Incorrect fraction digits');\n if (ROUNDS_PROPERLY) return nativeToExponential(x, f);\n var s = '';\n var m, e, c, d;\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x === 0) {\n e = 0;\n m = repeat('0', f + 1);\n } else {\n // this block is based on https://gist.github.com/SheetJSDev/1100ad56b9f856c95299ed0e068eea08\n // TODO: improve accuracy with big fraction digits\n var l = log10(x);\n e = floor(l);\n var w = pow(10, e - f);\n var n = round(x / w);\n if (2 * x >= (2 * n + 1) * w) {\n n += 1;\n }\n if (n >= pow(10, f + 1)) {\n n /= 10;\n e += 1;\n }\n m = $String(n);\n }\n if (f !== 0) {\n m = stringSlice(m, 0, 1) + '.' + stringSlice(m, 1);\n }\n if (e === 0) {\n c = '+';\n d = '0';\n } else {\n c = e > 0 ? '+' : '-';\n d = $String(abs(e));\n }\n m += 'e' + c + d;\n return s + m;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar $RangeError = RangeError;\nvar $String = String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar nativeToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = $String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return nativeToFixed(0.00008, 3) !== '0.000' ||\n nativeToFixed(0.9, 0) !== '1' ||\n nativeToFixed(1.255, 2) !== '1.25' ||\n nativeToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n if (fractDigits < 0 || fractDigits > 20) throw new $RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number !== number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return $String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar thisNumberValue = require('../internals/this-number-value');\n\nvar nativeToPrecision = uncurryThis(1.0.toPrecision);\n\nvar FORCED = fails(function () {\n // IE7-\n return nativeToPrecision(1, undefined) !== '1';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToPrecision({});\n});\n\n// `Number.prototype.toPrecision` method\n// https://tc39.es/ecma262/#sec-number.prototype.toprecision\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toPrecision: function toPrecision(precision) {\n return precision === undefined\n ? nativeToPrecision(thisNumberValue(this))\n : nativeToPrecision(thisNumberValue(this), precision);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\n assign: assign\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar create = require('../internals/object-create');\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n create: create\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineGetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __defineGetter__: function __defineGetter__(P, getter) {\n definePropertyModule.f(toObject(this), P, { get: aCallable(getter), enumerable: true, configurable: true });\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties').f;\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\n// eslint-disable-next-line es/no-object-defineproperty -- safe\n$({ target: 'Object', stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {\n defineProperty: defineProperty\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar definePropertyModule = require('../internals/object-define-property');\n\n// `Object.prototype.__defineSetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __defineSetter__: function __defineSetter__(P, setter) {\n definePropertyModule.f(toObject(this), P, { set: aCallable(setter), enumerable: true, configurable: true });\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $entries = require('../internals/object-to-array').entries;\n\n// `Object.entries` method\n// https://tc39.es/ecma262/#sec-object.entries\n$({ target: 'Object', stat: true }, {\n entries: function entries(O) {\n return $entries(O);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar iterate = require('../internals/iterate');\nvar createProperty = require('../internals/create-property');\n\n// `Object.fromEntries` method\n// https://github.com/tc39/proposal-object-from-entries\n$({ target: 'Object', stat: true }, {\n fromEntries: function fromEntries(iterable) {\n var obj = {};\n iterate(iterable, function (k, v) {\n createProperty(obj, k, v);\n }, { AS_ENTRIES: true });\n return obj;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FORCED = !DESCRIPTORS || fails(function () { nativeGetOwnPropertyDescriptor(1); });\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names-external').f;\n\n// eslint-disable-next-line es/no-object-getownpropertynames -- required for testing\nvar FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n getOwnPropertyNames: getOwnPropertyNames\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar toObject = require('../internals/to-object');\n\n// V8 ~ Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FORCED = !NATIVE_SYMBOL || fails(function () { getOwnPropertySymbolsModule.f(1); });\n\n// `Object.getOwnPropertySymbols` method\n// https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n$({ target: 'Object', stat: true, forced: FORCED }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toPropertyKey = require('../internals/to-property-key');\nvar iterate = require('../internals/iterate');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-groupby -- testing\nvar nativeGroupBy = Object.groupBy;\nvar create = getBuiltIn('Object', 'create');\nvar push = uncurryThis([].push);\n\nvar DOES_NOT_WORK_WITH_PRIMITIVES = !nativeGroupBy || fails(function () {\n return nativeGroupBy('ab', function (it) {\n return it;\n }).a.length !== 1;\n});\n\n// `Object.groupBy` method\n// https://github.com/tc39/proposal-array-grouping\n$({ target: 'Object', stat: true, forced: DOES_NOT_WORK_WITH_PRIMITIVES }, {\n groupBy: function groupBy(items, callbackfn) {\n requireObjectCoercible(items);\n aCallable(callbackfn);\n var obj = create(null);\n var k = 0;\n iterate(items, function (value) {\n var key = toPropertyKey(callbackfn(value, k++));\n // in some IE versions, `hasOwnProperty` returns incorrect result on integer keys\n // but since it's a `null` prototype object, we can safely use `in`\n if (key in obj) push(obj[key], value);\n else obj[key] = [value];\n });\n return obj;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\n\n// `Object.hasOwn` method\n// https://tc39.es/ecma262/#sec-object.hasown\n$({ target: 'Object', stat: true }, {\n hasOwn: hasOwn\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $isExtensible = require('../internals/object-is-extensible');\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\n// eslint-disable-next-line es/no-object-isextensible -- safe\n$({ target: 'Object', stat: true, forced: Object.isExtensible !== $isExtensible }, {\n isExtensible: $isExtensible\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar $isFrozen = Object.isFrozen;\n\nvar FORCED = ARRAY_BUFFER_NON_EXTENSIBLE || fails(function () { $isFrozen(1); });\n\n// `Object.isFrozen` method\n// https://tc39.es/ecma262/#sec-object.isfrozen\n$({ target: 'Object', stat: true, forced: FORCED }, {\n isFrozen: function isFrozen(it) {\n if (!isObject(it)) return true;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return true;\n return $isFrozen ? $isFrozen(it) : false;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar $isSealed = Object.isSealed;\n\nvar FORCED = ARRAY_BUFFER_NON_EXTENSIBLE || fails(function () { $isSealed(1); });\n\n// `Object.isSealed` method\n// https://tc39.es/ecma262/#sec-object.issealed\n$({ target: 'Object', stat: true, forced: FORCED }, {\n isSealed: function isSealed(it) {\n if (!isObject(it)) return true;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === 'ArrayBuffer') return true;\n return $isSealed ? $isSealed(it) : false;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar is = require('../internals/same-value');\n\n// `Object.is` method\n// https://tc39.es/ecma262/#sec-object.is\n$({ target: 'Object', stat: true }, {\n is: is\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Object.prototype.__lookupGetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __lookupGetter__: function __lookupGetter__(P) {\n var O = toObject(this);\n var key = toPropertyKey(P);\n var desc;\n do {\n if (desc = getOwnPropertyDescriptor(O, key)) return desc.get;\n } while (O = getPrototypeOf(O));\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar FORCED = require('../internals/object-prototype-accessors-forced');\nvar toObject = require('../internals/to-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Object.prototype.__lookupSetter__` method\n// https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__\nif (DESCRIPTORS) {\n $({ target: 'Object', proto: true, forced: FORCED }, {\n __lookupSetter__: function __lookupSetter__(P) {\n var O = toObject(this);\n var key = toPropertyKey(P);\n var desc;\n do {\n if (desc = getOwnPropertyDescriptor(O, key)) return desc.set;\n } while (O = getPrototypeOf(O));\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-preventextensions -- safe\nvar $preventExtensions = Object.preventExtensions;\nvar FAILS_ON_PRIMITIVES = fails(function () { $preventExtensions(1); });\n\n// `Object.preventExtensions` method\n// https://tc39.es/ecma262/#sec-object.preventextensions\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n preventExtensions: function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(onFreeze(it)) : it;\n }\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar isObject = require('../internals/is-object');\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\nvar toObject = require('../internals/to-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nvar getPrototypeOf = Object.getPrototypeOf;\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nvar setPrototypeOf = Object.setPrototypeOf;\nvar ObjectPrototype = Object.prototype;\nvar PROTO = '__proto__';\n\n// `Object.prototype.__proto__` accessor\n// https://tc39.es/ecma262/#sec-object.prototype.__proto__\nif (DESCRIPTORS && getPrototypeOf && setPrototypeOf && !(PROTO in ObjectPrototype)) try {\n defineBuiltInAccessor(ObjectPrototype, PROTO, {\n configurable: true,\n get: function __proto__() {\n return getPrototypeOf(toObject(this));\n },\n set: function __proto__(proto) {\n var O = requireObjectCoercible(this);\n if (isPossiblePrototype(proto) && isObject(O)) {\n setPrototypeOf(O, proto);\n }\n }\n });\n} catch (error) { /* empty */ }\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-seal -- safe\nvar $seal = Object.seal;\nvar FAILS_ON_PRIMITIVES = fails(function () { $seal(1); });\n\n// `Object.seal` method\n// https://tc39.es/ecma262/#sec-object.seal\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n seal: function seal(it) {\n return $seal && isObject(it) ? $seal(onFreeze(it)) : it;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n$({ target: 'Object', stat: true }, {\n setPrototypeOf: setPrototypeOf\n});\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n defineBuiltIn(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseFloat = require('../internals/number-parse-float');\n\n// `parseFloat` method\n// https://tc39.es/ecma262/#sec-parsefloat-string\n$({ global: true, forced: parseFloat !== $parseFloat }, {\n parseFloat: $parseFloat\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $parseInt = require('../internals/number-parse-int');\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\n$({ global: true, forced: parseInt !== $parseInt }, {\n parseInt: $parseInt\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar functionApply = require('../internals/function-apply');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar fails = require('../internals/fails');\n\n// MS Edge argumentsList argument is optional\nvar OPTIONAL_ARGUMENTS_LIST = !fails(function () {\n // eslint-disable-next-line es/no-reflect -- required for testing\n Reflect.apply(function () { /* empty */ });\n});\n\n// `Reflect.apply` method\n// https://tc39.es/ecma262/#sec-reflect.apply\n$({ target: 'Reflect', stat: true, forced: OPTIONAL_ARGUMENTS_LIST }, {\n apply: function apply(target, thisArgument, argumentsList) {\n return functionApply(aCallable(target), thisArgument, anObject(argumentsList));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind');\nvar aConstructor = require('../internals/a-constructor');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aConstructor(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target === newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n apply(push, $args, args);\n return new (apply(bind, Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : ObjectPrototype);\n var result = apply(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar fails = require('../internals/fails');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\nvar ERROR_INSTEAD_OF_FALSE = fails(function () {\n // eslint-disable-next-line es/no-reflect -- required for testing\n Reflect.defineProperty(definePropertyModule.f({}, 1, { value: 1 }), 1, { value: 2 });\n});\n\n// `Reflect.defineProperty` method\n// https://tc39.es/ecma262/#sec-reflect.defineproperty\n$({ target: 'Reflect', stat: true, forced: ERROR_INSTEAD_OF_FALSE, sham: !DESCRIPTORS }, {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n var key = toPropertyKey(propertyKey);\n anObject(attributes);\n try {\n definePropertyModule.f(target, key, attributes);\n return true;\n } catch (error) {\n return false;\n }\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\n\n// `Reflect.deleteProperty` method\n// https://tc39.es/ecma262/#sec-reflect.deleteproperty\n$({ target: 'Reflect', stat: true }, {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var descriptor = getOwnPropertyDescriptor(anObject(target), propertyKey);\n return descriptor && !descriptor.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar anObject = require('../internals/an-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\n\n// `Reflect.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-reflect.getownpropertydescriptor\n$({ target: 'Reflect', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar objectGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\n// `Reflect.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-reflect.getprototypeof\n$({ target: 'Reflect', stat: true, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(target) {\n return objectGetPrototypeOf(anObject(target));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar isDataDescriptor = require('../internals/is-data-descriptor');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\n// `Reflect.get` method\n// https://tc39.es/ecma262/#sec-reflect.get\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var descriptor, prototype;\n if (anObject(target) === receiver) return target[propertyKey];\n descriptor = getOwnPropertyDescriptorModule.f(target, propertyKey);\n if (descriptor) return isDataDescriptor(descriptor)\n ? descriptor.value\n : descriptor.get === undefined ? undefined : call(descriptor.get, receiver);\n if (isObject(prototype = getPrototypeOf(target))) return get(prototype, propertyKey, receiver);\n}\n\n$({ target: 'Reflect', stat: true }, {\n get: get\n});\n","'use strict';\nvar $ = require('../internals/export');\n\n// `Reflect.has` method\n// https://tc39.es/ecma262/#sec-reflect.has\n$({ target: 'Reflect', stat: true }, {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar $isExtensible = require('../internals/object-is-extensible');\n\n// `Reflect.isExtensible` method\n// https://tc39.es/ecma262/#sec-reflect.isextensible\n$({ target: 'Reflect', stat: true }, {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible(target);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar ownKeys = require('../internals/own-keys');\n\n// `Reflect.ownKeys` method\n// https://tc39.es/ecma262/#sec-reflect.ownkeys\n$({ target: 'Reflect', stat: true }, {\n ownKeys: ownKeys\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar anObject = require('../internals/an-object');\nvar FREEZING = require('../internals/freezing');\n\n// `Reflect.preventExtensions` method\n// https://tc39.es/ecma262/#sec-reflect.preventextensions\n$({ target: 'Reflect', stat: true, sham: !FREEZING }, {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n var objectPreventExtensions = getBuiltIn('Object', 'preventExtensions');\n if (objectPreventExtensions) objectPreventExtensions(target);\n return true;\n } catch (error) {\n return false;\n }\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\nvar objectSetPrototypeOf = require('../internals/object-set-prototype-of');\n\n// `Reflect.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-reflect.setprototypeof\nif (objectSetPrototypeOf) $({ target: 'Reflect', stat: true }, {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n anObject(target);\n aPossiblePrototype(proto);\n try {\n objectSetPrototypeOf(target, proto);\n return true;\n } catch (error) {\n return false;\n }\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar isDataDescriptor = require('../internals/is-data-descriptor');\nvar fails = require('../internals/fails');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\n// `Reflect.set` method\n// https://tc39.es/ecma262/#sec-reflect.set\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDescriptor = getOwnPropertyDescriptorModule.f(anObject(target), propertyKey);\n var existingDescriptor, prototype, setter;\n if (!ownDescriptor) {\n if (isObject(prototype = getPrototypeOf(target))) {\n return set(prototype, propertyKey, V, receiver);\n }\n ownDescriptor = createPropertyDescriptor(0);\n }\n if (isDataDescriptor(ownDescriptor)) {\n if (ownDescriptor.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = getOwnPropertyDescriptorModule.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n definePropertyModule.f(receiver, propertyKey, existingDescriptor);\n } else definePropertyModule.f(receiver, propertyKey, createPropertyDescriptor(0, V));\n } else {\n setter = ownDescriptor.set;\n if (setter === undefined) return false;\n call(setter, receiver, V);\n } return true;\n}\n\n// MS Edge 17-18 Reflect.set allows setting the property to object\n// with non-writable property on the prototype\nvar MS_EDGE_BUG = fails(function () {\n var Constructor = function () { /* empty */ };\n var object = definePropertyModule.f(new Constructor(), 'a', { configurable: true });\n // eslint-disable-next-line es/no-reflect -- required for testing\n return Reflect.set(Constructor.prototype, 'a', 1, object) !== false;\n});\n\n$({ target: 'Reflect', stat: true, forced: MS_EDGE_BUG }, {\n set: set\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n$({ global: true }, { Reflect: {} });\n\n// Reflect[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-reflect-@@tostringtag\nsetToStringTag(globalThis.Reflect, 'Reflect', true);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = globalThis.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = globalThis.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only proper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = create(null);\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr += charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n result += chr;\n // ignore non-capturing groups\n if (stringSlice(string, index + 1, index + 3) === '?:') {\n continue;\n }\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true });\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar classof = require('../internals/classof-raw');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar getInternalState = require('../internals/internal-state').get;\n\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\n\n// `RegExp.prototype.dotAll` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall\nif (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {\n defineBuiltInAccessor(RegExpPrototype, 'dotAll', {\n configurable: true,\n get: function dotAll() {\n if (this === RegExpPrototype) return;\n // We can't use InternalStateModule.getterFor because\n // we don't add metadata for regexps created by a literal.\n if (classof(this) === 'RegExp') {\n return !!getInternalState(this).dotAll;\n }\n throw new $TypeError('Incompatible receiver, RegExp required');\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar MISSED_STICKY = require('../internals/regexp-sticky-helpers').MISSED_STICKY;\nvar classof = require('../internals/classof-raw');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar getInternalState = require('../internals/internal-state').get;\n\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\n\n// `RegExp.prototype.sticky` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky\nif (DESCRIPTORS && MISSED_STICKY) {\n defineBuiltInAccessor(RegExpPrototype, 'sticky', {\n configurable: true,\n get: function sticky() {\n if (this === RegExpPrototype) return;\n // We can't use InternalStateModule.getterFor because\n // we don't add metadata for regexps created by a literal.\n if (classof(this) === 'RegExp') {\n return !!getInternalState(this).sticky;\n }\n throw new $TypeError('Incompatible receiver, RegExp required');\n }\n });\n}\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar anObject = require('../internals/an-object');\nvar toString = require('../internals/to-string');\n\nvar DELEGATES_TO_EXEC = function () {\n var execCalled = false;\n var re = /[ac]/;\n re.exec = function () {\n execCalled = true;\n return /./.exec.apply(this, arguments);\n };\n return re.test('abc') === true && execCalled;\n}();\n\nvar nativeTest = /./.test;\n\n// `RegExp.prototype.test` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.test\n$({ target: 'RegExp', proto: true, forced: !DELEGATES_TO_EXEC }, {\n test: function (S) {\n var R = anObject(this);\n var string = toString(S);\n var exec = R.exec;\n if (!isCallable(exec)) return call(nativeTest, R, string);\n var result = call(exec, R, string);\n if (result === null) return false;\n anObject(result);\n return true;\n }\n});\n","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar defineBuiltIn = require('../internals/define-built-in');\nvar anObject = require('../internals/an-object');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar nativeToString = RegExpPrototype[TO_STRING];\n\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) !== '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n defineBuiltIn(RegExpPrototype, TO_STRING, function toString() {\n var R = anObject(this);\n var pattern = $toString(R.source);\n var flags = $toString(getRegExpFlags(R));\n return '/' + pattern + '/' + flags;\n }, { unsafe: true });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar difference = require('../internals/set-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('difference') }, {\n difference: difference\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar intersection = require('../internals/set-intersection');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\nvar INCORRECT = !setMethodAcceptSetLike('intersection') || fails(function () {\n // eslint-disable-next-line es/no-array-from, es/no-set -- testing\n return String(Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])))) !== '3,2';\n});\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: INCORRECT }, {\n intersection: intersection\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isDisjointFrom = require('../internals/set-is-disjoint-from');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isDisjointFrom` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isDisjointFrom') }, {\n isDisjointFrom: isDisjointFrom\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isSubsetOf = require('../internals/set-is-subset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSubsetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSubsetOf') }, {\n isSubsetOf: isSubsetOf\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isSupersetOf = require('../internals/set-is-superset-of');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.isSupersetOf` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('isSupersetOf') }, {\n isSupersetOf: isSupersetOf\n});\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.set.constructor');\n","'use strict';\nvar $ = require('../internals/export');\nvar symmetricDifference = require('../internals/set-symmetric-difference');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('symmetricDifference') }, {\n symmetricDifference: symmetricDifference\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar union = require('../internals/set-union');\nvar setMethodAcceptSetLike = require('../internals/set-method-accept-set-like');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: !setMethodAcceptSetLike('union') }, {\n union: union\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.anchor` method\n// https://tc39.es/ecma262/#sec-string.prototype.anchor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('anchor') }, {\n anchor: function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\n\nvar charAt = uncurryThis(''.charAt);\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-string-prototype-at -- safe\n return '𠮷'.at(-2) !== '\\uD842';\n});\n\n// `String.prototype.at` method\n// https://tc39.es/ecma262/#sec-string.prototype.at\n$({ target: 'String', proto: true, forced: FORCED }, {\n at: function at(index) {\n var S = toString(requireObjectCoercible(this));\n var len = S.length;\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : charAt(S, k);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.big` method\n// https://tc39.es/ecma262/#sec-string.prototype.big\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('big') }, {\n big: function big() {\n return createHTML(this, 'big', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.blink` method\n// https://tc39.es/ecma262/#sec-string.prototype.blink\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('blink') }, {\n blink: function blink() {\n return createHTML(this, 'blink', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.bold` method\n// https://tc39.es/ecma262/#sec-string.prototype.bold\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, {\n bold: function bold() {\n return createHTML(this, 'b', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n codePointAt: function codePointAt(pos) {\n return codeAt(this, pos);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar slice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = that.length;\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = toString(searchString);\n return slice(that, end - search.length, end) === search;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.fixed` method\n// https://tc39.es/ecma262/#sec-string.prototype.fixed\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fixed') }, {\n fixed: function fixed() {\n return createHTML(this, 'tt', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.fontcolor` method\n// https://tc39.es/ecma262/#sec-string.prototype.fontcolor\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontcolor') }, {\n fontcolor: function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.fontsize` method\n// https://tc39.es/ecma262/#sec-string.prototype.fontsize\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('fontsize') }, {\n fontsize: function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar $RangeError = RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length !== 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, arity: 1, forced: INCORRECT_LENGTH }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fromCodePoint: function fromCodePoint(x) {\n var elements = [];\n var length = arguments.length;\n var i = 0;\n var code;\n while (length > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw new $RangeError(code + ' is not a valid code point');\n elements[i] = code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n } return join(elements, '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `String.prototype.isWellFormed` method\n// https://github.com/tc39/proposal-is-usv-string\n$({ target: 'String', proto: true }, {\n isWellFormed: function isWellFormed() {\n var S = toString(requireObjectCoercible(this));\n var length = S.length;\n for (var i = 0; i < length; i++) {\n var charCode = charCodeAt(S, i);\n // single UTF-16 code unit\n if ((charCode & 0xF800) !== 0xD800) continue;\n // unpaired surrogate\n if (charCode >= 0xDC00 || ++i >= length || (charCodeAt(S, i) & 0xFC00) !== 0xDC00) return false;\n } return true;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n italics: function italics() {\n return createHTML(this, 'i', '', '');\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return createIterResultObject(undefined, true);\n point = charAt(string, index);\n state.index += point.length;\n return createIterResultObject(point, false);\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\n","'use strict';\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar classof = require('../internals/classof-raw');\nvar isRegExp = require('../internals/is-regexp');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getMethod = require('../internals/get-method');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar InternalStateModule = require('../internals/internal-state');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar $TypeError = TypeError;\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar nativeMatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails(function () {\n nativeMatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n setInternalState(this, {\n type: REGEXP_STRING_ITERATOR,\n regexp: regexp,\n string: string,\n global: $global,\n unicode: fullUnicode,\n done: false\n });\n}, REGEXP_STRING, function next() {\n var state = getInternalState(this);\n if (state.done) return createIterResultObject(undefined, true);\n var R = state.regexp;\n var S = state.string;\n var match = regExpExec(R, S);\n if (match === null) {\n state.done = true;\n return createIterResultObject(undefined, true);\n }\n if (state.global) {\n if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n return createIterResultObject(match, false);\n }\n state.done = true;\n return createIterResultObject(match, false);\n});\n\nvar $matchAll = function (string) {\n var R = anObject(this);\n var S = toString(string);\n var C = speciesConstructor(R, RegExp);\n var flags = toString(getRegExpFlags(R));\n var matcher, $global, fullUnicode;\n matcher = new C(C === RegExp ? R.source : R, flags);\n $global = !!~stringIndexOf(flags, 'g');\n fullUnicode = !!~stringIndexOf(flags, 'u');\n matcher.lastIndex = toLength(R.lastIndex);\n return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n matchAll: function matchAll(regexp) {\n var O = requireObjectCoercible(this);\n var flags, S, matcher, rx;\n if (!isNullOrUndefined(regexp)) {\n if (isRegExp(regexp)) {\n flags = toString(requireObjectCoercible(getRegExpFlags(regexp)));\n if (!~stringIndexOf(flags, 'g')) throw new $TypeError('`.matchAll` does not allow non-global regexes');\n }\n if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);\n matcher = getMethod(regexp, MATCH_ALL);\n if (matcher === undefined && IS_PURE && classof(regexp) === 'RegExp') matcher = $matchAll;\n if (matcher) return call(matcher, regexp, O);\n } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll(O, regexp);\n S = toString(O);\n rx = new RegExp(regexp, 'g');\n return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || defineBuiltIn(RegExpPrototype, MATCH_ALL, $matchAll);\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padEnd = require('../internals/string-pad').end;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padEnd` method\n// https://tc39.es/ecma262/#sec-string.prototype.padend\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toObject = require('../internals/to-object');\nvar toString = require('../internals/to-string');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar push = uncurryThis([].push);\nvar join = uncurryThis([].join);\n\n// `String.raw` method\n// https://tc39.es/ecma262/#sec-string.raw\n$({ target: 'String', stat: true }, {\n raw: function raw(template) {\n var rawTemplate = toIndexedObject(toObject(template).raw);\n var literalSegments = lengthOfArrayLike(rawTemplate);\n if (!literalSegments) return '';\n var argumentsLength = arguments.length;\n var elements = [];\n var i = 0;\n while (true) {\n push(elements, toString(rawTemplate[i++]));\n if (i === literalSegments) return join(elements, '');\n if (i < argumentsLength) push(elements, toString(arguments[i]));\n }\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar getSubstitution = require('../internals/get-substitution');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar $TypeError = TypeError;\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\n\n// `String.prototype.replaceAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\n$({ target: 'String', proto: true }, {\n replaceAll: function replaceAll(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, position, replacement;\n var endOfLastMatch = 0;\n var result = '';\n if (!isNullOrUndefined(searchValue)) {\n IS_REG_EXP = isRegExp(searchValue);\n if (IS_REG_EXP) {\n flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\n if (!~indexOf(flags, 'g')) throw new $TypeError('`.replaceAll` does not allow non-global regexes');\n }\n replacer = getMethod(searchValue, REPLACE);\n if (replacer) return call(replacer, searchValue, O, replaceValue);\n if (IS_PURE && IS_REG_EXP) return replace(toString(O), searchValue, replaceValue);\n }\n string = toString(O);\n searchString = toString(searchValue);\n functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n searchLength = searchString.length;\n advanceBy = max(1, searchLength);\n position = indexOf(string, searchString);\n while (position !== -1) {\n replacement = functionalReplace\n ? toString(replaceValue(searchString, position, string))\n : getSubstitution(searchString, string, position, [], undefined, replaceValue);\n result += stringSlice(string, endOfLastMatch, position) + replacement;\n endOfLastMatch = position + searchLength;\n position = position + advanceBy > string.length ? -1 : indexOf(string, searchString, position + advanceBy);\n }\n if (endOfLastMatch < string.length) {\n result += stringSlice(string, endOfLastMatch);\n }\n return result;\n }\n});\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = isNullOrUndefined(searchValue) ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n var fullUnicode;\n if (global) {\n fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n\n var results = [];\n var result;\n while (true) {\n result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n var replacement;\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, SEARCH);\n return searcher ? call(searcher, regexp, O) : new RegExp(regexp)[SEARCH](toString(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeSearch, rx, S);\n\n if (res.done) return res.value;\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.small` method\n// https://tc39.es/ecma262/#sec-string.prototype.small\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('small') }, {\n small: function small() {\n return createHTML(this, 'small', '', '');\n }\n});\n","'use strict';\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar push = uncurryThis([].push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nvar BUGGY = 'abbc'.split(/(b)*/)[1] === 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length !== 4 ||\n 'ab'.split(/(?:ab)*/).length !== 2 ||\n '.'.split(/(.?)(.?)/).length !== 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length;\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit = '0'.split(undefined, 0).length ? function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n } : nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (!BUGGY) {\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n }\n\n var C = speciesConstructor(rx, RegExp);\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return regExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = regExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, BUGGY || !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar stringSlice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = toString(searchString);\n return stringSlice(that, index, index + search.length) === search;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n strike: function strike() {\n return createHTML(this, 'strike', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sub` method\n// https://tc39.es/ecma262/#sec-string.prototype.sub\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sub') }, {\n sub: function sub() {\n return createHTML(this, 'sub', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\n\nvar stringSlice = uncurryThis(''.slice);\nvar max = Math.max;\nvar min = Math.min;\n\n// eslint-disable-next-line unicorn/prefer-string-slice -- required for testing\nvar FORCED = !''.substr || 'ab'.substr(-1) !== 'b';\n\n// `String.prototype.substr` method\n// https://tc39.es/ecma262/#sec-string.prototype.substr\n$({ target: 'String', proto: true, forced: FORCED }, {\n substr: function substr(start, length) {\n var that = toString(requireObjectCoercible(this));\n var size = that.length;\n var intStart = toIntegerOrInfinity(start);\n var intLength, intEnd;\n if (intStart === Infinity) intStart = 0;\n if (intStart < 0) intStart = max(size + intStart, 0);\n intLength = length === undefined ? size : toIntegerOrInfinity(length);\n if (intLength <= 0 || intLength === Infinity) return '';\n intEnd = min(intStart + intLength, size);\n return intStart >= intEnd ? '' : stringSlice(that, intStart, intEnd);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.sup` method\n// https://tc39.es/ecma262/#sec-string.prototype.sup\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('sup') }, {\n sup: function sup() {\n return createHTML(this, 'sup', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\n\nvar $Array = Array;\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\n// eslint-disable-next-line es/no-string-prototype-towellformed -- safe\nvar $toWellFormed = ''.toWellFormed;\nvar REPLACEMENT_CHARACTER = '\\uFFFD';\n\n// Safari bug\nvar TO_STRING_CONVERSION_BUG = $toWellFormed && fails(function () {\n return call($toWellFormed, 1) !== '1';\n});\n\n// `String.prototype.toWellFormed` method\n// https://github.com/tc39/proposal-is-usv-string\n$({ target: 'String', proto: true, forced: TO_STRING_CONVERSION_BUG }, {\n toWellFormed: function toWellFormed() {\n var S = toString(requireObjectCoercible(this));\n if (TO_STRING_CONVERSION_BUG) return call($toWellFormed, S);\n var length = S.length;\n var result = $Array(length);\n for (var i = 0; i < length; i++) {\n var charCode = charCodeAt(S, i);\n // single UTF-16 code unit\n if ((charCode & 0xF800) !== 0xD800) result[i] = charAt(S, i);\n // unpaired surrogate\n else if (charCode >= 0xDC00 || i + 1 >= length || (charCodeAt(S, i + 1) & 0xFC00) !== 0xDC00) result[i] = REPLACEMENT_CHARACTER;\n // surrogate pair\n else {\n result[i] = charAt(S, i);\n result[++i] = charAt(S, i);\n }\n } return join(result, '');\n }\n});\n","'use strict';\n// TODO: Remove this line from `core-js@4`\nrequire('../modules/es.string.trim-right');\nvar $ = require('../internals/export');\nvar trimEnd = require('../internals/string-trim-end');\n\n// `String.prototype.trimEnd` method\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\n$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimEnd !== trimEnd }, {\n trimEnd: trimEnd\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar trimStart = require('../internals/string-trim-start');\n\n// `String.prototype.trimLeft` method\n// https://tc39.es/ecma262/#sec-string.prototype.trimleft\n// eslint-disable-next-line es/no-string-prototype-trimleft-trimright -- safe\n$({ target: 'String', proto: true, name: 'trimStart', forced: ''.trimLeft !== trimStart }, {\n trimLeft: trimStart\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar trimEnd = require('../internals/string-trim-end');\n\n// `String.prototype.trimRight` method\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\n// eslint-disable-next-line es/no-string-prototype-trimleft-trimright -- safe\n$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimRight !== trimEnd }, {\n trimRight: trimEnd\n});\n","'use strict';\n// TODO: Remove this line from `core-js@4`\nrequire('../modules/es.string.trim-left');\nvar $ = require('../internals/export');\nvar trimStart = require('../internals/string-trim-start');\n\n// `String.prototype.trimStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.trimstart\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\n$({ target: 'String', proto: true, name: 'trimStart', forced: ''.trimStart !== trimStart }, {\n trimStart: trimStart\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar globalThis = require('../internals/global-this');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = globalThis.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar RangeError = globalThis.RangeError;\nvar TypeError = globalThis.TypeError;\nvar QObject = globalThis.QObject;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar fallbackDefineProperty = function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n};\n\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a !== 7;\n}) ? fallbackDefineProperty : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function (O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n var $this = this === undefined ? globalThis : this;\n if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;\n var descriptor = createPropertyDescriptor(1, value);\n try {\n setSymbolDescriptor($this, tag, descriptor);\n } catch (error) {\n if (!(error instanceof RangeError)) throw error;\n fallbackDefineProperty($this, tag, descriptor);\n }\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n defineBuiltIn(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n defineBuiltIn($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n definePropertiesModule.f = $defineProperties;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n defineBuiltInAccessor(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n defineBuiltIn(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = globalThis.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('description detection')) === 'Symbol(description detection)';\n var thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);\n var symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineBuiltInAccessor(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = thisSymbolValue(this);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var string = symbolDescriptiveString(symbol);\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, constructor: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar hasOwn = require('../internals/has-own-property');\nvar toString = require('../internals/to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.for` method\n// https://tc39.es/ecma262/#sec-symbol.for\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n 'for': function (key) {\n var string = toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = getBuiltIn('Symbol')(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n }\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.hasInstance` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.hasinstance\ndefineWellKnownSymbol('hasInstance');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable\ndefineWellKnownSymbol('isConcatSpreadable');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/es.symbol.constructor');\nrequire('../modules/es.symbol.for');\nrequire('../modules/es.symbol.key-for');\nrequire('../modules/es.json.stringify');\nrequire('../modules/es.object.get-own-property-symbols');\n","'use strict';\nvar $ = require('../internals/export');\nvar hasOwn = require('../internals/has-own-property');\nvar isSymbol = require('../internals/is-symbol');\nvar tryToString = require('../internals/try-to-string');\nvar shared = require('../internals/shared');\nvar NATIVE_SYMBOL_REGISTRY = require('../internals/symbol-registry-detection');\n\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\n\n// `Symbol.keyFor` method\n// https://tc39.es/ecma262/#sec-symbol.keyfor\n$({ target: 'Symbol', stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n }\n});\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.matchAll` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.matchall\ndefineWellKnownSymbol('matchAll');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.match` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.match\ndefineWellKnownSymbol('match');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.replace` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.replace\ndefineWellKnownSymbol('replace');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.search` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.search\ndefineWellKnownSymbol('search');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.species` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.species\ndefineWellKnownSymbol('species');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.split` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.split\ndefineWellKnownSymbol('split');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar defineSymbolToPrimitive = require('../internals/symbol-define-to-primitive');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\ndefineSymbolToPrimitive();\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag(getBuiltIn('Symbol'), 'Symbol');\n","'use strict';\nvar defineWellKnownSymbol = require('../internals/well-known-symbol-define');\n\n// `Symbol.unscopables` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.unscopables\ndefineWellKnownSymbol('unscopables');\n","'use strict';\nvar FREEZING = require('../internals/freezing');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar fails = require('../internals/fails');\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\n\nvar $Object = Object;\n// eslint-disable-next-line es/no-array-isarray -- safe\nvar isArray = Array.isArray;\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = $Object.isExtensible;\n// eslint-disable-next-line es/no-object-isfrozen -- safe\nvar isFrozen = $Object.isFrozen;\n// eslint-disable-next-line es/no-object-issealed -- safe\nvar isSealed = $Object.isSealed;\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar freeze = $Object.freeze;\n// eslint-disable-next-line es/no-object-seal -- safe\nvar seal = $Object.seal;\n\nvar IS_IE11 = !globalThis.ActiveXObject && 'ActiveXObject' in globalThis;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\nvar WeakMapPrototype = $WeakMap.prototype;\nvar nativeSet = uncurryThis(WeakMapPrototype.set);\n\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\nvar hasMSEdgeFreezingBug = function () {\n return FREEZING && fails(function () {\n var frozenArray = freeze([]);\n nativeSet(new $WeakMap(), frozenArray, 1);\n return !isFrozen(frozenArray);\n });\n};\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n defineBuiltIns(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n// Chakra Edge frozen keys fix\n} else if (hasMSEdgeFreezingBug()) {\n defineBuiltIns(WeakMapPrototype, {\n set: function set(key, value) {\n var arrayIntegrityLevel;\n if (isArray(key)) {\n if (isFrozen(key)) arrayIntegrityLevel = freeze;\n else if (isSealed(key)) arrayIntegrityLevel = seal;\n }\n nativeSet(this, key, value);\n if (arrayIntegrityLevel) arrayIntegrityLevel(key);\n return this;\n }\n });\n}\n","'use strict';\n// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-map.constructor');\n"],"names":["Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","self","document","createElement","createElementNS","view","classListProp","protoProp","elemCtrProto","objCtr","Object","strTrim","String","trim","replace","arrIndexOf","Array","indexOf","item","i","len","length","DOMEx","type","message","name","code","DOMException","checkTokenAndGetIndex","classList","token","test","call","ClassList","elem","trimmedClasses","getAttribute","classes","split","push","_updateClassName","setAttribute","toString","classListProto","classListGetter","Error","contains","add","tokens","arguments","l","updated","remove","index","splice","toggle","force","result","method","join","defineProperty","classListPropDesc","get","enumerable","configurable","ex","number","__defineGetter__","testElement","createMethod","original","DOMTokenList","_toggle","global","globalThis","__symbol__","symbolPrefix","initZone","performance","mark","performanceMeasure","label","ZoneImpl","_","assertZonePatched","patches","root","zone","current","parent","_currentZoneFrame","currentTask","_currentTask","__load_patch","fn","ignoreDuplicate","hasOwnProperty","checkDuplicate","perfName","_api","_parent","_name","constructor","zoneSpec","_properties","properties","_zoneDelegate","_ZoneDelegate","key","getZoneWith","fork","wrap","callback","source","_callback","intercept","runGuarded","run","applyThis","applyArgs","invoke","error","handleError","runTask","task","NO_ZONE","zoneTask","data","isPeriodic","isRefreshable","state","notScheduled","eventTask","macroTask","reEntryGuard","running","_transitionTo","scheduled","previousTask","cancelFn","undefined","invokeTask","unknown","scheduling","zoneDelegates","_zoneDelegates","_updateTaskCount","scheduleTask","newZone","_zone","err","scheduleMicroTask","customSchedule","ZoneTask","microTask","scheduleMacroTask","customCancel","scheduleEventTask","cancelTask","canceling","runCount","count","DELEGATE_ZS","onHasTask","delegate","target","hasTaskState","hasTask","onScheduleTask","onInvokeTask","onCancelTask","parentDelegate","_taskCounts","_parentDelegate","_forkZS","onFork","_forkDlgt","_forkCurrZone","_interceptZS","onIntercept","_interceptDlgt","_interceptCurrZone","_invokeZS","onInvoke","_invokeDlgt","_invokeCurrZone","_handleErrorZS","onHandleError","_handleErrorDlgt","_handleErrorCurrZone","_scheduleTaskZS","_scheduleTaskDlgt","_scheduleTaskCurrZone","_invokeTaskZS","_invokeTaskDlgt","_invokeTaskCurrZone","_cancelTaskZS","_cancelTaskDlgt","_cancelTaskCurrZone","_hasTaskZS","_hasTaskDlgt","_hasTaskDlgtOwner","_hasTaskCurrZone","zoneSpecHasTask","parentHasTask","targetZone","apply","returnTask","scheduleFn","value","isEmpty","counts","prev","next","change","options","_state","useG","args","_numberOfNestedTaskFrames","drainMicroTaskQueue","cancelScheduleRequest","toState","fromState1","fromState2","handleId","toJSON","symbolSetTimeout","symbolPromise","symbolThen","_microTaskQueue","_isDrainingMicrotaskQueue","nativeMicroTaskQueuePromise","nativeScheduleMicroTask","func","resolve","nativeThen","queue","onUnhandledError","microtaskDrainDone","symbol","currentZoneFrame","noop","showUncaughtError","patchEventTarget","patchOnProperties","patchMethod","bindArguments","patchThen","patchMacroTask","patchEventPrototype","isIEOrEdge","getGlobalObjects","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectCreate","ArraySlice","patchClass","wrapWithCurrentZone","filterProperties","attachOriginToPatched","_redefineProperty","patchCallbacks","loadZone","getOwnPropertyDescriptor","ObjectGetPrototypeOf","getPrototypeOf","create","slice","ADD_EVENT_LISTENER_STR","REMOVE_EVENT_LISTENER_STR","ZONE_SYMBOL_ADD_EVENT_LISTENER","ZONE_SYMBOL_REMOVE_EVENT_LISTENER","TRUE_STR","FALSE_STR","ZONE_SYMBOL_PREFIX","Zone","scheduleMacroTaskWithCurrentZone","zoneSymbol","isWindowExists","window","internalWindow","_global","REMOVE_ATTRIBUTE","patchPrototype","fnNames","prototypeDesc","isPropertyWritable","patched","propertyDesc","writable","set","isWebWorker","WorkerGlobalScope","isNode","process","isBrowser","isMix","zoneSymbolEventNames$1","enableBeforeunloadSymbol","wrapFn","event","eventNameSymbol","listener","errorEvent","filename","lineno","colno","preventDefault","returnValue","patchProperty","obj","prop","desc","onPropPatchedSymbol","originalDescGet","originalDescSet","eventName","newValue","previousValue","removeEventListener","addEventListener","removeAttribute","onProperties","j","originalInstanceKey","className","OriginalClass","a","instance","patchFn","proto","delegateName","patchDelegate","funcName","metaCreator","setNative","cbIdx","meta","isDetectedIEOrEdge","ieOrEdge","isIE","ua","navigator","userAgent","isFunction","isNumber","passiveSupported","OPTIMIZED_ZONE_EVENT_TASK_DATA","zoneSymbolEventNames","globalSources","EVENT_NAME_SYMBOL_REGX","RegExp","IMMEDIATE_PROPAGATION_SYMBOL","prepareEventNames","eventNameToString","falseEventName","trueEventName","symbolCapture","api","apis","patchOptions","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","rm","LISTENERS_EVENT_LISTENER","listeners","REMOVE_ALL_LISTENERS_EVENT_LISTENER","rmAll","zoneSymbolAddEventListener","ADD_EVENT_LISTENER_SOURCE","PREPEND_EVENT_LISTENER","PREPEND_EVENT_LISTENER_SOURCE","isRemoved","handleEvent","originalDelegate","once","globalCallback","context","isCapture","tasks","errors","copyTasks","globalZoneAwareCallback","globalZoneAwareCaptureCallback","patchEventTargetMethods","useGlobalCallback","validateHandler","vh","chkDup","returnTarget","rt","taskData","nativeAddEventListener","nativeRemoveEventListener","nativeListeners","nativeRemoveAllListeners","nativePrependEventListener","prepend","buildEventListenerOptions","passive","capture","customScheduleGlobal","isExisting","customCancelGlobal","symbolEventNames","symbolEventName","existingTasks","existingTask","removeAbortListener","allRemoved","customScheduleNonGlobal","customSchedulePrepend","customCancelNonGlobal","compareTaskCallbackVsDelegate","typeOfDelegate","compare","diff","unpatchedEvents","passiveEvents","copyEventListenerOptions","newOptions","signal","makeAddListener","nativeListener","addSource","customScheduleFn","customCancelFn","transferEventName","isHandleEvent","aborted","constructorName","targetSource","onAbort","unshift","onPropertySymbol","findEventTasks","keys","match","exec","evtName","symbolCaptureEventName","captureTasks","removeTasks","results","foundTasks","captureFalseTasks","captureTrueTasks","concat","Event","patchQueueMicrotask","taskSymbol","patchTimer","setName","cancelName","nameSuffix","clearNative","tasksByHandleId","handleOrId","handle","refresh","clearTask","delay","timer","originalRefresh","id","patchCustomElements","callbacks","customElements","eventTargetPatch","eventNames","EVENT_TARGET","patchEvent","ignoreProperties","tip","filter","ip","targetIgnoreProperties","op","patchFilteredProperties","filteredProperties","getOnEventNames","getOwnPropertyNames","startsWith","map","substring","propertyDescriptorPatch","patchTargets","ignoreErrorProperties","patchBrowser","legacyPatch","clear","blockingMethods","s","XMLHttpRequestEventTarget","patchXHR","XHR_TASK","XHR_SYNC","XHR_LISTENER","XHR_SCHEDULED","XHR_URL","XHR_ERROR_BEFORE_SCHEDULED","XMLHttpRequest","XMLHttpRequestPrototype","findPendingTask","oriAddListener","oriRemoveListener","XMLHttpRequestEventTargetPrototype","READY_STATE_CHANGE","SCHEDULED","newListener","readyState","DONE","loadTasks","status","oriInvoke","storedTask","sendNative","placeholderCallback","abortNative","openNative","XMLHTTPREQUEST_SOURCE","fetchTaskAborting","fetchTaskScheduling","url","geolocation","findPromiseRejectionHandler","e","eventTasks","forEach","PromiseRejectionEvent","evt","promise","reason","rejection","patchPromise","readableObjectToString","JSON","stringify","_uncaughtPromiseErrors","isDisableWrappingUncaughtPromiseRejection","creationTrace","console","stack","uncaughtPromiseError","shift","throwOriginal","handleUnhandledRejection","UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL","handler","isThenable","then","forwardResolution","forwardRejection","ZoneAwarePromise","reject","symbolState","symbolValue","symbolFinally","symbolParentPromiseValue","symbolParentPromiseState","UNRESOLVED","RESOLVED","REJECTED","REJECTED_NO_CATCH","makeResolver","v","resolvePromise","wasCalled","wrapper","wrappedFunction","TYPE_ERROR","CURRENT_TASK_TRACE_SYMBOL","onceWrapper","TypeError","clearRejectedNoCatch","trace","scheduleResolveOrReject","REJECTION_HANDLED_HANDLER","chainPromise","onFulfilled","onRejected","promiseState","parentPromiseValue","isFinallyPromise","ZONE_AWARE_PROMISE_TO_STRING","AggregateError","withResolvers","res","rej","any","values","Symbol","iterator","Promise","promises","finished","race","onResolve","onReject","all","allWithCallback","allSettled","P","thenCallback","errorCallback","unresolvedCount","valueIndex","resolvedValues","curValueIndex","thenErr","executor","toStringTag","species","C","catch","finally","onFinally","NativePromise","symbolThenPatched","Ctor","originalThen","wrapped","zoneify","resultPromise","ctor","patchToString","originalFunctionToString","Function","ORIGINAL_DELEGATE_SYMBOL","PROMISE_SYMBOL","ERROR_SYMBOL","newFunctionToString","nativePromise","nativeError","originalObjectToString","PROMISE_OBJECT_TO_STRING","targetName","nativeDelegate","opts","descriptor","patchUtil","SYMBOL_BLACK_LISTED_EVENTS","SYMBOL_UNPATCHED_EVENTS","patchCommon","Zone$1"],"sourceRoot":"webpack:///","x_google_ignoreList":[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,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429]} \ No newline at end of file diff --git a/site/mitre/roboto-cyrillic-400-normal.woff b/site/mitre/roboto-cyrillic-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..44e012a96166e523d46994267d4f499134cb33d0 GIT binary patch literal 8572 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

    COS>p=r3eP069E{5=((I1=%a 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�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 G0002&1Enzl literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-greek-400-normal.woff b/site/mitre/roboto-greek-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..f8226bb9c657f183fad9e6f9d7dcf6340ba0385c GIT binary patch literal 6344 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-greek-ext-400-normal.woff b/site/mitre/roboto-greek-ext-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..0aea65afe133b0258366808e9591615254c7e9e7 GIT binary patch literal 1252 zcmYjRdrVVT96smV-qP~0Ewmt!NgoUW0|EsVM5Y8N4z}`i7!_KJyhaB~ot@%fL-&eo zh>t&}Q(p>d_1^tjX0l)M<=*ehIp_O5&b$&YKAZMsv& zHJ!6I#BqbULJbzNY;6h}spGFk#^Gl>zZ7i=N64a!jq2O9Q#>A>R94 zN58xC%=oG9Q1#J=&uuPEOv zj|HfZKurYd5g;0RfT$qaj3~rKe3+a7A(>1hqeK{sFeSs$SVjfe=k4A#*d%A;yg59e&kzs|BuBxI_Foq>pk&%*_A?H$g0097bFKkj7C=L_NNY|*aXV{Y7)oQ616#6d}aZquyOU3eB`;K-bz7;FIPmt(5`PQj9?pndUBB73_ z)zFWGHFa-@(8~9)$T+r+AWG#7M7{gSLX0-zctt3 z&?(=awJNEh^e`*{g%|70v~&PW9;);mmAjFT6$+<#)9gurW`oKmvr_D gyJdo2g-xK^8Wn_`wHBgUc87bgJNz6%{PAt{FCn^)yZ`_I literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-greek-ext-400-normal.woff2 b/site/mitre/roboto-greek-ext-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..47ce460fa9a827bd143a2cc1d70f6dd4b97352cf GIT binary patch literal 1496 zcmV;}1t1bO#^|f=L^k2vJm! zG68-Z0c>{d3teP$ehh!!R+zFi z-JPU2hiMtv&=% zoF#>G^mfu~?)EXT^#44%xYAf+PnzyRmrfXD`z+1P>BAPo{4DhHA0USWz_LS89mQb? zABjS9#>o$>WHQzW8;R`BAe^NUHzF)3jbtMQNT!1(r-dG4kAs(wv4FO-CDQ4kIzP2~ zoSY#@;vE6a3VVtBUB42^YNV-nntzi@nTPr4(7b z59jed?NA~bd7Y}>KJF3~Ly^xHX1dH0Z&7@&IhOvo9qFePuBDm#m=uoj{)JKSiP}pj z`Dx3gYwO=W+Q&7)OucTu? zKY$Z%c(~@@)6o3`{dGU3wq;7;q*k#MzDcI?Ydq)Gt=;QT+yA6}9BR$ZXuHSB4+E3Y0P{Ga%dcgsuHfaSoh{j~ScdZM zypF1!y;U|kWMy(gm+@FCZgEay8QRxcdXoKpt1l4nBG$_Ad7G+>>zh~*0QK9dIvv2P zXV)#BJhk%JZwCnIR7FaRc^V4>;^gT2r~_Ye``*8aR+RuBe^8TvZ&2cwU+&*Km9eY? zP>CQ=T=q{!b?`5%f030DBK)f4PUk6yfBJ#!T300m)?Uu1{~Q6Ka*yR`d;#=`;uL{^ z(gnCeTHy@)Y)8=Xq9f{gcro!Urp=L=VRGcwqVqkp0xnW7Ehe5Q-t?VF`AqT^D#akN zYL%c=DpQD2tq!9OC0c|aAz~#7v7954Q6g3WRz22oi5MjsRLWN?1*2A-GOTJu)J6wR z+;}0(c#a#N&G~o`mPw0RWlEH)XK{rS!mwB+*E0wasudy;0#wQ#A+e|G5cwvurXSUa zQG~<=noFRFxVG*rtu4Yq6_*A)MA|cs3_Z6_uNe?6IugRY$nmA-hPPu{xcj0>lEfhA z`O8U~6XU&f70FyTPOR#aye2!;(TWr^S7&+7C1qzxyoV*J=n&ThOG&FSFUr+s-0nLs z_AKcfZ0ApggUE9pgI7>)Xd2M literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-latin-400-normal.woff b/site/mitre/roboto-latin-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..4333e5ab936d9bb7a119d64379be68563b5945b0 GIT binary patch literal 17304 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�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�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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-latin-ext-400-normal.woff b/site/mitre/roboto-latin-ext-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..3658dd203a041c730c96784d49f92f48154bcb3f GIT binary patch literal 10724 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-latin-ext-400-normal.woff2 b/site/mitre/roboto-latin-ext-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..20c87e676ea8cca21679bc8886fd9566172771de GIT binary patch literal 12456 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-cyrillic-400-normal.woff b/site/mitre/roboto-mono-cyrillic-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..ef312145ac611dbf7b814b949d99d87b2d0eb992 GIT binary patch literal 9120 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-cyrillic-400-normal.woff2 b/site/mitre/roboto-mono-cyrillic-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a0f44185944a3d36c68be4e433b2f083364a1e46 GIT binary patch literal 7392 zcmV<693SI%Pew8T0RR91036@|4gdfE05)_0033t>0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-cyrillic-ext-400-normal.woff2 b/site/mitre/roboto-mono-cyrillic-ext-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..cce41ce7c6cf4772dd5848aefb262263c25644ca GIT binary patch literal 13696 zcmV-`HGj%?Pew8T0RR9105yOB4gdfE0BCdo05v550RR9100000000000000000000 z0000SGzMTlQ&d4zNC1Lz5eN!_tQdiaISYeU00A}vBm;w11Rw>41P72{3GS{`LRFkWDf>@`=`2{uRPmS)_3E`}9(hq` zTi&m9_H_>!Ue8GS$51(7kPu5U$gqIk<0Z?JNU5A25JW&BP`WTQmwsBlbmY{8nJ~=4 z5N5WuVYs_I^oFn+przJR#rG9@|Rw*9DDVLuMjo}vrImMvb_rAze< zvn~U-Q30S=s%CpD3i_BRXM7ArDXDWvor~VnANBx)hXbD=@CksZLQgVo)d)Kjb>#B0mxpv#-&^C76+W!9^PW#>aTE8`|PXXu{nW z;|WBOZ9vKbmU#Zg=gn8KVy3v ztivhi4C(`dz*8`;Dh~pH3RoRqB_qLpc|34GtWy^Q_^CRl2*9s0HKhO!03ZM`mC{T` zKc6>YAg77AWKHH8)IRN5#-X8 znNWNUGS+ZytsUrUw|dfNg=j-z>ORGpxLqYxEN3m(*U_P_b-Sm1Q3K7V=B{^B zX930*ncR#6f&U4(L~2c_4<(Ck>eg@EhnK05B^7APc};=OAbq{juB>qUJ0l<+c`&o0fBKYjk=&VXz=zfna;! z#8aFTdsA-choo37{(C;%(ife5@%+ZR{5?yl5`)7|8Ekge!cz+K=ckt0`u5s>dyYrN zSVJ^y^1yzHH)pgtQPs_@#VvF?WA0JLoHiTXQx~hUZkbNw-1VC_4MM_UOXvdahf7eR zqbN-knJU9|Ix#{b1oKi8(%q>OJ(jH(?edD z?zkfH@f#)>B*aDJO9^3y-5uH6mDwJSXDG)q4Y(luouICn70kes_15%zKofX`hJ6N9 z(RrP9g|cd7t0Zmj)T@bz3$UA91Lz%v@!tjQggL=SIR=2G~v&|z{N^o&-GVA-g%krs2J@PfmYou$m(hO zS8C}R8j7K3Giee0nkYQWWOAvQfKMwZ=Th_vtoH146s&e>nBI{CXB`oQapR*A@O}T8 zR@LiTXHCT^8V6sm%TIM7{nLPmTK~w@n_7Nh z{Xxy^X(>e>$#%5OR4j(r^p9!~I4Q}n-$v^%IY~haV~udVCmJu2v_n{NkZ&pS1flzLlM9XYTDa;A$_*Wyle#5f0B1Ce2H zkU1U=g___%c~KO+0M*yA%%&K@!eD~&j!eaf6-n)ov&1^7nz<|#Ip=bz!;!_5Jm`dt z2$1H*`TM|>RUz!bFoyzq(EEyz{JBceA*_IHkj>kg)>>h6&EV9R()-lty+ap7N)c5P z##d0gcxcSNWN9BrPzWD_CJcpC8BiV#owO4KI$wpbjng)GVC7nwF%@~P2Zry+2Ztto z0U?r(wD$)nyAKV8p}%Zgh!R~?JU7*d%VjDlKFy}kV-M0VvRSeUrX4D%d}gmWa{%(< zmetWzqub~tThiV4NOuET=}(8`4h34rH~_jcJq(dGnpJpj{Dp-lWydl#uXV%4U8v~H ziB*)O4&GKf%_loKr@uyUd~dH_`5d}x4qi46IP9XMS`m$J0)o~S&d8r&uA5{<5dD;l zHTKoYJrGj+C174*%sWftF&6Ar48=4!EHp3M%=EW2p?{*mCvdT83qEE7QwNW2F*-IU zgf_b&vPo1ztEiT^k<-R2Bpir#SfOevS!%cEfL({0ao~-T$}4QoB0;`bRggWq(dR6S zTst}I!q|lJAkUyv1-0Bt2cW?2eIIDVXCYvSPVqy7vstqYelWKb`Y>W5o|olbf_H$2 zcFPa@4!FvSqp?5mhe z##Ig2OWwkB_t3v&c#o9WORoG|xv?2c^XBss#;U?-V15pv|clJz!F9FdKG4?vmp7{`19O8%^) zF`rnn!dqnTLjL4*XJN`LqJXHPgBofI!M&2dPna|>7~J$M?A@7=6P?Y!1n6po7$r)l zbN)A9r*&!?A^vu8nrp*ofByl_o4!9y|9_R<-DCQZe@nfDw}-+t*JZsu#0S)za0%73 zxZG<$f?g0PrZYb}s6fks5qVF**2ZZ|D;N%if0=#4LCEHQg3&eXBWMqgln*Y&g0q&P zk~K^)hVVKnTSV~${WKq@f9^w-+vg|a)To}c;5kK4_E_9;$mm4KM^CN#UYM z{{zqAxG0m7mF)9n`qPs5BuVU|90ypmMYEwug9>AUo`E~M1~t4hTK3lOU^$|dl}bEV z@rf~TLwF31!PB?ndO08yu8)Bv>t7*ZpAY5>T|0QskUAIiCC(a+EcKpnxD`n6*s)EtGAaH&7aAV{kpcP`Y!9emn_x=lM)2>(JZ~vo9}ABSnaJ9=&z-# z&s>y(5ObbIX%^Ekg-)7QyaK0}CxThqzaEjT1No4q(X;zX zZ0ccC51RUNUi|Ca)I<9tNQf!ZQ{W|f&1>^@A$lFM^?YSc5m@ww>7WF~24O4ReBS4z zY`NMj)?U^EY!sUYSSEuv{9qb6<;xJ|@Z*hFctN(gfj`dS_g~Y;EEnfioP54!?TaF7 zrBQUC6FZ^ptR;!K5-4usU?<_zvW0-K?8>6NY6A?K%Mm3vWp=#$r2cm6$VWAGBYma7 zTZ#3tu{RPtJG0ld-79I!h%!k;4P+7gfqI#Ova(E1c_%=bt#ZjVmIz=ht0AQ=ty|1( zLp47F*&5RLLzEkp+$c$ztM=JO>MTFa1zpQElMMxCXk%g%k)~Ll$!JRk29TL@%y;`B zPPVYdc(Ji317kTEaq955vn&i^m09?>QIiYDfBPoE{9Q`-7SBz6R%Ega}`tO$PEXoo7uV>S3ER}bt{KkDIGF}v>|Uh1N;Vd4S$ z3_e$guZi9XwcQ6yq;QZ|0D3MYwhw;qA=E5wHulMkc*Vp{Bv?dWCz=J_Wa3=-hMt=q?n()4DhL zzIRQF+bVHC%{&n99u&2~Jo5$qWy$qHe_V(Kx> zS;Pt<#39OrmbI3G{j>KJG6s1av<%EUp~YPdTrBicnAbWyP22N$-jR8J@Mhk&HXLVP zC>i4R33{En-gq=FnDk2#?K;~FYf~m^8+;D<(3NuE32C{c0itH%7c9TEy=UI5#e_0i z2m{nA%-?Gx51E|QkEsd}hyGMZ=sY`0|Ld+baV->M^~CZ8QDA7}N5-4*?Y(7aUtkP{ zI!TrC8S8%2LMKSzwU~Ukn_xDPmWHbX3fXdOOR!2Yp$|HBIMw_ub*wjIm*Rl62~|0+ zOZ~3G{6pG82#2ZRNLzu^#F`TCMXV@{nZkZWLt|u=@fXo(XTso@W2SR&uY4Fq)Hw-} zs*Ih{SLl{>@Y#xyOJ<=KQ;|{DIx}z0%f zbR&U@=|HV97 zVG44h+IbWnWy~i99JJVBf*;PoM8^;_tU@Un<>h%^ZOEP1{)^6atuLY^ga%O)ic3`P zG$6cjOmE61m5U{XWC>qI6bh)BuU=ZJ8CMvV>X$ERnSy|9B2Q9ClS)Yyrd+*6o^KPv4<`%*^B20VN?F2C`H-SaF$|o$buTWf91&Vezx*h)owK#h z5FRN#rI)|YLAd>zogl(x&{YDLL^rNj(auOsZDXt`7kF*C444XAuKkfF9z(TlqgO<) z0N0n|=;z&r<`s*tDA`y>7MaVdRXe z!xx(AJ2dH)zq|Qt4&LQI34czw`xMzP6 z+yqr;Z4t0q#@96Nx|VJIKIu6F%;IIN3iBzn_2Ocp8#8zb(%b?Q;hS)|;uwiT;`oF& zr3eBvW0FbFy}%ggeIwd9nX17UrZ`X>a(S}F zG0Jl@16#_DOsk8>aKB)}>*5p`x zBJgaGC@6e9x=Nvw3BrYiUka13A>N3`lqyU%J4IpJauX{!5fN(6kixY^IYmEm5_8pTc|;`}R8$1T zyOC{+9Zvn|+r+KJt&5=eqvQ@SIwC2fYqczeH#+{wHK&t)%c-jf`fErp6G>|)dFiIV zaMlJZkv%Y>1sK!j0DFp-0$Ggd6=0yci}gwdP=2@mau#wH1OkWPbbBAf{TcGQA4vuE z`*FHN)D(X(rKr^_@%!KL#Pw~1^#L)|7)Qt8s1KjA(lGJ%e&QB0L~#ww$#bMUP|39Ub<#Fv@O>@ zG_opaWhANINC-89eyS^A>RMa(iK;Tdcoa{>4Uf1`@Yfh*>UPDDd@{3*)wfjXj8 z3^@IOZ;2>bNd~Kkx|zcX_ouod1*`)@2B___iamk$jh+5l>lnO+i#Y8XqH~bEqgv$ z0<_Wd?`BVY&BjldUHfbX_)wSL1_0Gf0jLYO`0$4QdRj8`pP!x$(YgBE>d<3M4wJK0 zw!~bZ7bwj8WfgANv1)TgG#We$$f*>1F5X~JBP5BlueHg6T8d&&uEfHck0 z?~6>}-Fk`In)g5b%T3Hhx{NN{l9Xljr+#Ls)mT0~G9Z$Ap=gBi+vC!C>{8lq2oWGQ z{PiOzL2L(pG+$|cVRie};_ZE#!dfO;g!?z$dU4xw@#SoD*v5&CAi1+FWk}>N@;^q) zs65XUF~aH519=hDx(B~vsVF6nxEo2=0A8+SE6<d`o7zCJ( zI!_G^IMDO}s?&GGx5oFY0`QLN90A|d*B}{hBz3GYPvQqs30nUk1v33Gr_@3A(r%TJ z#1ChZnjScGrX&fIa?EIByT+Xl zWMuemGjVDQ$snpy#8tLeT6{L0DJQMbIA$^f9doK{A}GvsK)kL8CA>p#9vu*rR-KIF z$$2vI!fN?y@!~sLdWot^56D8fVO-upkgW$Y+)|mem@0~@WB2xw29_wEYoDhs@##+# zR;1{PUjMYj)dSv+;l4`N)G+w8u(YO}R7FXr!XiP$*yH_EeUC7p;-fw&F(Ya>LN!I`@hk|VtB^AIq+%os(4P*fxFrKqK zVICfntVvIpySttREN8dPzWzwNX8NRKX6Uk>rN07r*(?a;s-HnJj$;!&o-7RvYBU&O z6t={AN49ycFp)(V=~IFsrkxqUi|Y}cM_DsRe63KN2Y}Z>x1(`d)rqH`(`J!+3{^R0`cG$JqwZC z6!72*r9mX3)Xm;o>zmXu$kMYyOjT5_r<7&S^TgP50wr8`stRDvAB(A^r>A>YE*b0H zZ^XehWGJgx@qtP#jqRP}r;Fol-Z3&9tXy#_ku7CQ*yoFh#q9HQ$jf;;X+`27>+B85 zYKe|QmZ!@yJb>thZW1`CDK_G-3%RbY?Z5Lz5drGc#VP?Vk$G?1T%5DdIonBnBQ|`f zvBYJCg~cR3QR=jyRzEua)A!#PHyZCjb!zP=u|PButp82&g2n&!xxw4tO>wmd*J)%9YA1A=MX9`n!Ov3Fzg? z_3|^lX98w3yZuAS^ain*Ugs0sP0NIJkzlMC)SfLae6*Jfr*}^bk_7{>I8ON_fa)gq z^lar@)tq}x&HOaKlqIL9z=IxgvzHvPjt$;LS(mJJ_j26V+A~_miV4m4>RbqKu#Y}yS;kc#VCl991E za{wK=9{n8QiE?wZmk3X+k7>g1BQ{#c(}XUS=&BL%)tzka6<#Yh?#7iIO*Z28}b;{o$Q$Cn$%A^ z4^5KB2agg#z_52M;S@r{8bkY;h)EXn94T?D^s6E$Jjdi@$C%JD{a6-t!~NGygaiPgcRz~mHcVVg zxc3jOIg3(RGP7uJ|7Z~u=1IVyO7|)bUz>;zbq}w<X6*R3kfrW^1ZP0$qhb!} zZVtQSG{?3~sF0{r*RNf`ed60&?pb26KLYj1@aA6+Z@g5$8uM4S)`vhK^&!CXJhMgH z64ihj8uG~zV&1;KQ&b^Yf?!f)b;$8k)C|4_MU^B`M#|IGW_RZ!@k zp6*j?!p|_~lWWt{3;c~#0pW!KiV{-2u~2C&B-JYvg#jSE%5j=?!(&vp*Ck-x!ZABA z=w=1>UJp$2#9){u&T?Cfw`U`G-2$7FSFQPZ=dz7;cC15Z8v}tlyS<2;?IJti?vm}C zZSmhJu;JyCO5AZQ563MNNrd?#G#A4|AFq5;iJro6(Y$<-P*N_!@~~Xo)MPzbY*G2g z?c<)Pu}gngREo)B3-zTx_M%XiZ(XubTR1L$s&@#A3YggGnYPx(;ps>wt29i^8ZrA6 z?5q%2&E8*+w46H#7ySVtV^GN4tlh%ui0UR7)n7TcmG4+|TJ?5DTtezB4~1Mj|2O61 zb$FG2l|?saqkbcHwcP^tAC3<{ylJY*V#f>Zl(zN4Qt7{be%J$A4=?_M>Y5Fk4Ht}^ z;v|M6aJOm0Q?3#U)$ZriPZ&BZP4?zjqYLu3i7PD1e*wWwDC@BEkAJLpefq;I%}vTYN2P11tDb@Kc{@1!Ry{faRJvfLht zy#C;yr|6&*D#2TT~xl7y11~wW~|(@BfQZsQwOCQ&#pg%90lMf6|>?vggd~qZ#!gglZpV z4xyFR`|1wT+LiT5#MKSOB|dzj#PNA%*_+Ysw>AkL0sIo5rA5TmN%cxv`@u8yzVwb2 z5VOS-kCwaPqjAQP>2*KERz%VY0$yPCI;k`0ODZmam5O}01s>sl$x+Ci+f5i1TQ1wZ z3<-*Q<5GnIskV}@^EocaMd-K*lR~viDn2n7I!qe$@LjtrV&CftORo3%gHWR2e{b&;8 z)Q%pPqW21ydhVSq_S(y@N9}#wvim3py@y{9oU1VK+amxJxq<(U0$`uhLtO3?n&)sW zgon6~yy@X~_08-e+`iGv-z{SAn{@YJg28KJo7Q8{IRMy2> zKG&@mW}J5$bMWWJl<+KhgQV@|Q9rB>p)w2m2cOUBB|dv`{>}&l>|WCy$(flKh#Wzu zFx2m)GHaU14et^FzTI5W>s7+S*8x)=nP5DK%iuEPLj?u$;S;KOnULEl)%)vlpvSvn zye8YHfXDO6t*k7APv@sM#15p$GPaO`-VFG{?SNN# zXj0ihMRc*YgMw6K2Mksk7z633)QN)y!Ge&>tJg*?$fR<~{iw~8i-31{3HI(izbmRG zT>QhYN*?Hzv3M(k#kZrj=h}DXQn(Z@sfAS$sS|_ki}lE0#%G~xA@%YUYwAksxvq2mjPw8^M`5 zWK-7KU%lY~>N430j?bFU{$0crLmq#dS#kMSpKw@z1=t_HEF_C@^lBX2g$hLwtGY2MnWy&ZB13_{F{E*``4z`OQbMk+*!gC`boG z;gmNWSL+z}*}72@@7%S_g(Jy>88zSp0BH2XuZH!{Oc{y9SFb!ZK+J$;Tr8q;tCy2N{>Si9-=CCyGOg5kKCvql&gA^Q~+C`?-Mfc>41n>pEeP(0&E(JenhY z<12F$I4%WZon=2Q$-FLA`gV(3lca!UTWo`6B&CxRJ^cLA-Dfy79-Qq^$qqnmiU}s-<>e#nsk`IOMnhsEa;h)b2++ zfI8>_)U{;g8|@J-usgqF#{_q$-L1wQ`W?$GpKF`6U^L)F_X*GJ2L16L96RH@I8(|F zMjkENn1SQkS@5T4{3fG^VSkgQckY(%xR_z=&ry23f9S5@ESgVwrk@Jm5*c!Ed&eJo zaPbs`Gi9!G<2WmRZWv?-$xzFze_KnAMO!0pkrTm*Je9PxYzNnuvQ824(^76jO>Pht z)nf)y*Y7+LXVdzxgH%ufy;+Nquq$zfu&8_l$6esLTLmqMnx@#rL-1d0)0}$5-wupk z34ipE9 zccm9tgK^cSg~v5BHG3Sd)*qs3kAvHNi{<_S{$UcYm}}gAe`9OMHxmwWXKGITyx(w7j_mKDQ4rD@&+VN5XF3<_u;kIot2v zJ;JT}-xk~-zbiGef+iND3xWdCIpM+zawHX8OBXE<{`Ym@K}Z!O1AiKxdKi)FF%3xt zBFAc}^lBpjP`IA2Ued}oHS-E>rpf0zO}WE1%XV*oa$;hnV|;R?A3l| z=^Jdr!>T%dL?NkEIr86MN2V{Cg?)>6p#`K8>KiCZkC(QqfYio%`TZ(;*~me#(>^k9 z%)H*x)HtW8)md&fkKIn0f$3!L=RT^xE?Ctsz6dZ5!nDd} zJPzvMZNGM+V#{TrsMQo`Qf>iUZ02q0fjH-}?gRKzk!QehSDlN{5F>zeRX9yJ>YaIa zzh#jHB-eY!HS_RSm-4(cXo`=eacq3d&pq)R){tA%%^Nom1;O?OX=wtU(N$dd5T!99 zJFqV3M9i79h$X=sWY*({=_pQYZxc~~Tcw6)g8N_Pfi=nb{iN&{(C$Y( z1@iLRWnLZ_%vh$os2kF~Um4@9GgOSNsVI^oW#4in1)@|b)ve-AmZsl6AX^zyXFW`?YRQDS0U zIN6C1w3%o}r>7`d9oETC%ZhQzrRqkFtxVR3x)hC#C2;2|_@q7mr`1Svxm)I*9SzVp z^g2YUG0|L%G9<(!%_h4Mo3;bEOunZ@Iqz&5CuCT;izOMM@dkMFxXB$Jf(*)EroSBS z2(vS?G@&>|E0tp3u;rht-=HFC5kb}Y`TfLf1n5R`m$=RJwBT_2rl-@K*z*8KcL5G& z4t9y)_k*kZIhN5pwTLJ@LC~0o=NTv3*g%&k66^~{4gr|TVFswMhC*tPrKH8k!q$>d z(|kONjkX64!$IHx1(INFm}=YhV$Xd)(CFf9UppLMZ zvmAr6P|y0LJ3qXX1|vAXXyiZE)O4FM>pYf|K^)otLSukk!i{Ga&YTw5l+zN?9By#7 zJ?DmPHQ+;(_*3xo!w;O&OIMg=0&8eO_Hww~;if&!!X2kjTD`uiQ=5U~^8inB|z-m}YEV<61a(5V)y4W*{n@p_mR*T?zOQ6$1xsSnRau^Z2AZ3tb>@isKVW$+t5l9N)Vhib_ zQlbb%HAn^z`0U9rW!aX1V4mu zOe_vR&zJBd7m^#3x(EdY>=lqihE2)np#^9u-NKo_Zcmaca7%DG?O_$Ooe>s$OppTO z#I}ahh0{K1FRxpdTN~th&%iSe0fY)Q15w$SCRUZXOpHXbI8L&EBR{qY6fURN_U`Tl zt~*9#h6+maw*CfU1c+Q87|0CS2`Mo(k6GXA5`FOyA_BDw5((kD6s=t=BEG|x`-Ip> zP-OKzO+BEvJ1=@bL=UH*V^*depb7m2{t1I+dQ%^jW=$DU5Yvc1f1aia5&C2e9a!of zb*%STbQLDL44WFrBq&y?>+!K6d01t%Pa0IOkad0J_>VC&Do+IP{P_WrExG;LMH=SH8owJS?LX#ec~w)@8GAFTU<)?ZnFH;A=v^RH|> zsy(!^|EmTLHt&G7G^(|+XYcTBNWX~fu6DHO@n@XVI1zyP+*biuU_)8i!2~?1C}cNj zC&Vt>B3K$@%(zjrS2&0PYc;K#BJolrfnbo7SK1kP{Lxb<-#CXuG_n@0EtBa~t5H@n z)2Jr&H83W!g1o8u+)m>+w}BYIhE}7A#5z^j&rga8*VbBx1G)kQl(wCI5<#;n>R)6( zdNpSpD3+sOU`3zKw-M1RQ9qTF>=?UfV9lWZ69!6b@c$`Q)OS&NdNk8uw69VG`*ENV z-Ynn{i4=8i=n&%My^2t0)Hz>Vfj0x#kisE0nEjtBct%>RnABKlSGL^kbK4;BsvSo4 z0OVX`!}|tLNVl%Q!aQk4Kpj@@MW<>A4IHs{0}Bna*km3z6ii6%#lN);V}!rN5ASKN zZ4!TU(?T}_VLB#+fcLh5J>>B)kMMx*x>!Pj1u?pXh!1EiO*mcKrA%%08zaw+90RZb zyt0XQ{id9{JA$h710_d(Pa5c$wCf5wIXLGfsFu9KRF&acz8{|EjV-3VW+q&E8A2OUNu0_@BLnwJ{IwW~dkvPT!8erXy zh0YA;>NS(x2OLzIGZteBp#l))$0$a<+y}_m7GNZQoZKU&sbZKGB#}#k2sWcS(196 zFveMNL|Y`_Z2@Fh;A~V+N|`#TPHDn&fI@OGvIHVq!~f}M3njbPefRK6B% zRw|MKVVSM)l2j;{pg^=3mp!DS02f1usZhNLc`9VkI<49bKOyJekjb&hBRFk8y-DMC zAPb~cs)RF^8=&Lu}2b6Bb_8}MjkijadT+F{o@pej>kvmtU4#X&d5as_+j z$OOlcVx1zbLWzt+vNJBmwr4a7Kjv^#9bB*$oBP|1KBE$-6ygQdRw5CIF_Tnllcdx} zR7`t}sGXza^3SmeKKn;a&_;FA%;>e?1ai86_p-Zdi#ckn1VZ?b{Cf5 z)xfKwVKkQ~J_PG_nt*P2O*6nly3;J!?EW-@`HoFf5N(_0z+AOcJvhtD5N^>vf~r(2 z^Bm%m>jMMFl~F5^shEVOFlzyoBsp%L`~jb7l*_SDLp7Y@9aAn7@&$!XA`i7Yjp6V2xgB~p8I(Unxv~_p};RwLZ%7IDET>Z=?l$GxtepdZu4CTwj{w%1~|G+jwVSoTe+_TxEFcgZ4y9~Fv!(9doJN6uL z%t@!)>ko#b@nkxq8J6P(QIZu^!@6Nww&Qw!5Jqv5W_eN07t7U};{{QY6;;y>b26RH z7t7Upv)%0v$J6<8y;-*7dVUZ_agt_vQC4-+cKtBkAJ5nO^Zoq+M3_*fc#ez~iOSONt1!z<8>}Ol8VU8J9|DD#TQ#3J?>I zGA^Xj#^!2-iN}Rh+SptjAi~6>T-aPgJe_F*Bpziv(GrgfsWWXREN;3G?B%J>F#y8E zql^oww6VD-!uRVSKOMWF-M`I$m40)(^k literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-greek-400-normal.woff b/site/mitre/roboto-mono-greek-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..303e1f1d86ef14de517940d279ceaa0ec9888a6f GIT binary patch literal 7196 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 a4yK8%oGdlgT{hNL-$?O~`nC1%RR0h0om#R0 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-greek-400-normal.woff2 b/site/mitre/roboto-mono-greek-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..40b9fda9373feecfec59ef3204f9785849e69610 GIT binary patch literal 6020 zcmV-~7klV;Pew8T0RR9102hP+4gdfE04N{;02e6$0RR9100000000000000000000 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 OhpW#se;0FZ&03e`)B?I%m;9dlO z*L@*Dst`3dJMXG3rp)KL%Qj8!&~eDpX;76mv+=j(W{HpBlH>}WCIZ_X<)T*0$zw{6 zexrIE=XIUfMMX~N*Xn|CZJdnu5#TY`$6hyU+5G2ceB{nP$;!!8Zg`A3eoN)JS%b*C zBV3WenHn(}RZ5_590`MvqOLc>+XD@1`~UzmAvwoGNI{QB2?$a=n#4!(7))2=vB(a^ zFqsTo*ujVpz;Bn3BJ; zcC|WnX?*9PNR=8XNiv<%Pl3`^)X0#-I9_>IdTOs-6lgjO)7n_ z1c$OX*V@Q{u=NB;bPQ~XIC$N94xx+=!{1|pKon>m*qXhF()64r4AZh5H%EBS2S5l$ zPz=vOiy#F;kys*?$rVbKTBFtJ4MvmMLeUJ%@m8DN;dHq@ULOL9LSwKvJOM+|YrCTP zZ_rJ-z-^x9-QR~-{{u_7QtkLVchjL_LXO69t!lT`K}wcA=OqcBh0bVkGZN@6gT6C< z)6bO24Ov(U3%|Fp>wM9TVV>ku$S{^SC3acQY*QUji;H1tXSJqTSKLW(A@|gKHUp-X z;ammBv1&-EH}U08tG$cXy+fE5+_rg4CgGygVh%zh2}$a^cx~ijo9a0qs*a{!n0mzA zosKLd&;gmP8APU#VPvUzVU%cDNGPXJPYquc%ytHw+|>CUfojzK8t9a6;O$R~t=XS3GfXI&7!JZLImTymp#y0RRC1PmZ?$ literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-latin-400-normal.woff b/site/mitre/roboto-mono-latin-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..2c58fe2d6d71ff29c263f0523e06dc36b2f30187 GIT binary patch literal 15832 zcmYkjbCBmw_rLuf+qP}**tTukvtye(){ebn+qP}n_A{UR_xcgC>8?KM>P}UX ze*Kmg69WJNem33}0Nj6GyXPnVANeo(|8L^TszLw&5aSPH|IZSx1NP*V8JK^V#ZRpI zV+O7WiZ043f+|0(=O^aB9EwyPrV-wAOze2LE0JGn*Okt zpE3+T`33U@>4!SlJG%e?Jd{7I`iEJc!=`uquV>%^&;Zz;`$?~eXg#OVQshysl_iqOAx$SaTSX@b&HE7uA`%f$^OpOW+4*x|aV1Tz1 z{C}P6z6LiO0OqfN3EuPmB_tw3(x8z`+*81YUAlYbkHSPr3tis!TmWXiUKO3+e4>zk zr@+AV${%zCG{*=g|G)ZK6T-PT7MNf&i6%BU-|lM0>teR+P5;~3bDkPAQ`dAK`#al% zD2?2uWDbnB(LSNRUwSw3?`ocXP9a)R6{LA1M#ADJW;tg~XLV+eEZ#;Re$QXW5=0S1+sD~Q*+<98uBA6{S}MuW|Vw=?LhL&2U&5B`KCNX_I zc0&zen%Q7vp)=x6d(|)HJ2eck(nsjNQYnj!OrD$F8(@X)yDW?5zu>8!w zpHYM0zE+_PVSu7Ox7AG3x_;Ja-Kh0wrK-Itd&SEtbKHu`MNdH!NDRA8QDMxX-wb@JSqx} z2zs*tfUwJs8}0`et5&KqPO@~GcwD0~0C7cd-rF~;*=23xb7cr5!Z2vZUy%z<`vVAU zVbiOgJ|~lYEYy?tJb`g9WMJiqQJ_SIc7Ek-<>YL|h9A!ALN}>m@c-RTPmVn4Kfo5m zC!Zx10W$MfLMKh0O&7#uHCN9b+%3qEQsR^6P}hj?5`wkvm4mYp0;sc!yTQMPK)*oKmKSMM+pD|n$UbO9FrN`7~9<8EQc zk`~2`IUh!N4F3GWG{fv&RBY4=PXUm`yw1en-4N6DzEwEH_VNypAq4nOW3YK_u4f_u zg)Mf}RvigVOMHvi4$BoNfeZx*MOOd2v#ZibSviP+J9prXId=Y&sWc)>G%#PVYhlK> zqFttZ5~bW;)2?KCa*DF^nMlBqBY^b>@|D;IDUj}t-*WfJU|TXvP(O3+3ApVO^aY1h zta-lSbH3Z0Hn<>J01xw7 zy=WO>h$ieIxbo)pW60v6Z>J9;$kh4pp`}b^?Dg<4?0A}6*|g%Dn3_jU)+$<5)B~XL z_~zT~H}QL`edwBC=DgCZ)0dR_MMINuuW_|`VJX{=bKR3m(<^oI3aG~dc{o?bEB7NF z)(9JZDv#gpWinhxCd=>5vLS{u-V>k;hx9A!teD9idyaG`{SmQlqo+4*NdIE-Rj6rjI0aKrU3%fr1#d4;iaTWmHm1X)o@|in7F?P zB1jdF22>2)Lq-o+2rla!hU-=e8NE(nUrJ0!A&Q#98!qWrnx-ps% z%w1siB4@96fW%(FXdfRj^m`P3=I2{^^v&>O^vR<-qJ{KtfeOz&UnB`U8#(Qn<4hhN ziM9MX!%6oJ8@6DG0t|`5I`r=Eo{!h}&oA^c8Q@%sgr>L8ck?R=vgv?6tr3So;>kTMl^3PhfTMOR8ho8-|#)`q&)-ku=cwqWSe zW}Ps6b!wmN&}BhHX=<9>SZ@1Y7DhGs%s#qG;rLr?9~wTNawRN?4sC8r%lvB{jj!<& zF&`g(Htxfc+g|pW_PUIaSs}c^`1bjL>^h;RSNvX5(3fHQ>cx%Tj8aShi4-FgG9$k>ybhOSLDk}B9 z!k5pBYVGjEZ3V*4L(BI-e#ySHQffXQ=tL|n!@MT6$mhO{8W;;!-o>v*G0^twA3_A_#_Y~KcB z3KymZyX2^`LF;p%#eooez=B;o4=-9=9CrbQ!bG7gg$~Qeu@`#2)2hor z3TTj&@IsywdfIT1B-?BC_?04UlwKXD-=(ABa9Sjd5#|idkd;k2ft7858Y;Z}4aA9< zl4{r;wk>#paKnpt!|P>!q`pGtP=bJ~E9!IEz615|_MH%DZ#yre2W7i|Xr?ZSu1K_8 zX?cbq@49a(53787ydhMkrx>P`<~o3*1_sl8U-v=#u2ZeaUpii$;{__UFGHzRO)G4Os+XEnZkL;bAH2`=Oy%yGdr6ZQRn! zpn*1QnYSfEMDh3(@}V8kA zxFuSP7c~o%GJ{>JLLy>aof#Jt*-s$(Ort^t=YV6h?K^6fg5 z3E?6{crR7-q{vb)I+7*B8`9HJ3iuqj6dZvQJD2H)V0A+>jMm=F(k3p-!$yONo{&*OP@SL?1j;o+Yn|IR;+A)$`?F4mWz-)mN_l zTB^T^?6+Dar@yuaOFjZ-3f01@Ep%!WOV(EwYjBq>6*~7AM0o?FARf8w@1&vZJj z@N6t@E9z=Hs=O>#tyWQGGt#GFOBd69bu9p&lX!1(v`8f3G!v24#_ZJj0)@`u%cNP; z(eDJ8Q{HS*+r)ulV1X{8kLa46ao#vaP}~M5zxddCixg~>BBSI?&>oqX3{&in$b0Kl zc-vIr7LIQ^DAp_hgrJyAQ@5^eB?TRuITB_RDX&UTZyx$?mkpW*k*Dh#5I+1Kh|mfw zoqa--{^%+y?xheujG(ypFsn7ywAo48)@Luv6Q5P9R^n{Y2~%3!$sJa5Hl`&bP7&Nt zZB!9I(ZrSOY3WlYLA)Ca>Kzuxe9@{6C{i$ssS9Vgv8H0jM}-tgubrwWqvMqDq!ZD; zk8bpwCxK>QDac9z(5C-AXit87t(qZD7UDd0D26A+;0CID#}w$eh~K3G@1V1Z zBioo~p31AEbr$U0&?9cWxNInIJF%QAo@`pZ&BPaD*reuzS5f$6_^gc3y?_7yVdGXS zNX>>`uNl2_s&ZAPyrM|hoRX?dR*c*dNoAJ4)4pABRwMUf2PQ-V?frZSac1UM!(ss5 zU#Qkz(=b4loa_`y#vad8dd9zd559H(Ht(mma;_rZU!z3_LTO;MAFYEb3c`0?MkEGH zS&{c=5j$c=LQdfIYDCa30=#FtCwp7Db*D8)iGp3H9h@)UY1Vaz?d*m9qHh>d17?(E zrKjn2b!20J2!hjx*X<0o9zw}&ww$Ikt4l`b&!rBSW@>Y+Ue(tSXAgeP$S#`mU+kjf zK{Htc9rpD+#nn~Xr(n7AjO#Gx2nBtm(mhF<$wv}wv75I{4GeAgQIiN)@YGG;|rl@d!%puBhj(PF7Zaj-@%k zY8hy2+g_^whRS?;_pVKwZtj*`ft4>%beFn+LS5_+7uZ65aKGKa-L*{%g8X^GVoy9$ zPV~-P;6cXsUO5kehGMI>iICK!p5Tx2#aKR7WB--0-~0{Sz?x#8 z(0&hlSsXJ}-QBYj`4w7hKf$B!b9q}N$GLH2F{3Y^MwF}}TW_Lb(=G<*B?pgVVvh9p zsqJ3qq<6NJM`dRit2<_5{9PT)xYrbDP_6&6S6#Pntq_$OHQN0cFwBD0rpd@P|Khgm z#5F?ddxv=28H6e|m4c)#584z)6b?wTHr^C-=4e9`Ig`Yh4{%Bb0+R|@h)|gpwd~Gf zrcIMl>M9SmJS?IoL!2mN2tMU1hypVSOXQBFy&weKYQK~j+~2Tl`Pnb)1qS~O<9gdF zrr&=|bVv`~lm3;?r6r9o?)+Muj#eVLmgQaV9yVe-Iy{7yYGQ#-pU~+N*}xXueSmuR zMt>?Z0!8xhOc~;==j!D*1ZY1Wu%)P$ox^x(9XN5?K0G&XI)Za;lp)+Q2dEGYH(GPe zW|d9iWZ%8>-e;Uf!{a^!i8;7!*sInI+a#;!s2viNf^LOoclM(3uw_7cCuXo z`atAI4$Kig&SoE(2SZ%tM}vR!M&kS4jV>^fq*?L&hVT4q#p4FsDI?v$bLkw^EP_8? zn&X3mTlm%mGSTy4`ws#4gWePULjIHeQ5c&BRa~^j6-;$_1xkC|;2idfB|1nxWz-=O zc;Y}Ru`D_a*rM1L=dvQPtb(m+tikhKOdv|(wXYp^wq7P!Pc2H|0 zZJ2Sr!6*I>pU!Yxyt5Ro;qooFsVOh7=_yEe;Z>J_^!)71I*~xe-y>-FZ=qr}h1!CG z!9k%iMEY!{M4)tojlFP+vjJ;L;*=Q^7%0TJVNn+hI}61YfBUy5r|dlVAxHnoHmD^} z#zkR&w2CIt%H%_=zo8t`4*s?guOSo|a2%bcu@-E5fon0k3hE&m|A~Zj2HtjYd zynTc#&&gw`l~A5Ix*9FTBRNUzZ!bD$o2SFYGX6^uz{K+h&^x4)qI|V*-Frr@|MU&j zH=dlM!*lGIVnMIenM+VSWR_lrOlZHk*V|NRzbbKSetTO5+>u{??@oGG!0_0Z(elo? z=eW?ORSde=D~W2_JyD}reM`QRK>6YcYldh*c9@iOrvsU@(+rzM{bD4ktJ%Ewe9!Eh zlKj9q_b-YXg@RsHYFGOSi0Ow1Z#4)eJ>cOy!mQMT9m1?o2jLb&?8g_JGPaYKgXI$X zfRd!0=9SbEjq%bF!E?ihaDLOUl@5Sw6;xAb$|#D5J(6N(R@tanFvRdZ1A^2Avu2-K zV-lf+P87n>FuWr5D{;g29v%YD$t zH@Tyt*r&;bvSY3*_v$h;Ut`g|)m{$_YU(3_#QRdu>?rXw%Dip6ZN$n|liC&o-xCG- z6*Y!LD$7lMsNo`VV*;%C-z-+eu$cUh1LYGLc`O9qa9STltZ&sMZfTu)^QX;I+MK8N z>y(r!bk-@pTUUJj=m>ocqRUWzg#VI8vGKlMts0xik@?n_?@dVm4lHJX`C@)^cZ9`o z88M<3xpGx*5~U@wTJ1(Ubq#aNR|f0`x6PktRV$)I&s_=Iam0M*+1cmJCLu;yS2UUC zeH9epS5GT@x;R>tO{&qE;fTc2m9fMRYE{aWEYimYgF|KY0@?*rUohsX7fLZefprzS zp<>*KD#5~vOR$Dqvf05uDd;6Yda@cNGV!2`d-pbpn+Wd#(YNl?dewT`C~@xu+O2mL z{FM+CDR1qP%(P}))F2EEr0C^rR(MsHabO0aYhzR-5BK;!Hjel3Gj8m)SJRVd&RW#e zIr?)@i7~dseA@*g7<#2JWIYIDxUsUc8I$bRW!(!bTiSMEP@rhQJ?syVZwyECmUOwD zg>gY&QPNo-0Ny~Tp(b!8d4UY42h68m_h17_OQ_p^^U_9f%H{MK{S(&T*Luiw>DHA8{h-L1I5WFI_?cdFw#>1h`82X(-1}Yo8(#qzV|QBbSh zRk?F@+;K?~<1-AJ+<1fpmSsu zOTiM9fpEy^+F%{Mm^eXIQ)f<^beUE|37Hk>spCeQ4|i#`TI8zKMRivDX=PecIa1|$ ze)EC^FNhEOoZ%?98x8*Jl&#O`WMNUz0>F%8#a$27?1Fflf?}e?Otg8wQ$yYz@ooYB z3Y?2d#!ykZebnqDrKpcSsJdAhVt#R5oIGc8pFCuko3Y}m|4OG;NfT+Hl8ZN~>K!!x zCgdXvjSvO%L>&-x@()xEmi!~EKSevUJ3<>_f)Ha)karJ7DVHE|@Y?v}K@cW+-$*v8 z?!fKB@_n3sMMaiYXah4mJnYMmSB#r(hZ&ClbccFx2AcsV91~{9!r7$+^Wcs$FJXYbMb-VL6hG8 znI*f1Jox)OuCM@{M|x;2C5GZHUuTq?z_{-id@+x(UWomg+;wT*=(-toWy8`CvtQ%c zA+;vl%)vH!^(CwEYEv-)CpT<1?gsR5z7hpQF_uv`J@Wf>QAjgR*smB%$aSry5Nq2( z_9i`2`uTq1B!P^?OawmWOqoori%KoNUb94@j!D(}C5t+~{{1^1s}m*njgcP3=6O-% z8omRI*me)x`T>_=(noJ!y#S#BN9u6GoN0O6h1V7y{D)X)ULu7GlY3cjJ;&Pooh>0p zK|`pSkr((fo`2Tgn;Y+c;o}rE3Xh;}i20^vu+>zKdVlxWkf~#G@SZeicF!oaMzU%Q zfX4}$?T(?H1SOBHXXEnyH#Y4c zbQ0s7sWM1=lyJW;&zm~lbJ^pJLw)myBNVV&O}dmyXQ^W(;DpJ!+s95I@lGYn!yjt^w=p!A%6m2hcV zC1=jKVZm#n4P5r9H)nVfbut6XSvq_892$l=X)@YQiCmia@zudWtt(x!y}&@?G;?Si z)kTwsvB3QR0Tto^8ek$tV&wthJm&>&dvdWDvG&Q4-(v?%AF|T*YDn>Q9_$54)h0ZVO8a$dPak`pXor@T!^HL_p3$bg8a|X;QdC;|*Fq)2h2 zLP*qyO1D7-_bDq_`!jmZ#Lk{iFRcP3di*-d&)s_nu$s?C2leC$@|w3M6pkQSH2MEj zx}{&Zreq{EPbx4IBW@%L_W~u(k!1Wu^+-DEt?S*_i~Fqo<_*DmR;VnV40ZN(?421)Dgx0gcow%Yl>)JdB?-U@^DM9^tfzfK z+j9{?!Tsv?PAzNc25kSNGX&IWuxaEfLacVDX@eIv*=*T3sa2^;h^n^Im`vRmX1%A5 z370kWM#rAHp5Y-CISAf8-&$E^t6x?Ujl}sx`Pbo0=Pg|5RGD($WDvQaOe>0GzA2-XTfyxnX z$+^PL(x@h=xx@8w2|3Ge-WI~+l#2s;Oe?s-jnBefHmv8@CwBa^m2;<8@1i0EIxCIh z!A0oSI&Q5dg~~Y{utT8nw}ZTtEcSNplSiHf)pnI~)d1Hn_#!E~Wec?lUDu)g$77${ z$A!-|d@^)MfIOb}p^Qlx$p?y)D#Co@E=@lrOyq(0%mJozBOb+Gl0z;UL(u zAW089E<_bg=kYz4<#nrpkad8Of0K5tMeOH}zuZ{mpDup?`YRV^>^E)V)IN{Zq3g=t zI(b<|`!+k>5>;+Z@0Qs{@vj`i+3!0uzonlKJ*#XE*aWR%nmfI^M7`%hX}4+A06&^o z6zg&T410S*j^qZNvOsT?WZ}%iPCQIaSg#rd(UNPYiv)t;Mv>D^a34MUyj!c<1{h(QJTdSD@!@n=p;7P zhxjqJBeJhG=&7H@6zPhjZD5Xiukp1q!@2^_*v0@Ay9tjVA$4ictxnz0j&s*%*DUw>j`QofAhqAxTG zSTtaNUuo!fRkwQBzpgwzl1B-4JH0EsC}^(>mo@96-?xp8HP-lE1Y`Xj8*?>_vc8J+ zS`K;UXpRwY-fCYxbJ1YmayGxP@EY$OIpLMY(_?tCyo66>!E|YJTUfesXd5$d^nnNr z)R+B6`2-gM71l_{Hg^Lpi< zF(p>Qs1#apm%pF%RpP`vUgA|dNY}e2u9;!=nCZ>oE0yK zA?t)gtT_{#m-ql(dd>tB%=R-y?FLU{Uz>pViec!Hg#9p44g)axBeiSP>NZj8s6#7l zl~YQs#_KjbIAO+3P&WB^5p!x^#|ps;SAXlKm@|D!xQdiV`7rOcMMZxlRF)ml3OG=+ z;0_YttrW_I`|i^Pej{k!p^t~8?Xw(w*y5h}et^Z6qMUeEH4$sHH(f7M zBl&Y8fVd*k(SWbN1Ruj0xHuZKW!9!1MdH|@k|r-tq7+&hqeWHx80w8?45x*h8SoM5 zB~7d>0t@aR9M~Z$M(Ys=nHXF??=;^#-h~Jsf8S(Z;2o5UAkOBO zsQv8o>b!OX5`WfSiuU^Ki>_PHkBB_M=Yt-(6N(mqbAgv!;CuSJx=r2*H2sOOMa|X2 zeIE{LPwLm#2~iE44JbkY10w?cx=a>m`Kdj2JU^qxiAyZ8u5H-8z-f#q>q|dcyH5{l zNIK}yDM;8FK}FRpol9%j3Hx?%<9p5lYfu2@hp~=HOx-6 zn>BvOZ*$oXiDV;S!D2mfogr{U{Gpu^e2dc;a^-ez&n@*p?w%q_g)Oc%Gj&*m5W9U5dg{X_46DJ$X zjI8DwH(+R}JZaWcYJOXpP;K1J)94qSQpfRZG~Re+N;iGl%+3s^l?inyZmDZ}c$l1` zP70&m%`o@(Q%I-l?9w4k!9w2jXkBpqtV_^6C1z8_b}kRBjt>t`23@ry)}`^@Vns*> z6aV7uxHvr<<9nsn4B~ck^yo*pqSAbx`q&aTn&n%h_OMqyEGi;`{>WO{p)4NGB~gaySE1fz5TU|*XycY z^AbS;LTt8lyp_t^Z4)i?bL`DIk6U+&k}I-N1jSr?>hinKx5jpR^+Alc-I%ZH6eJJqa;v062km$s#$F9C-Z&pI~JWY(WuC21&^OemxB+w{RIDzpGQ`tN{ zqO?|ZT>fRm0Li3zIe23W_yxy08_d}BWTyhwzhT08x#g@p=NN8X#_KV5$*kWTS#b7F zZTWx3H%E|YBYQ8@i~msr>{wxEco%*HwL&ZgbuN(OyP9X%eUR(6y_^XaApnx{@d2I} z(2bE=aBg?G-hip42HH7W{V&KJdCC*xq$93x&7c6V`ycZb&hiWIKahXF|3d{~`Rv&EZPD z%~JpKZ2*cDWy$AG4Dj}s+dd4WITyey)fd+VVmmKAE-OD5V3V)|rdtqw0mJ4{Ocj_X zKV!a(5s#OS_J}s0FNfC*ZNK0o_VP8I$V>?I@=1>&;(IufJYFo{seYiRvi`;MSW1Rk z*OTbd0g=Kav!V>?W=z2JX_!{rWSqHMa`IsL?|FfWa**@D^}<*TFG2jBB=7+VpRk8d z4)580=Bq4XS^pa(^*(jEtQ}znSzm0+05RG#V+n!~PdRD4BRWRzQt+CJLEhFK#D)vN z?t9C?GsSOlmfFL0!Bs3b4Q^>td#+ra&)v)A@WlE^B+JCsnFTaQ!yYV&@QT&&Ub|2> z$+;A_6(sM++llwCd_;v{)n7fEO`%khhC^pEP+- z3kMteLox4a&oKx1ydL?sn?`)mZ^*lELDwnA3m<%Ibb*tCi8}birt|fK$~+u!m1Bqb zGM!o>+o6-lsLHo?bYDV{Y-B0q+88uTPAZhtrA-T14SZ88>>B&EjEEV`21ipy0Lu!R z^5=o7_23FzHC=)-5lYnbAGoRjWx}XPpFrgH3ltO2BqGArd?~b9co4OF1`#|q*5K~B zpE!WJM6Do|d1c-$K#xnLathAxg_<`^R@qOuy3ZVIGVp2^f@)_B?Mu^90E1&pMB%Ba&aid z*~#4?UNGAm=q~?jqd<*P*_nE5oZwXNLBhiW%%`a|lkeQ3vdq^Oty8$Mv9axFQI({6 ziFCaerX{ogu;)-Expp2QO03d?f6a>zTb8_F_P)~x zBfqw7P2-`gtJZ#r!^Mq#!Oz*|0_V{+%h}3$JMi@lK73lOsHj=(8h6C4W6v zpheV@TUQHmH7BA`^11ZXw7`&f z!bV~9?PpPlzU0|`OwmX2$Hkj}aIy{g|8_fVZzbRVPFC7q(1pNYWLwZu5vm0CQtk$S zRy^-f*V3Zoe}S%a>|deLAh>^IRf2pW$OjFLX=y57=oBbt!)#asyPBh?v+GdqIs9e9 zjFSq2@>eHQ=4i(OELy$eCcW3+8pDHUlWPN#CUXO2{77XY64Sb%@UM9FtB#WJ4xa)U!Y*?R45BvLtX==aw$)(Q9 zg|LU^X&^1h&-dw@t_I`-)xd%U!e5>QC+lExio6fz7_N6+>0S?!*wWwl53~=_dWGnk zJlf~p#2lT0lJ@vncztGv$z~~GtGl@fCPJ&)!W%MjUcp<>O}|*r6vGajecg+wUqKmn z7C108&kmWB2Mu(TH{1H{emiS)5au~ImAZg4B59Q>mBDac)JVf48#PB;@PTb(vsg8x9zD${w(B85eLjw#S3mYD(@3Q#$P53mcSRtb?f_A^Dw z`Hid$c0|+W*T468p&+qxguSnheqLnA+CBMf$tb&fyT$l>)RU!b{&7Sg!H((daJ<)k zoZRG`s1y0<3_8Qcjgwjss#d~MtMZ=McVxtBj2P+fbm)&;9|U-x0HB(9x^n^b65J?@ z)^uuqzVPCt6^>T@%tWJ8Xmy~1x|g|Pm2!Nv10-Hq4q+?^aD@>zdt9_a^!rrl+GqPWy?@D3a3N}>bZlB`!!Ht%B&`j^r|~03t*t5AKuj# z$;2h+eraMw@HKm`*3VirD)o|!N+IamM~AUGUzoO!lSD0$cSf*QR8Z?*J0!_Z$&>4! zXg|r&YSAG%UqFXw8#EO9s;%WIx4oEw{E>d;gPXO1dOlyLE>g-C7jE#6igM!`5TjS0 zq(;X`9?`tZP_ix%s;WhNBkRqZ=d``-(#~>w@675I4c?eySh|B1&P}K^K$DbCk_;mv+NHUZ9vH-B3pgo!)?YqDNnwef+DGZlZ>UCAHd@0h!?B!qnFn}pz11{p%L z?~MvGKN#V&k>2RD@P5r~PPyoG;{tSibJZ`rgj;?$m0dp@$B4=n$?ADcxS?Vpk9%l) z(HK$t(#GS5=BW`+Qvbx!0DxJn6E2`$sVRhRWIT+G(_T>U3ktl_)l9ckvxMa~#HpU! z@ee>z#`CqX$yDk5qNkqnx_~FtZTEjEdV@bJ;G;40I3tnpQMdllI*=y_5kU6Y{6ktQ zV}e2*h8NUR&;>2e`LfthR?nEt=DMa15pvG|0wD1Iteaf+cM5d0)%|44WauA1n)o`s zL!tk+oVqZT@!k#qc_A@#`aRugEvMzIFF%bsQIntMvNu{inJBd!Wv;j-?g9I_|6dZQ zIg>m1V+DIWbI;-8a&Ku$XT}tJWIYiK^wr>130=>$-o%G6lyP~^H*2)F^2D~_)df7% zU-;F6v}b7FV_D;Vu^pv+twS(=)oX^xfjSurt7BSix{Nl9kckG>*|7jv=cfyi%dgiD z(_$@ich~tZFKq5itYj@!#g~$M_2nFX`(wOGUOZt0ci=7C`#@edX$3mUyT!T=ogdelY)XQ&+t;L0gCY_h3(7LsKbK2PJ4x_tG zl(i#EwlRN?6E*41N|Rk@by`m=Emdtxe_PAdFpE?5**S!K5O)>_quVjp9yq1TFSNLV zj)*(VH}32tvM)*0(H*g$?znU(b};H6%j%(N?G8l21}KMHXB1@&eP)EmXHPQ!G8B!zm`qDknd!f$p_A7hI=M58Mq~Nrk+G zwP`(p>`78Hqf6TILC6AZv^fgcN6~7$95Md`=O+>DfuALL(^XRQf>H&~MP^w5%SJ$6 z5cgk!hzLHx1au1)4C+Co`17uDJ*0eWEG=2&o7$#n z_Y_;ZO9~8rrAYsYfH!xEoUZ2fm{o219=B7aWLlwjVeDn)ZM#}}%)o$d+oH5Cz*ojv zIGL8{^tyzY!og_r2Bc>^!L=Dm`Hilqmd-n6g+eg{zlhZn9U^Ikg0zX6O`e1&u;1Lm zBlwn}^?emGN9Wm)SBu^0Q=8xUd7o!jybc$;!`g9dMn9(z|AygG*FS!zP~qY1)W?}n$#Ma$Lmpt zw`lx46PjVP2M5l+eeUa)Mn~vxeZUcpo0ERM`b}KEw+U_+_OLn6(3FZ3ntrP1z%&Wf z($UeJODLL^C6V@&--DkS8GO6#l4Gwy_ayXCStUOvu6bi?s%4UbZ;*PP|3Ge^HGo^W z>_|6{&)KMGdIJOck>Yp6B|tt&w~kJKHQ$F& z{IZFPcm+-`nAfmcej~T7-u2eu&Ei zTQd4>8#F0Ar@xa}hj3k@?jyOMndWZ7M$&t-Y(>qSQDa=%d$@6YQ&y}%6#={?)2k>o z2vsGf+UBoh2|qr2Cmv!l$+RIduj1%}Bl(x1)%i@PFG|x?7fpy3I>OhZzz6mO)(YFi z!%Hj7b%!%YHUWB*(62QRj}gz6$WpTXqBqRV?5}svhvWk(?l%6c2~&A=xBbt)s|*Q~ z=Ye82)r=$AN*scd(`;9kzh-WaJRN1OKT4dlgCR*Tl02=U*3Sz(_oMBxahisIB+#z% zzn3$$)9}pgkDt4?7S~IZ@YTu%DZj^o@oy!t`~uqf%&CkFlT`Dy7Qz+i$Gt)?O$B`m zO32^8&~C=d8x`&v~n?5Gtpm$KL0_qM=i@HEraj*`N>W9%=taH)B@6%w@=; zb-3-ms4BedptGf^W2BZM7Y%E8mqT0G+<#9Naa@*c<=zFI=LdAM+0^qRG5Zl?fdBxj zAE}=D2t1DfnExbk0KmWv68(REZH2%5Bm8p_j2zPFCxrT+lAFV|M{v`eCSA7fjMn%$9x3tfhPEm5$IY&EIgIVq_Iq41RbQwjZ3ynKdi$^@aBTae&PDTgu! zM1B?H`o6ariLhqfPAYpKzI4qIX=8?FX~}~0i5jawN6&TvLzI8D zdwmz6?_=Tu+(|8S`4;0;kpD;$9+EB$E)$e` zDRd(N4tiXBfJT&*P&g_)e^h_&Yoxs({s)WzKu=?3A^iLQ6UF`C(c>=@X(C)FY;(*? z+PcPU%ewpO%Nl8hQ-)NARt9)RSNeQLYC3^7wPuEvnZ}YPy(XU)o|*}s^`{k$4US#A zP4n9O8pkTZubKk?f`7)1``Iip&VTMh@4L%mtkcgU&y&}W<&NzRu1>pld=Ct>sj?@t z{kFijjV3HY`0}Esu{#|2~DGe2XuF~Ayj0^g8xdh=Z~z~8>1vd z%M{&IFq6d_6`dd8Kl{{h2cWB>wD+pq3Gt)M_ln#}wxZ+{cnU$wgs}gx7eZhOk^kW| z;anAYN=RfSppz`0d22ws6oZ(pbph9vS)R>$faIO7s|&1vEuX@!ZK|Na=_9WfwZVBG z_;Q}&zA^Nc?hE>0iJK?kT4Xu*cz7`tG%Q(zYs5J_I(s_1I{N~cs)uI%-`p^8ADij# z8B-YS0X`xEuz-*N7_Wfd-PdB`+1x+`U`2*8&E!zb%&ht*Rx;98F-9f5p`Qb|C`NgB zLvHCllUe70{iQbgK!aMNbpT0l7Gi>{;Z~^0vKm7Lby%OFo~AHsa8YAw57<-5<&Ksk z0xLaQq4`c=uX?R-blrKePZTzUk(hT9JqQfm5_u@|X#=Q75~&R>t=S~d5aN*qDB^!f zgi01fkqn}hldL63L}innNS}iaP_?7mO=W64c2mPy?_-qFL^UcD*%^c!`bk!mRb&Wn ztL!w&;XfTRoUJ-1a00X1u%eBX)}Y-S`kI72t5xuZ_^ABa&WB5_TMlD=Z+~|!zN^Fe zp!pzzI*SmISHT{1;0cMS z^)OzY?-fl!fhYt`QH5zRSwV@aC|OaB^H5bmkt|tNQ5(;7QCS}Zj%`i@MV4(|2ZpY3 zP7BAjab6Ds&vi}{qpUDROzX5TRZuM5t4EP6WbKb zI&}$Mf+SH?#Z#MARYn5$UTN^&uiZlHSk5a?LQF_W(%OIj&i}Q;&`X^)Cx87SYqxP) zAuqC;im1+HK-V&ePfrM^3D7x8D+$H7YcDJL^yJKK=CfWSy>-hM>vj~iw0sMbfoTCK* literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-latin-400-normal.woff2 b/site/mitre/roboto-mono-latin-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53d081f3a538a63578c15a5cc11219b32e6d5795 GIT binary patch literal 12764 zcmV<2F(b}*Pew8T0RR9105RME4gdfE09y0_05O380RR9100000000000000000000 z0000SGzMTlQ&d4zNC1RZ5eN!_n?U+13xiAm0X7081A|NiAO(d42ZU=32OFP96Yel< z96&ISTu>C{iqi)Fm*fsH?v=5DnQTXQcjFv-sMc_gFb!!Hw8G(RAO^yvt#p|_mMzm} zK4853@+$O`t?#&z(KSbCa>^6>ueJC4%)K-FHbja*#s~)C2!%|_qp&1ogp7@gieexB zpLYo6)(wdgsSSD~HbyKMYZ$9y8?_C38;rk`i!ufZyNOxqqlEHX==%tSmOTIZ-K$ zs}^auL`A(TU3=O1Nn}4KZ=#h06&=&_<9pT1Z@We@2u4tn1$7q+@w{)*Ml$6A(kv;2 ze+AZ7$Q4RFRCMxkx$RfUQ%9^dGDovU+~4ag+y7VA7(&+K5jhCc1C<0-CQbGIELrd^ zgX|@Ffo5VaQpnofLZ={9z%@{1IPe}}h_Gm`x~5H+^yPMe4ydU6=om7GqM5hO5j;JJ z8qR)0O~}v-y%NGulXrUzSNEMus{wWHIY$6x2nfu(hhq|f@6f;UBH%gpp)UlU)8~~X zz!Lx*fFhDs8Goa0EP!|sBLFIN``A}<4zPB}%{u_rI3_sTuNVcF^k9ugZupZ%#@ID~|g7)$q z0VJS!0Tg!tppeSXzdzAGEq;9d@$Sd%AGdy7{juZ8-6z+dTzjH;B7Y)#!gxY?LVprT z-3p#WJk~!FZ3U30;Dx~wIft;}c3Q*?4XodeqNKM{tQM9MebC)ke$C#FfUrAu>%z_XN!FW387}JX&3qB7ajR22z zWC`Q3Il0M^G1!>Bn2Q3ueg(MV?t^h4hQEx->1XCRKgBU|Z-nHi$=yaH;O$0+-|d1E z5yxF%tu&KZW#xq~xnY4&cU#iBAR6O)EgxNb^V}x0E%KvaQVU90$3E!P-jD zyS>0q|Ej+X!&@orPP3-X&Dc>s}^GnBZN})qZyR?|} zyk*|PS8iK1abf?A?YzXZgy!l;%x=-}kl92fDbkHaFGie{SHmv9!Nh3q zS{CbDi$wc3ez-FXz!a z!c~vodV00tqRQ}bBcamM9i)W7OcN*)9#f=U&aqPKvV5mE!UE4;;86qbR^w;MHB5;Y zKzE6a*?9|#)NBLuNSJi8;q67lAHMJY>3Hu0-?#MKfc16MSWgX&_`kHpZZVZIR&89Xg#FBu!#ewuCsdFqcHC36P)X4p_goZ%c@1Sd1d5dT9a(bi>OCYiNYnq1)t zMHS_|l?HQPwqgB*-V8w@)e!(NeI{NCbfqZM2NT{~Z}}oWLE8rX#vV?`G-@CLs}8O) zdyp~OFQa=&{M)2YFU#w;ni^`c$_SRMnCaV>84D=bUS;D)y`@h&(-5GbA4c6x);^tB zk#bpSi@+l@-qomC1;YjMD>KrAZiXxOArja2SQspTIP8!8cJAUH0X!6TT~fDCY8)9? z4@`{Qu!aAwfru*FP?g`!5E|{tAZS7%IK!JLlP|As;2Rbekh+kg{j2tvlvjI$((OQx z-8-aGQ1*aq{b;s>{O&VY!AwOJ0}oxjbBt^^lr+#4Z%>20hQ(LxwnlaiJD}xNPE{9L zlnOD>v%)YE@l99OqT(S|NS6B^bSkyYVyQ?Blzh|vueo;BR%_KQDJ=Ps>J-Bp&^0<% zc;dEqz+)3HSwH}S%dlJoW+_bZ7e8EzB6*z^_fP<#N&ogj5M^wF%7Pa~sP&2}kbfFtc;v*4i>s{>ORn+u zvYgJ8y~M_+D%aiDl~{E}+4Q}0vP#Qahn2PnMa@1pXqHD#3i1akuqqgXF;LcG2?CD5wJ)=xkE#m_+{=8K)NnPoJ2|&I zV|-8wuo$yD?1;NHV7Uv#Pr}he|m+R)0}w042+1>toP})hp17%FzpM z(F;a)IJ`q~55g)yx#X7A*&IjnWOm1P$+o}KYyfzt`}u&Lqwe0$wCE&s5c4`(Lwb~W z_@?zche9TOa&N2sX6?gfTgJVFvBacdR^E}{=Z(_uMIee|e}9E25|GOaw5{17DXKOG z^&Eygzm5hv9$Z%AisWmTD>L_cWg+U*F1c-Zx=e3XpFbsJW7y+OQ(h(jd4#0ZoV<*yw!4$tv zY?pX`;MjoOjVX^242t?2$i)aEHz^~LJJj7&{p~A6mn_OKK8!@G0qZr; zfo3*si(I6V8!#x9Kuw=YMW{V0m_OPF!|feEgBXbQJiUGc6ioVW6ehJ>iuCJl*-rg} zamb6B?qq~3DdWBFRu7n-54{xcXbqb-^e31Z5r_|&#;UuZ#y(SxhjUJU~Y-_qJdU>1t!-L~WKf?t0< z)FpikF+9ba_IB{;b5y{=G&y5to$d+n#AgCLwY7{j7B|KLyhUxhNSGH_q`x6bXs#}h z8OTM@*|m?43cdl?*VqAfXv}FLz2eY-9qb!BH-|f(+ImRQtlV@B$d~r}ZN?LWa~nn# zGmI_*-+qAcEB&p-DySyL>ME)gEO%atlx|SD4S!=NYtpQ(wrgswsv4tunYq>@=D)vS z3GatT`rA)G|1KP`S)}0CAAe|KIRas+oY7&IQk7&eQNn@y56= zy*2O2mh&g0TTMZuJ5gzsB{5!M{2ikt3H(}!G0h3OO#ZN)6oSd3?bRNCGLsS! z1{hk?AQ?DAc`s>uipB3Q;n~G?rCW`k-TU4DsCwe&SjGR=1D(}&6CoMeuAQz-%R5K< z>BoQhQ^W6GxiaPi^L$wXcJmh9CXevUz8F}bZ5fxGu7bo1h)oQ=HbyOVk~v#H_LN83 z;dv5!siTG`PMy&c*(K$xm&N|Cj5Mc&}}66cAvz8LJ@i%KbJn`dk~ zTi)9H)kY4kvBk9Bj~1K0+sf!Yxz$KPG>E5S!efJ`AXGIAlnHr?I6PLN$~~g$N}`c{ z40}tRfXCn%*XVq7x;nB?uK-=3eT?T0kk>ZIK6(Of-Av9#V~DJF z*6r6L5YPr5T#cEw=%q?voMTkW78*b&6HS&^!_7+ypf`irZ-;d?6Zn9u(* zD`GI*LPPCuCZQE|qssXYQ0-?D)4S-h%BtN$HUk2E6vY8G z#g5Bm2z?F9y}c<*HFS~RiS(Lz%sandi+7kNUEy>Ir(*ypTp*E>Q}?&OxPLjTyUBXL zG_Lp28%>pq!bgu+AE^f0ucd)$3WvyvP^<@fHmWqtTF)(-Cy+$Eyy2g24fKlD94rSr z6_yNk+HJB58q){F#)V|gXJ9i8hTOnzpRJdF#O8R^7GjkQ8ctbMoaKuL{Hyy+*6dJ& zNL+vsbF)JDJe>CTSN7%Pi)8!qSFi9|9x*$FBQC&8B%x*2Y?EECWa{CADNb?fYC`)^ ze66R@OXxWaVlRML&*9bYD#G}hq4qU|l>AA~-}hzXV0~O3*n<;>aYKr00wn&zz$r~3 z$U@BoiqWd&OOnt(`VfgA?qGi}4^()+X8WfYJo$Xr#eiE3I4-qB7)zd);NOB&fL;*w zVQg4)MQaQC)XeTt&f-tlE4_6AG}P;0!(0GoGDk9PXi0%^q6uC*uFH5DNB{3hSBuW z^f5r{HGcL%mC(ewcn&KkSild-4Lf9=E#7$N+*U@8evvwE6lB~n9*;)*lgwy~2%D&8O+|1ta`z>6yL)>mGwl<7J zw(`8XZD#=0Lbw)8)7WIuD`qr5KW1!1?5A1_xdSYWrYBVRyP}}V?67d#eo0gJT55W_Og62KTjDvx9-AW2cW(5Ym$0O}sV8F~$NCTW$A(4U zu5`!W#vXb1U2CzlU3m93E>|GT!SZ=BoluC+ef`>gA-RRj;n#mGM+yacERUaq5!{&4 z|F~?KllAwQnFjNk7th&B9+lR!-LnkI;avFYvWW|kfsa)zzbf#*8$RThD@jV$C@hjN` zR``e@#+_9j{PR~P6^QuGBh-=Oz`}WtoMHga!nhkm+=H-?)eLzdStu-`Fl4A|zyjQR zMi6ih==r-CYzAkCv>#{T*kcj8c(?fGN2+?fvY+5H2C(LU7+2LAv;(5 z!*)>PjAhTCsgrgte~sDA`*SMUvgdCj2y&?+(eG}(y7S?E4xi1xV|=*v>OGKhLvruB zcfx8j-|c3;`uFT>fH#DxTncGlKXMk6*aGP~F$}7XIeNP+B7aR~FY6c@4olOIP>Sm5 zWwx{a4!3TpyeN?wKDKrNvT)`3vVEbfP*#|rEtyBGwE4C&Tt!NUu4& zRhf^={RE6WpV`x@g`N_sYs-ODDBdph%qNnv?xqxm#Vg#ue6e@AJJ0^hONBc=Oz3iK zfTngmZ?6Hh&FV^C5ZQO7Fhtr}(^V@E|TKsaL`79)+xfPJhdhI$=VY(owkeir~{`n5mxF8okMcAMV>QpwiE`8 zTUP~bYdBQo!`81RX_Sr)u`;X__WZ?Hr+3c(-FOiL!;cZ7305(fy9?hQCTC{g_2gtP z!qIg9XP136tSQq(F>z$xyp?z*3zP?ZxS;~}d+1|^{|uumN44v&cwq{ulsb&Ze?R6L zJUu(-e!d3Iv3FDcs0@_{ho^cH9l+{QqM3bv>n-ih)$r^gYL1e+A&-5{809Z>^vuxn^Bw$r zFTH*D+&|P9VrgT6cK`MBy&wGTuP49#LyTy7K)K7?WCXQ|=VHuI-x~iNvzq4|Dg^~h zYcOrH_7A=(QhP^4rg;5)1J4ponP!TJLuO_xamptK|6iY$m)URF3TjZWD()GkI9j|f zp`v_mfq%6XFLS>6zr7n$SU|2Qhux@zK%3sm9XMJAWB zWO%vTr=7d!+xWSCI4*Jtm6tO4WdF{?1Jel}&1ga{Db+>yk8qKh30T~lv?>sOo$k+e zqvvhh127GuB4IwZEL7zB?3x)ChKGH)B23d{B`osK*)BjK$`>BUVJF#IbsOok`<%$J z(yn3zkEF3pb>DNaWImu=g?lpm-xT{xaG5T-)kGQ9#E)(~GCD;s(TrgR2U%4jE>*8m z4wJK7r4BmyiR)zu_}!bQk~|`5De(XP3*ZEpgi*Ei^&29x)7OR9)-uXD+{o-~hwQHwWMN*rowT8Ie%4!8sSumDFQUG{|*IN2v=Z|~3)*_P8Te$#O0t@2;)b)wQ z-6uh4|NW)g3U!OpWuXmhbyQDV+vccT!?f_w9CKsZEYH7~j4TKiM`fU$&HOXSVbJ*D z5oIw`@W81JxMzj;E#a5Ln+#z(9v_t*9QSHau6J;=7FQ&Sv!te`MlB1Kj4r2aLYp?WN* zYHg!qozW&+-hcJjaCma%l!(e|r0mQqiQL`Tuz{~vR3pdHt%^N=0aDve$Dz+ErE>9N zW#&G00rMJ5P7_Wf8%oDzR4$c6-JO$+n<8)t+~N3QLJCY*!6lAZWU}@~vwzz!S>pKq zH8+dm-~eC568YD9g=U4bsd}PLhgqwMo==meq^NxWuT7M9XQL~!*WozeydY+>*REMJ zOiD{1B9*r=*JhG^wBr*p&e!T>;rAbYMT~6W;PV^fB%Nj(`Neh7U>3u_@W=cVLG`cd zoL{7dzH}y97tYoPFjzSO;o&G9lY!C`BlJN`Motiyht~V$PyjCWQ9o0d(-FA zAKUW4PK~GYf^#`>1^#S)nO{R^n9^+2&dv2ZZUzaz^6TA4KO@@JXTR3e&`^! zR#YX%)*iYrup;llIb7|=!&SjhK|wOd2ZNE_^HX4g;HnUolj(yPhUNMs=R*ac{Lj;l z(Rmfe2tJW!e^ulTwdj78lr#p02gq%`GJGPVvjVaBKxKHR?f>8>KzMfC|K}6T>Bh_B zb>n6qwSf;10kdUngv%^wcoT0cBgUSYR>xm8PmLew7|>MhGyVC8xjk-y>*rmaKi`KK z8?h))>R%LQ2lIkHf8etK;UB)>-ec!Z3Pzqp*SJN{v%HeU!7@UiB=OhXZ_D$3lCpin zQPN9`i-*DUO6V3lGu~Yqe;Ee6ZLT<$k z@B%E1r)xE2p!v_?%Q46?Kn1RmY0hEZ56)qheN*Sx?m!t;h*|E2BJ6M%hV6zG4|n2aeS0P zAS?_O;uUW5<^_h?PBpL3_nzww%ykVw!9#sxF3u(RlNfBkW`+hi&E5WwK3w)g%=cYU zGd!2=u)qg7LZ!K|0>IY({`pA*Ne?;(Hr{Tt<7?M(No*3EcD(6C6a6@uO=7R(X!))7 zw=7#|>cD&Vd^+<_<@>asKd%m?c{(+3Y=Qtx!|D96iGv3l*$KoX50PB|BF$L=r^BojaWR)_9`EuDJ&Z;>mM>)?1LyyAkcB9n z%>6UyMZPlr8(%=YX?bmtDC=eGvrdr$N*#HuLa%(YT%@z8$m4e%}*a1s#CO%ftAB03DeW zpyesc!sJlE{on+xA)P0Rh@#=RJbE^)@3EvH#ssYPne6gKkGAMxkvZ!VNMfRxboRh< zsKT!cg(_yn5aQfF@7m>K34eL*g&c;H6*EaFzfPcKf^`cwWg%WKukn!(P|<(?ApiZt zg&oAh${-{CN(4eUo?wuVZpOme;6lgJT+k@7^WUE7@UL?(Pb{ zvvZgjOF+fc)C3hMRFnoAn`X3B*%cirrOz0cfV#7qf>JS}bK&fWEH8~Ayd=?7#vaSo zcT!|lM|zK{tUDu}9LX!x$>cTyp;wyj8{<(#hU4HeLWFnx;VT&dtjJW%*FO*j?g3C9 zXUavIGTkKXyb#(NN0S)(o9*&sU{NY0@Pht1S z^eoe;(?A$^{RF-pZHCA_rJj=G?%7Pal&| z5qOoSmpv+pIjg305IFr5jb>BiwsFo_jpln}u7Y{g$Bb+40ca&9?C& zz|tgWThunuRujGX@(s2elW2xfvSl}x4<)K*@xE-$DYR7@%?LrCI)v{S;kJPU6ERqVc1wcc80qjg z2fbs71Z47=I|8w@PbBB#Cz~{AQ)7?z`lu-=G{5%!-1!t8MTBh>rI1&#@B;*`dM&=B zI6CfAfRz0HZ!9d7s`5QN|FJ$Q)*C!{_P!Dn#LTLieEzrVL1Fv`ORehdIn`Ko?K|Cc$wq3D~dOGg?( z=1KtX?J4f72ilgJGEmgrKFz@Q|A6Gow;jZO3djpA((a%L zNW4<57s_DEk1-2j#Z7w`yTl;wFLS7NzXD5!YIqw1S*1$t2+H79q9OB1Je?6)h%5;E zA4KT?7-$Dp2igZ70?XyVL)A3!C|5rk=*YiX0K>1uwft%g7!xtJ}fy=I)7D%*HS_me-L0INw~$wU7=a zmV@DhZj7A}!1WO40)!B(j;{=H(7;lnCKJP^2)wzKQjM8Qxe$`TjAh%`F(&1hCGS^q zLK{n2!Gi$XrkIF!tu-{qF#!V!>Fhu)aY40q0KZLpJ0YErj!xtf7Z8>;f5J4;ccAZt z=|ukl5Pf`AKer!*C8&qShnfePN5)4A2h299u14(on^ z5~Oww*m;r?UbjX*+}a~c-|jLl{Ro<0$tz+N{CYV&oUh7L+9hI8+(CvTau7`Wts5 z@|&HUl+pb4P*`>to1GN~v#?~EV!R|CF$ zzH{j>c@#H?t;0~Lh{Ir6AlM%CE0)UPcin*jo{_uo>?4!stIw~S&;gb6OBk1)z}Nw- zqI=6*0Q{V9ax)z;eldLkq^Ac<0zSNZAB#kF1P43ugOkusf?#w93K6vUSC^F?Qww7R(kfNW-CYn!g_2`g3y;MM#Uiot5>R;sNRquk zkyIeTb5+t~s;nJX2?Uy|GFjlapi*4eREMCX&M|KR19{tbl+Dz<7xj`bun&3SEAPaDxXzm zUfgEITV2>=d6BI9e+fWAr7EhsqGAIri&5?&`gvx5eDT9QfAiI%drjMbI;bB-5QxQv^< zXUN?5bEYd0Q!Is(?YviLs31kcf`|Ii1EFYNx2~<*>R(i*wIaF3fi*x>0iD;!{K8bT z)Q2-_>o1i_vlMw5aElG*19ZSiW2arq=|KpsgVF!Dz$-JPC9A_gfdN;M#);_}dJJvxVO%Hxf``n;D~ zUc8&|>z80@BHKrQ_EV1L5tpb&XEQR{ZAWe6L!WJ1h1&fhJ?Qfgl8?s)%L?mC;ex1Y z@AvN_3*-kNi;_2s!bODHFkSI3JPZ3%uq=u0o?dD9=ER&IXIW^j509zxj=t}~*byYc zTX}H?B8seK3b#X7vf#0afjqT1*n>OhFR_xvx&zoOurN9;+$Z?w4Qo=L!&w*aFWz>0dCtw_s`mvVOm_Q6Yil=8X7`tz+_xMc%zF?ic_n;fZjsTtNId`6tDIk zT0bPN@n!$Zf&K@-_f|os6ciqXPdNliia`na@M;n&e=4>L^v(nPmL*`z_%VM@$rxSG zsoPea_jYftdsNFo16|EYkNOuiJ$1P}6wC3Fa__&mA-$phIr5)7 zlwgGJp8B>x0|+;cOxryEY6FnSbNg-D?QB5!iyvR#8a}=899Y}e+qVuxY`LD}<7R#7 zQ5-ag<@59%$0r0UK~B&3#$$5b=2KZ=UWaKRNy!q1A4VE5y~8&SMD6wKI^PAHKBr#) zpvBiI+JSAo&K_G3p$OrD35i!oh{(${4i|=o!bOuNkxxj7#Ajj_A<~6-xW9Rj0fosQ zKKj?)?eoKj3K%T&(LWa8&YyR_qz&Z@nJ=4wBvOqCWT*DS2Cr>d*;3a6QIR$sJz5_wk1BCyI<31{>By`+!sqjN zT-C#Bv)y&OSMILeZPBE>&*kz3$AwkQ>IDr>gZN^{NJV4BiBa-cx&=U?;*k-T&o6D@ z^~*26oyV7LToZI+XzTucW}d`fNcS$-1;7u7I(W~S*gdqWWjFdqCt_e+hq>na{ip2wAehETx|lVmT8ze z){?1bEg1{elIc=y!xa=+(2vWJC53$lt{cS<2 zRv%JR<+sGqKR*w63UL_iWpY{5n-!V1|Npq2PaYN$01!%we@x&NdiCFEj49dJ4>6)- zr7>S%XURtxx3a?o(;N2-9SJ}N;jqj@fH}bTGK7@~Hh^8V`gjUQ=IQYy`v7mq5Lk)e z0+>bx0#+ip0J@gemBmxAf4ep#VU-R`<#Jh7%gJ1^iXxL648WH%I76w193N4cEa6d~ z`c*NR9O)XFN4T72sNu)QR3@LGaPk2Fci;25zsvvKjHr?hK+X&R1bkUQ*gry!q6i+NkreP1 zQ}LYb3az)#5!pIS)7kE{wYn5IBEwz_#aKm1OpT%3kQrT8S!O`HX%}2)bV0glwRUJv z%#2QZ=-`#$8MWFKN*SaM>R_-_Z!L-vSKe|Y5FQFbC)ZX2}N)Ax&GEg9gRczki9DGFlm>=zWY6d z5*G8;F9~Y7?ABM=py-rFviRhG8c^xEJj#)H2`Y)MULv zpAd=9t&*$g9tcZZ zl>?@gDpyRah*+h&$9!4T^liEFRF+AdZ$O7*s%7j0&OnRvC^lM6E?g9EO_r#jm+ONQ zLyU`0E&(3~0X^~JmC^xMVi_)xG24yP%T=X_Ryh^DauxD*afFBnR`@6(ME5WdsbSyu zNJ0tX90@|=2I(i3adoV6v=z|HiV$b3+TgTw#p@B! z8(*#H#&hK>lT~!Eh?gq%l8H+R>3TUyG?gPjOs^Jq)ZhzLn1Zf98@McS@UrnH5E4od zv|u4Zg~7nWt>T|(1QCcx$SA02=psd7;NcSx5)qS-iXkJX5Gzi+1c{VX)RH7ikt$6( z7p|aS+_>}L$&0u5KKN+Zh)+KIqT48=o&NNXH&(E+M4LW`ncKwQMhiIc;cLnX%Wyc_ zWj9+E_Sx^GJ@z^k%w*WH7mX!@#&3>r@K%p^4nTnOvzardL#$=`!zwGaYc-!G8v&MD zj!o;FGjw*yGA*0lS?68w+MJ6nxh%&OSLM2HwHY_ul;@VeNRN6tkK_Qado)ku6sH?4CXvyWin2$W=k1jiT2<}le>s)VVQDsw iP9d8AxExHI1$==3QWPFVcs!f@V>G9HK>XU6g$@8FuBYz+ literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-latin-ext-400-normal.woff b/site/mitre/roboto-mono-latin-ext-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..50943d5cc9fb1533331266fa67b7b5535204dd01 GIT binary patch literal 12228 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-mono-vietnamese-400-normal.woff b/site/mitre/roboto-mono-vietnamese-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..f19e3f869f559615d07972cfd398a90788702a5d GIT binary patch literal 5916 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 literal 0 HcmV?d00001 diff --git a/site/mitre/roboto-vietnamese-400-normal.woff b/site/mitre/roboto-vietnamese-400-normal.woff new file mode 100644 index 0000000000000000000000000000000000000000..cdeb26c99dca634d3dedcaff33b0fd5a2d336ee4 GIT binary patch literal 5000 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 literal 0 HcmV?d00001 diff --git a/site/mitre/runtime.js b/site/mitre/runtime.js new file mode 100644 index 0000000..82079df --- /dev/null +++ b/site/mitre/runtime.js @@ -0,0 +1,187 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({}); +/************************************************************************/ +/******/ // 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; +/******/ } +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = __webpack_modules__; +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/amd define */ +/******/ (() => { +/******/ __webpack_require__.amdD = function () { +/******/ throw new Error('define cannot be used indirect'); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/amd options */ +/******/ (() => { +/******/ __webpack_require__.amdO = {}; +/******/ })(); +/******/ +/******/ /* webpack/runtime/chunk loaded */ +/******/ (() => { +/******/ var deferred = []; +/******/ __webpack_require__.O = (result, chunkIds, fn, priority) => { +/******/ if(chunkIds) { +/******/ priority = priority || 0; +/******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1]; +/******/ deferred[i] = [chunkIds, fn, priority]; +/******/ return; +/******/ } +/******/ var notFulfilled = Infinity; +/******/ for (var i = 0; i < deferred.length; i++) { +/******/ var [chunkIds, fn, priority] = deferred[i]; +/******/ var fulfilled = true; +/******/ for (var j = 0; j < chunkIds.length; j++) { +/******/ if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) { +/******/ chunkIds.splice(j--, 1); +/******/ } else { +/******/ fulfilled = false; +/******/ if(priority < notFulfilled) notFulfilled = priority; +/******/ } +/******/ } +/******/ if(fulfilled) { +/******/ deferred.splice(i--, 1) +/******/ var r = fn(); +/******/ if (r !== undefined) result = r; +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ })(); +/******/ +/******/ /* 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/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 }); +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/node module decorator */ +/******/ (() => { +/******/ __webpack_require__.nmd = (module) => { +/******/ module.paths = []; +/******/ if (!module.children) module.children = []; +/******/ return module; +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/jsonp chunk loading */ +/******/ (() => { +/******/ // no baseURI +/******/ +/******/ // object to store loaded and loading chunks +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded +/******/ var installedChunks = { +/******/ "runtime": 0 +/******/ }; +/******/ +/******/ // no chunk on demand loading +/******/ +/******/ // no prefetching +/******/ +/******/ // no preloaded +/******/ +/******/ // no HMR +/******/ +/******/ // no HMR manifest +/******/ +/******/ __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0); +/******/ +/******/ // install a JSONP callback for chunk loading +/******/ var webpackJsonpCallback = (parentChunkLoadingFunction, data) => { +/******/ var [chunkIds, moreModules, runtime] = data; +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0; +/******/ if(chunkIds.some((id) => (installedChunks[id] !== 0))) { +/******/ for(moduleId in moreModules) { +/******/ if(__webpack_require__.o(moreModules, moduleId)) { +/******/ __webpack_require__.m[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(runtime) var result = runtime(__webpack_require__); +/******/ } +/******/ if(parentChunkLoadingFunction) parentChunkLoadingFunction(data); +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) { +/******/ installedChunks[chunkId][0](); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ return __webpack_require__.O(result); +/******/ } +/******/ +/******/ var chunkLoadingGlobal = self["webpackChunknav_app"] = self["webpackChunknav_app"] || []; +/******/ chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0)); +/******/ chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal)); +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ +/******/ })() +; +//# sourceMappingURL=runtime.js.map \ No newline at end of file diff --git a/site/mitre/runtime.js.map b/site/mitre/runtime.js.map new file mode 100644 index 0000000..4ce8866 --- /dev/null +++ b/site/mitre/runtime.js.map @@ -0,0 +1 @@ +{"version":3,"file":"runtime.js","mappings":";;;;UAAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;;;;WC5BA;WACA;WACA;;;;;WCFA;;;;;WCAA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA,kBAAkB,qBAAqB;WACvC;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;;;WC3BA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;WCNA;WACA;WACA;WACA;WACA;;;;;WCJA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA","sources":["webpack/bootstrap","webpack/runtime/amd define","webpack/runtime/amd options","webpack/runtime/chunk loaded","webpack/runtime/compat get default export","webpack/runtime/define property getters","webpack/runtime/hasOwnProperty shorthand","webpack/runtime/make namespace object","webpack/runtime/node module decorator","webpack/runtime/jsonp chunk loading","webpack/before-startup","webpack/startup","webpack/after-startup"],"sourcesContent":["// 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\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\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};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t\"runtime\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknav_app\"] = self[\"webpackChunknav_app\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","",""],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12]} \ No newline at end of file diff --git a/site/mitre/scripts.js b/site/mitre/scripts.js new file mode 100644 index 0000000..07a72b3 --- /dev/null +++ b/site/mitre/scripts.js @@ -0,0 +1,28635 @@ +(function (global, factory) { + if (typeof define === "function" && define.amd) { + define([], factory); + } else if (typeof exports !== "undefined") { + factory(); + } else { + var mod = { + exports: {} + }; + factory(); + global.FileSaver = mod.exports; + } +})(this, function () { + "use strict"; + + /* + * FileSaver.js + * A saveAs() FileSaver implementation. + * + * By Eli Grey, http://eligrey.com + * + * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) + * source : http://purl.eligrey.com/github/FileSaver.js + */ + // The one and only way of getting global scope in all environments + // https://stackoverflow.com/q/3277182/1008999 + var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0; + + function bom(blob, opts) { + if (typeof opts === 'undefined') opts = { + autoBom: false + };else if (typeof opts !== 'object') { + console.warn('Deprecated: Expected third argument to be a object'); + opts = { + autoBom: !opts + }; + } // prepend BOM for UTF-8 XML and text/* types (including HTML) + // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF + + if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + return new Blob([String.fromCharCode(0xFEFF), blob], { + type: blob.type + }); + } + + return blob; + } + + function download(url, name, opts) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url); + xhr.responseType = 'blob'; + + xhr.onload = function () { + saveAs(xhr.response, name, opts); + }; + + xhr.onerror = function () { + console.error('could not download file'); + }; + + xhr.send(); + } + + function corsEnabled(url) { + var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker + + xhr.open('HEAD', url, false); + + try { + xhr.send(); + } catch (e) {} + + return xhr.status >= 200 && xhr.status <= 299; + } // `a.click()` doesn't work for all browsers (#465) + + + function click(node) { + try { + node.dispatchEvent(new MouseEvent('click')); + } catch (e) { + var evt = document.createEvent('MouseEvents'); + evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null); + node.dispatchEvent(evt); + } + } // Detect WebView inside a native macOS app by ruling out all browsers + // We just need to check for 'Safari' because all other browsers (besides Firefox) include that too + // https://www.whatismybrowser.com/guides/the-latest-user-agent/macos + + + var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent); + var saveAs = _global.saveAs || ( // probably in some web worker + typeof window !== 'object' || window !== _global ? function saveAs() {} + /* noop */ + // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView + : 'download' in HTMLAnchorElement.prototype && !isMacOSWebView ? function saveAs(blob, name, opts) { + var URL = _global.URL || _global.webkitURL; + var a = document.createElement('a'); + name = name || blob.name || 'download'; + a.download = name; + a.rel = 'noopener'; // tabnabbing + // TODO: detect chrome extensions & packaged apps + // a.target = '_blank' + + if (typeof blob === 'string') { + // Support regular links + a.href = blob; + + if (a.origin !== location.origin) { + corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank'); + } else { + click(a); + } + } else { + // Support blobs + a.href = URL.createObjectURL(blob); + setTimeout(function () { + URL.revokeObjectURL(a.href); + }, 4E4); // 40s + + setTimeout(function () { + click(a); + }, 0); + } + } // Use msSaveOrOpenBlob as a second approach + : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) { + name = name || blob.name || 'download'; + + if (typeof blob === 'string') { + if (corsEnabled(blob)) { + download(blob, name, opts); + } else { + var a = document.createElement('a'); + a.href = blob; + a.target = '_blank'; + setTimeout(function () { + click(a); + }); + } + } else { + navigator.msSaveOrOpenBlob(bom(blob, opts), name); + } + } // Fallback to using FileReader and a popup + : function saveAs(blob, name, opts, popup) { + // Open a popup immediately do go around popup blocker + // Mostly only available on user interaction and the fileReader is async so... + popup = popup || open('', '_blank'); + + if (popup) { + popup.document.title = popup.document.body.innerText = 'downloading...'; + } + + if (typeof blob === 'string') return download(blob, name, opts); + var force = blob.type === 'application/octet-stream'; + + var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari; + + var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent); + + if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== 'undefined') { + // Safari doesn't allow downloading of blob URLs + var reader = new FileReader(); + + reader.onloadend = function () { + var url = reader.result; + url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;'); + if (popup) popup.location.href = url;else location = url; + popup = null; // reverse-tabnabbing #460 + }; + + reader.readAsDataURL(blob); + } else { + var URL = _global.URL || _global.webkitURL; + var url = URL.createObjectURL(blob); + if (popup) popup.location = url;else location.href = url; + popup = null; // reverse-tabnabbing #460 + + setTimeout(function () { + URL.revokeObjectURL(url); + }, 4E4); // 40s + } + }); + _global.saveAs = saveAs.saveAs = saveAs; + + if (typeof module !== 'undefined') { + module.exports = saveAs; + } +}); + +;/*! For license information please see math.js.LICENSE.txt */ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.math=t():e.math=t()}(this,(()=>(()=>{var e={5716:function(e,t){var r;!function(n){"use strict";var i=Math.cosh||function(e){return Math.abs(e)<1e-9?1-e:.5*(Math.exp(e)+Math.exp(-e))},a=Math.sinh||function(e){return Math.abs(e)<1e-9?e:.5*(Math.exp(e)-Math.exp(-e))},o=function(){throw SyntaxError("Invalid Param")};function u(e,t){var r=Math.abs(e),n=Math.abs(t);return 0===e?Math.log(n):0===t?Math.log(r):r<3e3&&n<3e3?.5*Math.log(e*e+t*t):(e/=2,t/=2,.5*Math.log(e*e+t*t)+Math.LN2)}function s(e,t){if(!(this instanceof s))return new s(e,t);var r=function(e,t){var r={re:0,im:0};if(null==e)r.re=r.im=0;else if(void 0!==t)r.re=e,r.im=t;else switch(typeof e){case"object":if("im"in e&&"re"in e)r.re=e.re,r.im=e.im;else if("abs"in e&&"arg"in e){if(!Number.isFinite(e.abs)&&Number.isFinite(e.arg))return s.INFINITY;r.re=e.abs*Math.cos(e.arg),r.im=e.abs*Math.sin(e.arg)}else if("r"in e&&"phi"in e){if(!Number.isFinite(e.r)&&Number.isFinite(e.phi))return s.INFINITY;r.re=e.r*Math.cos(e.phi),r.im=e.r*Math.sin(e.phi)}else 2===e.length?(r.re=e[0],r.im=e[1]):o();break;case"string":r.im=r.re=0;var n=e.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g),i=1,a=0;null===n&&o();for(var u=0;u0&&o();break;case"number":r.im=0,r.re=e;break;default:o()}return isNaN(r.re)||isNaN(r.im),r}(e,t);this.re=r.re,this.im=r.im}s.prototype={re:0,im:0,sign:function(){var e=this.abs();return new s(this.re/e,this.im/e)},add:function(e,t){var r=new s(e,t);return this.isInfinite()&&r.isInfinite()?s.NAN:this.isInfinite()||r.isInfinite()?s.INFINITY:new s(this.re+r.re,this.im+r.im)},sub:function(e,t){var r=new s(e,t);return this.isInfinite()&&r.isInfinite()?s.NAN:this.isInfinite()||r.isInfinite()?s.INFINITY:new s(this.re-r.re,this.im-r.im)},mul:function(e,t){var r=new s(e,t);return this.isInfinite()&&r.isZero()||this.isZero()&&r.isInfinite()?s.NAN:this.isInfinite()||r.isInfinite()?s.INFINITY:0===r.im&&0===this.im?new s(this.re*r.re,0):new s(this.re*r.re-this.im*r.im,this.re*r.im+this.im*r.re)},div:function(e,t){var r=new s(e,t);if(this.isZero()&&r.isZero()||this.isInfinite()&&r.isInfinite())return s.NAN;if(this.isInfinite()||r.isZero())return s.INFINITY;if(this.isZero()||r.isInfinite())return s.ZERO;e=this.re,t=this.im;var n,i,a=r.re,o=r.im;return 0===o?new s(e/a,t/a):Math.abs(a)0)return new s(Math.pow(e,r.re),0);if(0===e)switch((r.re%4+4)%4){case 0:return new s(Math.pow(t,r.re),0);case 1:return new s(0,Math.pow(t,r.re));case 2:return new s(-Math.pow(t,r.re),0);case 3:return new s(0,-Math.pow(t,r.re))}}if(0===e&&0===t&&r.re>0&&r.im>=0)return s.ZERO;var n=Math.atan2(t,e),i=u(e,t);return e=Math.exp(r.re*i-r.im*n),t=r.im*i+r.re*n,new s(e*Math.cos(t),e*Math.sin(t))},sqrt:function(){var e,t,r=this.re,n=this.im,i=this.abs();if(r>=0){if(0===n)return new s(Math.sqrt(r),0);e=.5*Math.sqrt(2*(i+r))}else e=Math.abs(n)/Math.sqrt(2*(i-r));return t=r<=0?.5*Math.sqrt(2*(i-r)):Math.abs(n)/Math.sqrt(2*(i+r)),new s(e,n<0?-t:t)},exp:function(){var e=Math.exp(this.re);return this.im,new s(e*Math.cos(this.im),e*Math.sin(this.im))},expm1:function(){var e=this.re,t=this.im;return new s(Math.expm1(e)*Math.cos(t)+function(e){var t=Math.PI/4;if(-t>e||e>t)return Math.cos(e)-1;var r=e*e;return r*(r*(r*(r*(r*(r*(r*(r/20922789888e3-1/87178291200)+1/479001600)-1/3628800)+1/40320)-1/720)+1/24)-.5)}(t),Math.exp(e)*Math.sin(t))},log:function(){var e=this.re,t=this.im;return new s(u(e,t),Math.atan2(t,e))},abs:function(){return e=this.re,t=this.im,r=Math.abs(e),n=Math.abs(t),r<3e3&&n<3e3?Math.sqrt(r*r+n*n):(r1&&0===t,n=1-e,i=1+e,a=n*n+t*t,o=0!==a?new s((i*n-t*t)/a,(t*n+i*t)/a):new s(-1!==e?e/0:0,0!==t?t/0:0),c=o.re;return o.re=u(o.re,o.im)/2,o.im=Math.atan2(o.im,c)/2,r&&(o.im=-o.im),o},acoth:function(){var e=this.re,t=this.im;if(0===e&&0===t)return new s(0,Math.PI/2);var r=e*e+t*t;return 0!==r?new s(e/r,-t/r).atanh():new s(0!==e?e/0:0,0!==t?-t/0:0).atanh()},acsch:function(){var e=this.re,t=this.im;if(0===t)return new s(0!==e?Math.log(e+Math.sqrt(e*e+1)):1/0,0);var r=e*e+t*t;return 0!==r?new s(e/r,-t/r).asinh():new s(0!==e?e/0:0,0!==t?-t/0:0).asinh()},asech:function(){var e=this.re,t=this.im;if(this.isZero())return s.INFINITY;var r=e*e+t*t;return 0!==r?new s(e/r,-t/r).acosh():new s(0!==e?e/0:0,0!==t?-t/0:0).acosh()},inverse:function(){if(this.isZero())return s.INFINITY;if(this.isInfinite())return s.ZERO;var e=this.re,t=this.im,r=e*e+t*t;return new s(e/r,-t/r)},conjugate:function(){return new s(this.re,-this.im)},neg:function(){return new s(-this.re,-this.im)},ceil:function(e){return e=Math.pow(10,e||0),new s(Math.ceil(this.re*e)/e,Math.ceil(this.im*e)/e)},floor:function(e){return e=Math.pow(10,e||0),new s(Math.floor(this.re*e)/e,Math.floor(this.im*e)/e)},round:function(e){return e=Math.pow(10,e||0),new s(Math.round(this.re*e)/e,Math.round(this.im*e)/e)},equals:function(e,t){var r=new s(e,t);return Math.abs(r.re-this.re)<=s.EPSILON&&Math.abs(r.im-this.im)<=s.EPSILON},clone:function(){return new s(this.re,this.im)},toString:function(){var e=this.re,t=this.im,r="";return this.isNaN()?"NaN":this.isInfinite()?"Infinity":(Math.abs(e){"use strict";var t=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},o=a.preserveFormatting,u=void 0!==o&&o,s=a.escapeMapFn,c=void 0===s?i:s,f=String(e),l="",p=c(t({},r),u?t({},n):{}),m=Object.keys(p),h=function(){var e=!1;m.forEach((function(t,r){e||f.length>=t.length&&f.slice(0,t.length)===t&&(l+=p[m[r]],f=f.slice(t.length,f.length),e=!0)})),e||(l+=f.slice(0,1),f=f.slice(1,f.length))};f;)h();return l}},3996:function(e){!function(t){"use strict";var r={s:1,n:0,d:1};function n(e,t){if(isNaN(e=parseInt(e,10)))throw f();return e*t}function i(e,t){if(0===t)throw c();var r=Object.create(s.prototype);r.s=e<0?-1:1;var n=u(e=e<0?-e:e,t);return r.n=e/n,r.d=t/n,r}function a(e){for(var t={},r=e,n=2,i=4;i<=r;){for(;r%n==0;)r/=n,t[n]=(t[n]||0)+1;i+=1+2*n++}return r!==e?r>1&&(t[r]=(t[r]||0)+1):t[e]=(t[e]||0)+1,t}var o=function(e,t){var i,a=0,o=1,u=1,s=0,p=0,m=0,h=1,d=1,v=0,y=1,g=1,x=1,b=1e7;if(null==e);else if(void 0!==t){if(u=(a=e)*(o=t),a%1!=0||o%1!=0)throw l()}else switch(typeof e){case"object":if("d"in e&&"n"in e)a=e.n,o=e.d,"s"in e&&(a*=e.s);else{if(!(0 in e))throw f();a=e[0],1 in e&&(o=e[1])}u=a*o;break;case"number":if(e<0&&(u=e,e=-e),e%1==0)a=e;else if(e>0){for(e>=1&&(e/=d=Math.pow(10,Math.floor(1+Math.log(e)/Math.LN10)));y<=b&&x<=b;){if(e===(i=(v+g)/(y+x))){y+x<=b?(a=v+g,o=y+x):x>y?(a=g,o=x):(a=v,o=y);break}e>i?(v+=g,y+=x):(g+=v,x+=y),y>b?(a=g,o=x):(a=v,o=y)}a*=d}else(isNaN(e)||isNaN(t))&&(o=a=NaN);break;case"string":if(null===(y=e.match(/\d+|./g)))throw f();if("-"===y[v]?(u=-1,v++):"+"===y[v]&&v++,y.length===v+1?p=n(y[v++],u):"."===y[v+1]||"."===y[v]?("."!==y[v]&&(s=n(y[v++],u)),(1+ ++v===y.length||"("===y[v+1]&&")"===y[v+3]||"'"===y[v+1]&&"'"===y[v+3])&&(p=n(y[v],u),h=Math.pow(10,y[v].length),v++),("("===y[v]&&")"===y[v+2]||"'"===y[v]&&"'"===y[v+2])&&(m=n(y[v+1],u),d=Math.pow(10,y[v+1].length)-1,v+=3)):"/"===y[v+1]||":"===y[v+1]?(p=n(y[v],u),h=n(y[v+2],1),v+=3):"/"===y[v+3]&&" "===y[v+1]&&(s=n(y[v],u),p=n(y[v+2],u),h=n(y[v+4],1),v+=5),y.length<=v){u=a=m+(o=h*d)*s+d*p;break}default:throw f()}if(0===o)throw c();r.s=u<0?-1:1,r.n=Math.abs(a),r.d=Math.abs(o)};function u(e,t){if(!e)return t;if(!t)return e;for(;;){if(!(e%=t))return t;if(!(t%=e))return e}}function s(e,t){if(o(e,t),!(this instanceof s))return i(r.s*r.n,r.d);e=u(r.d,r.n),this.s=r.s,this.n=r.n/e,this.d=r.d/e}var c=function(){return new Error("Division by Zero")},f=function(){return new Error("Invalid argument")},l=function(){return new Error("Parameters must be integer")};s.prototype={s:1,n:0,d:1,abs:function(){return i(this.n,this.d)},neg:function(){return i(-this.s*this.n,this.d)},add:function(e,t){return o(e,t),i(this.s*this.n*r.d+r.s*this.d*r.n,this.d*r.d)},sub:function(e,t){return o(e,t),i(this.s*this.n*r.d-r.s*this.d*r.n,this.d*r.d)},mul:function(e,t){return o(e,t),i(this.s*r.s*this.n*r.n,this.d*r.d)},div:function(e,t){return o(e,t),i(this.s*r.s*this.n*r.d,this.d*r.n)},clone:function(){return i(this.s*this.n,this.d)},mod:function(e,t){if(isNaN(this.n)||isNaN(this.d))return new s(NaN);if(void 0===e)return i(this.s*this.n%this.d,1);if(o(e,t),0===r.n&&0===this.d)throw c();return i(this.s*(r.d*this.n)%(r.n*this.d),r.d*this.d)},gcd:function(e,t){return o(e,t),i(u(r.n,this.n)*u(r.d,this.d),r.d*this.d)},lcm:function(e,t){return o(e,t),0===r.n&&0===this.n?i(0,1):i(r.n*this.n,u(r.n,this.n)*u(r.d,this.d))},ceil:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new s(NaN):i(Math.ceil(e*this.s*this.n/this.d),e)},floor:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new s(NaN):i(Math.floor(e*this.s*this.n/this.d),e)},round:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new s(NaN):i(Math.round(e*this.s*this.n/this.d),e)},inverse:function(){return i(this.s*this.d,this.n)},pow:function(e,t){if(o(e,t),1===r.d)return r.s<0?i(Math.pow(this.s*this.d,r.n),Math.pow(this.n,r.n)):i(Math.pow(this.s*this.n,r.n),Math.pow(this.d,r.n));if(this.s<0)return null;var n=a(this.n),u=a(this.d),s=1,c=1;for(var f in n)if("1"!==f){if("0"===f){s=0;break}if(n[f]*=r.n,n[f]%r.d!=0)return null;n[f]/=r.d,s*=Math.pow(f,n[f])}for(var f in u)if("1"!==f){if(u[f]*=r.n,u[f]%r.d!=0)return null;u[f]/=r.d,c*=Math.pow(f,u[f])}return r.s<0?i(c,s):i(s,c)},equals:function(e,t){return o(e,t),this.s*this.n*r.d==r.s*r.n*this.d},compare:function(e,t){o(e,t);var n=this.s*this.n*r.d-r.s*r.n*this.d;return(0=0;o--)a=a.inverse().add(r[o]);if(Math.abs(a.sub(t).valueOf())0&&(r+=t,r+=" ",n%=i),r+=n,r+="/",r+=i),r},toLatex:function(e){var t,r="",n=this.n,i=this.d;return this.s<0&&(r+="-"),1===i?r+=n:(e&&(t=Math.floor(n/i))>0&&(r+=t,n%=i),r+="\\frac{",r+=n,r+="}{",r+=i,r+="}"),r},toContinued:function(){var e,t=this.n,r=this.d,n=[];if(isNaN(t)||isNaN(r))return n;do{n.push(Math.floor(t/r)),e=t%r,t=r,r=e}while(1!==t);return n},toString:function(e){var t=this.n,r=this.d;if(isNaN(t)||isNaN(r))return"NaN";e=e||15;var n=function(e,t){for(;t%2==0;t/=2);for(;t%5==0;t/=5);if(1===t)return 0;for(var r=10%t,n=1;1!==r;n++)if(r=10*r%t,n>2e3)return 0;return n}(0,r),i=function(e,t,r){for(var n=1,i=function(e,t,r){for(var n=1;t>0;e=e*e%r,t>>=1)1&t&&(n=n*e%r);return n}(10,r,t),a=0;a<300;a++){if(n===i)return a;n=10*n%t,i=10*i%t}return 0}(0,r,n),a=this.s<0?"-":"";if(a+=t/r|0,t%=r,(t*=10)&&(a+="."),n){for(var o=i;o--;)a+=t/r|0,t%=r,t*=10;for(a+="(",o=n;o--;)a+=t/r|0,t%=r,t*=10;a+=")"}else for(o=e;t&&o--;)a+=t/r|0,t%=r,t*=10;return a}},Object.defineProperty(s,"__esModule",{value:!0}),s.default=s,s.Fraction=s,e.exports=s}()},1880:e=>{e.exports=function e(t,r){"use strict";var n,i,a=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,o=/(^[ ]*|[ ]*$)/g,u=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,s=/^0x[0-9a-f]+$/i,c=/^0/,f=function(t){return e.insensitive&&(""+t).toLowerCase()||""+t},l=f(t).replace(o,"")||"",p=f(r).replace(o,"")||"",m=l.replace(a,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),h=p.replace(a,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),d=parseInt(l.match(s),16)||1!==m.length&&l.match(u)&&Date.parse(l),v=parseInt(p.match(s),16)||d&&p.match(u)&&Date.parse(p)||null;if(v){if(dv)return 1}for(var y=0,g=Math.max(m.length,h.length);yi)return 1}return 0}},7391:(e,t,r)=>{var n=r(7180),i=r(3181),a=r(3031),o=r(9067),u=r(6833),s=r(6098),c=r(4801);c.alea=n,c.xor128=i,c.xorwow=a,c.xorshift7=o,c.xor4096=u,c.tychei=s,e.exports=c},7180:function(e,t,r){var n;!function(e,i,a){function o(e){var t,r=this,n=(t=4022871197,function(e){e=String(e);for(var r=0;r>>0,t=(n*=t)>>>0,t+=4294967296*(n-=t)}return 2.3283064365386963e-10*(t>>>0)});r.next=function(){var e=2091639*r.s0+2.3283064365386963e-10*r.c;return r.s0=r.s1,r.s1=r.s2,r.s2=e-(r.c=0|e)},r.c=1,r.s0=n(" "),r.s1=n(" "),r.s2=n(" "),r.s0-=n(e),r.s0<0&&(r.s0+=1),r.s1-=n(e),r.s1<0&&(r.s1+=1),r.s2-=n(e),r.s2<0&&(r.s2+=1),n=null}function u(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function s(e,t){var r=new o(e),n=t&&t.state,i=r.next;return i.int32=function(){return 4294967296*r.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,n&&("object"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.alea=s}(0,e=r.nmd(e),r.amdD)},6098:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this,r="";t.next=function(){var e=t.b,r=t.c,n=t.d,i=t.a;return e=e<<25^e>>>7^r,r=r-n|0,n=n<<24^n>>>8^i,i=i-e|0,t.b=e=e<<20^e>>>12^r,t.c=r=r-n|0,t.d=n<<16^r>>>16^i,t.a=i-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):r+=e;for(var n=0;n>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&("object"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.tychei=s}(0,e=r.nmd(e),r.amdD)},3181:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this,r="";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:r+=e;for(var n=0;n>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&("object"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xor128=s}(0,e=r.nmd(e),r.amdD)},6833:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this;t.next=function(){var e,r,n=t.w,i=t.X,a=t.i;return t.w=n=n+1640531527|0,r=i[a+34&127],e=i[a=a+1&127],r^=r<<13,e^=e<<17,r^=r>>>15,e^=e>>>12,r=i[a]=r^e,t.i=a,r+(n^n>>>16)|0},function(e,t){var r,n,i,a,o,u=[],s=128;for(t===(0|t)?(n=t,t=null):(t+="\0",n=0,s=Math.max(s,t.length)),i=0,a=-32;a>>15,n^=n<<4,n^=n>>>13,a>=0&&(o=o+1640531527|0,i=0==(r=u[127&a]^=n+o)?i+1:0);for(i>=128&&(u[127&(t&&t.length||0)]=-1),i=127,a=512;a>0;--a)n=u[i+34&127],r=u[i=i+1&127],n^=n<<13,r^=r<<17,n^=n>>>15,r^=r>>>12,u[i]=n^r;e.w=o,e.X=u,e.i=i}(t,e)}function u(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function s(e,t){null==e&&(e=+new Date);var r=new o(e),n=t&&t.state,i=function(){return(r.next()>>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(n.X&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xor4096=s}(0,e=r.nmd(e),r.amdD)},9067:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this;t.next=function(){var e,r,n=t.x,i=t.i;return e=n[i],r=(e^=e>>>7)^e<<24,r^=(e=n[i+1&7])^e>>>10,r^=(e=n[i+3&7])^e>>>3,r^=(e=n[i+4&7])^e<<7,e=n[i+7&7],r^=(e^=e<<13)^e<<9,n[i]=r,t.i=i+1&7,r},function(e,t){var r,n=[];if(t===(0|t))n[0]=t;else for(t=""+t,r=0;r0;--r)e.next()}(t,e)}function u(e,t){return t.x=e.x.slice(),t.i=e.i,t}function s(e,t){null==e&&(e=+new Date);var r=new o(e),n=t&&t.state,i=function(){return(r.next()>>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(n.x&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xorshift7=s}(0,e=r.nmd(e),r.amdD)},3031:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this,r="";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:r+=e;for(var n=0;n>>4),t.next()}function u(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function s(e,t){var r=new o(e),n=t&&t.state,i=function(){return(r.next()>>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&("object"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xorwow=s}(0,e=r.nmd(e),r.amdD)},4801:function(e,t,r){var n;!function(i,a,o){var u,s=256,c=o.pow(s,6),f=o.pow(2,52),l=2*f,p=s-1;function m(e,t,r){var n=[],p=y(v((t=1==t?{entropy:!0}:t||{}).entropy?[e,g(a)]:null==e?function(){try{var e;return u&&(e=u.randomBytes)?e=e(s):(e=new Uint8Array(s),(i.crypto||i.msCrypto).getRandomValues(e)),g(e)}catch(e){var t=i.navigator,r=t&&t.plugins;return[+new Date,i,r,i.screen,g(a)]}}():e,3),n),m=new h(n),x=function(){for(var e=m.g(6),t=c,r=0;e=l;)e/=2,t/=2,r>>>=1;return(e+r)/t};return x.int32=function(){return 0|m.g(4)},x.quick=function(){return m.g(4)/4294967296},x.double=x,y(g(m.S),a),(t.pass||r||function(e,t,r,n){return n&&(n.S&&d(n,m),e.state=function(){return d(m,{})}),r?(o.random=e,t):e})(x,p,"global"in t?t.global:this==o,t.state)}function h(e){var t,r=e.length,n=this,i=0,a=n.i=n.j=0,o=n.S=[];for(r||(e=[r++]);i{function t(){}t.prototype={on:function(e,t,r){var n=this.e||(this.e={});return(n[e]||(n[e]=[])).push({fn:t,ctx:r}),this},once:function(e,t,r){var n=this;function i(){n.off(e,i),t.apply(r,arguments)}return i._=t,this.on(e,i,r)},emit:function(e){for(var t=[].slice.call(arguments,1),r=((this.e||(this.e={}))[e]||[]).slice(),n=0,i=r.length;n{},4633:(e,t,r)=>{var n=r(3738).default;function i(){"use strict";e.exports=i=function(){return r},e.exports.__esModule=!0,e.exports.default=e.exports;var t,r={},a=Object.prototype,o=a.hasOwnProperty,u=Object.defineProperty||function(e,t,r){e[t]=r.value},s="function"==typeof Symbol?Symbol:{},c=s.iterator||"@@iterator",f=s.asyncIterator||"@@asyncIterator",l=s.toStringTag||"@@toStringTag";function p(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{p({},"")}catch(t){p=function(e,t,r){return e[t]=r}}function m(e,t,r,n){var i=t&&t.prototype instanceof b?t:b,a=Object.create(i.prototype),o=new B(n||[]);return u(a,"_invoke",{value:F(e,r,o)}),a}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}r.wrap=m;var d="suspendedStart",v="suspendedYield",y="executing",g="completed",x={};function b(){}function w(){}function D(){}var N={};p(N,c,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(k([])));A&&A!==a&&o.call(A,c)&&(N=A);var S=D.prototype=b.prototype=Object.create(N);function C(e){["next","throw","return"].forEach((function(t){p(e,t,(function(e){return this._invoke(t,e)}))}))}function M(e,t){function r(i,a,u,s){var c=h(e[i],e,a);if("throw"!==c.type){var f=c.arg,l=f.value;return l&&"object"==n(l)&&o.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,u,s)}),(function(e){r("throw",e,u,s)})):t.resolve(l).then((function(e){f.value=e,u(f)}),(function(e){return r("throw",e,u,s)}))}s(c.arg)}var i;u(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,i){r(e,n,t,i)}))}return i=i?i.then(a,a):a()}})}function F(e,r,n){var i=d;return function(a,o){if(i===y)throw Error("Generator is already running");if(i===g){if("throw"===a)throw o;return{value:t,done:!0}}for(n.method=a,n.arg=o;;){var u=n.delegate;if(u){var s=O(u,n);if(s){if(s===x)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===d)throw i=g,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=y;var c=h(e,r,n);if("normal"===c.type){if(i=n.done?g:v,c.arg===x)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(i=g,n.method="throw",n.arg=c.arg)}}}function O(e,r){var n=r.method,i=e.iterator[n];if(i===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,O(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),x;var a=h(i,e.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,x;var o=a.arg;return o?o.done?(r[e.resultName]=o.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,x):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,x)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function B(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function k(e){if(e||""===e){var r=e[c];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function r(){for(;++i=0;--i){var a=this.tryEntries[i],u=a.completion;if("root"===a.tryLoc)return n("end");if(a.tryLoc<=this.prev){var s=o.call(a,"catchLoc"),c=o.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),_(r),x}},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 i=n.arg;_(r)}return i}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:k(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),x}},r}e.exports=i,e.exports.__esModule=!0,e.exports.default=e.exports},3738:e=>{function t(r){return e.exports=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},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},4756:(e,t,r)=>{var n=r(4633)();e.exports=n;try{regeneratorRuntime=n}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=n:Function("r","regeneratorRuntime = r")(n)}},9306:(e,t,r)=>{"use strict";var n=r(4901),i=r(6823),a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(i(e)+" is not a function")}},5548:(e,t,r)=>{"use strict";var n=r(3517),i=r(6823),a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(i(e)+" is not a constructor")}},3506:(e,t,r)=>{"use strict";var n=r(3925),i=String,a=TypeError;e.exports=function(e){if(n(e))return e;throw new a("Can't set "+i(e)+" as a prototype")}},6469:(e,t,r)=>{"use strict";var n=r(8227),i=r(2360),a=r(4913).f,o=n("unscopables"),u=Array.prototype;void 0===u[o]&&a(u,o,{configurable:!0,value:i(null)}),e.exports=function(e){u[o][e]=!0}},7829:(e,t,r)=>{"use strict";var n=r(8183).charAt;e.exports=function(e,t,r){return t+(r?n(e,t).length:1)}},679:(e,t,r)=>{"use strict";var n=r(1625),i=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw new i("Incorrect invocation")}},8551:(e,t,r)=>{"use strict";var n=r(34),i=String,a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(i(e)+" is not an object")}},5652:(e,t,r)=>{"use strict";var n=r(9039);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},4373:(e,t,r)=>{"use strict";var n=r(8981),i=r(5610),a=r(6198);e.exports=function(e){for(var t=n(this),r=a(t),o=arguments.length,u=i(o>1?arguments[1]:void 0,r),s=o>2?arguments[2]:void 0,c=void 0===s?r:i(s,r);c>u;)t[u++]=e;return t}},235:(e,t,r)=>{"use strict";var n=r(9213).forEach,i=r(4598)("forEach");e.exports=i?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},7916:(e,t,r)=>{"use strict";var n=r(6080),i=r(9565),a=r(8981),o=r(6319),u=r(4209),s=r(3517),c=r(6198),f=r(4659),l=r(81),p=r(851),m=Array;e.exports=function(e){var t=a(e),r=s(this),h=arguments.length,d=h>1?arguments[1]:void 0,v=void 0!==d;v&&(d=n(d,h>2?arguments[2]:void 0));var y,g,x,b,w,D,N=p(t),E=0;if(!N||this===m&&u(N))for(y=c(t),g=r?new this(y):m(y);y>E;E++)D=v?d(t[E],E):t[E],f(g,E,D);else for(g=r?new this:[],w=(b=l(t,N)).next;!(x=i(w,b)).done;E++)D=v?o(b,d,[x.value,E],!0):x.value,f(g,E,D);return g.length=E,g}},9617:(e,t,r)=>{"use strict";var n=r(5397),i=r(5610),a=r(6198),o=function(e){return function(t,r,o){var u=n(t),s=a(u);if(0===s)return!e&&-1;var c,f=i(o,s);if(e&&r!=r){for(;s>f;)if((c=u[f++])!=c)return!0}else for(;s>f;f++)if((e||f in u)&&u[f]===r)return e||f||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},9213:(e,t,r)=>{"use strict";var n=r(6080),i=r(9504),a=r(7055),o=r(8981),u=r(6198),s=r(1469),c=i([].push),f=function(e){var t=1===e,r=2===e,i=3===e,f=4===e,l=6===e,p=7===e,m=5===e||l;return function(h,d,v,y){for(var g,x,b=o(h),w=a(b),D=u(w),N=n(d,v),E=0,A=y||s,S=t?A(h,D):r||p?A(h,0):void 0;D>E;E++)if((m||E in w)&&(x=N(g=w[E],E,b),e))if(t)S[E]=x;else if(x)switch(e){case 3:return!0;case 5:return g;case 6:return E;case 2:c(S,g)}else switch(e){case 4:return!1;case 7:c(S,g)}return l?-1:i||f?f:S}};e.exports={forEach:f(0),map:f(1),filter:f(2),some:f(3),every:f(4),find:f(5),findIndex:f(6),filterReject:f(7)}},597:(e,t,r)=>{"use strict";var n=r(9039),i=r(8227),a=r(7388),o=i("species");e.exports=function(e){return a>=51||!n((function(){var t=[];return(t.constructor={})[o]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},4598:(e,t,r)=>{"use strict";var n=r(9039);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){return 1},1)}))}},926:(e,t,r)=>{"use strict";var n=r(9306),i=r(8981),a=r(7055),o=r(6198),u=TypeError,s="Reduce of empty array with no initial value",c=function(e){return function(t,r,c,f){var l=i(t),p=a(l),m=o(l);if(n(r),0===m&&c<2)throw new u(s);var h=e?m-1:0,d=e?-1:1;if(c<2)for(;;){if(h in p){f=p[h],h+=d;break}if(h+=d,e?h<0:m<=h)throw new u(s)}for(;e?h>=0:m>h;h+=d)h in p&&(f=r(f,p[h],h,l));return f}};e.exports={left:c(!1),right:c(!0)}},4527:(e,t,r)=>{"use strict";var n=r(3724),i=r(4376),a=TypeError,o=Object.getOwnPropertyDescriptor,u=n&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=u?function(e,t){if(i(e)&&!o(e,"length").writable)throw new a("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},7680:(e,t,r)=>{"use strict";var n=r(9504);e.exports=n([].slice)},4488:(e,t,r)=>{"use strict";var n=r(7680),i=Math.floor,a=function(e,t){var r=e.length;if(r<8)for(var o,u,s=1;s0;)e[u]=e[--u];u!==s++&&(e[u]=o)}else for(var c=i(r/2),f=a(n(e,0,c),t),l=a(n(e,c),t),p=f.length,m=l.length,h=0,d=0;h{"use strict";var n=r(4376),i=r(3517),a=r(34),o=r(8227)("species"),u=Array;e.exports=function(e){var t;return n(e)&&(t=e.constructor,(i(t)&&(t===u||n(t.prototype))||a(t)&&null===(t=t[o]))&&(t=void 0)),void 0===t?u:t}},1469:(e,t,r)=>{"use strict";var n=r(7433);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},6319:(e,t,r)=>{"use strict";var n=r(8551),i=r(9539);e.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){i(e,"throw",t)}}},4428:(e,t,r)=>{"use strict";var n=r(8227)("iterator"),i=!1;try{var a=0,o={next:function(){return{done:!!a++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,t){try{if(!t&&!i)return!1}catch(e){return!1}var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},e(a)}catch(e){}return r}},4576:(e,t,r)=>{"use strict";var n=r(9504),i=n({}.toString),a=n("".slice);e.exports=function(e){return a(i(e),8,-1)}},6955:(e,t,r)=>{"use strict";var n=r(2140),i=r(4901),a=r(4576),o=r(8227)("toStringTag"),u=Object,s="Arguments"===a(function(){return arguments}());e.exports=n?a:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=u(e),o))?r:s?a(t):"Object"===(n=a(t))&&i(t.callee)?"Arguments":n}},6938:(e,t,r)=>{"use strict";var n=r(2360),i=r(2106),a=r(6279),o=r(6080),u=r(679),s=r(4117),c=r(2652),f=r(1088),l=r(2529),p=r(7633),m=r(3724),h=r(3451).fastKey,d=r(1181),v=d.set,y=d.getterFor;e.exports={getConstructor:function(e,t,r,f){var l=e((function(e,i){u(e,p),v(e,{type:t,index:n(null),first:void 0,last:void 0,size:0}),m||(e.size=0),s(i)||c(i,e[f],{that:e,AS_ENTRIES:r})})),p=l.prototype,d=y(t),g=function(e,t,r){var n,i,a=d(e),o=x(e,t);return o?o.value=r:(a.last=o={index:i=h(t,!0),key:t,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=o),n&&(n.next=o),m?a.size++:e.size++,"F"!==i&&(a.index[i]=o)),e},x=function(e,t){var r,n=d(e),i=h(t);if("F"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key===t)return r};return a(p,{clear:function(){for(var e=d(this),t=e.first;t;)t.removed=!0,t.previous&&(t.previous=t.previous.next=void 0),t=t.next;e.first=e.last=void 0,e.index=n(null),m?e.size=0:this.size=0},delete:function(e){var t=this,r=d(t),n=x(t,e);if(n){var i=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=i),i&&(i.previous=a),r.first===n&&(r.first=i),r.last===n&&(r.last=a),m?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=d(this),n=o(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!x(this,e)}}),a(p,r?{get:function(e){var t=x(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),m&&i(p,"size",{configurable:!0,get:function(){return d(this).size}}),l},setStrong:function(e,t,r){var n=t+" Iterator",i=y(t),a=y(n);f(e,t,(function(e,t){v(this,{type:n,target:e,state:i(e),kind:t,last:void 0})}),(function(){for(var e=a(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?l("keys"===t?r.key:"values"===t?r.value:[r.key,r.value],!1):(e.target=void 0,l(void 0,!0))}),r?"entries":"values",!r,!0),p(t)}}},6468:(e,t,r)=>{"use strict";var n=r(6518),i=r(4475),a=r(9504),o=r(2796),u=r(6840),s=r(3451),c=r(2652),f=r(679),l=r(4901),p=r(4117),m=r(34),h=r(9039),d=r(4428),v=r(687),y=r(3167);e.exports=function(e,t,r){var g=-1!==e.indexOf("Map"),x=-1!==e.indexOf("Weak"),b=g?"set":"add",w=i[e],D=w&&w.prototype,N=w,E={},A=function(e){var t=a(D[e]);u(D,e,"add"===e?function(e){return t(this,0===e?0:e),this}:"delete"===e?function(e){return!(x&&!m(e))&&t(this,0===e?0:e)}:"get"===e?function(e){return x&&!m(e)?void 0:t(this,0===e?0:e)}:"has"===e?function(e){return!(x&&!m(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(o(e,!l(w)||!(x||D.forEach&&!h((function(){(new w).entries().next()})))))N=r.getConstructor(t,e,g,b),s.enable();else if(o(e,!0)){var S=new N,C=S[b](x?{}:-0,1)!==S,M=h((function(){S.has(1)})),F=d((function(e){new w(e)})),O=!x&&h((function(){for(var e=new w,t=5;t--;)e[b](t,t);return!e.has(-0)}));F||((N=t((function(e,t){f(e,D);var r=y(new w,e,N);return p(t)||c(t,r[b],{that:r,AS_ENTRIES:g}),r}))).prototype=D,D.constructor=N),(M||O)&&(A("delete"),A("has"),g&&A("get")),(O||C)&&A(b),x&&D.clear&&delete D.clear}return E[e]=N,n({global:!0,constructor:!0,forced:N!==w},E),v(N,e),x||r.setStrong(N,e,g),N}},7740:(e,t,r)=>{"use strict";var n=r(9297),i=r(5031),a=r(7347),o=r(4913);e.exports=function(e,t,r){for(var u=i(t),s=o.f,c=a.f,f=0;f{"use strict";var n=r(8227)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n]=!1,"/./"[e](t)}catch(e){}}return!1}},2211:(e,t,r)=>{"use strict";var n=r(9039);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},7240:(e,t,r)=>{"use strict";var n=r(9504),i=r(7750),a=r(655),o=/"/g,u=n("".replace);e.exports=function(e,t,r,n){var s=a(i(e)),c="<"+t;return""!==r&&(c+=" "+r+'="'+u(a(n),o,""")+'"'),c+">"+s+""}},2529:e=>{"use strict";e.exports=function(e,t){return{value:e,done:t}}},6699:(e,t,r)=>{"use strict";var n=r(3724),i=r(4913),a=r(6980);e.exports=n?function(e,t,r){return i.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},6980:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},4659:(e,t,r)=>{"use strict";var n=r(3724),i=r(4913),a=r(6980);e.exports=function(e,t,r){n?i.f(e,t,a(0,r)):e[t]=r}},2106:(e,t,r)=>{"use strict";var n=r(283),i=r(4913);e.exports=function(e,t,r){return r.get&&n(r.get,t,{getter:!0}),r.set&&n(r.set,t,{setter:!0}),i.f(e,t,r)}},6840:(e,t,r)=>{"use strict";var n=r(4901),i=r(4913),a=r(283),o=r(9433);e.exports=function(e,t,r,u){u||(u={});var s=u.enumerable,c=void 0!==u.name?u.name:t;if(n(r)&&a(r,c,u),u.global)s?e[t]=r:o(t,r);else{try{u.unsafe?e[t]&&(s=!0):delete e[t]}catch(e){}s?e[t]=r:i.f(e,t,{value:r,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return e}},6279:(e,t,r)=>{"use strict";var n=r(6840);e.exports=function(e,t,r){for(var i in t)n(e,i,t[i],r);return e}},9433:(e,t,r)=>{"use strict";var n=r(4475),i=Object.defineProperty;e.exports=function(e,t){try{i(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},4606:(e,t,r)=>{"use strict";var n=r(6823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+n(t)+" of "+n(e))}},3724:(e,t,r)=>{"use strict";var n=r(9039);e.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4055:(e,t,r)=>{"use strict";var n=r(4475),i=r(34),a=n.document,o=i(a)&&i(a.createElement);e.exports=function(e){return o?a.createElement(e):{}}},6837:e=>{"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},7400:e=>{"use strict";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},9296:(e,t,r)=>{"use strict";var n=r(4055)("span").classList,i=n&&n.constructor&&n.constructor.prototype;e.exports=i===Object.prototype?void 0:i},8834:(e,t,r)=>{"use strict";var n=r(9392).match(/firefox\/(\d+)/i);e.exports=!!n&&+n[1]},7290:(e,t,r)=>{"use strict";var n=r(516),i=r(9088);e.exports=!n&&!i&&"object"==typeof window&&"object"==typeof document},516:e=>{"use strict";e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},3202:(e,t,r)=>{"use strict";var n=r(9392);e.exports=/MSIE|Trident/.test(n)},28:(e,t,r)=>{"use strict";var n=r(9392);e.exports=/ipad|iphone|ipod/i.test(n)&&"undefined"!=typeof Pebble},8119:(e,t,r)=>{"use strict";var n=r(9392);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},9088:(e,t,r)=>{"use strict";var n=r(4475),i=r(4576);e.exports="process"===i(n.process)},6765:(e,t,r)=>{"use strict";var n=r(9392);e.exports=/web0s(?!.*chrome)/i.test(n)},9392:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},7388:(e,t,r)=>{"use strict";var n,i,a=r(4475),o=r(9392),u=a.process,s=a.Deno,c=u&&u.versions||s&&s.version,f=c&&c.v8;f&&(i=(n=f.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\/(\d+)/))&&(i=+n[1]),e.exports=i},9160:(e,t,r)=>{"use strict";var n=r(9392).match(/AppleWebKit\/(\d+)\./);e.exports=!!n&&+n[1]},8727:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},6518:(e,t,r)=>{"use strict";var n=r(4475),i=r(7347).f,a=r(6699),o=r(6840),u=r(9433),s=r(7740),c=r(2796);e.exports=function(e,t){var r,f,l,p,m,h=e.target,d=e.global,v=e.stat;if(r=d?n:v?n[h]||u(h,{}):n[h]&&n[h].prototype)for(f in t){if(p=t[f],l=e.dontCallGetSet?(m=i(r,f))&&m.value:r[f],!c(d?f:h+(v?".":"#")+f,e.forced)&&void 0!==l){if(typeof p==typeof l)continue;s(p,l)}(e.sham||l&&l.sham)&&a(p,"sham",!0),o(r,f,p,e)}}},9039:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},9228:(e,t,r)=>{"use strict";r(7495);var n=r(9565),i=r(6840),a=r(7323),o=r(9039),u=r(8227),s=r(6699),c=u("species"),f=RegExp.prototype;e.exports=function(e,t,r,l){var p=u(e),m=!o((function(){var t={};return t[p]=function(){return 7},7!==""[e](t)})),h=m&&!o((function(){var t=!1,r=/a/;return"split"===e&&((r={}).constructor={},r.constructor[c]=function(){return r},r.flags="",r[p]=/./[p]),r.exec=function(){return t=!0,null},r[p](""),!t}));if(!m||!h||r){var d=/./[p],v=t(p,""[e],(function(e,t,r,i,o){var u=t.exec;return u===a||u===f.exec?m&&!o?{done:!0,value:n(d,t,r,i)}:{done:!0,value:n(e,r,t,i)}:{done:!1}}));i(String.prototype,e,v[0]),i(f,p,v[1])}l&&s(f[p],"sham",!0)}},2744:(e,t,r)=>{"use strict";var n=r(9039);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},8745:(e,t,r)=>{"use strict";var n=r(616),i=Function.prototype,a=i.apply,o=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?o.bind(a):function(){return o.apply(a,arguments)})},6080:(e,t,r)=>{"use strict";var n=r(7476),i=r(9306),a=r(616),o=n(n.bind);e.exports=function(e,t){return i(e),void 0===t?e:a?o(e,t):function(){return e.apply(t,arguments)}}},616:(e,t,r)=>{"use strict";var n=r(9039);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},566:(e,t,r)=>{"use strict";var n=r(9504),i=r(9306),a=r(34),o=r(9297),u=r(7680),s=r(616),c=Function,f=n([].concat),l=n([].join),p={};e.exports=s?c.bind:function(e){var t=i(this),r=t.prototype,n=u(arguments,1),s=function(){var r=f(n,u(arguments));return this instanceof s?function(e,t,r){if(!o(p,t)){for(var n=[],i=0;i{"use strict";var n=r(616),i=Function.prototype.call;e.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},350:(e,t,r)=>{"use strict";var n=r(3724),i=r(9297),a=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,u=i(a,"name"),s=u&&"something"===function(){}.name,c=u&&(!n||n&&o(a,"name").configurable);e.exports={EXISTS:u,PROPER:s,CONFIGURABLE:c}},6706:(e,t,r)=>{"use strict";var n=r(9504),i=r(9306);e.exports=function(e,t,r){try{return n(i(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}},7476:(e,t,r)=>{"use strict";var n=r(4576),i=r(9504);e.exports=function(e){if("Function"===n(e))return i(e)}},9504:(e,t,r)=>{"use strict";var n=r(616),i=Function.prototype,a=i.call,o=n&&i.bind.bind(a,a);e.exports=n?o:function(e){return function(){return a.apply(e,arguments)}}},7751:(e,t,r)=>{"use strict";var n=r(4475),i=r(4901);e.exports=function(e,t){return arguments.length<2?(r=n[e],i(r)?r:void 0):n[e]&&n[e][t];var r}},851:(e,t,r)=>{"use strict";var n=r(6955),i=r(5966),a=r(4117),o=r(6269),u=r(8227)("iterator");e.exports=function(e){if(!a(e))return i(e,u)||i(e,"@@iterator")||o[n(e)]}},81:(e,t,r)=>{"use strict";var n=r(9565),i=r(9306),a=r(8551),o=r(6823),u=r(851),s=TypeError;e.exports=function(e,t){var r=arguments.length<2?u(e):t;if(i(r))return a(n(r,e));throw new s(o(e)+" is not iterable")}},6933:(e,t,r)=>{"use strict";var n=r(9504),i=r(4376),a=r(4901),o=r(4576),u=r(655),s=n([].push);e.exports=function(e){if(a(e))return e;if(i(e)){for(var t=e.length,r=[],n=0;n{"use strict";var n=r(9306),i=r(4117);e.exports=function(e,t){var r=e[t];return i(r)?void 0:n(r)}},2478:(e,t,r)=>{"use strict";var n=r(9504),i=r(8981),a=Math.floor,o=n("".charAt),u=n("".replace),s=n("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,f=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,r,n,l,p){var m=r+e.length,h=n.length,d=f;return void 0!==l&&(l=i(l),d=c),u(p,d,(function(i,u){var c;switch(o(u,0)){case"$":return"$";case"&":return e;case"`":return s(t,0,r);case"'":return s(t,m);case"<":c=l[s(u,1,-1)];break;default:var f=+u;if(0===f)return i;if(f>h){var p=a(f/10);return 0===p?i:p<=h?void 0===n[p-1]?o(u,1):n[p-1]+o(u,1):i}c=n[f-1]}return void 0===c?"":c}))}},4475:function(e){"use strict";var t=function(e){return e&&e.Math===Math&&e};e.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof global&&global)||t("object"==typeof this&&this)||function(){return this}()||Function("return this")()},9297:(e,t,r)=>{"use strict";var n=r(9504),i=r(8981),a=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(i(e),t)}},421:e=>{"use strict";e.exports={}},3138:e=>{"use strict";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(e){}}},397:(e,t,r)=>{"use strict";var n=r(7751);e.exports=n("document","documentElement")},5917:(e,t,r)=>{"use strict";var n=r(3724),i=r(9039),a=r(4055);e.exports=!n&&!i((function(){return 7!==Object.defineProperty(a("div"),"a",{get:function(){return 7}}).a}))},7055:(e,t,r)=>{"use strict";var n=r(9504),i=r(9039),a=r(4576),o=Object,u=n("".split);e.exports=i((function(){return!o("z").propertyIsEnumerable(0)}))?function(e){return"String"===a(e)?u(e,""):o(e)}:o},3167:(e,t,r)=>{"use strict";var n=r(4901),i=r(34),a=r(2967);e.exports=function(e,t,r){var o,u;return a&&n(o=t.constructor)&&o!==r&&i(u=o.prototype)&&u!==r.prototype&&a(e,u),e}},3706:(e,t,r)=>{"use strict";var n=r(9504),i=r(4901),a=r(7629),o=n(Function.toString);i(a.inspectSource)||(a.inspectSource=function(e){return o(e)}),e.exports=a.inspectSource},3451:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(421),o=r(34),u=r(9297),s=r(4913).f,c=r(8480),f=r(298),l=r(4124),p=r(3392),m=r(2744),h=!1,d=p("meta"),v=0,y=function(e){s(e,d,{value:{objectID:"O"+v++,weakData:{}}})},g=e.exports={enable:function(){g.enable=function(){},h=!0;var e=c.f,t=i([].splice),r={};r[d]=1,e(r).length&&(c.f=function(r){for(var n=e(r),i=0,a=n.length;i{"use strict";var n,i,a,o=r(8622),u=r(4475),s=r(34),c=r(6699),f=r(9297),l=r(7629),p=r(6119),m=r(421),h="Object already initialized",d=u.TypeError,v=u.WeakMap;if(o||l.state){var y=l.state||(l.state=new v);y.get=y.get,y.has=y.has,y.set=y.set,n=function(e,t){if(y.has(e))throw new d(h);return t.facade=e,y.set(e,t),t},i=function(e){return y.get(e)||{}},a=function(e){return y.has(e)}}else{var g=p("state");m[g]=!0,n=function(e,t){if(f(e,g))throw new d(h);return t.facade=e,c(e,g,t),t},i=function(e){return f(e,g)?e[g]:{}},a=function(e){return f(e,g)}}e.exports={set:n,get:i,has:a,enforce:function(e){return a(e)?i(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!s(t)||(r=i(t)).type!==e)throw new d("Incompatible receiver, "+e+" required");return r}}}},4209:(e,t,r)=>{"use strict";var n=r(8227),i=r(6269),a=n("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||o[a]===e)}},4376:(e,t,r)=>{"use strict";var n=r(4576);e.exports=Array.isArray||function(e){return"Array"===n(e)}},4901:e=>{"use strict";var t="object"==typeof document&&document.all;e.exports=void 0===t&&void 0!==t?function(e){return"function"==typeof e||e===t}:function(e){return"function"==typeof e}},3517:(e,t,r)=>{"use strict";var n=r(9504),i=r(9039),a=r(4901),o=r(6955),u=r(7751),s=r(3706),c=function(){},f=u("Reflect","construct"),l=/^\s*(?:class|function)\b/,p=n(l.exec),m=!l.test(c),h=function(e){if(!a(e))return!1;try{return f(c,[],e),!0}catch(e){return!1}},d=function(e){if(!a(e))return!1;switch(o(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return m||!!p(l,s(e))}catch(e){return!0}};d.sham=!0,e.exports=!f||i((function(){var e;return h(h.call)||!h(Object)||!h((function(){e=!0}))||e}))?d:h},2796:(e,t,r)=>{"use strict";var n=r(9039),i=r(4901),a=/#|\.prototype\./,o=function(e,t){var r=s[u(e)];return r===f||r!==c&&(i(t)?n(t):!!t)},u=o.normalize=function(e){return String(e).replace(a,".").toLowerCase()},s=o.data={},c=o.NATIVE="N",f=o.POLYFILL="P";e.exports=o},4117:e=>{"use strict";e.exports=function(e){return null==e}},34:(e,t,r)=>{"use strict";var n=r(4901);e.exports=function(e){return"object"==typeof e?null!==e:n(e)}},3925:(e,t,r)=>{"use strict";var n=r(34);e.exports=function(e){return n(e)||null===e}},6395:e=>{"use strict";e.exports=!1},788:(e,t,r)=>{"use strict";var n=r(34),i=r(4576),a=r(8227)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[a])?!!t:"RegExp"===i(e))}},757:(e,t,r)=>{"use strict";var n=r(7751),i=r(4901),a=r(1625),o=r(7040),u=Object;e.exports=o?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return i(t)&&a(t.prototype,u(e))}},2652:(e,t,r)=>{"use strict";var n=r(6080),i=r(9565),a=r(8551),o=r(6823),u=r(4209),s=r(6198),c=r(1625),f=r(81),l=r(851),p=r(9539),m=TypeError,h=function(e,t){this.stopped=e,this.result=t},d=h.prototype;e.exports=function(e,t,r){var v,y,g,x,b,w,D,N=r&&r.that,E=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_RECORD),S=!(!r||!r.IS_ITERATOR),C=!(!r||!r.INTERRUPTED),M=n(t,N),F=function(e){return v&&p(v,"normal",e),new h(!0,e)},O=function(e){return E?(a(e),C?M(e[0],e[1],F):M(e[0],e[1])):C?M(e,F):M(e)};if(A)v=e.iterator;else if(S)v=e;else{if(!(y=l(e)))throw new m(o(e)+" is not iterable");if(u(y)){for(g=0,x=s(e);x>g;g++)if((b=O(e[g]))&&c(d,b))return b;return new h(!1)}v=f(e,y)}for(w=A?e.next:v.next;!(D=i(w,v)).done;){try{b=O(D.value)}catch(e){p(v,"throw",e)}if("object"==typeof b&&b&&c(d,b))return b}return new h(!1)}},9539:(e,t,r)=>{"use strict";var n=r(9565),i=r(8551),a=r(5966);e.exports=function(e,t,r){var o,u;i(e);try{if(!(o=a(e,"return"))){if("throw"===t)throw r;return r}o=n(o,e)}catch(e){u=!0,o=e}if("throw"===t)throw r;if(u)throw o;return i(o),r}},3994:(e,t,r)=>{"use strict";var n=r(7657).IteratorPrototype,i=r(2360),a=r(6980),o=r(687),u=r(6269),s=function(){return this};e.exports=function(e,t,r,c){var f=t+" Iterator";return e.prototype=i(n,{next:a(+!c,r)}),o(e,f,!1,!0),u[f]=s,e}},1088:(e,t,r)=>{"use strict";var n=r(6518),i=r(9565),a=r(6395),o=r(350),u=r(4901),s=r(3994),c=r(2787),f=r(2967),l=r(687),p=r(6699),m=r(6840),h=r(8227),d=r(6269),v=r(7657),y=o.PROPER,g=o.CONFIGURABLE,x=v.IteratorPrototype,b=v.BUGGY_SAFARI_ITERATORS,w=h("iterator"),D="keys",N="values",E="entries",A=function(){return this};e.exports=function(e,t,r,o,h,v,S){s(r,t,o);var C,M,F,O=function(e){if(e===h&&I)return I;if(!b&&e&&e in B)return B[e];switch(e){case D:case N:case E:return function(){return new r(this,e)}}return function(){return new r(this)}},T=t+" Iterator",_=!1,B=e.prototype,k=B[w]||B["@@iterator"]||h&&B[h],I=!b&&k||O(h),z="Array"===t&&B.entries||k;if(z&&(C=c(z.call(new e)))!==Object.prototype&&C.next&&(a||c(C)===x||(f?f(C,x):u(C[w])||m(C,w,A)),l(C,T,!0,!0),a&&(d[T]=A)),y&&h===N&&k&&k.name!==N&&(!a&&g?p(B,"name",N):(_=!0,I=function(){return i(k,this)})),h)if(M={values:O(N),keys:v?I:O(D),entries:O(E)},S)for(F in M)(b||_||!(F in B))&&m(B,F,M[F]);else n({target:t,proto:!0,forced:b||_},M);return a&&!S||B[w]===I||m(B,w,I,{name:h}),d[t]=I,M}},7657:(e,t,r)=>{"use strict";var n,i,a,o=r(9039),u=r(4901),s=r(34),c=r(2360),f=r(2787),l=r(6840),p=r(8227),m=r(6395),h=p("iterator"),d=!1;[].keys&&("next"in(a=[].keys())?(i=f(f(a)))!==Object.prototype&&(n=i):d=!0),!s(n)||o((function(){var e={};return n[h].call(e)!==e}))?n={}:m&&(n=c(n)),u(n[h])||l(n,h,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:d}},6269:e=>{"use strict";e.exports={}},6198:(e,t,r)=>{"use strict";var n=r(8014);e.exports=function(e){return n(e.length)}},283:(e,t,r)=>{"use strict";var n=r(9504),i=r(9039),a=r(4901),o=r(9297),u=r(3724),s=r(350).CONFIGURABLE,c=r(3706),f=r(1181),l=f.enforce,p=f.get,m=String,h=Object.defineProperty,d=n("".slice),v=n("".replace),y=n([].join),g=u&&!i((function(){return 8!==h((function(){}),"length",{value:8}).length})),x=String(String).split("String"),b=e.exports=function(e,t,r){"Symbol("===d(m(t),0,7)&&(t="["+v(m(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!o(e,"name")||s&&e.name!==t)&&(u?h(e,"name",{value:t,configurable:!0}):e.name=t),g&&r&&o(r,"arity")&&e.length!==r.arity&&h(e,"length",{value:r.arity});try{r&&o(r,"constructor")&&r.constructor?u&&h(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=l(e);return o(n,"source")||(n.source=y(x,"string"==typeof t?t:"")),e};Function.prototype.toString=b((function(){return a(this)&&p(this).source||c(this)}),"toString")},3250:e=>{"use strict";var t=Math.expm1,r=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!==t(-2e-17)?function(e){var t=+e;return 0===t?t:t>-1e-6&&t<1e-6?t+t*t/2:r(t)-1}:t},9340:e=>{"use strict";var t=Math.log,r=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*r}},5359:e=>{"use strict";var t=Math.log;e.exports=Math.log1p||function(e){var r=+e;return r>-1e-8&&r<1e-8?r-r*r/2:t(1+r)}},7782:e=>{"use strict";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!=t?t:t<0?-1:1}},741:e=>{"use strict";var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},1955:(e,t,r)=>{"use strict";var n,i,a,o,u,s=r(4475),c=r(3389),f=r(6080),l=r(9225).set,p=r(8265),m=r(8119),h=r(28),d=r(6765),v=r(9088),y=s.MutationObserver||s.WebKitMutationObserver,g=s.document,x=s.process,b=s.Promise,w=c("queueMicrotask");if(!w){var D=new p,N=function(){var e,t;for(v&&(e=x.domain)&&e.exit();t=D.get();)try{t()}catch(e){throw D.head&&n(),e}e&&e.enter()};m||v||d||!y||!g?!h&&b&&b.resolve?((o=b.resolve(void 0)).constructor=b,u=f(o.then,o),n=function(){u(N)}):v?n=function(){x.nextTick(N)}:(l=f(l,s),n=function(){l(N)}):(i=!0,a=g.createTextNode(""),new y(N).observe(a,{characterData:!0}),n=function(){a.data=i=!i}),w=function(e){D.head||n(),D.add(e)}}e.exports=w},6043:(e,t,r)=>{"use strict";var n=r(9306),i=TypeError,a=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw new i("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new a(e)}},511:(e,t,r)=>{"use strict";var n=r(788),i=TypeError;e.exports=function(e){if(n(e))throw new i("The method doesn't accept regular expressions");return e}},3904:(e,t,r)=>{"use strict";var n=r(4475),i=r(9039),a=r(9504),o=r(655),u=r(3802).trim,s=r(7452),c=a("".charAt),f=n.parseFloat,l=n.Symbol,p=l&&l.iterator,m=1/f(s+"-0")!=-1/0||p&&!i((function(){f(Object(p))}));e.exports=m?function(e){var t=u(o(e)),r=f(t);return 0===r&&"-"===c(t,0)?-0:r}:f},2703:(e,t,r)=>{"use strict";var n=r(4475),i=r(9039),a=r(9504),o=r(655),u=r(3802).trim,s=r(7452),c=n.parseInt,f=n.Symbol,l=f&&f.iterator,p=/^[+-]?0x/i,m=a(p.exec),h=8!==c(s+"08")||22!==c(s+"0x16")||l&&!i((function(){c(Object(l))}));e.exports=h?function(e,t){var r=u(o(e));return c(r,t>>>0||(m(p,r)?16:10))}:c},2360:(e,t,r)=>{"use strict";var n,i=r(8551),a=r(6801),o=r(8727),u=r(421),s=r(397),c=r(4055),f=r(6119),l="prototype",p="script",m=f("IE_PROTO"),h=function(){},d=function(e){return"<"+p+">"+e+""},v=function(e){e.write(d("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{n=new ActiveXObject("htmlfile")}catch(e){}var e,t,r;y="undefined"!=typeof document?document.domain&&n?v(n):(t=c("iframe"),r="java"+p+":",t.style.display="none",s.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(d("document.F=Object")),e.close(),e.F):v(n);for(var i=o.length;i--;)delete y[l][o[i]];return y()};u[m]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(h[l]=i(e),r=new h,h[l]=null,r[m]=e):r=y(),void 0===t?r:a.f(r,t)}},6801:(e,t,r)=>{"use strict";var n=r(3724),i=r(8686),a=r(4913),o=r(8551),u=r(5397),s=r(1072);t.f=n&&!i?Object.defineProperties:function(e,t){o(e);for(var r,n=u(t),i=s(t),c=i.length,f=0;c>f;)a.f(e,r=i[f++],n[r]);return e}},4913:(e,t,r)=>{"use strict";var n=r(3724),i=r(5917),a=r(8686),o=r(8551),u=r(6969),s=TypeError,c=Object.defineProperty,f=Object.getOwnPropertyDescriptor,l="enumerable",p="configurable",m="writable";t.f=n?a?function(e,t,r){if(o(e),t=u(t),o(r),"function"==typeof e&&"prototype"===t&&"value"in r&&m in r&&!r[m]){var n=f(e,t);n&&n[m]&&(e[t]=r.value,r={configurable:p in r?r[p]:n[p],enumerable:l in r?r[l]:n[l],writable:!1})}return c(e,t,r)}:c:function(e,t,r){if(o(e),t=u(t),o(r),i)try{return c(e,t,r)}catch(e){}if("get"in r||"set"in r)throw new s("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},7347:(e,t,r)=>{"use strict";var n=r(3724),i=r(9565),a=r(8773),o=r(6980),u=r(5397),s=r(6969),c=r(9297),f=r(5917),l=Object.getOwnPropertyDescriptor;t.f=n?l:function(e,t){if(e=u(e),t=s(t),f)try{return l(e,t)}catch(e){}if(c(e,t))return o(!i(a.f,e,t),e[t])}},298:(e,t,r)=>{"use strict";var n=r(4576),i=r(5397),a=r(8480).f,o=r(7680),u="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return u&&"Window"===n(e)?function(e){try{return a(e)}catch(e){return o(u)}}(e):a(i(e))}},8480:(e,t,r)=>{"use strict";var n=r(1828),i=r(8727).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,i)}},3717:(e,t)=>{"use strict";t.f=Object.getOwnPropertySymbols},2787:(e,t,r)=>{"use strict";var n=r(9297),i=r(4901),a=r(8981),o=r(6119),u=r(2211),s=o("IE_PROTO"),c=Object,f=c.prototype;e.exports=u?c.getPrototypeOf:function(e){var t=a(e);if(n(t,s))return t[s];var r=t.constructor;return i(r)&&t instanceof r?r.prototype:t instanceof c?f:null}},4124:(e,t,r)=>{"use strict";var n=r(9039),i=r(34),a=r(4576),o=r(5652),u=Object.isExtensible,s=n((function(){u(1)}));e.exports=s||o?function(e){return!!i(e)&&(!o||"ArrayBuffer"!==a(e))&&(!u||u(e))}:u},1625:(e,t,r)=>{"use strict";var n=r(9504);e.exports=n({}.isPrototypeOf)},1828:(e,t,r)=>{"use strict";var n=r(9504),i=r(9297),a=r(5397),o=r(9617).indexOf,u=r(421),s=n([].push);e.exports=function(e,t){var r,n=a(e),c=0,f=[];for(r in n)!i(u,r)&&i(n,r)&&s(f,r);for(;t.length>c;)i(n,r=t[c++])&&(~o(f,r)||s(f,r));return f}},1072:(e,t,r)=>{"use strict";var n=r(1828),i=r(8727);e.exports=Object.keys||function(e){return n(e,i)}},8773:(e,t)=>{"use strict";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);t.f=i?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},2967:(e,t,r)=>{"use strict";var n=r(6706),i=r(34),a=r(7750),o=r(3506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=n(Object.prototype,"__proto__","set"))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),o(n),i(r)?(t?e(r,n):r.__proto__=n,r):r}}():void 0)},2357:(e,t,r)=>{"use strict";var n=r(3724),i=r(9039),a=r(9504),o=r(2787),u=r(1072),s=r(5397),c=a(r(8773).f),f=a([].push),l=n&&i((function(){var e=Object.create(null);return e[2]=2,!c(e,2)})),p=function(e){return function(t){for(var r,i=s(t),a=u(i),p=l&&null===o(i),m=a.length,h=0,d=[];m>h;)r=a[h++],n&&!(p?r in i:c(i,r))||f(d,e?[r,i[r]]:i[r]);return d}};e.exports={entries:p(!0),values:p(!1)}},3179:(e,t,r)=>{"use strict";var n=r(2140),i=r(6955);e.exports=n?{}.toString:function(){return"[object "+i(this)+"]"}},4270:(e,t,r)=>{"use strict";var n=r(9565),i=r(4901),a=r(34),o=TypeError;e.exports=function(e,t){var r,u;if("string"===t&&i(r=e.toString)&&!a(u=n(r,e)))return u;if(i(r=e.valueOf)&&!a(u=n(r,e)))return u;if("string"!==t&&i(r=e.toString)&&!a(u=n(r,e)))return u;throw new o("Can't convert object to primitive value")}},5031:(e,t,r)=>{"use strict";var n=r(7751),i=r(9504),a=r(8480),o=r(3717),u=r(8551),s=i([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=a.f(u(e)),r=o.f;return r?s(t,r(e)):t}},9167:(e,t,r)=>{"use strict";var n=r(4475);e.exports=n},1103:e=>{"use strict";e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},916:(e,t,r)=>{"use strict";var n=r(4475),i=r(550),a=r(4901),o=r(2796),u=r(3706),s=r(8227),c=r(7290),f=r(516),l=r(6395),p=r(7388),m=i&&i.prototype,h=s("species"),d=!1,v=a(n.PromiseRejectionEvent),y=o("Promise",(function(){var e=u(i),t=e!==String(i);if(!t&&66===p)return!0;if(l&&(!m.catch||!m.finally))return!0;if(!p||p<51||!/native code/.test(e)){var r=new i((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};if((r.constructor={})[h]=n,!(d=r.then((function(){}))instanceof n))return!0}return!t&&(c||f)&&!v}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:v,SUBCLASSING:d}},550:(e,t,r)=>{"use strict";var n=r(4475);e.exports=n.Promise},3438:(e,t,r)=>{"use strict";var n=r(8551),i=r(34),a=r(6043);e.exports=function(e,t){if(n(e),i(t)&&t.constructor===e)return t;var r=a.f(e);return(0,r.resolve)(t),r.promise}},537:(e,t,r)=>{"use strict";var n=r(550),i=r(4428),a=r(916).CONSTRUCTOR;e.exports=a||!i((function(e){n.all(e).then(void 0,(function(){}))}))},1056:(e,t,r)=>{"use strict";var n=r(4913).f;e.exports=function(e,t,r){r in e||n(e,r,{configurable:!0,get:function(){return t[r]},set:function(e){t[r]=e}})}},8265:e=>{"use strict";var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},r=this.tail;r?r.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},6682:(e,t,r)=>{"use strict";var n=r(9565),i=r(8551),a=r(4901),o=r(4576),u=r(7323),s=TypeError;e.exports=function(e,t){var r=e.exec;if(a(r)){var c=n(r,e,t);return null!==c&&i(c),c}if("RegExp"===o(e))return n(u,e,t);throw new s("RegExp#exec called on incompatible receiver")}},7323:(e,t,r)=>{"use strict";var n,i,a=r(9565),o=r(9504),u=r(655),s=r(7979),c=r(8429),f=r(5745),l=r(2360),p=r(1181).get,m=r(3635),h=r(8814),d=f("native-string-replace",String.prototype.replace),v=RegExp.prototype.exec,y=v,g=o("".charAt),x=o("".indexOf),b=o("".replace),w=o("".slice),D=(i=/b*/g,a(v,n=/a/,"a"),a(v,i,"a"),0!==n.lastIndex||0!==i.lastIndex),N=c.BROKEN_CARET,E=void 0!==/()??/.exec("")[1];(D||E||N||m||h)&&(y=function(e){var t,r,n,i,o,c,f,m=this,h=p(m),A=u(e),S=h.raw;if(S)return S.lastIndex=m.lastIndex,t=a(y,S,A),m.lastIndex=S.lastIndex,t;var C=h.groups,M=N&&m.sticky,F=a(s,m),O=m.source,T=0,_=A;if(M&&(F=b(F,"y",""),-1===x(F,"g")&&(F+="g"),_=w(A,m.lastIndex),m.lastIndex>0&&(!m.multiline||m.multiline&&"\n"!==g(A,m.lastIndex-1))&&(O="(?: "+O+")",_=" "+_,T++),r=new RegExp("^(?:"+O+")",F)),E&&(r=new RegExp("^"+O+"$(?!\\s)",F)),D&&(n=m.lastIndex),i=a(v,M?r:m,_),M?i?(i.input=w(i.input,T),i[0]=w(i[0],T),i.index=m.lastIndex,m.lastIndex+=i[0].length):m.lastIndex=0:D&&i&&(m.lastIndex=m.global?i.index+i[0].length:n),E&&i&&i.length>1&&a(d,i[0],r,(function(){for(o=1;o{"use strict";var n=r(8551);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},1034:(e,t,r)=>{"use strict";var n=r(9565),i=r(9297),a=r(1625),o=r(7979),u=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in u||i(e,"flags")||!a(u,e)?t:n(o,e)}},8429:(e,t,r)=>{"use strict";var n=r(9039),i=r(4475).RegExp,a=n((function(){var e=i("a","y");return e.lastIndex=2,null!==e.exec("abcd")})),o=a||n((function(){return!i("a","y").sticky})),u=a||n((function(){var e=i("^r","gy");return e.lastIndex=2,null!==e.exec("str")}));e.exports={BROKEN_CARET:u,MISSED_STICKY:o,UNSUPPORTED_Y:a}},3635:(e,t,r)=>{"use strict";var n=r(9039),i=r(4475).RegExp;e.exports=n((function(){var e=i(".","s");return!(e.dotAll&&e.test("\n")&&"s"===e.flags)}))},8814:(e,t,r)=>{"use strict";var n=r(9039),i=r(4475).RegExp;e.exports=n((function(){var e=i("(?b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")}))},7750:(e,t,r)=>{"use strict";var n=r(4117),i=TypeError;e.exports=function(e){if(n(e))throw new i("Can't call method on "+e);return e}},3389:(e,t,r)=>{"use strict";var n=r(4475),i=r(3724),a=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!i)return n[e];var t=a(n,e);return t&&t.value}},7633:(e,t,r)=>{"use strict";var n=r(7751),i=r(2106),a=r(8227),o=r(3724),u=a("species");e.exports=function(e){var t=n(e);o&&t&&!t[u]&&i(t,u,{configurable:!0,get:function(){return this}})}},687:(e,t,r)=>{"use strict";var n=r(4913).f,i=r(9297),a=r(8227)("toStringTag");e.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!i(e,a)&&n(e,a,{configurable:!0,value:t})}},6119:(e,t,r)=>{"use strict";var n=r(5745),i=r(3392),a=n("keys");e.exports=function(e){return a[e]||(a[e]=i(e))}},7629:(e,t,r)=>{"use strict";var n=r(6395),i=r(4475),a=r(9433),o="__core-js_shared__",u=e.exports=i[o]||a(o,{});(u.versions||(u.versions=[])).push({version:"3.37.0",mode:n?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.37.0/LICENSE",source:"https://github.com/zloirock/core-js"})},5745:(e,t,r)=>{"use strict";var n=r(7629);e.exports=function(e,t){return n[e]||(n[e]=t||{})}},2293:(e,t,r)=>{"use strict";var n=r(8551),i=r(5548),a=r(4117),o=r(8227)("species");e.exports=function(e,t){var r,u=n(e).constructor;return void 0===u||a(r=n(u)[o])?t:i(r)}},3061:(e,t,r)=>{"use strict";var n=r(9039);e.exports=function(e){return n((function(){var t=""[e]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},8183:(e,t,r)=>{"use strict";var n=r(9504),i=r(1291),a=r(655),o=r(7750),u=n("".charAt),s=n("".charCodeAt),c=n("".slice),f=function(e){return function(t,r){var n,f,l=a(o(t)),p=i(r),m=l.length;return p<0||p>=m?e?"":void 0:(n=s(l,p))<55296||n>56319||p+1===m||(f=s(l,p+1))<56320||f>57343?e?u(l,p):n:e?c(l,p,p+2):f-56320+(n-55296<<10)+65536}};e.exports={codeAt:f(!1),charAt:f(!0)}},2333:(e,t,r)=>{"use strict";var n=r(1291),i=r(655),a=r(7750),o=RangeError;e.exports=function(e){var t=i(a(this)),r="",u=n(e);if(u<0||u===1/0)throw new o("Wrong number of repetitions");for(;u>0;(u>>>=1)&&(t+=t))1&u&&(r+=t);return r}},706:(e,t,r)=>{"use strict";var n=r(350).PROPER,i=r(9039),a=r(7452);e.exports=function(e){return i((function(){return!!a[e]()||"​…᠎"!=="​…᠎"[e]()||n&&a[e].name!==e}))}},3802:(e,t,r)=>{"use strict";var n=r(9504),i=r(7750),a=r(655),o=r(7452),u=n("".replace),s=RegExp("^["+o+"]+"),c=RegExp("(^|[^"+o+"])["+o+"]+$"),f=function(e){return function(t){var r=a(i(t));return 1&e&&(r=u(r,s,"")),2&e&&(r=u(r,c,"$1")),r}};e.exports={start:f(1),end:f(2),trim:f(3)}},4495:(e,t,r)=>{"use strict";var n=r(7388),i=r(9039),a=r(4475).String;e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol("symbol detection");return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},8242:(e,t,r)=>{"use strict";var n=r(9565),i=r(7751),a=r(8227),o=r(6840);e.exports=function(){var e=i("Symbol"),t=e&&e.prototype,r=t&&t.valueOf,u=a("toPrimitive");t&&!t[u]&&o(t,u,(function(e){return n(r,this)}),{arity:1})}},1296:(e,t,r)=>{"use strict";var n=r(4495);e.exports=n&&!!Symbol.for&&!!Symbol.keyFor},9225:(e,t,r)=>{"use strict";var n,i,a,o,u=r(4475),s=r(8745),c=r(6080),f=r(4901),l=r(9297),p=r(9039),m=r(397),h=r(7680),d=r(4055),v=r(2812),y=r(8119),g=r(9088),x=u.setImmediate,b=u.clearImmediate,w=u.process,D=u.Dispatch,N=u.Function,E=u.MessageChannel,A=u.String,S=0,C={},M="onreadystatechange";p((function(){n=u.location}));var F=function(e){if(l(C,e)){var t=C[e];delete C[e],t()}},O=function(e){return function(){F(e)}},T=function(e){F(e.data)},_=function(e){u.postMessage(A(e),n.protocol+"//"+n.host)};x&&b||(x=function(e){v(arguments.length,1);var t=f(e)?e:N(e),r=h(arguments,1);return C[++S]=function(){s(t,void 0,r)},i(S),S},b=function(e){delete C[e]},g?i=function(e){w.nextTick(O(e))}:D&&D.now?i=function(e){D.now(O(e))}:E&&!y?(o=(a=new E).port2,a.port1.onmessage=T,i=c(o.postMessage,o)):u.addEventListener&&f(u.postMessage)&&!u.importScripts&&n&&"file:"!==n.protocol&&!p(_)?(i=_,u.addEventListener("message",T,!1)):i=M in d("script")?function(e){m.appendChild(d("script"))[M]=function(){m.removeChild(this),F(e)}}:function(e){setTimeout(O(e),0)}),e.exports={set:x,clear:b}},1240:(e,t,r)=>{"use strict";var n=r(9504);e.exports=n(1..valueOf)},5610:(e,t,r)=>{"use strict";var n=r(1291),i=Math.max,a=Math.min;e.exports=function(e,t){var r=n(e);return r<0?i(r+t,0):a(r,t)}},5397:(e,t,r)=>{"use strict";var n=r(7055),i=r(7750);e.exports=function(e){return n(i(e))}},1291:(e,t,r)=>{"use strict";var n=r(741);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},8014:(e,t,r)=>{"use strict";var n=r(1291),i=Math.min;e.exports=function(e){var t=n(e);return t>0?i(t,9007199254740991):0}},8981:(e,t,r)=>{"use strict";var n=r(7750),i=Object;e.exports=function(e){return i(n(e))}},2777:(e,t,r)=>{"use strict";var n=r(9565),i=r(34),a=r(757),o=r(5966),u=r(4270),s=r(8227),c=TypeError,f=s("toPrimitive");e.exports=function(e,t){if(!i(e)||a(e))return e;var r,s=o(e,f);if(s){if(void 0===t&&(t="default"),r=n(s,e,t),!i(r)||a(r))return r;throw new c("Can't convert object to primitive value")}return void 0===t&&(t="number"),u(e,t)}},6969:(e,t,r)=>{"use strict";var n=r(2777),i=r(757);e.exports=function(e){var t=n(e,"string");return i(t)?t:t+""}},2140:(e,t,r)=>{"use strict";var n={};n[r(8227)("toStringTag")]="z",e.exports="[object z]"===String(n)},655:(e,t,r)=>{"use strict";var n=r(6955),i=String;e.exports=function(e){if("Symbol"===n(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},6823:e=>{"use strict";var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},3392:(e,t,r)=>{"use strict";var n=r(9504),i=0,a=Math.random(),o=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+o(++i+a,36)}},7040:(e,t,r)=>{"use strict";var n=r(4495);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},8686:(e,t,r)=>{"use strict";var n=r(3724),i=r(9039);e.exports=n&&i((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},2812:e=>{"use strict";var t=TypeError;e.exports=function(e,r){if(e{"use strict";var n=r(4475),i=r(4901),a=n.WeakMap;e.exports=i(a)&&/native code/.test(String(a))},5749:(e,t,r)=>{"use strict";var n=r(9167),i=r(9297),a=r(1951),o=r(4913).f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});i(t,e)||o(t,e,{value:a.f(e)})}},1951:(e,t,r)=>{"use strict";var n=r(8227);t.f=n},8227:(e,t,r)=>{"use strict";var n=r(4475),i=r(5745),a=r(9297),o=r(3392),u=r(4495),s=r(7040),c=n.Symbol,f=i("wks"),l=s?c.for||c:c&&c.withoutSetter||o;e.exports=function(e){return a(f,e)||(f[e]=u&&a(c,e)?c[e]:l("Symbol."+e)),f[e]}},7452:e=>{"use strict";e.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},8706:(e,t,r)=>{"use strict";var n=r(6518),i=r(9039),a=r(4376),o=r(34),u=r(8981),s=r(6198),c=r(6837),f=r(4659),l=r(1469),p=r(597),m=r(8227),h=r(7388),d=m("isConcatSpreadable"),v=h>=51||!i((function(){var e=[];return e[d]=!1,e.concat()[0]!==e})),y=function(e){if(!o(e))return!1;var t=e[d];return void 0!==t?!!t:a(e)};n({target:"Array",proto:!0,arity:1,forced:!v||!p("concat")},{concat:function(e){var t,r,n,i,a,o=u(this),p=l(o,0),m=0;for(t=-1,n=arguments.length;t{"use strict";var n=r(6518),i=r(9213).every;n({target:"Array",proto:!0,forced:!r(4598)("every")},{every:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},3771:(e,t,r)=>{"use strict";var n=r(6518),i=r(4373),a=r(6469);n({target:"Array",proto:!0},{fill:i}),a("fill")},2008:(e,t,r)=>{"use strict";var n=r(6518),i=r(9213).filter;n({target:"Array",proto:!0,forced:!r(597)("filter")},{filter:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},113:(e,t,r)=>{"use strict";var n=r(6518),i=r(9213).find,a=r(6469),o="find",u=!0;o in[]&&Array(1)[o]((function(){u=!1})),n({target:"Array",proto:!0,forced:u},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),a(o)},1629:(e,t,r)=>{"use strict";var n=r(6518),i=r(235);n({target:"Array",proto:!0,forced:[].forEach!==i},{forEach:i})},3418:(e,t,r)=>{"use strict";var n=r(6518),i=r(7916);n({target:"Array",stat:!0,forced:!r(4428)((function(e){Array.from(e)}))},{from:i})},4423:(e,t,r)=>{"use strict";var n=r(6518),i=r(9617).includes,a=r(9039),o=r(6469);n({target:"Array",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o("includes")},5276:(e,t,r)=>{"use strict";var n=r(6518),i=r(7476),a=r(9617).indexOf,o=r(4598),u=i([].indexOf),s=!!u&&1/u([1],1,-0)<0;n({target:"Array",proto:!0,forced:s||!o("indexOf")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return s?u(this,e,t)||0:a(this,e,t)}})},4346:(e,t,r)=>{"use strict";r(6518)({target:"Array",stat:!0},{isArray:r(4376)})},3792:(e,t,r)=>{"use strict";var n=r(5397),i=r(6469),a=r(6269),o=r(1181),u=r(4913).f,s=r(1088),c=r(2529),f=r(6395),l=r(3724),p="Array Iterator",m=o.set,h=o.getterFor(p);e.exports=s(Array,"Array",(function(e,t){m(this,{type:p,target:n(e),index:0,kind:t})}),(function(){var e=h(this),t=e.target,r=e.index++;if(!t||r>=t.length)return e.target=void 0,c(void 0,!0);switch(e.kind){case"keys":return c(r,!1);case"values":return c(t[r],!1)}return c([r,t[r]],!1)}),"values");var d=a.Arguments=a.Array;if(i("keys"),i("values"),i("entries"),!f&&l&&"values"!==d.name)try{u(d,"name",{value:"values"})}catch(e){}},8598:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(7055),o=r(5397),u=r(4598),s=i([].join);n({target:"Array",proto:!0,forced:a!==Object||!u("join",",")},{join:function(e){return s(o(this),void 0===e?",":e)}})},2062:(e,t,r)=>{"use strict";var n=r(6518),i=r(9213).map;n({target:"Array",proto:!0,forced:!r(597)("map")},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},2712:(e,t,r)=>{"use strict";var n=r(6518),i=r(926).left,a=r(4598),o=r(7388);n({target:"Array",proto:!0,forced:!r(9088)&&o>79&&o<83||!a("reduce")},{reduce:function(e){var t=arguments.length;return i(this,e,t,t>1?arguments[1]:void 0)}})},4490:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(4376),o=i([].reverse),u=[1,2];n({target:"Array",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return a(this)&&(this.length=this.length),o(this)}})},4782:(e,t,r)=>{"use strict";var n=r(6518),i=r(4376),a=r(3517),o=r(34),u=r(5610),s=r(6198),c=r(5397),f=r(4659),l=r(8227),p=r(597),m=r(7680),h=p("slice"),d=l("species"),v=Array,y=Math.max;n({target:"Array",proto:!0,forced:!h},{slice:function(e,t){var r,n,l,p=c(this),h=s(p),g=u(e,h),x=u(void 0===t?h:t,h);if(i(p)&&(r=p.constructor,(a(r)&&(r===v||i(r.prototype))||o(r)&&null===(r=r[d]))&&(r=void 0),r===v||void 0===r))return m(p,g,x);for(n=new(void 0===r?v:r)(y(x-g,0)),l=0;g{"use strict";var n=r(6518),i=r(9213).some;n({target:"Array",proto:!0,forced:!r(4598)("some")},{some:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},6910:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(9306),o=r(8981),u=r(6198),s=r(4606),c=r(655),f=r(9039),l=r(4488),p=r(4598),m=r(8834),h=r(3202),d=r(7388),v=r(9160),y=[],g=i(y.sort),x=i(y.push),b=f((function(){y.sort(void 0)})),w=f((function(){y.sort(null)})),D=p("sort"),N=!f((function(){if(d)return d<70;if(!(m&&m>3)){if(h)return!0;if(v)return v<603;var e,t,r,n,i="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:r=3;break;case 68:case 71:r=4;break;default:r=2}for(n=0;n<47;n++)y.push({k:t+n,v:r})}for(y.sort((function(e,t){return t.v-e.v})),n=0;nc(r)?1:-1}}(e)),r=u(i),n=0;n{"use strict";var n=r(6518),i=r(8981),a=r(5610),o=r(1291),u=r(6198),s=r(4527),c=r(6837),f=r(1469),l=r(4659),p=r(4606),m=r(597)("splice"),h=Math.max,d=Math.min;n({target:"Array",proto:!0,forced:!m},{splice:function(e,t){var r,n,m,v,y,g,x=i(this),b=u(x),w=a(e,b),D=arguments.length;for(0===D?r=n=0:1===D?(r=0,n=b-w):(r=D-2,n=d(h(o(t),0),b-w)),c(b+r-n),m=f(x,n),v=0;vb-n+r;v--)p(x,v-1)}else if(r>n)for(v=b-n;v>w;v--)g=v+r-1,(y=v+n-1)in x?x[g]=x[y]:p(x,g);for(v=0;v{"use strict";var n=r(6518),i=r(9504),a=Date,o=i(a.prototype.getTime);n({target:"Date",stat:!0},{now:function(){return o(new a)}})},739:(e,t,r)=>{"use strict";var n=r(6518),i=r(9039),a=r(8981),o=r(2777);n({target:"Date",proto:!0,arity:1,forced:i((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=a(this),r=o(t,"number");return"number"!=typeof r||isFinite(r)?t.toISOString():null}})},3288:(e,t,r)=>{"use strict";var n=r(9504),i=r(6840),a=Date.prototype,o="Invalid Date",u="toString",s=n(a[u]),c=n(a.getTime);String(new Date(NaN))!==o&&i(a,u,(function(){var e=c(this);return e==e?s(this):o}))},4170:(e,t,r)=>{"use strict";var n=r(6518),i=r(566);n({target:"Function",proto:!0,forced:Function.bind!==i},{bind:i})},2010:(e,t,r)=>{"use strict";var n=r(3724),i=r(350).EXISTS,a=r(9504),o=r(2106),u=Function.prototype,s=a(u.toString),c=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,f=a(c.exec);n&&!i&&o(u,"name",{configurable:!0,get:function(){try{return f(c,s(this))[1]}catch(e){return""}}})},3110:(e,t,r)=>{"use strict";var n=r(6518),i=r(7751),a=r(8745),o=r(9565),u=r(9504),s=r(9039),c=r(4901),f=r(757),l=r(7680),p=r(6933),m=r(4495),h=String,d=i("JSON","stringify"),v=u(/./.exec),y=u("".charAt),g=u("".charCodeAt),x=u("".replace),b=u(1..toString),w=/[\uD800-\uDFFF]/g,D=/^[\uD800-\uDBFF]$/,N=/^[\uDC00-\uDFFF]$/,E=!m||s((function(){var e=i("Symbol")("stringify detection");return"[null]"!==d([e])||"{}"!==d({a:e})||"{}"!==d(Object(e))})),A=s((function(){return'"\\udf06\\ud834"'!==d("\udf06\ud834")||'"\\udead"'!==d("\udead")})),S=function(e,t){var r=l(arguments),n=p(t);if(c(n)||void 0!==e&&!f(e))return r[1]=function(e,t){if(c(n)&&(t=o(n,this,h(e),t)),!f(t))return t},a(d,null,r)},C=function(e,t,r){var n=y(r,t-1),i=y(r,t+1);return v(D,e)&&!v(N,i)||v(N,e)&&!v(D,n)?"\\u"+b(g(e,0),16):e};d&&n({target:"JSON",stat:!0,arity:3,forced:E||A},{stringify:function(e,t,r){var n=l(arguments),i=a(E?S:d,null,n);return A&&"string"==typeof i?x(i,w,C):i}})},8523:(e,t,r)=>{"use strict";r(6468)("Map",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(6938))},6033:(e,t,r)=>{"use strict";r(8523)},3153:(e,t,r)=>{"use strict";var n=r(6518),i=r(5359),a=Math.acosh,o=Math.log,u=Math.sqrt,s=Math.LN2;n({target:"Math",stat:!0,forced:!a||710!==Math.floor(a(Number.MAX_VALUE))||a(1/0)!==1/0},{acosh:function(e){var t=+e;return t<1?NaN:t>94906265.62425156?o(t)+s:i(t-1+u(t-1)*u(t+1))}})},2326:(e,t,r)=>{"use strict";var n=r(6518),i=Math.asinh,a=Math.log,o=Math.sqrt;n({target:"Math",stat:!0,forced:!(i&&1/i(0)>0)},{asinh:function e(t){var r=+t;return isFinite(r)&&0!==r?r<0?-e(-r):a(r+o(r*r+1)):r}})},6389:(e,t,r)=>{"use strict";var n=r(6518),i=Math.atanh,a=Math.log;n({target:"Math",stat:!0,forced:!(i&&1/i(-0)<0)},{atanh:function(e){var t=+e;return 0===t?t:a((1+t)/(1-t))/2}})},4444:(e,t,r)=>{"use strict";var n=r(6518),i=r(7782),a=Math.abs,o=Math.pow;n({target:"Math",stat:!0},{cbrt:function(e){var t=+e;return i(t)*o(a(t),1/3)}})},7762:(e,t,r)=>{"use strict";var n=r(6518),i=r(3250),a=Math.cosh,o=Math.abs,u=Math.E;n({target:"Math",stat:!0,forced:!a||a(710)===1/0},{cosh:function(e){var t=i(o(e)-1)+1;return(t+1/(t*u*u))*(u/2)}})},5070:(e,t,r)=>{"use strict";var n=r(6518),i=r(3250);n({target:"Math",stat:!0,forced:i!==Math.expm1},{expm1:i})},5376:(e,t,r)=>{"use strict";r(6518)({target:"Math",stat:!0},{log10:r(9340)})},6624:(e,t,r)=>{"use strict";r(6518)({target:"Math",stat:!0},{log1p:r(5359)})},1367:(e,t,r)=>{"use strict";var n=r(6518),i=Math.log,a=Math.LN2;n({target:"Math",stat:!0},{log2:function(e){return i(e)/a}})},5914:(e,t,r)=>{"use strict";r(6518)({target:"Math",stat:!0},{sign:r(7782)})},8553:(e,t,r)=>{"use strict";var n=r(6518),i=r(9039),a=r(3250),o=Math.abs,u=Math.exp,s=Math.E;n({target:"Math",stat:!0,forced:i((function(){return-2e-17!==Math.sinh(-2e-17)}))},{sinh:function(e){var t=+e;return o(t)<1?(a(t)-a(-t))/2:(u(t-1)-u(-t-1))*(s/2)}})},8690:(e,t,r)=>{"use strict";var n=r(6518),i=r(3250),a=Math.exp;n({target:"Math",stat:!0},{tanh:function(e){var t=+e,r=i(t),n=i(-t);return r===1/0?1:n===1/0?-1:(r-n)/(a(t)+a(-t))}})},2892:(e,t,r)=>{"use strict";var n=r(6518),i=r(6395),a=r(3724),o=r(4475),u=r(9167),s=r(9504),c=r(2796),f=r(9297),l=r(3167),p=r(1625),m=r(757),h=r(2777),d=r(9039),v=r(8480).f,y=r(7347).f,g=r(4913).f,x=r(1240),b=r(3802).trim,w="Number",D=o[w],N=u[w],E=D.prototype,A=o.TypeError,S=s("".slice),C=s("".charCodeAt),M=c(w,!D(" 0o1")||!D("0b1")||D("+0x1")),F=function(e){var t,r=arguments.length<1?0:D(function(e){var t=h(e,"number");return"bigint"==typeof t?t:function(e){var t,r,n,i,a,o,u,s,c=h(e,"number");if(m(c))throw new A("Cannot convert a Symbol value to a number");if("string"==typeof c&&c.length>2)if(c=b(c),43===(t=C(c,0))||45===t){if(88===(r=C(c,2))||120===r)return NaN}else if(48===t){switch(C(c,1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+c}for(o=(a=S(c,2)).length,u=0;ui)return NaN;return parseInt(a,n)}return+c}(t)}(e));return p(E,t=this)&&d((function(){x(t)}))?l(Object(r),this,F):r};F.prototype=E,M&&!i&&(E.constructor=F),n({global:!0,constructor:!0,wrap:!0,forced:M},{Number:F});var O=function(e,t){for(var r,n=a?v(t):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),i=0;n.length>i;i++)f(t,r=n[i])&&!f(e,r)&&g(e,r,y(t,r))};i&&N&&O(u[w],N),(M||i)&&O(u[w],D)},5374:(e,t,r)=>{"use strict";r(6518)({target:"Number",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},150:(e,t,r)=>{"use strict";r(6518)({target:"Number",stat:!0},{isNaN:function(e){return e!=e}})},9868:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(1291),o=r(1240),u=r(2333),s=r(9039),c=RangeError,f=String,l=Math.floor,p=i(u),m=i("".slice),h=i(1..toFixed),d=function(e,t,r){return 0===t?r:t%2==1?d(e,t-1,r*e):d(e*e,t/2,r)},v=function(e,t,r){for(var n=-1,i=r;++n<6;)i+=t*e[n],e[n]=i%1e7,i=l(i/1e7)},y=function(e,t){for(var r=6,n=0;--r>=0;)n+=e[r],e[r]=l(n/t),n=n%t*1e7},g=function(e){for(var t=6,r="";--t>=0;)if(""!==r||0===t||0!==e[t]){var n=f(e[t]);r=""===r?n:r+p("0",7-n.length)+n}return r};n({target:"Number",proto:!0,forced:s((function(){return"0.000"!==h(8e-5,3)||"1"!==h(.9,0)||"1.25"!==h(1.255,2)||"1000000000000000128"!==h(0xde0b6b3a7640080,0)}))||!s((function(){h({})}))},{toFixed:function(e){var t,r,n,i,u=o(this),s=a(e),l=[0,0,0,0,0,0],h="",x="0";if(s<0||s>20)throw new c("Incorrect fraction digits");if(u!=u)return"NaN";if(u<=-1e21||u>=1e21)return f(u);if(u<0&&(h="-",u=-u),u>1e-21)if(r=(t=function(e){for(var t=0,r=e;r>=4096;)t+=12,r/=4096;for(;r>=2;)t+=1,r/=2;return t}(u*d(2,69,1))-69)<0?u*d(2,-t,1):u/d(2,t,1),r*=4503599627370496,(t=52-t)>0){for(v(l,0,r),n=s;n>=7;)v(l,1e7,0),n-=7;for(v(l,d(10,n,1),0),n=t-1;n>=23;)y(l,1<<23),n-=23;y(l,1<0?h+((i=x.length)<=s?"0."+p("0",s-i)+x:m(x,0,i-s)+"."+m(x,i-s)):h+x}})},630:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(9039),o=r(1240),u=i(1..toPrecision);n({target:"Number",proto:!0,forced:a((function(){return"1"!==u(1,void 0)}))||!a((function(){u({})}))},{toPrecision:function(e){return void 0===e?u(o(this)):u(o(this),e)}})},9904:(e,t,r)=>{"use strict";r(6518)({target:"Object",stat:!0,sham:!r(3724)},{create:r(2360)})},7945:(e,t,r)=>{"use strict";var n=r(6518),i=r(3724),a=r(6801).f;n({target:"Object",stat:!0,forced:Object.defineProperties!==a,sham:!i},{defineProperties:a})},4185:(e,t,r)=>{"use strict";var n=r(6518),i=r(3724),a=r(4913).f;n({target:"Object",stat:!0,forced:Object.defineProperty!==a,sham:!i},{defineProperty:a})},3851:(e,t,r)=>{"use strict";var n=r(6518),i=r(9039),a=r(5397),o=r(7347).f,u=r(3724);n({target:"Object",stat:!0,forced:!u||i((function(){o(1)})),sham:!u},{getOwnPropertyDescriptor:function(e,t){return o(a(e),t)}})},1278:(e,t,r)=>{"use strict";var n=r(6518),i=r(3724),a=r(5031),o=r(5397),u=r(7347),s=r(4659);n({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(e){for(var t,r,n=o(e),i=u.f,c=a(n),f={},l=0;c.length>l;)void 0!==(r=i(n,t=c[l++]))&&s(f,t,r);return f}})},9773:(e,t,r)=>{"use strict";var n=r(6518),i=r(4495),a=r(9039),o=r(3717),u=r(8981);n({target:"Object",stat:!0,forced:!i||a((function(){o.f(1)}))},{getOwnPropertySymbols:function(e){var t=o.f;return t?t(u(e)):[]}})},875:(e,t,r)=>{"use strict";var n=r(6518),i=r(9039),a=r(8981),o=r(2787),u=r(2211);n({target:"Object",stat:!0,forced:i((function(){o(1)})),sham:!u},{getPrototypeOf:function(e){return o(a(e))}})},9432:(e,t,r)=>{"use strict";var n=r(6518),i=r(8981),a=r(1072);n({target:"Object",stat:!0,forced:r(9039)((function(){a(1)}))},{keys:function(e){return a(i(e))}})},6099:(e,t,r)=>{"use strict";var n=r(2140),i=r(6840),a=r(3179);n||i(Object.prototype,"toString",a,{unsafe:!0})},6034:(e,t,r)=>{"use strict";var n=r(6518),i=r(2357).values;n({target:"Object",stat:!0},{values:function(e){return i(e)}})},8459:(e,t,r)=>{"use strict";var n=r(6518),i=r(3904);n({global:!0,forced:parseFloat!==i},{parseFloat:i})},8940:(e,t,r)=>{"use strict";var n=r(6518),i=r(2703);n({global:!0,forced:parseInt!==i},{parseInt:i})},6499:(e,t,r)=>{"use strict";var n=r(6518),i=r(9565),a=r(9306),o=r(6043),u=r(1103),s=r(2652);n({target:"Promise",stat:!0,forced:r(537)},{all:function(e){var t=this,r=o.f(t),n=r.resolve,c=r.reject,f=u((function(){var r=a(t.resolve),o=[],u=0,f=1;s(e,(function(e){var a=u++,s=!1;f++,i(r,t,e).then((function(e){s||(s=!0,o[a]=e,--f||n(o))}),c)})),--f||n(o)}));return f.error&&c(f.value),r.promise}})},2003:(e,t,r)=>{"use strict";var n=r(6518),i=r(6395),a=r(916).CONSTRUCTOR,o=r(550),u=r(7751),s=r(4901),c=r(6840),f=o&&o.prototype;if(n({target:"Promise",proto:!0,forced:a,real:!0},{catch:function(e){return this.then(void 0,e)}}),!i&&s(o)){var l=u("Promise").prototype.catch;f.catch!==l&&c(f,"catch",l,{unsafe:!0})}},436:(e,t,r)=>{"use strict";var n,i,a,o=r(6518),u=r(6395),s=r(9088),c=r(4475),f=r(9565),l=r(6840),p=r(2967),m=r(687),h=r(7633),d=r(9306),v=r(4901),y=r(34),g=r(679),x=r(2293),b=r(9225).set,w=r(1955),D=r(3138),N=r(1103),E=r(8265),A=r(1181),S=r(550),C=r(916),M=r(6043),F="Promise",O=C.CONSTRUCTOR,T=C.REJECTION_EVENT,_=C.SUBCLASSING,B=A.getterFor(F),k=A.set,I=S&&S.prototype,z=S,R=I,q=c.TypeError,j=c.document,P=c.process,L=M.f,U=L,$=!!(j&&j.createEvent&&c.dispatchEvent),H="unhandledrejection",G=function(e){var t;return!(!y(e)||!v(t=e.then))&&t},V=function(e,t){var r,n,i,a=t.value,o=1===t.state,u=o?e.ok:e.fail,s=e.resolve,c=e.reject,l=e.domain;try{u?(o||(2===t.rejection&&X(t),t.rejection=1),!0===u?r=a:(l&&l.enter(),r=u(a),l&&(l.exit(),i=!0)),r===e.promise?c(new q("Promise-chain cycle")):(n=G(r))?f(n,r,s,c):s(r)):c(a)}catch(e){l&&!i&&l.exit(),c(e)}},Z=function(e,t){e.notified||(e.notified=!0,w((function(){for(var r,n=e.reactions;r=n.get();)V(r,e);e.notified=!1,t&&!e.rejection&&Y(e)})))},W=function(e,t,r){var n,i;$?((n=j.createEvent("Event")).promise=t,n.reason=r,n.initEvent(e,!1,!0),c.dispatchEvent(n)):n={promise:t,reason:r},!T&&(i=c["on"+e])?i(n):e===H&&D("Unhandled promise rejection",r)},Y=function(e){f(b,c,(function(){var t,r=e.facade,n=e.value;if(J(e)&&(t=N((function(){s?P.emit("unhandledRejection",n,r):W(H,r,n)})),e.rejection=s||J(e)?2:1,t.error))throw t.value}))},J=function(e){return 1!==e.rejection&&!e.parent},X=function(e){f(b,c,(function(){var t=e.facade;s?P.emit("rejectionHandled",t):W("rejectionhandled",t,e.value)}))},Q=function(e,t,r){return function(n){e(t,n,r)}},K=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,Z(e,!0))},ee=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw new q("Promise can't be resolved itself");var n=G(t);n?w((function(){var r={done:!1};try{f(n,t,Q(ee,r,e),Q(K,r,e))}catch(t){K(r,t,e)}})):(e.value=t,e.state=1,Z(e,!1))}catch(t){K({done:!1},t,e)}}};if(O&&(R=(z=function(e){g(this,R),d(e),f(n,this);var t=B(this);try{e(Q(ee,t),Q(K,t))}catch(e){K(t,e)}}).prototype,(n=function(e){k(this,{type:F,done:!1,notified:!1,parent:!1,reactions:new E,rejection:!1,state:0,value:void 0})}).prototype=l(R,"then",(function(e,t){var r=B(this),n=L(x(this,z));return r.parent=!0,n.ok=!v(e)||e,n.fail=v(t)&&t,n.domain=s?P.domain:void 0,0===r.state?r.reactions.add(n):w((function(){V(n,r)})),n.promise})),i=function(){var e=new n,t=B(e);this.promise=e,this.resolve=Q(ee,t),this.reject=Q(K,t)},M.f=L=function(e){return e===z||void 0===e?new i(e):U(e)},!u&&v(S)&&I!==Object.prototype)){a=I.then,_||l(I,"then",(function(e,t){var r=this;return new z((function(e,t){f(a,r,e,t)})).then(e,t)}),{unsafe:!0});try{delete I.constructor}catch(e){}p&&p(I,R)}o({global:!0,constructor:!0,wrap:!0,forced:O},{Promise:z}),m(z,F,!1,!0),h(F)},3362:(e,t,r)=>{"use strict";r(436),r(6499),r(2003),r(7743),r(1481),r(280)},7743:(e,t,r)=>{"use strict";var n=r(6518),i=r(9565),a=r(9306),o=r(6043),u=r(1103),s=r(2652);n({target:"Promise",stat:!0,forced:r(537)},{race:function(e){var t=this,r=o.f(t),n=r.reject,c=u((function(){var o=a(t.resolve);s(e,(function(e){i(o,t,e).then(r.resolve,n)}))}));return c.error&&n(c.value),r.promise}})},1481:(e,t,r)=>{"use strict";var n=r(6518),i=r(6043);n({target:"Promise",stat:!0,forced:r(916).CONSTRUCTOR},{reject:function(e){var t=i.f(this);return(0,t.reject)(e),t.promise}})},280:(e,t,r)=>{"use strict";var n=r(6518),i=r(7751),a=r(6395),o=r(550),u=r(916).CONSTRUCTOR,s=r(3438),c=i("Promise"),f=a&&!u;n({target:"Promise",stat:!0,forced:a||u},{resolve:function(e){return s(f&&this===c?o:this,e)}})},825:(e,t,r)=>{"use strict";var n=r(6518),i=r(7751),a=r(8745),o=r(566),u=r(5548),s=r(8551),c=r(34),f=r(2360),l=r(9039),p=i("Reflect","construct"),m=Object.prototype,h=[].push,d=l((function(){function e(){}return!(p((function(){}),[],e)instanceof e)})),v=!l((function(){p((function(){}))})),y=d||v;n({target:"Reflect",stat:!0,forced:y,sham:y},{construct:function(e,t){u(e),s(t);var r=arguments.length<3?e:u(arguments[2]);if(v&&!d)return p(e,t,r);if(e===r){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var n=[null];return a(h,n,t),new(a(o,e,n))}var i=r.prototype,l=f(c(i)?i:m),y=a(e,l,t);return c(y)?y:l}})},4864:(e,t,r)=>{"use strict";var n=r(3724),i=r(4475),a=r(9504),o=r(2796),u=r(3167),s=r(6699),c=r(2360),f=r(8480).f,l=r(1625),p=r(788),m=r(655),h=r(1034),d=r(8429),v=r(1056),y=r(6840),g=r(9039),x=r(9297),b=r(1181).enforce,w=r(7633),D=r(8227),N=r(3635),E=r(8814),A=D("match"),S=i.RegExp,C=S.prototype,M=i.SyntaxError,F=a(C.exec),O=a("".charAt),T=a("".replace),_=a("".indexOf),B=a("".slice),k=/^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/,I=/a/g,z=/a/g,R=new S(I)!==I,q=d.MISSED_STICKY,j=d.UNSUPPORTED_Y;if(o("RegExp",n&&(!R||q||N||E||g((function(){return z[A]=!1,S(I)!==I||S(z)===z||"/a/i"!==String(S(I,"i"))}))))){for(var P=function(e,t){var r,n,i,a,o,f,d=l(C,this),v=p(e),y=void 0===t,g=[],w=e;if(!d&&v&&y&&e.constructor===P)return e;if((v||l(C,e))&&(e=e.source,y&&(t=h(w))),e=void 0===e?"":m(e),t=void 0===t?"":m(t),w=e,N&&"dotAll"in I&&(n=!!t&&_(t,"s")>-1)&&(t=T(t,/s/g,"")),r=t,q&&"sticky"in I&&(i=!!t&&_(t,"y")>-1)&&j&&(t=T(t,/y/g,"")),E&&(a=function(e){for(var t,r=e.length,n=0,i="",a=[],o=c(null),u=!1,s=!1,f=0,l="";n<=r;n++){if("\\"===(t=O(e,n)))t+=O(e,++n);else if("]"===t)u=!1;else if(!u)switch(!0){case"["===t:u=!0;break;case"("===t:F(k,B(e,n+1))&&(n+=2,s=!0),i+=t,f++;continue;case">"===t&&s:if(""===l||x(o,l))throw new M("Invalid capture group name");o[l]=!0,a[a.length]=[l,f],s=!1,l="";continue}s?l+=t:i+=t}return[i,a]}(e),e=a[0],g=a[1]),o=u(S(e,t),d?this:C,P),(n||i||g.length)&&(f=b(o),n&&(f.dotAll=!0,f.raw=P(function(e){for(var t,r=e.length,n=0,i="",a=!1;n<=r;n++)"\\"!==(t=O(e,n))?a||"."!==t?("["===t?a=!0:"]"===t&&(a=!1),i+=t):i+="[\\s\\S]":i+=t+O(e,++n);return i}(e),r)),i&&(f.sticky=!0),g.length&&(f.groups=g)),e!==w)try{s(o,"source",""===w?"(?:)":w)}catch(e){}return o},L=f(S),U=0;L.length>U;)v(P,S,L[U++]);C.constructor=P,P.prototype=C,y(i,"RegExp",P,{constructor:!0})}w("RegExp")},7465:(e,t,r)=>{"use strict";var n=r(3724),i=r(3635),a=r(4576),o=r(2106),u=r(1181).get,s=RegExp.prototype,c=TypeError;n&&i&&o(s,"dotAll",{configurable:!0,get:function(){if(this!==s){if("RegExp"===a(this))return!!u(this).dotAll;throw new c("Incompatible receiver, RegExp required")}}})},7495:(e,t,r)=>{"use strict";var n=r(6518),i=r(7323);n({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},7745:(e,t,r)=>{"use strict";var n=r(3724),i=r(8429).MISSED_STICKY,a=r(4576),o=r(2106),u=r(1181).get,s=RegExp.prototype,c=TypeError;n&&i&&o(s,"sticky",{configurable:!0,get:function(){if(this!==s){if("RegExp"===a(this))return!!u(this).sticky;throw new c("Incompatible receiver, RegExp required")}}})},906:(e,t,r)=>{"use strict";r(7495);var n,i,a=r(6518),o=r(9565),u=r(4901),s=r(8551),c=r(655),f=(n=!1,(i=/[ac]/).exec=function(){return n=!0,/./.exec.apply(this,arguments)},!0===i.test("abc")&&n),l=/./.test;a({target:"RegExp",proto:!0,forced:!f},{test:function(e){var t=s(this),r=c(e),n=t.exec;if(!u(n))return o(l,t,r);var i=o(n,t,r);return null!==i&&(s(i),!0)}})},8781:(e,t,r)=>{"use strict";var n=r(350).PROPER,i=r(6840),a=r(8551),o=r(655),u=r(9039),s=r(1034),c="toString",f=RegExp.prototype,l=f[c],p=u((function(){return"/a/b"!==l.call({source:"a",flags:"b"})})),m=n&&l.name!==c;(p||m)&&i(f,c,(function(){var e=a(this);return"/"+o(e.source)+"/"+o(s(e))}),{unsafe:!0})},2405:(e,t,r)=>{"use strict";r(6468)("Set",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(6938))},1415:(e,t,r)=>{"use strict";r(2405)},1699:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(511),o=r(7750),u=r(655),s=r(1436),c=i("".indexOf);n({target:"String",proto:!0,forced:!s("includes")},{includes:function(e){return!!~c(u(o(this)),u(a(e)),arguments.length>1?arguments[1]:void 0)}})},7764:(e,t,r)=>{"use strict";var n=r(8183).charAt,i=r(655),a=r(1181),o=r(1088),u=r(2529),s="String Iterator",c=a.set,f=a.getterFor(s);o(String,"String",(function(e){c(this,{type:s,string:i(e),index:0})}),(function(){var e,t=f(this),r=t.string,i=t.index;return i>=r.length?u(void 0,!0):(e=n(r,i),t.index+=e.length,u(e,!1))}))},1761:(e,t,r)=>{"use strict";var n=r(9565),i=r(9228),a=r(8551),o=r(4117),u=r(8014),s=r(655),c=r(7750),f=r(5966),l=r(7829),p=r(6682);i("match",(function(e,t,r){return[function(t){var r=c(this),i=o(t)?void 0:f(t,e);return i?n(i,t,r):new RegExp(t)[e](s(r))},function(e){var n=a(this),i=s(e),o=r(t,n,i);if(o.done)return o.value;if(!n.global)return p(n,i);var c=n.unicode;n.lastIndex=0;for(var f,m=[],h=0;null!==(f=p(n,i));){var d=s(f[0]);m[h]=d,""===d&&(n.lastIndex=l(i,u(n.lastIndex),c)),h++}return 0===h?null:m}]}))},2781:(e,t,r)=>{"use strict";r(6518)({target:"String",proto:!0},{repeat:r(2333)})},5440:(e,t,r)=>{"use strict";var n=r(8745),i=r(9565),a=r(9504),o=r(9228),u=r(9039),s=r(8551),c=r(4901),f=r(4117),l=r(1291),p=r(8014),m=r(655),h=r(7750),d=r(7829),v=r(5966),y=r(2478),g=r(6682),x=r(8227)("replace"),b=Math.max,w=Math.min,D=a([].concat),N=a([].push),E=a("".indexOf),A=a("".slice),S="$0"==="a".replace(/./,"$0"),C=!!/./[x]&&""===/./[x]("a","$0");o("replace",(function(e,t,r){var a=C?"$":"$0";return[function(e,r){var n=h(this),a=f(e)?void 0:v(e,x);return a?i(a,e,n,r):i(t,m(n),e,r)},function(e,i){var o=s(this),u=m(e);if("string"==typeof i&&-1===E(i,a)&&-1===E(i,"$<")){var f=r(t,o,u,i);if(f.done)return f.value}var h=c(i);h||(i=m(i));var v,x=o.global;x&&(v=o.unicode,o.lastIndex=0);for(var S,C=[];null!==(S=g(o,u))&&(N(C,S),x);)""===m(S[0])&&(o.lastIndex=d(u,p(o.lastIndex),v));for(var M,F="",O=0,T=0;T=O&&(F+=A(u,O,k)+_,O=k+B.length)}return F+A(u,O)}]}),!!u((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}))||!S||C)},8718:(e,t,r)=>{"use strict";var n=r(6518),i=r(7240);n({target:"String",proto:!0,forced:r(3061)("sub")},{sub:function(){return i(this,"sub","","")}})},375:(e,t,r)=>{"use strict";var n=r(6518),i=r(9504),a=r(7750),o=r(1291),u=r(655),s=i("".slice),c=Math.max,f=Math.min;n({target:"String",proto:!0,forced:!"".substr||"b"!=="ab".substr(-1)},{substr:function(e,t){var r,n,i=u(a(this)),l=i.length,p=o(e);return p===1/0&&(p=0),p<0&&(p=c(l+p,0)),(r=void 0===t?l:o(t))<=0||r===1/0||p>=(n=f(p+r,l))?"":s(i,p,n)}})},2762:(e,t,r)=>{"use strict";var n=r(6518),i=r(3802).trim;n({target:"String",proto:!0,forced:r(706)("trim")},{trim:function(){return i(this)}})},6761:(e,t,r)=>{"use strict";var n=r(6518),i=r(4475),a=r(9565),o=r(9504),u=r(6395),s=r(3724),c=r(4495),f=r(9039),l=r(9297),p=r(1625),m=r(8551),h=r(5397),d=r(6969),v=r(655),y=r(6980),g=r(2360),x=r(1072),b=r(8480),w=r(298),D=r(3717),N=r(7347),E=r(4913),A=r(6801),S=r(8773),C=r(6840),M=r(2106),F=r(5745),O=r(6119),T=r(421),_=r(3392),B=r(8227),k=r(1951),I=r(5749),z=r(8242),R=r(687),q=r(1181),j=r(9213).forEach,P=O("hidden"),L="Symbol",U="prototype",$=q.set,H=q.getterFor(L),G=Object[U],V=i.Symbol,Z=V&&V[U],W=i.RangeError,Y=i.TypeError,J=i.QObject,X=N.f,Q=E.f,K=w.f,ee=S.f,te=o([].push),re=F("symbols"),ne=F("op-symbols"),ie=F("wks"),ae=!J||!J[U]||!J[U].findChild,oe=function(e,t,r){var n=X(G,t);n&&delete G[t],Q(e,t,r),n&&e!==G&&Q(G,t,n)},ue=s&&f((function(){return 7!==g(Q({},"a",{get:function(){return Q(this,"a",{value:7}).a}})).a}))?oe:Q,se=function(e,t){var r=re[e]=g(Z);return $(r,{type:L,tag:e,description:t}),s||(r.description=t),r},ce=function(e,t,r){e===G&&ce(ne,t,r),m(e);var n=d(t);return m(r),l(re,n)?(r.enumerable?(l(e,P)&&e[P][n]&&(e[P][n]=!1),r=g(r,{enumerable:y(0,!1)})):(l(e,P)||Q(e,P,y(1,g(null))),e[P][n]=!0),ue(e,n,r)):Q(e,n,r)},fe=function(e,t){m(e);var r=h(t),n=x(r).concat(he(r));return j(n,(function(t){s&&!a(le,r,t)||ce(e,t,r[t])})),e},le=function(e){var t=d(e),r=a(ee,this,t);return!(this===G&&l(re,t)&&!l(ne,t))&&(!(r||!l(this,t)||!l(re,t)||l(this,P)&&this[P][t])||r)},pe=function(e,t){var r=h(e),n=d(t);if(r!==G||!l(re,n)||l(ne,n)){var i=X(r,n);return!i||!l(re,n)||l(r,P)&&r[P][n]||(i.enumerable=!0),i}},me=function(e){var t=K(h(e)),r=[];return j(t,(function(e){l(re,e)||l(T,e)||te(r,e)})),r},he=function(e){var t=e===G,r=K(t?ne:h(e)),n=[];return j(r,(function(e){!l(re,e)||t&&!l(G,e)||te(n,re[e])})),n};c||(C(Z=(V=function(){if(p(Z,this))throw new Y("Symbol is not a constructor");var e=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,t=_(e),r=function(e){var n=void 0===this?i:this;n===G&&a(r,ne,e),l(n,P)&&l(n[P],t)&&(n[P][t]=!1);var o=y(1,e);try{ue(n,t,o)}catch(e){if(!(e instanceof W))throw e;oe(n,t,o)}};return s&&ae&&ue(G,t,{configurable:!0,set:r}),se(t,e)})[U],"toString",(function(){return H(this).tag})),C(V,"withoutSetter",(function(e){return se(_(e),e)})),S.f=le,E.f=ce,A.f=fe,N.f=pe,b.f=w.f=me,D.f=he,k.f=function(e){return se(B(e),e)},s&&(M(Z,"description",{configurable:!0,get:function(){return H(this).description}}),u||C(G,"propertyIsEnumerable",le,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:V}),j(x(ie),(function(e){I(e)})),n({target:L,stat:!0,forced:!c},{useSetter:function(){ae=!0},useSimple:function(){ae=!1}}),n({target:"Object",stat:!0,forced:!c,sham:!s},{create:function(e,t){return void 0===t?g(e):fe(g(e),t)},defineProperty:ce,defineProperties:fe,getOwnPropertyDescriptor:pe}),n({target:"Object",stat:!0,forced:!c},{getOwnPropertyNames:me}),z(),R(V,L),T[P]=!0},9463:(e,t,r)=>{"use strict";var n=r(6518),i=r(3724),a=r(4475),o=r(9504),u=r(9297),s=r(4901),c=r(1625),f=r(655),l=r(2106),p=r(7740),m=a.Symbol,h=m&&m.prototype;if(i&&s(m)&&(!("description"in h)||void 0!==m().description)){var d={},v=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:f(arguments[0]),t=c(h,this)?new m(e):void 0===e?m():m(e);return""===e&&(d[t]=!0),t};p(v,m),v.prototype=h,h.constructor=v;var y="Symbol(description detection)"===String(m("description detection")),g=o(h.valueOf),x=o(h.toString),b=/^Symbol\((.*)\)[^)]+$/,w=o("".replace),D=o("".slice);l(h,"description",{configurable:!0,get:function(){var e=g(this);if(u(d,e))return"";var t=x(e),r=y?D(t,7,-1):w(t,b,"$1");return""===r?void 0:r}}),n({global:!0,constructor:!0,forced:!0},{Symbol:v})}},1510:(e,t,r)=>{"use strict";var n=r(6518),i=r(7751),a=r(9297),o=r(655),u=r(5745),s=r(1296),c=u("string-to-symbol-registry"),f=u("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!s},{for:function(e){var t=o(e);if(a(c,t))return c[t];var r=i("Symbol")(t);return c[t]=r,f[r]=t,r}})},2259:(e,t,r)=>{"use strict";r(5749)("iterator")},2675:(e,t,r)=>{"use strict";r(6761),r(1510),r(7812),r(3110),r(9773)},7812:(e,t,r)=>{"use strict";var n=r(6518),i=r(9297),a=r(757),o=r(6823),u=r(5745),s=r(1296),c=u("symbol-to-string-registry");n({target:"Symbol",stat:!0,forced:!s},{keyFor:function(e){if(!a(e))throw new TypeError(o(e)+" is not a symbol");if(i(c,e))return c[e]}})},3500:(e,t,r)=>{"use strict";var n=r(4475),i=r(7400),a=r(9296),o=r(235),u=r(6699),s=function(e){if(e&&e.forEach!==o)try{u(e,"forEach",o)}catch(t){e.forEach=o}};for(var c in i)i[c]&&s(n[c]&&n[c].prototype);s(a)},2953:(e,t,r)=>{"use strict";var n=r(4475),i=r(7400),a=r(9296),o=r(3792),u=r(6699),s=r(687),c=r(8227)("iterator"),f=o.values,l=function(e,t){if(e){if(e[c]!==f)try{u(e,c,f)}catch(t){e[c]=f}if(s(e,t,!0),i[t])for(var r in o)if(e[r]!==o[r])try{u(e,r,o[r])}catch(t){e[r]=o[r]}}};for(var p in i)l(n[p]&&n[p].prototype,p);l(a,"DOMTokenList")},2369:function(e){e.exports=function(){"use strict";function e(){return!0}function t(){return!1}function r(){}const n="Argument is not a typed-function.";return function i(){function a(e){return"object"==typeof e&&null!==e&&e.constructor===Object}const o=[{name:"number",test:function(e){return"number"==typeof e}},{name:"string",test:function(e){return"string"==typeof e}},{name:"boolean",test:function(e){return"boolean"==typeof e}},{name:"Function",test:function(e){return"function"==typeof e}},{name:"Array",test:Array.isArray},{name:"Date",test:function(e){return e instanceof Date}},{name:"RegExp",test:function(e){return e instanceof RegExp}},{name:"Object",test:a},{name:"null",test:function(e){return null===e}},{name:"undefined",test:function(e){return void 0===e}}],u={name:"any",test:e,isAny:!0};let s,c,f=0,l={createCount:0};function p(e){const t=s.get(e);if(t)return t;let r='Unknown type "'+e+'"';const n=e.toLowerCase();let i;for(i of c)if(i.toLowerCase()===n){r+='. Did you mean "'+i+'" ?';break}throw new TypeError(r)}function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"any";const r=t?p(t).index:c.length,n=[];for(let t=0;t{const r=s.get(t);return!r.isAny&&r.test(e)}));return t.length?t:["any"]}function v(e){return e&&"function"==typeof e&&"_typedFunctionData"in e}function y(e,t,r){if(!v(e))throw new TypeError(n);const i=r&&r.exact,a=D(Array.isArray(t)?t.join(","):t),o=g(a);if(!i||o in e.signatures){const t=e._typedFunctionData.signatureMap.get(o);if(t)return t}const u=a.length;let s,c;if(i){let t;for(t in s=[],e.signatures)s.push(e._typedFunctionData.signatureMap.get(t))}else s=e._typedFunctionData.signatures;for(let e=0;e!e.has(t.name))))continue}r.push(n)}}if(s=r,0===s.length)break}for(c of s)if(c.params.length<=u)return c;throw new TypeError("Signature not found (signature: "+(e.name||"unnamed")+"("+g(a,", ")+"))")}function g(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:",";return e.map((e=>e.name)).join(t)}function x(e){const t=0===e.indexOf("..."),r=(t?e.length>3?e.slice(3):"any":e).split("|").map((e=>p(e.trim())));let n=!1,i=t?"...":"";return{types:r.map((function(e){return n=e.isAny||n,i+=e.name+"|",{name:e.name,typeIndex:e.index,test:e.test,isAny:e.isAny,conversion:null,conversionIndex:-1}})),name:i.slice(0,-1),hasAny:n,hasConversion:!1,restParam:t}}function b(e){const t=function(e){if(0===e.length)return[];const t=e.map(p);e.length>1&&t.sort(((e,t)=>e.index-t.index));let r=t[0].conversionsTo;if(1===e.length)return r;r=r.concat([]);const n=new Set(e);for(let e=1;ee.name)));let r=e.hasAny,n=e.name;const i=t.map((function(e){const t=p(e.from);return r=t.isAny||r,n+="|"+e.from,{name:e.from,typeIndex:t.index,test:t.test,isAny:t.isAny,conversion:e,conversionIndex:e.index}}));return{types:e.types.concat(i),name:n,hasAny:r,hasConversion:i.length>0,restParam:e.restParam}}function w(e){return e.typeSet||(e.typeSet=new Set,e.types.forEach((t=>e.typeSet.add(t.name)))),e.typeSet}function D(e){const t=[];if("string"!=typeof e)throw new TypeError("Signatures must be strings");const r=e.trim();if(""===r)return t;const n=r.split(",");for(let e=0;e=r+1}}return 0===e.length?function(e){return 0===e.length}:1===e.length?(r=E(e[0]),function(e){return r(e[0])&&1===e.length}):2===e.length?(r=E(e[0]),n=E(e[1]),function(e){return r(e[0])&&n(e[1])&&2===e.length}):(t=e.map(E),function(e){for(let r=0;r{const n=C(e.params,t);let i;for(i of n)r.add(i)})),r.has("any")?["any"]:Array.from(r)}function O(e,t,r){let n,i;const a=e||"unnamed";let o,u=r;for(o=0;o{const n=E(S(r.params,o));(o0){const e=d(t[o]);return n=new TypeError("Unexpected type of argument in function "+a+" (expected: "+i.join(" or ")+", actual: "+e.join(" | ")+", index: "+o+")"),n.data={category:"wrongType",fn:a,index:o,actual:e,expected:i},n}}else u=e}const s=u.map((function(e){return N(e.params)?1/0:e.params.length}));if(t.lengthc)return n=new TypeError("Too many arguments in function "+a+" (expected: "+c+", actual: "+t.length+")"),n.data={category:"tooManyArgs",fn:a,index:t.length,expectedLength:c},n;const f=[];for(let e=0;e0)return 1;const n=_(e)-_(t);return n<0?-1:n>0?1:0}function k(e,t){const r=e.params,n=t.params,i=H(r),a=H(n),o=N(r),u=N(n);if(o&&i.hasAny){if(!u||!a.hasAny)return 1}else if(u&&a.hasAny)return-1;let s,c=0,f=0;for(s of r)s.hasAny&&++c,s.hasConversion&&++f;let l=0,p=0;for(s of n)s.hasAny&&++l,s.hasConversion&&++p;if(c!==l)return c-l;if(o&&i.hasConversion){if(!u||!a.hasConversion)return 1}else if(u&&a.hasConversion)return-1;if(f!==p)return f-p;if(o){if(!u)return 1}else if(u)return-1;const m=(r.length-n.length)*(o?-1:1);if(0!==m)return m;const h=[];let d,v=0;for(let e=0;ee.hasConversion))){const n=N(e),i=e.map(z);r=function(){const e=[],r=n?arguments.length-1:arguments.length;for(let t=0;te.name)).join("|"),hasAny:e.some((e=>e.isAny)),hasConversion:!1,restParam:!0}),u.push(o)}else u=o.types.map((function(e){return{types:[e],name:e.name,hasAny:e.isAny,hasConversion:e.conversion,restParam:!1}}));return i=u,a=function(i){return e(t,r+1,n.concat([i]))},Array.prototype.concat.apply([],i.map(a))}var i,a;return[n]}(e,0,[])}function q(e,t){const r=Math.max(e.length,t.length);for(let n=0;n=n:o?n>=i:n===i}function j(e,t,r){const n=[];let i;for(i of e){let e=r[i];if("number"!=typeof e)throw new TypeError('No definition for referenced signature "'+i+'"');if(e=t[e],"function"!=typeof e)return!1;n.push(e)}return n}function P(e,t,r){const n=function(e){return e.map((e=>Y(e)?Z(e.referToSelf.callback):W(e)?V(e.referTo.references,e.referTo.callback):e))}(e),i=new Array(n.length).fill(!1);let a=!0;for(;a;){a=!1;let e=!0;for(let o=0;o{const n=e[r];if(t.test(n.toString()))throw new SyntaxError("Using `this` to self-reference a function is deprecated since typed-function@3. Use typed.referTo and typed.referToSelf instead.")}))}(n);const i=[],a=[],o={},u=[];let s;for(s in n){if(!Object.prototype.hasOwnProperty.call(n,s))continue;const e=D(s);if(!e)continue;i.forEach((function(t){if(q(t,e))throw new TypeError('Conflicting signatures "'+g(t)+'" and "'+g(e)+'".')})),i.push(e);const t=a.length;a.push(n[s]);const r=e.map(b);let c;for(c of R(r)){const e=g(c);u.push({params:c,name:e,fn:t}),c.every((e=>!e.hasConversion))&&(o[e]=t)}}u.sort(k);const c=P(a,o,ue);let f;for(f in o)Object.prototype.hasOwnProperty.call(o,f)&&(o[f]=c[o[f]]);const p=[],m=new Map;for(f of u)m.has(f.name)||(f.fn=c[f.fn],p.push(f),m.set(f.name,f));const h=p[0]&&p[0].params.length<=2&&!N(p[0].params),d=p[1]&&p[1].params.length<=2&&!N(p[1].params),v=p[2]&&p[2].params.length<=2&&!N(p[2].params),y=p[3]&&p[3].params.length<=2&&!N(p[3].params),x=p[4]&&p[4].params.length<=2&&!N(p[4].params),w=p[5]&&p[5].params.length<=2&&!N(p[5].params),S=h&&d&&v&&y&&x&&w;for(let e=0;ee.test)),ae=p.map((e=>e.implementation)),oe=function(){for(let e=re;eg(D(e)))),t=H(arguments);if("function"!=typeof t)throw new TypeError("Callback function expected as last argument");return V(e,t)},l.referToSelf=Z,l.convert=function(e,t){const r=p(t);if(r.test(e))return e;const n=r.conversionsTo;if(0===n.length)throw new Error("There are no conversions to "+t+" defined.");for(let t=0;tt.from===e.from));if(!r)throw new Error("Attempt to remove nonexistent conversion from "+e.from+" to "+e.to);if(r.convert!==e.convert)throw new Error("Conversion to remove does not match existing conversion");const n=t.conversionsTo.indexOf(r);t.conversionsTo.splice(n,1)},l.resolve=function(e,t){if(!v(e))throw new TypeError(n);const r=e._typedFunctionData.signatures;for(let e=0;e{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},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.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};return(()=>{"use strict";r.d(n,{default:()=>Bg});var e={};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 i(e){return"number"==typeof e}function a(e){return!(!e||"object"!==t(e)||"function"!=typeof e.constructor)&&(!0===e.isBigNumber&&"object"===t(e.constructor.prototype)&&!0===e.constructor.prototype.isBigNumber||"function"==typeof e.constructor.isDecimal&&!0===e.constructor.isDecimal(e))}function o(e){return e&&"object"===t(e)&&!0===Object.getPrototypeOf(e).isComplex||!1}function u(e){return e&&"object"===t(e)&&!0===Object.getPrototypeOf(e).isFraction||!1}function s(e){return e&&!0===e.constructor.prototype.isUnit||!1}function c(e){return"string"==typeof e}r.r(e),r.d(e,{createAbs:()=>ha,createAccessorNode:()=>Sp,createAcos:()=>zf,createAcosh:()=>tl,createAcot:()=>nl,createAcoth:()=>al,createAcsc:()=>ul,createAcsch:()=>cl,createAdd:()=>op,createAddScalar:()=>xa,createAnd:()=>Tc,createAndTransform:()=>Ng,createApply:()=>va,createApplyTransform:()=>Yy,createArg:()=>au,createArrayNode:()=>Op,createAsec:()=>ll,createAsech:()=>ml,createAsin:()=>dl,createAsinh:()=>vl,createAssignmentNode:()=>Pp,createAtan:()=>yl,createAtan2:()=>xl,createAtanh:()=>wl,createAtomicMass:()=>Sy,createAvogadro:()=>Cy,createBellNumbers:()=>Xd,createBigNumberClass:()=>Lr,createBignumber:()=>Mi,createBin:()=>Us,createBitAnd:()=>Xo,createBitAndTransform:()=>Ag,createBitNot:()=>Ko,createBitOr:()=>tu,createBitOrTransform:()=>Sg,createBitXor:()=>iu,createBlockNode:()=>Hp,createBohrMagneton:()=>oy,createBohrRadius:()=>py,createBoltzmann:()=>My,createBoolean:()=>Ci,createCatalan:()=>Kd,createCbrt:()=>Na,createCeil:()=>Ta,createChain:()=>Ch,createChainClass:()=>bh,createClassicalElectronRadius:()=>my,createClone:()=>$n,createColumn:()=>wu,createColumnTransform:()=>Jy,createCombinations:()=>hd,createCombinationsWithRep:()=>yd,createCompare:()=>Bc,createCompareNatural:()=>Rc,createCompareText:()=>Pc,createCompile:()=>Zm,createComplex:()=>Fi,createComplexClass:()=>$r,createComposition:()=>tv,createConcat:()=>xu,createConcatTransform:()=>lg,createConditionalNode:()=>Wp,createConductanceQuantum:()=>uy,createConj:()=>uu,createConstantNode:()=>am,createCorr:()=>fd,createCos:()=>Nl,createCosh:()=>Al,createCot:()=>Sl,createCoth:()=>Ml,createCoulomb:()=>iy,createCount:()=>Nu,createCreateUnit:()=>kf,createCross:()=>Au,createCsc:()=>Fl,createCsch:()=>Tl,createCtranspose:()=>xs,createCube:()=>Ba,createCumSum:()=>Xh,createCumSumTransform:()=>gg,createDeepEqual:()=>of,createDenseMatrixClass:()=>Ln,createDerivative:()=>xv,createDet:()=>Mh,createDeuteronMass:()=>xy,createDiag:()=>Cu,createDiff:()=>Gu,createDiffTransform:()=>mg,createDistance:()=>Zh,createDivide:()=>Gh,createDivideScalar:()=>ec,createDot:()=>lp,createDotDivide:()=>mc,createDotMultiply:()=>Bo,createDotPow:()=>lc,createE:()=>qv,createEfimovFactor:()=>Ay,createEigs:()=>kh,createElectricConstant:()=>ry,createElectronMass:()=>hy,createElementaryCharge:()=>ay,createEqual:()=>Uc,createEqualScalar:()=>wi,createEqualText:()=>Gc,createErf:()=>Cs,createEvaluate:()=>Ym,createExp:()=>ka,createExpm:()=>zh,createExpm1:()=>za,createFactorial:()=>Od,createFalse:()=>_v,createFaraday:()=>Fy,createFermiCoupling:()=>dy,createFft:()=>Ds,createFibonacciHeapClass:()=>xf,createFilter:()=>Fu,createFilterTransform:()=>Qy,createFineStructure:()=>vy,createFirstRadiation:()=>Oy,createFix:()=>Pa,createFlatten:()=>_u,createFloor:()=>Ha,createForEach:()=>ku,createForEachTransform:()=>eg,createFormat:()=>Ls,createFraction:()=>Oi,createFractionClass:()=>Gr,createFreqz:()=>Av,createFunctionAssignmentNode:()=>fm,createFunctionNode:()=>$m,createGamma:()=>Sd,createGasConstant:()=>_y,createGcd:()=>uo,createGetMatrixDataType:()=>Ru,createGravitationConstant:()=>Qv,createGravity:()=>Ly,createHartreeEnergy:()=>yy,createHasNumericValue:()=>ci,createHelp:()=>Ah,createHelpClass:()=>xh,createHex:()=>Hs,createHypot:()=>sp,createI:()=>Vv,createIdentity:()=>ju,createIfft:()=>Es,createIm:()=>su,createImmutableDenseMatrixClass:()=>vf,createIndex:()=>hp,createIndexClass:()=>yf,createIndexNode:()=>hm,createIndexTransform:()=>tg,createInfinity:()=>kv,createIntersect:()=>Wh,createInv:()=>Fh,createInverseConductanceQuantum:()=>sy,createInvmod:()=>Oo,createIsInteger:()=>Qn,createIsNaN:()=>di,createIsNegative:()=>ai,createIsNumeric:()=>ui,createIsPositive:()=>li,createIsPrime:()=>Xs,createIsZero:()=>mi,createKldivergence:()=>_d,createKlitzing:()=>ly,createKron:()=>Lu,createLN10:()=>Lv,createLN2:()=>Pv,createLOG10E:()=>$v,createLOG2E:()=>Uv,createLarger:()=>Kc,createLargerEq:()=>rf,createLcm:()=>co,createLeafCount:()=>nv,createLeftShift:()=>Sc,createLgamma:()=>Md,createLog:()=>ac,createLog10:()=>lo,createLog1p:()=>uc,createLog2:()=>mo,createLoschmidt:()=>Ty,createLsolve:()=>vc,createLsolveAll:()=>bc,createLup:()=>Km,createLusolve:()=>vh,createLyap:()=>Hh,createMad:()=>rd,createMagneticConstant:()=>ty,createMagneticFluxQuantum:()=>cy,createMap:()=>Uu,createMapTransform:()=>rg,createMatrix:()=>_i,createMatrixClass:()=>Zr,createMatrixFromColumns:()=>Pi,createMatrixFromFunction:()=>ki,createMatrixFromRows:()=>Ri,createMax:()=>hf,createMaxTransform:()=>ag,createMean:()=>Kh,createMeanTransform:()=>og,createMedian:()=>td,createMin:()=>df,createMinTransform:()=>ug,createMod:()=>Qa,createMode:()=>zs,createMolarMass:()=>jy,createMolarMassC12:()=>Py,createMolarPlanckConstant:()=>By,createMolarVolume:()=>ky,createMultinomial:()=>kd,createMultiply:()=>yo,createMultiplyScalar:()=>ho,createNaN:()=>Iv,createNeutronMass:()=>by,createNode:()=>vp,createNorm:()=>fp,createNot:()=>du,createNthRoot:()=>xo,createNthRoots:()=>cc,createNuclearMagneton:()=>fy,createNull:()=>Bv,createNumber:()=>Ni,createNumeric:()=>Qs,createObjectNode:()=>gm,createOct:()=>$s,createOnes:()=>Vu,createOperatorNode:()=>Nm,createOr:()=>vu,createOrTransform:()=>Eg,createParenthesisNode:()=>Cm,createParse:()=>Gm,createParser:()=>Qm,createParserClass:()=>Jm,createPartitionSelect:()=>lf,createPermutations:()=>zd,createPhi:()=>jv,createPi:()=>zv,createPickRandom:()=>Ud,createPinv:()=>Th,createPlanckCharge:()=>Gy,createPlanckConstant:()=>Kv,createPlanckLength:()=>Uy,createPlanckMass:()=>$y,createPlanckTemperature:()=>Vy,createPlanckTime:()=>Hy,createPolynomialRoot:()=>gh,createPow:()=>tc,createPrint:()=>Zs,createPrintTransform:()=>Dg,createProd:()=>js,createProtonMass:()=>gy,createQr:()=>eh,createQuantileSeq:()=>ud,createQuantileSeqTransform:()=>vg,createQuantumOfCirculation:()=>wy,createRandom:()=>Gd,createRandomInt:()=>Zd,createRange:()=>Xu,createRangeClass:()=>Vr,createRangeNode:()=>Tm,createRangeTransform:()=>sg,createRationalize:()=>wv,createRe:()=>cu,createReducedPlanckConstant:()=>ey,createRelationalNode:()=>Im,createReplacer:()=>Cv,createReshape:()=>Ku,createResize:()=>es,createResolve:()=>dv,createResultSet:()=>it,createReviver:()=>Sv,createRightArithShift:()=>Mc,createRightLogShift:()=>Oc,createRotate:()=>rs,createRotationMatrix:()=>is,createRound:()=>ic,createRow:()=>as,createRowTransform:()=>cg,createRydberg:()=>Dy,createSQRT1_2:()=>Hv,createSQRT2:()=>Gv,createSackurTetrode:()=>Iy,createSchur:()=>Uh,createSec:()=>_l,createSech:()=>kl,createSecondRadiation:()=>zy,createSetCartesian:()=>Ll,createSetDifference:()=>$l,createSetDistinct:()=>Gl,createSetIntersect:()=>Zl,createSetIsSubset:()=>Yl,createSetMultiplicity:()=>Xl,createSetPowerset:()=>Kl,createSetSize:()=>tp,createSetSymDifference:()=>np,createSetUnion:()=>ap,createSign:()=>wo,createSimplify:()=>cv,createSimplifyConstant:()=>pv,createSimplifyCore:()=>hv,createSin:()=>Il,createSinh:()=>Rl,createSize:()=>us,createSlu:()=>mh,createSmaller:()=>Zc,createSmallerEq:()=>Jc,createSolveODE:()=>Ss,createSort:()=>mf,createSpaClass:()=>bf,createSparse:()=>_f,createSparseMatrixClass:()=>Di,createSpeedOfLight:()=>Xv,createSplitUnit:()=>Ui,createSqrt:()=>Do,createSqrtm:()=>qh,createSquare:()=>Eo,createSqueeze:()=>cs,createStd:()=>sd,createStdTransform:()=>hg,createStefanBoltzmann:()=>Ry,createStirlingS2:()=>Yd,createString:()=>Ai,createSubset:()=>ls,createSubsetTransform:()=>fg,createSubtract:()=>So,createSubtractScalar:()=>wa,createSum:()=>Yh,createSumTransform:()=>dg,createSylvester:()=>Ph,createSymbolNode:()=>qm,createSymbolicEqual:()=>yv,createTan:()=>ql,createTanh:()=>jl,createTau:()=>Rv,createThomsonCrossSection:()=>Ny,createTo:()=>Ys,createTrace:()=>pp,createTranspose:()=>ys,createTrue:()=>Tv,createTypeOf:()=>yi,createTyped:()=>Qe,createUnaryMinus:()=>la,createUnaryPlus:()=>ma,createUnequal:()=>sf,createUnitClass:()=>Mf,createUnitFunction:()=>Of,createUppercaseE:()=>Wv,createUppercasePi:()=>Zv,createUsolve:()=>gc,createUsolveAll:()=>Dc,createVacuumImpedance:()=>ny,createVariance:()=>ad,createVarianceTransform:()=>bg,createVersion:()=>Yv,createWeakMixingAngle:()=>Ey,createWienDisplacement:()=>qy,createXgcd:()=>Mo,createXor:()=>yu,createZeros:()=>ws,createZeta:()=>ks,createZpk2tf:()=>Nv}),r(4423),r(5086),r(2892),r(6099),r(7495),r(906),r(1699),r(4346),r(3288),r(2010),r(875),r(4864),r(7465),r(7745),r(8781);var f=Array.isArray;function l(e){return e&&!0===e.constructor.prototype.isMatrix||!1}function p(e){return Array.isArray(e)||l(e)}function m(e){return e&&e.isDenseMatrix&&!0===e.constructor.prototype.isMatrix||!1}function h(e){return e&&e.isSparseMatrix&&!0===e.constructor.prototype.isMatrix||!1}function d(e){return e&&!0===e.constructor.prototype.isRange||!1}function v(e){return e&&!0===e.constructor.prototype.isIndex||!1}function y(e){return"boolean"==typeof e}function g(e){return e&&!0===e.constructor.prototype.isResultSet||!1}function x(e){return e&&!0===e.constructor.prototype.isHelp||!1}function b(e){return"function"==typeof e}function w(e){return e instanceof Date}function D(e){return e instanceof RegExp}function N(e){return!(!e||"object"!==t(e)||e.constructor!==Object||o(e)||u(e))}function E(e){return null===e}function A(e){return void 0===e}function S(e){return e&&!0===e.isAccessorNode&&!0===e.constructor.prototype.isNode||!1}function C(e){return e&&!0===e.isArrayNode&&!0===e.constructor.prototype.isNode||!1}function M(e){return e&&!0===e.isAssignmentNode&&!0===e.constructor.prototype.isNode||!1}function F(e){return e&&!0===e.isBlockNode&&!0===e.constructor.prototype.isNode||!1}function O(e){return e&&!0===e.isConditionalNode&&!0===e.constructor.prototype.isNode||!1}function T(e){return e&&!0===e.isConstantNode&&!0===e.constructor.prototype.isNode||!1}function _(e){return T(e)||q(e)&&1===e.args.length&&T(e.args[0])&&"-+~".includes(e.op)}function B(e){return e&&!0===e.isFunctionAssignmentNode&&!0===e.constructor.prototype.isNode||!1}function k(e){return e&&!0===e.isFunctionNode&&!0===e.constructor.prototype.isNode||!1}function I(e){return e&&!0===e.isIndexNode&&!0===e.constructor.prototype.isNode||!1}function z(e){return e&&!0===e.isNode&&!0===e.constructor.prototype.isNode||!1}function R(e){return e&&!0===e.isObjectNode&&!0===e.constructor.prototype.isNode||!1}function q(e){return e&&!0===e.isOperatorNode&&!0===e.constructor.prototype.isNode||!1}function j(e){return e&&!0===e.isParenthesisNode&&!0===e.constructor.prototype.isNode||!1}function P(e){return e&&!0===e.isRangeNode&&!0===e.constructor.prototype.isNode||!1}function L(e){return e&&!0===e.isRelationalNode&&!0===e.constructor.prototype.isNode||!1}function U(e){return e&&!0===e.isSymbolNode&&!0===e.constructor.prototype.isNode||!1}function $(e){return e&&!0===e.constructor.prototype.isChain||!1}function H(e){var r=t(e);return"object"===r?null===e?"null":a(e)?"BigNumber":e.constructor&&e.constructor.name?e.constructor.name:"Object":r}var G=r(2369);function V(e){return"boolean"==typeof e||!!isFinite(e)&&e===Math.round(e)}r(8706),r(5276),r(8598),r(2062),r(4782),r(4554),r(3153),r(2326),r(6389),r(4444),r(7762),r(5070),r(5376),r(6624),r(1367),r(5914),r(8553),r(8690),r(5374),r(8459),r(8940),r(1761),r(5440);var Z=Math.sign||function(e){return e>0?1:e<0?-1:0},W=Math.log2||function(e){return Math.log(e)/Math.LN2},Y=Math.log10||function(e){return Math.log(e)/Math.LN10},J=Math.log1p||function(e){return Math.log(e+1)},X=Math.cbrt||function(e){if(0===e)return e;var t,r=e<0;return r&&(e=-e),t=isFinite(e)?(e/((t=Math.exp(Math.log(e)/3))*t)+2*t)/3:e,r?-t:t},Q=Math.expm1||function(e){return e>=2e-4||e<=-2e-4?Math.exp(e)-1:e+e*e/2+e*e*e/6};function K(e,t,r){var n={2:"0b",8:"0o",16:"0x"}[t],i="";if(r){if(r<1)throw new Error("size must be in greater than 0");if(!V(r))throw new Error("size must be an integer");if(e>Math.pow(2,r-1)-1||e<-Math.pow(2,r-1))throw new Error("Value must be in range [-2^".concat(r-1,", 2^").concat(r-1,"-1]"));if(!V(e))throw new Error("Value must be an integer");e<0&&(e+=Math.pow(2,r)),i="i".concat(r)}var a="";return e<0&&(e=-e,a="-"),"".concat(a).concat(n).concat(e.toString(t)).concat(i)}function ee(e,t){if("function"==typeof t)return t(e);if(e===1/0)return"Infinity";if(e===-1/0)return"-Infinity";if(isNaN(e))return"NaN";var r=te(t),n=r.notation,a=r.precision,o=r.wordSize;switch(n){case"fixed":return ne(e,a);case"exponential":return ie(e,a);case"engineering":return function(e,t){if(isNaN(e)||!isFinite(e))return String(e);var r=ae(re(e),t),n=r.exponent,a=r.coefficients,o=n%3==0?n:n<0?n-3-n%3:n-n%3;if(i(t))for(;t>a.length||n-o+1>a.length;)a.push(0);else for(var u=Math.abs(n-o)-(a.length-1),s=0;s0;)f++,c--;var l=a.slice(f).join(""),p=i(t)&&l.length||l.match(/[1-9]/)?"."+l:"",m=a.slice(0,f).join("")+p+"e"+(n>=0?"+":"")+o.toString();return r.sign+m}(e,a);case"bin":return K(e,2,o);case"oct":return K(e,8,o);case"hex":return K(e,16,o);case"auto":return function(e,t,r){if(isNaN(e)||!isFinite(e))return String(e);var n=ve(null==r?void 0:r.lowerExp,-3),i=ve(null==r?void 0:r.upperExp,5),a=re(e),o=t?ae(a,t):a;if(o.exponent=i)return ie(e,t);var u=o.coefficients,s=o.exponent;u.length0?s:0;return c<(u=oe(-s).concat(u)).length-1&&u.splice(c+1,0,"."),o.sign+u.join("")}(e,a,t).replace(/((\.\d*?)(0+))($|e)/,(function(){var e=arguments[2],t=arguments[4];return"."!==e?e+t:t}));default:throw new Error('Unknown notation "'+n+'". Choose "auto", "exponential", "fixed", "bin", "oct", or "hex.')}}function te(e){var t,r,n="auto";if(void 0!==e)if(i(e))t=e;else if(a(e))t=e.toNumber();else{if(!N(e))throw new Error("Unsupported type of options, number, BigNumber, or object expected");void 0!==e.precision&&(t=de(e.precision,(function(){throw new Error('Option "precision" must be a number or BigNumber')}))),void 0!==e.wordSize&&(r=de(e.wordSize,(function(){throw new Error('Option "wordSize" must be a number or BigNumber')}))),e.notation&&(n=e.notation)}return{notation:n,precision:t,wordSize:r}}function re(e){var t=String(e).toLowerCase().match(/^(-?)(\d+\.?\d*)(e([+-]?\d+))?$/);if(!t)throw new SyntaxError("Invalid number "+e);var r=t[1],n=t[2],i=parseFloat(t[4]||"0"),a=n.indexOf(".");i+=-1!==a?a-1:n.length-1;var o=n.replace(".","").replace(/^0*/,(function(e){return i-=e.length,""})).replace(/0*$/,"").split("").map((function(e){return parseInt(e)}));return 0===o.length&&(o.push(0),i++),{sign:r,coefficients:o,exponent:i}}function ne(e,t){if(isNaN(e)||!isFinite(e))return String(e);var r=re(e),n="number"==typeof t?ae(r,r.exponent+1+t):r,i=n.coefficients,a=n.exponent+1,o=a+(t||0);return i.length0?"."+i.join(""):"")+"e"+(a>=0?"+":"")+a}function ae(e,t){for(var r={sign:e.sign,coefficients:e.coefficients,exponent:e.exponent},n=r.coefficients;t<=0;)n.unshift(0),r.exponent++,t++;if(n.length>t&&n.splice(t,n.length-t)[0]>=5){var i=t-1;for(n[i]++;10===n[i];)n.pop(),0===i&&(n.unshift(0),r.exponent++,i++),n[--i]++}return r}function oe(e){for(var t=[],r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}function He(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r15)throw new TypeError("Cannot implicitly convert a number with >15 significant digits to BigNumber (value: "+e+"). Use function bignumber(x) to convert to BigNumber.");return new t(e)}},{from:"number",to:"Complex",convert:function(e){return r||et(e),new r(e,0)}},{from:"BigNumber",to:"Complex",convert:function(e){return r||et(e),new r(e.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(e){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(e){return r||et(e),new r(e.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(e){_||tt(e);var t=new _(e);if(t.valueOf()!==e)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+e+"). Use function fraction(x) to convert to Fraction.");return t}},{from:"string",to:"number",convert:function(e){var t=Number(e);if(isNaN(t))throw new Error('Cannot convert "'+e+'" to a number');return t}},{from:"string",to:"BigNumber",convert:function(e){t||Ke(e);try{return new t(e)}catch(t){throw new Error('Cannot convert "'+e+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(e){_||tt(e);try{return new _(e)}catch(t){throw new Error('Cannot convert "'+e+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(e){r||et(e);try{return new r(e)}catch(t){throw new Error('Cannot convert "'+e+'" to Complex')}}},{from:"boolean",to:"number",convert:function(e){return+e}},{from:"boolean",to:"BigNumber",convert:function(e){return t||Ke(e),new t(+e)}},{from:"boolean",to:"Fraction",convert:function(e){return _||tt(e),new _(+e)}},{from:"boolean",to:"string",convert:function(e){return String(e)}},{from:"Array",to:"Matrix",convert:function(e){return n||function(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}(),new n(e)}},{from:"Matrix",to:"Array",convert:function(e){return e.valueOf()}}]),H.onMismatch=function(e,t,r){var n=H.createError(e,t,r);if(["wrongType","mismatch"].includes(n.data.category)&&1===t.length&&p(t[0])&&r.some((function(e){return!e.params.includes(",")}))){var i=new TypeError("Function '".concat(e,"' doesn't apply to matrices. To call it ")+"elementwise on a matrix 'M', try 'map(M, ".concat(e,")'."));throw i.data=n.data,i}throw n},H.onMismatch=function(e,t,r){var n=H.createError(e,t,r);if(["wrongType","mismatch"].includes(n.data.category)&&1===t.length&&p(t[0])&&r.some((function(e){return!e.params.includes(",")}))){var i=new TypeError("Function '".concat(e,"' doesn't apply to matrices. To call it ")+"elementwise on a matrix 'M', try 'map(M, ".concat(e,")'."));throw i.data=n.data,i}throw n},H}));function Ke(e){throw new Error("Cannot convert value ".concat(e," into a BigNumber: no class 'BigNumber' provided"))}function et(e){throw new Error("Cannot convert value ".concat(e," into a Complex number: no class 'Complex' provided"))}function tt(e){throw new Error("Cannot convert value ".concat(e," into a Fraction, no class 'Fraction' provided."))}r(739);var rt,nt,it=Se("ResultSet",[],(function(){function e(t){if(!(this instanceof e))throw new SyntaxError("Constructor must be called with the new operator");this.entries=t||[]}return e.prototype.type="ResultSet",e.prototype.isResultSet=!0,e.prototype.valueOf=function(){return this.entries},e.prototype.toString=function(){return"["+this.entries.join(", ")+"]"},e.prototype.toJSON=function(){return{mathjs:"ResultSet",entries:this.entries}},e.fromJSON=function(t){return new e(t.entries)},e}),{isClass:!0}),at=(r(9904),9e15),ot=1e9,ut="0123456789abcdef",st="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ct="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ft={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-at,maxE:at,crypto:!1},lt=!0,pt="[DecimalError] ",mt=pt+"Invalid argument: ",ht=pt+"Precision limit exceeded",dt=pt+"crypto unavailable",vt="[object Decimal]",yt=Math.floor,gt=Math.pow,xt=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,bt=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,wt=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Dt=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Nt=1e7,Et=7,At=st.length-1,St=ct.length-1,Ct={toStringTag:vt};function Mt(e){var t,r,n,i=e.length-1,a="",o=e[0];if(i>0){for(a+=o,t=1;tr)throw Error(mt+e)}function Ot(e,t,r,n){var i,a,o,u;for(a=e[0];a>=10;a/=10)--t;return--t<0?(t+=Et,i=0):(i=Math.ceil((t+1)/Et),t%=Et),a=gt(10,Et-t),u=e[i]%a|0,null==n?t<3?(0==t?u=u/100|0:1==t&&(u=u/10|0),o=r<4&&99999==u||r>3&&49999==u||5e4==u||0==u):o=(r<4&&u+1==a||r>3&&u+1==a/2)&&(e[i+1]/a/100|0)==gt(10,t-2)-1||(u==a/2||0==u)&&0==(e[i+1]/a/100|0):t<4?(0==t?u=u/1e3|0:1==t?u=u/100|0:2==t&&(u=u/10|0),o=(n||r<4)&&9999==u||!n&&r>3&&4999==u):o=((n||r<4)&&u+1==a||!n&&r>3&&u+1==a/2)&&(e[i+1]/a/1e3|0)==gt(10,t-3)-1,o}function Tt(e,t,r){for(var n,i,a=[0],o=0,u=e.length;or-1&&(void 0===a[n+1]&&(a[n+1]=0),a[n+1]+=a[n]/r|0,a[n]%=r)}return a.reverse()}Ct.absoluteValue=Ct.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),Bt(e)},Ct.ceil=function(){return Bt(new this.constructor(this),this.e+1,2)},Ct.clampedTo=Ct.clamp=function(e,t){var r=this,n=r.constructor;if(e=new n(e),t=new n(t),!e.s||!t.s)return new n(NaN);if(e.gt(t))throw Error(mt+t);return r.cmp(e)<0?e:r.cmp(t)>0?t:new n(r)},Ct.comparedTo=Ct.cmp=function(e){var t,r,n,i,a=this,o=a.d,u=(e=new a.constructor(e)).d,s=a.s,c=e.s;if(!o||!u)return s&&c?s!==c?s:o===u?0:!o^s<0?1:-1:NaN;if(!o[0]||!u[0])return o[0]?s:u[0]?-c:0;if(s!==c)return s;if(a.e!==e.e)return a.e>e.e^s<0?1:-1;for(t=0,r=(n=o.length)<(i=u.length)?n:i;tu[t]^s<0?1:-1;return n===i?0:n>i^s<0?1:-1},Ct.cosine=Ct.cos=function(){var e,t,r=this,n=r.constructor;return r.d?r.d[0]?(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+Et,n.rounding=1,r=function(e,t){var r,n,i;if(t.isZero())return t;(n=t.d.length)<32?i=(1/Yt(4,r=Math.ceil(n/3))).toString():(r=16,i="2.3283064365386962890625e-10"),e.precision+=r,t=Wt(e,1,t.times(i),new e(1));for(var a=r;a--;){var o=t.times(t);t=o.times(o).minus(o).times(8).plus(1)}return e.precision-=r,t}(n,Jt(n,r)),n.precision=e,n.rounding=t,Bt(2==nt||3==nt?r.neg():r,e,t,!0)):new n(1):new n(NaN)},Ct.cubeRoot=Ct.cbrt=function(){var e,t,r,n,i,a,o,u,s,c,f=this,l=f.constructor;if(!f.isFinite()||f.isZero())return new l(f);for(lt=!1,(a=f.s*gt(f.s*f,1/3))&&Math.abs(a)!=1/0?n=new l(a.toString()):(r=Mt(f.d),(a=((e=f.e)-r.length+1)%3)&&(r+=1==a||-2==a?"0":"00"),a=gt(r,1/3),e=yt((e+1)/3)-(e%3==(e<0?-1:2)),(n=new l(r=a==1/0?"5e"+e:(r=a.toExponential()).slice(0,r.indexOf("e")+1)+e)).s=f.s),o=(e=l.precision)+3;;)if(c=(s=(u=n).times(u).times(u)).plus(f),n=_t(c.plus(f).times(u),c.plus(s),o+2,1),Mt(u.d).slice(0,o)===(r=Mt(n.d)).slice(0,o)){if("9999"!=(r=r.slice(o-3,o+1))&&(i||"4999"!=r)){+r&&(+r.slice(1)||"5"!=r.charAt(0))||(Bt(n,e+1,1),t=!n.times(n).times(n).eq(f));break}if(!i&&(Bt(u,e+1,0),u.times(u).times(u).eq(f))){n=u;break}o+=4,i=1}return lt=!0,Bt(n,e,l.rounding,t)},Ct.decimalPlaces=Ct.dp=function(){var e,t=this.d,r=NaN;if(t){if(r=((e=t.length-1)-yt(this.e/Et))*Et,e=t[e])for(;e%10==0;e/=10)r--;r<0&&(r=0)}return r},Ct.dividedBy=Ct.div=function(e){return _t(this,new this.constructor(e))},Ct.dividedToIntegerBy=Ct.divToInt=function(e){var t=this.constructor;return Bt(_t(this,new t(e),0,1,1),t.precision,t.rounding)},Ct.equals=Ct.eq=function(e){return 0===this.cmp(e)},Ct.floor=function(){return Bt(new this.constructor(this),this.e+1,3)},Ct.greaterThan=Ct.gt=function(e){return this.cmp(e)>0},Ct.greaterThanOrEqualTo=Ct.gte=function(e){var t=this.cmp(e);return 1==t||0===t},Ct.hyperbolicCosine=Ct.cosh=function(){var e,t,r,n,i,a=this,o=a.constructor,u=new o(1);if(!a.isFinite())return new o(a.s?1/0:NaN);if(a.isZero())return u;r=o.precision,n=o.rounding,o.precision=r+Math.max(a.e,a.sd())+4,o.rounding=1,(i=a.d.length)<32?t=(1/Yt(4,e=Math.ceil(i/3))).toString():(e=16,t="2.3283064365386962890625e-10"),a=Wt(o,1,a.times(t),new o(1),!0);for(var s,c=e,f=new o(8);c--;)s=a.times(a),a=u.minus(s.times(f.minus(s.times(f))));return Bt(a,o.precision=r,o.rounding=n,!0)},Ct.hyperbolicSine=Ct.sinh=function(){var e,t,r,n,i=this,a=i.constructor;if(!i.isFinite()||i.isZero())return new a(i);if(t=a.precision,r=a.rounding,a.precision=t+Math.max(i.e,i.sd())+4,a.rounding=1,(n=i.d.length)<3)i=Wt(a,2,i,i,!0);else{e=(e=1.4*Math.sqrt(n))>16?16:0|e,i=Wt(a,2,i=i.times(1/Yt(5,e)),i,!0);for(var o,u=new a(5),s=new a(16),c=new a(20);e--;)o=i.times(i),i=i.times(u.plus(o.times(s.times(o).plus(c))))}return a.precision=t,a.rounding=r,Bt(i,t,r,!0)},Ct.hyperbolicTangent=Ct.tanh=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+7,n.rounding=1,_t(r.sinh(),r.cosh(),n.precision=e,n.rounding=t)):new n(r.s)},Ct.inverseCosine=Ct.acos=function(){var e,t=this,r=t.constructor,n=t.abs().cmp(1),i=r.precision,a=r.rounding;return-1!==n?0===n?t.isNeg()?Rt(r,i,a):new r(0):new r(NaN):t.isZero()?Rt(r,i+4,a).times(.5):(r.precision=i+6,r.rounding=1,t=t.asin(),e=Rt(r,i+4,a).times(.5),r.precision=i,r.rounding=a,e.minus(t))},Ct.inverseHyperbolicCosine=Ct.acosh=function(){var e,t,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(e=n.precision,t=n.rounding,n.precision=e+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,lt=!1,r=r.times(r).minus(1).sqrt().plus(r),lt=!0,n.precision=e,n.rounding=t,r.ln()):new n(r)},Ct.inverseHyperbolicSine=Ct.asinh=function(){var e,t,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,lt=!1,r=r.times(r).plus(1).sqrt().plus(r),lt=!0,n.precision=e,n.rounding=t,r.ln())},Ct.inverseHyperbolicTangent=Ct.atanh=function(){var e,t,r,n,i=this,a=i.constructor;return i.isFinite()?i.e>=0?new a(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(e=a.precision,t=a.rounding,n=i.sd(),Math.max(n,e)<2*-i.e-1?Bt(new a(i),e,t,!0):(a.precision=r=n-i.e,i=_t(i.plus(1),new a(1).minus(i),r+e,1),a.precision=e+4,a.rounding=1,i=i.ln(),a.precision=e,a.rounding=t,i.times(.5))):new a(NaN)},Ct.inverseSine=Ct.asin=function(){var e,t,r,n,i=this,a=i.constructor;return i.isZero()?new a(i):(t=i.abs().cmp(1),r=a.precision,n=a.rounding,-1!==t?0===t?((e=Rt(a,r+4,n).times(.5)).s=i.s,e):new a(NaN):(a.precision=r+6,a.rounding=1,i=i.div(new a(1).minus(i.times(i)).sqrt().plus(1)).atan(),a.precision=r,a.rounding=n,i.times(2)))},Ct.inverseTangent=Ct.atan=function(){var e,t,r,n,i,a,o,u,s,c=this,f=c.constructor,l=f.precision,p=f.rounding;if(c.isFinite()){if(c.isZero())return new f(c);if(c.abs().eq(1)&&l+4<=St)return(o=Rt(f,l+4,p).times(.25)).s=c.s,o}else{if(!c.s)return new f(NaN);if(l+4<=St)return(o=Rt(f,l+4,p).times(.5)).s=c.s,o}for(f.precision=u=l+10,f.rounding=1,e=r=Math.min(28,u/Et+2|0);e;--e)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(lt=!1,t=Math.ceil(u/Et),n=1,s=c.times(c),o=new f(c),i=c;-1!==e;)if(i=i.times(s),a=o.minus(i.div(n+=2)),i=i.times(s),void 0!==(o=a.plus(i.div(n+=2))).d[t])for(e=t;o.d[e]===a.d[e]&&e--;);return r&&(o=o.times(2<this.d.length-2},Ct.isNaN=function(){return!this.s},Ct.isNegative=Ct.isNeg=function(){return this.s<0},Ct.isPositive=Ct.isPos=function(){return this.s>0},Ct.isZero=function(){return!!this.d&&0===this.d[0]},Ct.lessThan=Ct.lt=function(e){return this.cmp(e)<0},Ct.lessThanOrEqualTo=Ct.lte=function(e){return this.cmp(e)<1},Ct.logarithm=Ct.log=function(e){var t,r,n,i,a,o,u,s,c=this,f=c.constructor,l=f.precision,p=f.rounding;if(null==e)e=new f(10),t=!0;else{if(r=(e=new f(e)).d,e.s<0||!r||!r[0]||e.eq(1))return new f(NaN);t=e.eq(10)}if(r=c.d,c.s<0||!r||!r[0]||c.eq(1))return new f(r&&!r[0]?-1/0:1!=c.s?NaN:r?0:1/0);if(t)if(r.length>1)a=!0;else{for(i=r[0];i%10==0;)i/=10;a=1!==i}if(lt=!1,o=Ht(c,u=l+5),n=t?zt(f,u+10):Ht(e,u),Ot((s=_t(o,n,u,1)).d,i=l,p))do{if(o=Ht(c,u+=10),n=t?zt(f,u+10):Ht(e,u),s=_t(o,n,u,1),!a){+Mt(s.d).slice(i+1,i+15)+1==1e14&&(s=Bt(s,l+1,0));break}}while(Ot(s.d,i+=10,p));return lt=!0,Bt(s,l,p)},Ct.minus=Ct.sub=function(e){var t,r,n,i,a,o,u,s,c,f,l,p,m=this,h=m.constructor;if(e=new h(e),!m.d||!e.d)return m.s&&e.s?m.d?e.s=-e.s:e=new h(e.d||m.s!==e.s?m:NaN):e=new h(NaN),e;if(m.s!=e.s)return e.s=-e.s,m.plus(e);if(c=m.d,p=e.d,u=h.precision,s=h.rounding,!c[0]||!p[0]){if(p[0])e.s=-e.s;else{if(!c[0])return new h(3===s?-0:0);e=new h(m)}return lt?Bt(e,u,s):e}if(r=yt(e.e/Et),f=yt(m.e/Et),c=c.slice(),a=f-r){for((l=a<0)?(t=c,a=-a,o=p.length):(t=p,r=f,o=c.length),a>(n=Math.max(Math.ceil(u/Et),o)+2)&&(a=n,t.length=1),t.reverse(),n=a;n--;)t.push(0);t.reverse()}else{for((l=(n=c.length)<(o=p.length))&&(o=n),n=0;n0;--n)c[o++]=0;for(n=p.length;n>a;){if(c[--n](o=(a=Math.ceil(u/Et))>o?a+1:o+1)&&(i=o,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for((o=c.length)-(i=f.length)<0&&(i=o,r=f,f=c,c=r),t=0;i;)t=(c[--i]=c[i]+f[i]+t)/Nt|0,c[i]%=Nt;for(t&&(c.unshift(t),++n),o=c.length;0==c[--o];)c.pop();return e.d=c,e.e=It(c,n),lt?Bt(e,u,s):e},Ct.precision=Ct.sd=function(e){var t,r=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(mt+e);return r.d?(t=qt(r.d),e&&r.e+1>t&&(t=r.e+1)):t=NaN,t},Ct.round=function(){var e=this,t=e.constructor;return Bt(new t(e),e.e+1,t.rounding)},Ct.sine=Ct.sin=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+Et,n.rounding=1,r=function(e,t){var r,n=t.d.length;if(n<3)return t.isZero()?t:Wt(e,2,t,t);r=(r=1.4*Math.sqrt(n))>16?16:0|r,t=Wt(e,2,t=t.times(1/Yt(5,r)),t);for(var i,a=new e(5),o=new e(16),u=new e(20);r--;)i=t.times(t),t=t.times(a.plus(i.times(o.times(i).minus(u))));return t}(n,Jt(n,r)),n.precision=e,n.rounding=t,Bt(nt>2?r.neg():r,e,t,!0)):new n(NaN)},Ct.squareRoot=Ct.sqrt=function(){var e,t,r,n,i,a,o=this,u=o.d,s=o.e,c=o.s,f=o.constructor;if(1!==c||!u||!u[0])return new f(!c||c<0&&(!u||u[0])?NaN:u?o:1/0);for(lt=!1,0==(c=Math.sqrt(+o))||c==1/0?(((t=Mt(u)).length+s)%2==0&&(t+="0"),c=Math.sqrt(t),s=yt((s+1)/2)-(s<0||s%2),n=new f(t=c==1/0?"5e"+s:(t=c.toExponential()).slice(0,t.indexOf("e")+1)+s)):n=new f(c.toString()),r=(s=f.precision)+3;;)if(n=(a=n).plus(_t(o,a,r+2,1)).times(.5),Mt(a.d).slice(0,r)===(t=Mt(n.d)).slice(0,r)){if("9999"!=(t=t.slice(r-3,r+1))&&(i||"4999"!=t)){+t&&(+t.slice(1)||"5"!=t.charAt(0))||(Bt(n,s+1,1),e=!n.times(n).eq(o));break}if(!i&&(Bt(a,s+1,0),a.times(a).eq(o))){n=a;break}r+=4,i=1}return lt=!0,Bt(n,s,f.rounding,e)},Ct.tangent=Ct.tan=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+10,n.rounding=1,(r=r.sin()).s=1,r=_t(r,new n(1).minus(r.times(r)).sqrt(),e+10,0),n.precision=e,n.rounding=t,Bt(2==nt||4==nt?r.neg():r,e,t,!0)):new n(NaN)},Ct.times=Ct.mul=function(e){var t,r,n,i,a,o,u,s,c,f=this,l=f.constructor,p=f.d,m=(e=new l(e)).d;if(e.s*=f.s,!(p&&p[0]&&m&&m[0]))return new l(!e.s||p&&!p[0]&&!m||m&&!m[0]&&!p?NaN:p&&m?0*e.s:e.s/0);for(r=yt(f.e/Et)+yt(e.e/Et),(s=p.length)<(c=m.length)&&(a=p,p=m,m=a,o=s,s=c,c=o),a=[],n=o=s+c;n--;)a.push(0);for(n=c;--n>=0;){for(t=0,i=s+n;i>n;)u=a[i]+m[n]*p[i-n-1]+t,a[i--]=u%Nt|0,t=u/Nt|0;a[i]=(a[i]+t)%Nt|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=It(a,r),lt?Bt(e,l.precision,l.rounding):e},Ct.toBinary=function(e,t){return Xt(this,2,e,t)},Ct.toDecimalPlaces=Ct.toDP=function(e,t){var r=this,n=r.constructor;return r=new n(r),void 0===e?r:(Ft(e,0,ot),void 0===t?t=n.rounding:Ft(t,0,8),Bt(r,e+r.e+1,t))},Ct.toExponential=function(e,t){var r,n=this,i=n.constructor;return void 0===e?r=kt(n,!0):(Ft(e,0,ot),void 0===t?t=i.rounding:Ft(t,0,8),r=kt(n=Bt(new i(n),e+1,t),!0,e+1)),n.isNeg()&&!n.isZero()?"-"+r:r},Ct.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return void 0===e?r=kt(i):(Ft(e,0,ot),void 0===t?t=a.rounding:Ft(t,0,8),r=kt(n=Bt(new a(i),e+i.e+1,t),!1,e+n.e+1)),i.isNeg()&&!i.isZero()?"-"+r:r},Ct.toFraction=function(e){var t,r,n,i,a,o,u,s,c,f,l,p,m=this,h=m.d,d=m.constructor;if(!h)return new d(m);if(c=r=new d(1),n=s=new d(0),o=(a=(t=new d(n)).e=qt(h)-m.e-1)%Et,t.d[0]=gt(10,o<0?Et+o:o),null==e)e=a>0?t:c;else{if(!(u=new d(e)).isInt()||u.lt(c))throw Error(mt+u);e=u.gt(t)?a>0?t:c:u}for(lt=!1,u=new d(Mt(h)),f=d.precision,d.precision=a=h.length*Et*2;l=_t(u,t,0,1,1),1!=(i=r.plus(l.times(n))).cmp(e);)r=n,n=i,i=c,c=s.plus(l.times(i)),s=i,i=t,t=u.minus(l.times(i)),u=i;return i=_t(e.minus(r),n,0,1,1),s=s.plus(i.times(c)),r=r.plus(i.times(n)),s.s=c.s=m.s,p=_t(c,n,a,1).minus(m).abs().cmp(_t(s,r,a,1).minus(m).abs())<1?[c,n]:[s,r],d.precision=f,lt=!0,p},Ct.toHexadecimal=Ct.toHex=function(e,t){return Xt(this,16,e,t)},Ct.toNearest=function(e,t){var r=this,n=r.constructor;if(r=new n(r),null==e){if(!r.d)return r;e=new n(1),t=n.rounding}else{if(e=new n(e),void 0===t?t=n.rounding:Ft(t,0,8),!r.d)return e.s?r:e;if(!e.d)return e.s&&(e.s=r.s),e}return e.d[0]?(lt=!1,r=_t(r,e,0,t,1).times(e),lt=!0,Bt(r)):(e.s=r.s,r=e),r},Ct.toNumber=function(){return+this},Ct.toOctal=function(e,t){return Xt(this,8,e,t)},Ct.toPower=Ct.pow=function(e){var t,r,n,i,a,o,u=this,s=u.constructor,c=+(e=new s(e));if(!(u.d&&e.d&&u.d[0]&&e.d[0]))return new s(gt(+u,c));if((u=new s(u)).eq(1))return u;if(n=s.precision,a=s.rounding,e.eq(1))return Bt(u,n,a);if((t=yt(e.e/Et))>=e.d.length-1&&(r=c<0?-c:c)<=9007199254740991)return i=Pt(s,u,r,n),e.s<0?new s(1).div(i):Bt(i,n,a);if((o=u.s)<0){if(ts.maxE+1||t0?o/0:0):(lt=!1,s.rounding=u.s=1,r=Math.min(12,(t+"").length),(i=$t(e.times(Ht(u,n+r)),n)).d&&Ot((i=Bt(i,n+5,1)).d,n,a)&&(t=n+10,+Mt((i=Bt($t(e.times(Ht(u,t+r)),t),t+5,1)).d).slice(n+1,n+15)+1==1e14&&(i=Bt(i,n+1,0))),i.s=o,lt=!0,s.rounding=a,Bt(i,n,a))},Ct.toPrecision=function(e,t){var r,n=this,i=n.constructor;return void 0===e?r=kt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(Ft(e,1,ot),void 0===t?t=i.rounding:Ft(t,0,8),r=kt(n=Bt(new i(n),e,t),e<=n.e||n.e<=i.toExpNeg,e)),n.isNeg()&&!n.isZero()?"-"+r:r},Ct.toSignificantDigits=Ct.toSD=function(e,t){var r=this.constructor;return void 0===e?(e=r.precision,t=r.rounding):(Ft(e,1,ot),void 0===t?t=r.rounding:Ft(t,0,8)),Bt(new r(this),e,t)},Ct.toString=function(){var e=this,t=e.constructor,r=kt(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()&&!e.isZero()?"-"+r:r},Ct.truncated=Ct.trunc=function(){return Bt(new this.constructor(this),this.e+1,1)},Ct.valueOf=Ct.toJSON=function(){var e=this,t=e.constructor,r=kt(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()?"-"+r:r};var _t=function(){function e(e,t,r){var n,i=0,a=e.length;for(e=e.slice();a--;)n=e[a]*t+i,e[a]=n%r|0,i=n/r|0;return i&&e.unshift(i),e}function t(e,t,r,n){var i,a;if(r!=n)a=r>n?1:-1;else for(i=a=0;it[i]?1:-1;break}return a}function r(e,t,r,n){for(var i=0;r--;)e[r]-=i,i=e[r]1;)e.shift()}return function(n,i,a,o,u,s){var c,f,l,p,m,h,d,v,y,g,x,b,w,D,N,E,A,S,C,M,F=n.constructor,O=n.s==i.s?1:-1,T=n.d,_=i.d;if(!(T&&T[0]&&_&&_[0]))return new F(n.s&&i.s&&(T?!_||T[0]!=_[0]:_)?T&&0==T[0]||!_?0*O:O/0:NaN);for(s?(m=1,f=n.e-i.e):(s=Nt,m=Et,f=yt(n.e/m)-yt(i.e/m)),C=_.length,A=T.length,g=(y=new F(O)).d=[],l=0;_[l]==(T[l]||0);l++);if(_[l]>(T[l]||0)&&f--,null==a?(D=a=F.precision,o=F.rounding):D=u?a+(n.e-i.e)+1:a,D<0)g.push(1),h=!0;else{if(D=D/m+2|0,l=0,1==C){for(p=0,_=_[0],D++;(l1&&(_=e(_,p,s),T=e(T,p,s),C=_.length,A=T.length),E=C,b=(x=T.slice(0,C)).length;b=s/2&&++S;do{p=0,(c=t(_,x,C,b))<0?(w=x[0],C!=b&&(w=w*s+(x[1]||0)),(p=w/S|0)>1?(p>=s&&(p=s-1),1==(c=t(d=e(_,p,s),x,v=d.length,b=x.length))&&(p--,r(d,C=10;p/=10)l++;y.e=l+f*m-1,Bt(y,u?a+y.e+1:a,o,h)}return y}}();function Bt(e,t,r,n){var i,a,o,u,s,c,f,l,p,m=e.constructor;e:if(null!=t){if(!(l=e.d))return e;for(i=1,u=l[0];u>=10;u/=10)i++;if((a=t-i)<0)a+=Et,o=t,s=(f=l[p=0])/gt(10,i-o-1)%10|0;else if((p=Math.ceil((a+1)/Et))>=(u=l.length)){if(!n)break e;for(;u++<=p;)l.push(0);f=s=0,i=1,o=(a%=Et)-Et+1}else{for(f=u=l[p],i=1;u>=10;u/=10)i++;s=(o=(a%=Et)-Et+i)<0?0:f/gt(10,i-o-1)%10|0}if(n=n||t<0||void 0!==l[p+1]||(o<0?f:f%gt(10,i-o-1)),c=r<4?(s||n)&&(0==r||r==(e.s<0?3:2)):s>5||5==s&&(4==r||n||6==r&&(a>0?o>0?f/gt(10,i-o):0:l[p-1])%10&1||r==(e.s<0?8:7)),t<1||!l[0])return l.length=0,c?(t-=e.e+1,l[0]=gt(10,(Et-t%Et)%Et),e.e=-t||0):l[0]=e.e=0,e;if(0==a?(l.length=p,u=1,p--):(l.length=p+1,u=gt(10,Et-a),l[p]=o>0?(f/gt(10,i-o)%gt(10,o)|0)*u:0),c)for(;;){if(0==p){for(a=1,o=l[0];o>=10;o/=10)a++;for(o=l[0]+=u,u=1;o>=10;o/=10)u++;a!=u&&(e.e++,l[0]==Nt&&(l[0]=1));break}if(l[p]+=u,l[p]!=Nt)break;l[p--]=0,u=1}for(a=l.length;0===l[--a];)l.pop()}return lt&&(e.e>m.maxE?(e.d=null,e.e=NaN):e.e0?a=a.charAt(0)+"."+a.slice(1)+jt(n):o>1&&(a=a.charAt(0)+"."+a.slice(1)),a=a+(e.e<0?"e":"e+")+e.e):i<0?(a="0."+jt(-i-1)+a,r&&(n=r-o)>0&&(a+=jt(n))):i>=o?(a+=jt(i+1-o),r&&(n=r-i-1)>0&&(a=a+"."+jt(n))):((n=i+1)0&&(i+1===o&&(a+="."),a+=jt(n))),a}function It(e,t){var r=e[0];for(t*=Et;r>=10;r/=10)t++;return t}function zt(e,t,r){if(t>At)throw lt=!0,r&&(e.precision=r),Error(ht);return Bt(new e(st),t,1,!0)}function Rt(e,t,r){if(t>St)throw Error(ht);return Bt(new e(ct),t,r,!0)}function qt(e){var t=e.length-1,r=t*Et+1;if(t=e[t]){for(;t%10==0;t/=10)r--;for(t=e[0];t>=10;t/=10)r++}return r}function jt(e){for(var t="";e--;)t+="0";return t}function Pt(e,t,r,n){var i,a=new e(1),o=Math.ceil(n/Et+4);for(lt=!1;;){if(r%2&&Qt((a=a.times(t)).d,o)&&(i=!0),0===(r=yt(r/2))){r=a.d.length-1,i&&0===a.d[r]&&++a.d[r];break}Qt((t=t.times(t)).d,o)}return lt=!0,a}function Lt(e){return 1&e.d[e.d.length-1]}function Ut(e,t,r){for(var n,i=new e(t[0]),a=0;++a17)return new p(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(null==t?(lt=!1,s=h):s=t,u=new p(.03125);e.e>-2;)e=e.times(u),l+=5;for(s+=n=Math.log(gt(2,l))/Math.LN10*2+5|0,r=a=o=new p(1),p.precision=s;;){if(a=Bt(a.times(e),s,1),r=r.times(++f),Mt((u=o.plus(_t(a,r,s,1))).d).slice(0,s)===Mt(o.d).slice(0,s)){for(i=l;i--;)o=Bt(o.times(o),s,1);if(null!=t)return p.precision=h,o;if(!(c<3&&Ot(o.d,s-n,m,c)))return Bt(o,p.precision=h,m,lt=!0);p.precision=s+=10,r=a=u=new p(1),f=0,c++}o=u}}function Ht(e,t){var r,n,i,a,o,u,s,c,f,l,p,m=1,h=e,d=h.d,v=h.constructor,y=v.rounding,g=v.precision;if(h.s<0||!d||!d[0]||!h.e&&1==d[0]&&1==d.length)return new v(d&&!d[0]?-1/0:1!=h.s?NaN:d?0:h);if(null==t?(lt=!1,f=g):f=t,v.precision=f+=10,n=(r=Mt(d)).charAt(0),!(Math.abs(a=h.e)<15e14))return c=zt(v,f+2,g).times(a+""),h=Ht(new v(n+"."+r.slice(1)),f-10).plus(c),v.precision=g,null==t?Bt(h,g,y,lt=!0):h;for(;n<7&&1!=n||1==n&&r.charAt(1)>3;)n=(r=Mt((h=h.times(e)).d)).charAt(0),m++;for(a=h.e,n>1?(h=new v("0."+r),a++):h=new v(n+"."+r.slice(1)),l=h,s=o=h=_t(h.minus(1),h.plus(1),f,1),p=Bt(h.times(h),f,1),i=3;;){if(o=Bt(o.times(p),f,1),Mt((c=s.plus(_t(o,new v(i),f,1))).d).slice(0,f)===Mt(s.d).slice(0,f)){if(s=s.times(2),0!==a&&(s=s.plus(zt(v,f+2,g).times(a+""))),s=_t(s,new v(m),f,1),null!=t)return v.precision=g,s;if(!Ot(s.d,f-10,y,u))return Bt(s,v.precision=g,y,lt=!0);v.precision=f+=10,c=o=h=_t(l.minus(1),l.plus(1),f,1),p=Bt(h.times(h),f,1),i=u=1}s=c,i+=2}}function Gt(e){return String(e.s*e.s/0)}function Vt(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;48===t.charCodeAt(n);n++);for(i=t.length;48===t.charCodeAt(i-1);--i);if(t=t.slice(n,i)){if(i-=n,e.e=r=r-n-1,e.d=[],n=(r+1)%Et,r<0&&(n+=Et),ne.constructor.maxE?(e.d=null,e.e=NaN):e.e-1){if(t=t.replace(/(\d)_(?=\d)/g,"$1"),Dt.test(t))return Vt(e,t)}else if("Infinity"===t||"NaN"===t)return+t||(e.s=NaN),e.e=NaN,e.d=null,e;if(bt.test(t))r=16,t=t.toLowerCase();else if(xt.test(t))r=2;else{if(!wt.test(t))throw Error(mt+t);r=8}for((a=t.search(/p/i))>0?(s=+t.slice(a+1),t=t.substring(2,a)):t=t.slice(2),o=(a=t.indexOf("."))>=0,n=e.constructor,o&&(a=(u=(t=t.replace(".","")).length)-a,i=Pt(n,new n(r),a,2*a)),a=f=(c=Tt(t,r,Nt)).length-1;0===c[a];--a)c.pop();return a<0?new n(0*e.s):(e.e=It(c,f),e.d=c,lt=!1,o&&(e=_t(e,i,4*u)),s&&(e=e.times(Math.abs(s)<54?gt(2,s):jr.pow(2,s))),lt=!0,e)}function Wt(e,t,r,n,i){var a,o,u,s,c=e.precision,f=Math.ceil(c/Et);for(lt=!1,s=r.times(r),u=new e(n);;){if(o=_t(u.times(s),new e(t++*t++),c,1),u=i?n.plus(o):n.minus(o),n=_t(o.times(s),new e(t++*t++),c,1),void 0!==(o=u.plus(n)).d[f]){for(a=f;o.d[a]===u.d[a]&&a--;);if(-1==a)break}a=u,u=n,n=o,o=a}return lt=!0,o.d.length=f+1,o}function Yt(e,t){for(var r=e;--t;)r*=e;return r}function Jt(e,t){var r,n=t.s<0,i=Rt(e,e.precision,1),a=i.times(.5);if((t=t.abs()).lte(a))return nt=n?4:1,t;if((r=t.divToInt(i)).isZero())nt=n?3:2;else{if((t=t.minus(r.times(i))).lte(a))return nt=Lt(r)?n?2:3:n?4:1,t;nt=Lt(r)?n?1:4:n?3:2}return t.minus(i).abs()}function Xt(e,t,r,n){var i,a,o,u,s,c,f,l,p,m=e.constructor,h=void 0!==r;if(h?(Ft(r,1,ot),void 0===n?n=m.rounding:Ft(n,0,8)):(r=m.precision,n=m.rounding),e.isFinite()){for(h?(i=2,16==t?r=4*r-3:8==t&&(r=3*r-2)):i=t,(o=(f=kt(e)).indexOf("."))>=0&&(f=f.replace(".",""),(p=new m(1)).e=f.length-o,p.d=Tt(kt(p),10,i),p.e=p.d.length),a=s=(l=Tt(f,10,i)).length;0==l[--s];)l.pop();if(l[0]){if(o<0?a--:((e=new m(e)).d=l,e.e=a,l=(e=_t(e,p,r,n,0,i)).d,a=e.e,c=rt),o=l[r],u=i/2,c=c||void 0!==l[r+1],c=n<4?(void 0!==o||c)&&(0===n||n===(e.s<0?3:2)):o>u||o===u&&(4===n||c||6===n&&1&l[r-1]||n===(e.s<0?8:7)),l.length=r,c)for(;++l[--r]>i-1;)l[r]=0,r||(++a,l.unshift(1));for(s=l.length;!l[s-1];--s);for(o=0,f="";o1)if(16==t||8==t){for(o=16==t?4:3,--s;s%o;s++)f+="0";for(s=(l=Tt(f,i,t)).length;!l[s-1];--s);for(o=1,f="1.";os)for(a-=s;a--;)f+="0";else at)return e.length=t,!0}function Kt(e){return new this(e).abs()}function er(e){return new this(e).acos()}function tr(e){return new this(e).acosh()}function rr(e,t){return new this(e).plus(t)}function nr(e){return new this(e).asin()}function ir(e){return new this(e).asinh()}function ar(e){return new this(e).atan()}function or(e){return new this(e).atanh()}function ur(e,t){e=new this(e),t=new this(t);var r,n=this.precision,i=this.rounding,a=n+4;return e.s&&t.s?e.d||t.d?!t.d||e.isZero()?(r=t.s<0?Rt(this,n,i):new this(0)).s=e.s:!e.d||t.isZero()?(r=Rt(this,a,1).times(.5)).s=e.s:t.s<0?(this.precision=a,this.rounding=1,r=this.atan(_t(e,t,a,1)),t=Rt(this,a,1),this.precision=n,this.rounding=i,r=e.s<0?r.minus(t):r.plus(t)):r=this.atan(_t(e,t,a,1)):(r=Rt(this,a,1).times(t.s>0?.25:.75)).s=e.s:r=new this(NaN),r}function sr(e){return new this(e).cbrt()}function cr(e){return Bt(e=new this(e),e.e+1,2)}function fr(e,t,r){return new this(e).clamp(t,r)}function lr(e){if(!e||"object"!=typeof e)throw Error(pt+"Object expected");var t,r,n,i=!0===e.defaults,a=["precision",1,ot,"rounding",0,8,"toExpNeg",-at,0,"toExpPos",0,at,"maxE",0,at,"minE",-at,0,"modulo",0,9];for(t=0;t=a[t+1]&&n<=a[t+2]))throw Error(mt+r+": "+n);this[r]=n}if(r="crypto",i&&(this[r]=ft[r]),void 0!==(n=e[r])){if(!0!==n&&!1!==n&&0!==n&&1!==n)throw Error(mt+r+": "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw Error(dt);this[r]=!0}else this[r]=!1}return this}function pr(e){return new this(e).cos()}function mr(e){return new this(e).cosh()}function hr(e,t){return new this(e).div(t)}function dr(e){return new this(e).exp()}function vr(e){return Bt(e=new this(e),e.e+1,3)}function yr(){var e,t,r=new this(0);for(lt=!1,e=0;e=429e7?t[a]=crypto.getRandomValues(new Uint32Array(1))[0]:u[a++]=i%1e7;else{if(!crypto.randomBytes)throw Error(dt);for(t=crypto.randomBytes(n*=4);a=214e7?crypto.randomBytes(4).copy(t,a):(u.push(i%1e7),a+=4);a=n/4}else for(;a=10;i/=10)n++;na.maxE?(i.e=NaN,i.d=null):e.e=10;r/=10)t++;return void(lt?t>a.maxE?(i.e=NaN,i.d=null):tt.re?1:e.ret.im?1:e.im0?this.step>0?this.start:this.start+(e-1)*this.step:void 0},e.prototype.max=function(){var e=this.size()[0];return e>0?this.step>0?this.start+(e-1)*this.step:this.start:void 0},e.prototype.forEach=function(e){var t=this.start,r=this.step,n=this.end,i=0;if(r>0)for(;tn;)e(t,[i],this),t+=r,i++},e.prototype.map=function(e){var t=[];return this.forEach((function(r,n,i){t[n[0]]=e(r,n,i)})),t},e.prototype.toArray=function(){var e=[];return this.forEach((function(t,r){e[r[0]]=t})),e},e.prototype.valueOf=function(){return this.toArray()},e.prototype.format=function(e){var t=ee(this.start,e);return 1!==this.step&&(t+=":"+ee(this.step,e)),t+":"+ee(this.end,e)},e.prototype.toString=function(){return this.format()},e.prototype.toJSON=function(){return{mathjs:"Range",start:this.start,end:this.end,step:this.step}},e.fromJSON=function(t){return new e(t.start,t.end,t.step)},e}),{isClass:!0})),Zr=Se("Matrix",[],(function(){function e(){if(!(this instanceof e))throw new SyntaxError("Constructor must be called with the new operator")}return e.prototype.type="Matrix",e.prototype.isMatrix=!0,e.prototype.storage=function(){throw new Error("Cannot invoke storage on a Matrix interface")},e.prototype.datatype=function(){throw new Error("Cannot invoke datatype on a Matrix interface")},e.prototype.create=function(e,t){throw new Error("Cannot invoke create on a Matrix interface")},e.prototype.subset=function(e,t,r){throw new Error("Cannot invoke subset on a Matrix interface")},e.prototype.get=function(e){throw new Error("Cannot invoke get on a Matrix interface")},e.prototype.set=function(e,t,r){throw new Error("Cannot invoke set on a Matrix interface")},e.prototype.resize=function(e,t){throw new Error("Cannot invoke resize on a Matrix interface")},e.prototype.reshape=function(e,t){throw new Error("Cannot invoke reshape on a Matrix interface")},e.prototype.clone=function(){throw new Error("Cannot invoke clone on a Matrix interface")},e.prototype.size=function(){throw new Error("Cannot invoke size on a Matrix interface")},e.prototype.map=function(e,t){throw new Error("Cannot invoke map on a Matrix interface")},e.prototype.forEach=function(e){throw new Error("Cannot invoke forEach on a Matrix interface")},e.prototype[Symbol.iterator]=function(){throw new Error("Cannot iterate a Matrix interface")},e.prototype.toArray=function(){throw new Error("Cannot invoke toArray on a Matrix interface")},e.prototype.valueOf=function(){throw new Error("Cannot invoke valueOf on a Matrix interface")},e.prototype.format=function(e){throw new Error("Cannot invoke format on a Matrix interface")},e.prototype.toString=function(){throw new Error("Cannot invoke toString on a Matrix interface")},e}),{isClass:!0}),Wr=r(4756);function Yr(){return Yr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0?"+":"")+n.toString()}(e,i);case"bin":return Jr(e,2,a);case"oct":return Jr(e,8,a);case"hex":return Jr(e,16,a);case"auto":var o=Qr(null==t?void 0:t.lowerExp,-3),u=Qr(null==t?void 0:t.upperExp,5);if(e.isZero())return"0";var s=e.toSignificantDigits(i),c=s.e;return(c>=o&&cr.truncate?n.substring(0,r.truncate-3)+"...":n}function tn(e){for(var t=String(e),r="",n=0;n/g,">")}function an(e,t){if(Array.isArray(e)){for(var r="[",n=e.length,i=0;it?1:-1}function un(e,t,r){if(!(this instanceof un))throw new SyntaxError("Constructor must be called with the new operator");this.actual=e,this.expected=t,this.relation=r,this.message="Dimension mismatch ("+(Array.isArray(e)?"["+e.join(", ")+"]":e)+" "+(this.relation||"!=")+" "+(Array.isArray(t)?"["+t.join(", ")+"]":t)+")",this.stack=(new Error).stack}function sn(e,t,r){if(!(this instanceof sn))throw new SyntaxError("Constructor must be called with the new operator");this.index=e,arguments.length<3?(this.min=0,this.max=t):(this.min=t,this.max=r),void 0!==this.min&&this.index=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}function cn(e){for(var t=[];Array.isArray(e);)t.push(e.length),e=e[0];return t}function fn(e,t,r){var n,i=e.length;if(i!==t[r])throw new un(i,t[r]);if(r")}function ln(e,t){if(0===t.length){if(Array.isArray(e))throw new un(e.length,0)}else fn(e,t,0)}function pn(e,t){var r=e.isMatrix?e._size:cn(e);t._sourceSize.forEach((function(e,t){if(null!==e&&e!==r[t])throw new un(e,r[t])}))}function mn(e,t){if(void 0!==e){if(!i(e)||!V(e))throw new TypeError("Index must be an integer (value: "+e+")");if(e<0||"number"==typeof t&&e>=t)throw new sn(e,t)}}function hn(e){for(var t=0;t=0){if(t%r!=0)throw new Error("Could not replace wildcard, since "+t+" is no multiple of "+-r);n[i]=-t/r}return n}function xn(e){return e.reduce((function(e,t){return e*t}),1)}function bn(e,t){for(var r=t||cn(e);Array.isArray(e)&&1===e.length;)e=e[0],r.shift();for(var n=r.length;1===r[n-1];)n--;return n1)return e.slice(1).reduce((function(e,r){return Bn(e,r,t,0)}),e[0]);throw new Error("Wrong number of arguments in function concat")}function In(e,t){for(var r=t.length,n=e.length,i=0;i1||e[i]>t[a])throw new Error("shape missmatch: missmatch is found in arg with shape (".concat(e,") not possible to broadcast dimension ").concat(n," with size ").concat(e[i]," to size ").concat(t[a]))}}function zn(e,t){var r=cn(e);if(we(r,t))return e;In(r,t);var n,i,a,o=function(){for(var e=arguments.length,t=new Array(e),r=0;ra[f]&&(a[f]=u[c])}for(var l=0;l1&&void 0!==arguments[1]?arguments[1]:{},n=r.hasher,i=r.limit;return i=null==i?Number.POSITIVE_INFINITY:i,n=null==n?JSON.stringify:n,function r(){"object"!==t(r.cache)&&(r.cache={values:new Map,lru:Rn(i||Number.POSITIVE_INFINITY)});for(var a=[],o=0;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);rn[a]&&(n[a]=t[a],i=!0);i&&u(e,n,r)}function m(e){return l(e)?m(e.valueOf()):f(e)?e.map(m):e}return r.prototype=new t,r.prototype.createDenseMatrix=function(e,t){return new r(e,t)},Object.defineProperty(r,"name",{value:"DenseMatrix"}),r.prototype.constructor=r,r.prototype.type="DenseMatrix",r.prototype.isDenseMatrix=!0,r.prototype.getDataType=function(){return _n(this._data,H)},r.prototype.storage=function(){return"dense"},r.prototype.datatype=function(){return this._datatype},r.prototype.create=function(e,t){return new r(e,t)},r.prototype.subset=function(e,t,i){switch(arguments.length){case 1:return function(e,t){if(!v(t))throw new TypeError("Invalid index");if(t.isScalar())return e.get(t.min());var i=t.size();if(i.length!==e._size.length)throw new un(i.length,e._size.length);for(var a=t.min(),o=t.max(),u=0,s=e._size.length;u");var p=t.max().map((function(e){return e+1}));s(e,p,n);var m=a.length;o(e._data,t,r,m,0)}return e}(this,e,t,i);default:throw new SyntaxError("Wrong number of arguments")}},r.prototype.get=function(e){if(!f(e))throw new TypeError("Array expected");if(e.length!==this._size.length)throw new un(e.length,this._size.length);for(var t=0;t=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(this._data);try{for(n.s();!(t=n.n()).done;){var i=t.value;e.push(new r([i],this._datatype))}}catch(e){n.e(e)}finally{n.f()}return e},r.prototype.columns=function(){var e=this,t=[],n=this.size();if(2!==n.length)throw new TypeError("Rows can only be returned for a 2D matrix.");for(var i=this._data,a=function(n){var a=i.map((function(e){return[e[n]]}));t.push(new r(a,e._datatype))},o=0;o0?e:0,n=e<0?-e:0,o=this._size[0],u=this._size[1],s=Math.min(o-n,u-t),c=[],f=0;f0?n:0,c=n<0?-n:0,p=e[0],m=e[1],h=Math.min(p-c,m-s);if(f(t)){if(t.length!==h)throw new Error("Invalid value array length");u=function(e){return t[e]}}else if(l(t)){var d=t.size();if(1!==d.length||d[0]!==h)throw new Error("Invalid matrix length");u=function(e){return t.get([e])}}else u=function(){return t};o||(o=a(u(0))?u(0).mul(0):0);var v=[];if(e.length>0){v=dn(v,e,o);for(var y=0;y=n.length)throw new sn(t,n.length);return l(e)?e.create(Yn(e.valueOf(),t,r)):Yn(e,t,r)}function Yn(e,t,r){var n,i,a,o;if(t<=0){if(Array.isArray(e[0])){for(o=Hn(e),i=[],n=0;n0}function ri(e){return 0===e}function ni(e){return Number.isNaN(e)}ei.signature=Kn,ti.signature=Kn,ri.signature=Kn,ni.signature=Kn;var ii="isNegative",ai=Se(ii,["typed"],(function(e){var t=e.typed;return t(ii,{number:ei,BigNumber:function(e){return e.isNeg()&&!e.isZero()&&!e.isNaN()},Fraction:function(e){return e.s<0},Unit:t.referToSelf((function(e){return function(r){return t.find(e,r.valueType())(r.value)}})),"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),oi="isNumeric",ui=Se(oi,["typed"],(function(e){var t=e.typed;return t(oi,{"number | BigNumber | Fraction | boolean":function(){return!0},"Complex | Unit | string | null | undefined | Node":function(){return!1},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),si=(r(2762),"hasNumericValue"),ci=Se(si,["typed","isNumeric"],(function(e){var t=e.typed,r=e.isNumeric;return t(si,{boolean:function(){return!0},string:function(e){return e.trim().length>0&&!isNaN(Number(e))},any:function(e){return r(e)}})})),fi="isPositive",li=Se(fi,["typed"],(function(e){var t=e.typed;return t(fi,{number:ti,BigNumber:function(e){return!e.isNeg()&&!e.isZero()&&!e.isNaN()},Fraction:function(e){return e.s>0&&e.n>0},Unit:t.referToSelf((function(e){return function(r){return t.find(e,r.valueType())(r.value)}})),"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),pi="isZero",mi=Se(pi,["typed"],(function(e){var t=e.typed;return t(pi,{number:ri,BigNumber:function(e){return e.isZero()},Complex:function(e){return 0===e.re&&0===e.im},Fraction:function(e){return 1===e.d&&0===e.n},Unit:t.referToSelf((function(e){return function(r){return t.find(e,r.valueType())(r.value)}})),"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),hi="isNaN",di=Se(hi,["typed"],(function(e){var t=e.typed;return t(hi,{number:ni,BigNumber:function(e){return e.isNaN()},Fraction:function(e){return!1},Complex:function(e){return e.isNaN()},Unit:function(e){return Number.isNaN(e.value)},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),vi="typeOf",yi=Se(vi,["typed"],(function(e){return(0,e.typed)(vi,{any:H})}));function gi(e,t,r){if(null==r)return e.eq(t);if(e.eq(t))return!0;if(e.isNaN()||t.isNaN())return!1;if(e.isFinite()&&t.isFinite()){var n=e.minus(t).abs();if(n.isZero())return!0;var i=e.constructor.max(e.abs(),t.abs());return n.lte(i.times(r))}return!1}var xi=Se("compareUnits",["typed"],(function(e){var t=e.typed;return{"Unit, Unit":t.referToSelf((function(e){return function(r,n){if(!r.equalBase(n))throw new Error("Cannot compare units with different base");return t.find(e,[r.valueType(),n.valueType()])(r.value,n.value)}}))}})),bi="equalScalar",wi=Se(bi,["typed","config"],(function(e){var t=e.typed,r=e.config,n=xi({typed:t});return t(bi,{"boolean, boolean":function(e,t){return e===t},"number, number":function(e,t){return se(e,t,r.epsilon)},"BigNumber, BigNumber":function(e,t){return e.eq(t)||gi(e,t,r.epsilon)},"Fraction, Fraction":function(e,t){return e.equals(t)},"Complex, Complex":function(e,t){return function(e,t,r){return se(e.re,t.re,r)&&se(e.im,t.im,r)}(e,t,r.epsilon)}},n)})),Di=(Se(bi,["typed","config"],(function(e){var t=e.typed,r=e.config;return t(bi,{"number, number":function(e,t){return se(e,t,r.epsilon)}})})),Se("SparseMatrix",["typed","equalScalar","Matrix"],(function(e){var t=e.typed,r=e.equalScalar,n=e.Matrix;function o(e,t){if(!(this instanceof o))throw new SyntaxError("Constructor must be called with the new operator");if(t&&!c(t))throw new Error("Invalid datatype: "+t);if(l(e))!function(e,t,r){"SparseMatrix"===t.type?(e._values=t._values?ye(t._values):void 0,e._index=ye(t._index),e._ptr=ye(t._ptr),e._size=ye(t._size),e._datatype=r||t._datatype):u(e,t.valueOf(),r||t._datatype)}(this,e,t);else if(e&&f(e.index)&&f(e.ptr)&&f(e.size))this._values=e.values,this._index=e.index,this._ptr=e.ptr,this._size=e.size,this._datatype=t||e.datatype;else if(f(e))u(this,e,t);else{if(e)throw new TypeError("Unsupported type of data ("+H(e)+")");this._values=[],this._index=[],this._ptr=[0],this._size=[0,0],this._datatype=t}}function u(e,n,i){e._values=[],e._index=[],e._ptr=[],e._datatype=i;var a=n.length,o=0,u=r,s=0;if(c(i)&&(u=t.find(r,[i,i])||r,s=t.convert(0,i)),a>0){var l=0;do{e._ptr.push(e._index.length);for(var p=0;pd){for(l=d;lh){if(m){var v=0;for(l=0;ln-1&&(e._values.splice(p,1),e._index.splice(p,1),g++)}e._ptr[l]=e._values.length}return e._size[0]=n,e._size[1]=i,e}function d(e,t,r,n,i){var a,o,u=n[0],s=n[1],c=[];for(a=0;a");if(1===a.length)t.dimension(0).forEach((function(t,i){mn(t),e.set([t,0],r[i[0]],n)}));else{var c=t.dimension(0),f=t.dimension(1);c.forEach((function(t,i){mn(t),f.forEach((function(a,o){mn(a),e.set([t,a],r[i[0]][o[0]],n)}))}))}}return e}(this,e,t,r);default:throw new SyntaxError("Wrong number of arguments")}},o.prototype.get=function(e){if(!f(e))throw new TypeError("Array expected");if(e.length!==this._size.length)throw new un(e.length,this._size.length);if(!this._values)throw new Error("Cannot invoke get on a Pattern only matrix");var t=e[0],r=e[1];mn(t,this._size[0]),mn(r,this._size[1]);var n=s(t,this._ptr[r],this._ptr[r+1],this._index);return nu-1||o>l-1)&&(h(this,Math.max(a+1,u),Math.max(o+1,l),i),u=this._size[0],l=this._size[1]),mn(a,u),mn(o,l);var v=s(a,this._ptr[o],this._ptr[o+1],this._index);return v=0&&w<=i&&v(e._values[b],w-0,y-0)}else{for(var D={},N=g;N "+(this._values?en(this._values[s],e):"X");return i},o.prototype.toString=function(){return en(this.toArray())},o.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},o.prototype.diagonal=function(e){if(e){if(a(e)&&(e=e.toNumber()),!i(e)||!V(e))throw new TypeError("The parameter k must be an integer number")}else e=0;var t=e>0?e:0,r=e<0?-e:0,n=this._size[0],u=this._size[1],s=Math.min(n-r,u-t),c=[],f=[],l=[];l[0]=0;for(var p=t;p0?u:0,y=u<0?-u:0,g=e[0],x=e[1],b=Math.min(g-y,x-v);if(f(n)){if(n.length!==b)throw new Error("Invalid value array length");d=function(e){return n[e]}}else if(l(n)){var w=n.size();if(1!==w.length||w[0]!==b)throw new Error("Invalid matrix length");d=function(e){return n.get([e])}}else d=function(){return n};for(var D=[],N=[],E=[],A=0;A=0&&S=c||i[l]!==t)){var m=n?n[f]:void 0;i.splice(l,0,t),n&&n.splice(l,0,m),i.splice(l<=f?f+1:f,1),n&&n.splice(l<=f?f+1:f,1)}else if(l=c||i[f]!==e)){var h=n?n[l]:void 0;i.splice(f,0,e),n&&n.splice(f,0,h),i.splice(f<=l?l+1:l,1),n&&n.splice(f<=l?l+1:l,1)}}},o}),{isClass:!0})),Ni=Se("number",["typed"],(function(e){var t=e.typed,r=t("number",{"":function(){return 0},number:function(e){return e},string:function(e){if("NaN"===e)return NaN;var t,r,n=(r=(t=e).match(/(0[box])([0-9a-fA-F]*)\.([0-9a-fA-F]*)/))?{input:t,radix:{"0b":2,"0o":8,"0x":16}[r[1]],integerPart:r[2],fractionalPart:r[3]}:null;if(n)return function(e){for(var t=parseInt(e.integerPart,e.radix),r=0,n=0;nMath.pow(2,i)-1)throw new SyntaxError('String "'.concat(e,'" is out of range'));o>=Math.pow(2,i-1)&&(o-=Math.pow(2,i))}return o},BigNumber:function(e){return e.toNumber()},Fraction:function(e){return e.valueOf()},Unit:t.referToSelf((function(e){return function(t){var r=t.clone();return r.value=e(t.value),r}})),null:function(e){return 0},"Unit, string | Unit":function(e,t){return e.toNumber(t)},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))});return r.fromJSON=function(e){return parseFloat(e.value)},r})),Ei="string",Ai=Se(Ei,["typed"],(function(e){var t=e.typed;return t(Ei,{"":function(){return""},number:ee,null:function(e){return"null"},boolean:function(e){return e+""},string:function(e){return e},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}})),any:function(e){return String(e)}})})),Si="boolean",Ci=Se(Si,["typed"],(function(e){var t=e.typed;return t(Si,{"":function(){return!1},boolean:function(e){return e},number:function(e){return!!e},null:function(e){return!1},BigNumber:function(e){return!e.isZero()},string:function(e){var t=e.toLowerCase();if("true"===t)return!0;if("false"===t)return!1;var r=Number(e);if(""!==e&&!isNaN(r))return!!r;throw new Error('Cannot convert "'+e+'" to a boolean')},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Mi=Se("bignumber",["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t("bignumber",{"":function(){return new r(0)},number:function(e){return new r(e+"")},string:function(e){var t=e.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);if(t){var n=t[2],i=r(t[1]),a=new r(2).pow(Number(n));if(i.gt(a.sub(1)))throw new SyntaxError('String "'.concat(e,'" is out of range'));var o=new r(2).pow(Number(n)-1);return i.gte(o)?i.sub(a):i}return new r(e)},BigNumber:function(e){return e},Unit:t.referToSelf((function(e){return function(t){var r=t.clone();return r.value=e(t.value),r}})),Fraction:function(e){return new r(e.n).div(e.d).times(e.s)},null:function(e){return new r(0)},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Fi=Se("complex",["typed","Complex"],(function(e){var t=e.typed,r=e.Complex;return t("complex",{"":function(){return r.ZERO},number:function(e){return new r(e,0)},"number, number":function(e,t){return new r(e,t)},"BigNumber, BigNumber":function(e,t){return new r(e.toNumber(),t.toNumber())},Fraction:function(e){return new r(e.valueOf(),0)},Complex:function(e){return e.clone()},string:function(e){return r(e)},null:function(e){return r(0)},Object:function(e){if("re"in e&&"im"in e)return new r(e.re,e.im);if("r"in e&&"phi"in e||"abs"in e&&"arg"in e)return new r(e);throw new Error("Expected object with properties (re and im) or (r and phi) or (abs and arg)")},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Oi=Se("fraction",["typed","Fraction"],(function(e){var t=e.typed,r=e.Fraction;return t("fraction",{number:function(e){if(!isFinite(e)||isNaN(e))throw new Error(e+" cannot be represented as a fraction");return new r(e)},string:function(e){return new r(e)},"number, number":function(e,t){return new r(e,t)},null:function(e){return new r(0)},BigNumber:function(e){return new r(e.toString())},Fraction:function(e){return e},Unit:t.referToSelf((function(e){return function(t){var r=t.clone();return r.value=e(t.value),r}})),Object:function(e){return new r(e)},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Ti="matrix",_i=Se(Ti,["typed","Matrix","DenseMatrix","SparseMatrix"],(function(e){var t=e.typed,r=(e.Matrix,e.DenseMatrix),n=e.SparseMatrix;return t(Ti,{"":function(){return i([])},string:function(e){return i([],e)},"string, string":function(e,t){return i([],e,t)},Array:function(e){return i(e)},Matrix:function(e){return i(e,e.storage())},"Array | Matrix, string":i,"Array | Matrix, string, string":i});function i(e,t,i){if("dense"===t||"default"===t||void 0===t)return new r(e,i);if("sparse"===t)return new n(e,i);throw new TypeError("Unknown matrix type "+JSON.stringify(t)+".")}})),Bi="matrixFromFunction",ki=Se(Bi,["typed","matrix","isZero"],(function(e){var t=e.typed,r=e.matrix,n=e.isZero;return t(Bi,{"Array | Matrix, function, string, string":function(e,t,r,n){return i(e,t,r,n)},"Array | Matrix, function, string":function(e,t,r){return i(e,t,r)},"Matrix, function":function(e,t){return i(e,t,"dense")},"Array, function":function(e,t){return i(e,t,"dense").toArray()},"Array | Matrix, string, function":function(e,t,r){return i(e,r,t)},"Array | Matrix, string, string, function":function(e,t,r,n){return i(e,n,t,r)}});function i(e,t,i,a){var o;return(o=void 0!==a?r(i,a):r(i)).resize(e),o.forEach((function(e,r){var i=t(r);n(i)||o.set(r,i)})),o}}));function Ii(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(e);try{for(a.s();!(t=a.n()).done;){var u=t.value,s=o(u);if(s!==r)throw new TypeError("The vectors had different length: "+(0|r)+" ≠ "+(0|s));i.push(n(u))}}catch(e){a.e(e)}finally{a.f()}return i}function o(e){var t=i(e);if(1===t.length)return t[0];if(2===t.length){if(1===t[0])return t[1];if(1===t[1])return t[0];throw new TypeError("At least one of the arguments is not a vector.")}throw new TypeError("Only one- or two-dimensional vectors are supported.")}}));function qi(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(e);try{for(u.s();!(a=u.n()).done;){var s=a.value,c=o(s);if(c!==t)throw new TypeError("The vectors had different length: "+(0|t)+" ≠ "+(0|c));for(var f=n(s),l=0;l1&&void 0!==arguments[1]?arguments[1]:2,r=t<0;if(r&&(t=-t),0===t)throw new Error("Root must be non-zero");if(e<0&&Math.abs(t)%2!=1)throw new Error("Root must be odd when a is negative.");if(0===e)return r?1/0:0;if(!isFinite(e))return r?0:e;var n=Math.pow(Math.abs(e),1/t);return n=e<0?-n:n,r?1/n:n}function aa(e){return Z(e)}function oa(e){return e*e}function ua(e,t){var r,n,i,a=0,o=1,u=1,s=0;if(!V(e)||!V(t))throw new Error("Parameters in function xgcd must be integer numbers");for(;t;)i=e-(n=Math.floor(e/t))*t,r=a,a=o-n*a,o=r,r=u,u=s-n*u,s=r,e=t,t=i;return e<0?[-e,-o,-s]:[e,e?o:0,s]}function sa(e,t){return e*e<1&&t===1/0||e*e>1&&t===-1/0?0:Math.pow(e,t)}function ca(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!V(t)||t<0||t>15)throw new Error("Number of decimals in function round must be an integer from 0 to 15 inclusive");return parseFloat(ne(e,t))}Gi.signature=$i,Vi.signature=Hi,Zi.signature=Hi,Wi.signature=Hi,Yi.signature=$i,Ji.signature=$i,Xi.signature=$i,Qi.signature=$i,Ki.signature=$i,ea.signature=$i,ta.signature=Hi,ra.signature=$i,na.signature=$i,aa.signature=$i,oa.signature=$i,ua.signature=Hi,sa.signature=Hi;var fa="unaryMinus",la=Se(fa,["typed"],(function(e){var t=e.typed;return t(fa,{number:Yi,"Complex | BigNumber | Fraction":function(e){return e.neg()},Unit:t.referToSelf((function(e){return function(r){var n=r.clone();return n.value=t.find(e,n.valueType())(r.value),n}})),"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}}))})})),pa="unaryPlus",ma=Se(pa,["typed","config","BigNumber"],(function(e){var t=e.typed,r=e.config,n=e.BigNumber;return t(pa,{number:Ji,Complex:function(e){return e},BigNumber:function(e){return e},Fraction:function(e){return e},Unit:function(e){return e.clone()},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),"boolean | string":function(e){return"BigNumber"===r.number?new n(+e):+e}})})),ha=Se("abs",["typed"],(function(e){var t=e.typed;return t("abs",{number:Gi,"Complex | BigNumber | Fraction | Unit":function(e){return e.abs()},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}}))})})),da="apply",va=Se(da,["typed","isInteger"],(function(e){var t=e.typed,r=e.isInteger;return t(da,{"Array | Matrix, number | BigNumber, function":function(e,t,n){if(!r(t))throw new TypeError("Integer number expected for dimension");var i=Array.isArray(e)?cn(e):e.size();if(t<0||t>=i.length)throw new sn(t,i.length);return l(e)?e.create(ya(e.valueOf(),t,n)):ya(e,t,n)}})}));function ya(e,t,r){var n,i,a;if(t<=0){if(Array.isArray(e[0])){for(a=function(e){var t,r,n=e.length,i=e[0].length,a=[];for(r=0;r0?r(f,0,s,s[0],u,n,a):[];return e.createDenseMatrix({data:l,size:ye(s),datatype:o})};function r(e,t,n,i,a,o,u){var s=[];if(t===n.length-1)for(var c=0;c0?n(e):r(e)},"number, number":function(e,t){return e>0?n(e,t):r(e,t)}})})),Pa=Se(Ra,qa,(function(e){var t=e.typed,r=e.Complex,n=e.matrix,i=e.ceil,a=e.floor,o=e.equalScalar,u=e.zeros,s=e.DenseMatrix,c=Sa({typed:t,DenseMatrix:s}),f=Ca({typed:t}),l=ja({typed:t,ceil:i,floor:a});return t("fix",{number:l.signatures.number,"number, number | BigNumber":l.signatures["number,number"],Complex:function(e){return new r(e.re>0?Math.floor(e.re):Math.ceil(e.re),e.im>0?Math.floor(e.im):Math.ceil(e.im))},"Complex, number":function(e,t){return new r(e.re>0?a(e.re,t):i(e.re,t),e.im>0?a(e.im,t):i(e.im,t))},"Complex, BigNumber":function(e,t){var n=t.toNumber();return new r(e.re>0?a(e.re,n):i(e.re,n),e.im>0?a(e.im,n):i(e.im,n))},BigNumber:function(e){return e.isNegative()?i(e):a(e)},"BigNumber, number | BigNumber":function(e,t){return e.isNegative()?i(e,t):a(e,t)},Fraction:function(e){return e.s<0?e.ceil():e.floor()},"Fraction, number | BigNumber":function(e,t){return e.s<0?i(e,t):a(e,t)},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),"Array | Matrix, number | BigNumber":t.referToSelf((function(e){return function(t,r){return Zn(t,(function(t){return e(t,r)}),!0)}})),"number | Complex | Fraction | BigNumber, Array":t.referToSelf((function(e){return function(t,r){return f(n(r),t,e,!0).valueOf()}})),"number | Complex | Fraction | BigNumber, Matrix":t.referToSelf((function(e){return function(t,r){return o(t,0)?u(r.size(),r.storage()):"dense"===r.storage()?f(r,t,e,!0):c(r,t,e,!0)}}))})})),La="floor",Ua=["typed","config","round","matrix","equalScalar","zeros","DenseMatrix"],$a=Se(La,["typed","config","round"],(function(e){var t=e.typed,r=e.config,n=e.round;return t(La,{number:function(e){return se(e,n(e),r.epsilon)?n(e):Math.floor(e)},"number, number":function(e,t){if(se(e,n(e,t),r.epsilon))return n(e,t);var i=Ea("".concat(e,"e").split("e"),2),a=i[0],o=i[1],u=Math.floor(Number("".concat(a,"e").concat(Number(o)+t))),s=Ea("".concat(u,"e").split("e"),2);return a=s[0],o=s[1],Number("".concat(a,"e").concat(Number(o)-t))}})})),Ha=Se(La,Ua,(function(e){var t=e.typed,r=e.config,n=e.round,i=e.matrix,a=e.equalScalar,o=e.zeros,u=e.DenseMatrix,s=Aa({typed:t,equalScalar:a}),c=Sa({typed:t,DenseMatrix:u}),f=Ca({typed:t}),l=$a({typed:t,config:r,round:n});return t("floor",{number:l.signatures.number,"number,number":l.signatures["number,number"],Complex:function(e){return e.floor()},"Complex, number":function(e,t){return e.floor(t)},"Complex, BigNumber":function(e,t){return e.floor(t.toNumber())},BigNumber:function(e){return gi(e,n(e),r.epsilon)?n(e):e.floor()},"BigNumber, BigNumber":function(e,t){return gi(e,n(e,t),r.epsilon)?n(e,t):e.toDecimalPlaces(t.toNumber(),Pr.ROUND_FLOOR)},Fraction:function(e){return e.floor()},"Fraction, number":function(e,t){return e.floor(t)},"Fraction, BigNumber":function(e,t){return e.floor(t.toNumber())},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),"Array, number | BigNumber":t.referToSelf((function(e){return function(t,r){return Zn(t,(function(t){return e(t,r)}),!0)}})),"SparseMatrix, number | BigNumber":t.referToSelf((function(e){return function(t,r){return s(t,r,e,!1)}})),"DenseMatrix, number | BigNumber":t.referToSelf((function(e){return function(t,r){return f(t,r,e,!1)}})),"number | Complex | Fraction | BigNumber, Array":t.referToSelf((function(e){return function(t,r){return f(i(r),t,e,!0).valueOf()}})),"number | Complex | Fraction | BigNumber, Matrix":t.referToSelf((function(e){return function(t,r){return a(t,0)?o(r.size(),r.storage()):"dense"===r.storage()?f(r,t,e,!0):c(r,t,e,!0)}}))})}));function Ga(e,t,r){return(t=Be(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Va=Se("matAlgo02xDS0",["typed","equalScalar"],(function(e){var t=e.typed,r=e.equalScalar;return function(e,n,i,a){var o=e._data,u=e._size,s=e._datatype||e.getDataType(),c=n._values,f=n._index,l=n._ptr,p=n._size,m=n._datatype||void 0===n._data?n._datatype:n.getDataType();if(u.length!==p.length)throw new un(u.length,p.length);if(u[0]!==p[0]||u[1]!==p[1])throw new RangeError("Dimension mismatch. Matrix A ("+u+") must match Matrix B ("+p+")");if(!c)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var h,d=u[0],v=u[1],y=r,g=0,x=i;"string"==typeof s&&s===m&&"mixed"!==s&&(h=s,y=t.find(r,[h,h]),g=t.convert(0,h),x=t.find(i,[h,h]));for(var b=[],w=[],D=[],N=0;N0?r(h,0,p,p[0],o,c):[];return e.createDenseMatrix({data:d,size:p,datatype:a})};function r(e,t,n,i,a,o){var u=[];if(t===n.length-1)for(var s=0;s=0||r.predictable?ra(e):new n(e,0).log().div(Math.LN10)},Complex:function(e){return new n(e).log().div(Math.LN10)},BigNumber:function(e){return!e.isNegative()||r.predictable?e.log():new n(e.toNumber(),0).log().div(Math.LN10)},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),po="log2",mo=Se(po,["typed","config","Complex"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(po,{number:function(e){return e>=0||r.predictable?na(e):i(new n(e,0))},Complex:i,BigNumber:function(e){return!e.isNegative()||r.predictable?e.log(2):i(new n(e.toNumber(),0))},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))});function i(e){var t=Math.sqrt(e.re*e.re+e.im*e.im);return new n(Math.log2?Math.log2(t):Math.log(t)/Math.LN2,Math.atan2(e.im,e.re)/Math.LN2)}})),ho=Se("multiplyScalar",["typed"],(function(e){return(0,e.typed)("multiplyScalar",{"number, number":Wi,"Complex, Complex":function(e,t){return e.mul(t)},"BigNumber, BigNumber":function(e,t){return e.times(t)},"Fraction, Fraction":function(e,t){return e.mul(t)},"number | Fraction | BigNumber | Complex, Unit":function(e,t){return t.multiply(e)},"Unit, number | Fraction | BigNumber | Complex | Unit":function(e,t){return e.multiply(t)}})})),vo="multiply",yo=Se(vo,["typed","matrix","addScalar","multiplyScalar","equalScalar","dot"],(function(e){var t=e.typed,r=e.matrix,n=e.addScalar,i=e.multiplyScalar,a=e.equalScalar,o=e.dot,u=Aa({typed:t,equalScalar:a}),s=Ca({typed:t});function c(e,t){switch(e.length){case 1:switch(t.length){case 1:if(e[0]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Vectors must have the same length");break;case 2:if(e[0]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Vector length ("+e[0]+") must match Matrix rows ("+t[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+t.length+" dimensions)")}break;case 2:switch(t.length){case 1:if(e[1]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Matrix columns ("+e[1]+") must match Vector length ("+t[0]+")");break;case 2:if(e[1]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Matrix A columns ("+e[1]+") must match Matrix B rows ("+t[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+t.length+" dimensions)")}break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix A has "+e.length+" dimensions)")}}var f=t("_multiplyMatrixVector",{"DenseMatrix, any":function(e,r){var a,o=e._data,u=e._size,s=e._datatype||e.getDataType(),c=r._data,f=r._datatype||r.getDataType(),l=u[0],p=u[1],m=n,h=i;s&&f&&s===f&&"string"==typeof s&&"mixed"!==s&&(a=s,m=t.find(n,[a,a]),h=t.find(i,[a,a]));for(var d=[],v=0;vS)for(var M=0,F=0;F=0||t.predictable?Math.sqrt(e):new n(e,0).sqrt()}})),No="square",Eo=Se(No,["typed"],(function(e){return(0,e.typed)(No,{number:oa,Complex:function(e){return e.mul(e)},BigNumber:function(e){return e.times(e)},Fraction:function(e){return e.mul(e)},Unit:function(e){return e.pow(2)}})})),Ao="subtract",So=Se(Ao,["typed","matrix","equalScalar","subtractScalar","unaryMinus","DenseMatrix","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.subtractScalar,a=(e.unaryMinus,e.DenseMatrix),o=e.concat,u=Ka({typed:t}),s=Za({typed:t}),c=Wa({typed:t,equalScalar:n}),f=to({typed:t,DenseMatrix:a}),l=Sa({typed:t,DenseMatrix:a}),p=Xa({typed:t,matrix:r,concat:o});return t(Ao,{"any, any":i},p({elop:i,SS:c,DS:u,SD:s,Ss:l,sS:f}))})),Co="xgcd",Mo=Se(Co,["typed","config","matrix","BigNumber"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.BigNumber;return t(Co,{"number, number":function(e,t){var i=ua(e,t);return"Array"===r.matrix?i:n(i)},"BigNumber, BigNumber":function(e,t){var a,o,u,s,c=new i(0),f=new i(1),l=c,p=f,m=f,h=c;if(!e.isInt()||!t.isInt())throw new Error("Parameters in function xgcd must be integer numbers");for(;!t.isZero();)o=e.div(t).floor(),u=e.mod(t),a=l,l=p.minus(o.times(l)),p=a,a=m,m=h.minus(o.times(m)),h=a,e=t,t=u;return s=e.lt(c)?[e.neg(),p.neg(),h.neg()]:[e,e.isZero()?0:p,h],"Array"===r.matrix?s:n(s)}})})),Fo="invmod",Oo=Se(Fo,["typed","config","BigNumber","xgcd","equal","smaller","mod","add","isInteger"],(function(e){var t=e.typed,r=(e.config,e.BigNumber),n=e.xgcd,i=e.equal,a=e.smaller,o=e.mod,u=e.add,s=e.isInteger;return t(Fo,{"number, number":c,"BigNumber, BigNumber":c});function c(e,t){if(!s(e)||!s(t))throw new Error("Parameters in function invmod must be integer numbers");if(e=o(e,t),i(t,0))throw new Error("Divisor must be non zero");var c=n(e,t),f=Ea(c=c.valueOf(),2),l=f[0],p=f[1];return i(l,r(1))?(p=o(p,t),a(p,r(0))&&(p=u(p,t)),p):NaN}})),To=Se("matAlgo09xS0Sf",["typed","equalScalar"],(function(e){var t=e.typed,r=e.equalScalar;return function(e,n,i){var a=e._values,o=e._index,u=e._ptr,s=e._size,c=e._datatype||void 0===e._data?e._datatype:e.getDataType(),f=n._values,l=n._index,p=n._ptr,m=n._size,h=n._datatype||void 0===n._data?n._datatype:n.getDataType();if(s.length!==m.length)throw new un(s.length,m.length);if(s[0]!==m[0]||s[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+s+") must match Matrix B ("+m+")");var d,v=s[0],y=s[1],g=r,x=0,b=i;"string"==typeof c&&c===h&&"mixed"!==c&&(d=c,g=t.find(r,[d,d]),x=t.convert(0,d),b=t.find(i,[d,d]));var w,D,N,E,A,S=a&&f?[]:void 0,C=[],M=[],F=S?[]:void 0,O=[];for(D=0;D0;)r(a[--m],o[--h])===d&&(v=v.plus(y)),y=y.times(g);for(;h>0;)r(u,o[--h])===d&&(v=v.plus(y)),y=y.times(g);return s.config({precision:x}),0===d&&(v.s=-v.s),v}function qo(e){for(var t=e.d,r=t[0]+"",n=1;n0)if(++u>c)for(u-=c;u--;)s+="0";else u1&&(null!==f[m+1]&&void 0!==f[m+1]||(f[m+1]=0),f[m+1]+=f[m]>>1,f[m]&=1)}return f.reverse()}function jo(e,t){if(e.isFinite()&&!e.isInteger()||t.isFinite()&&!t.isInteger())throw new Error("Integers expected in function bitXor");var r=e.constructor;if(e.isNaN()||t.isNaN())return new r(NaN);if(e.isZero())return t;if(t.isZero())return e;if(e.eq(t))return new r(0);var n=new r(-1);return e.eq(n)?Io(t):t.eq(n)?Io(e):e.isFinite()&&t.isFinite()?Ro(e,t,(function(e,t){return e^t})):e.isFinite()||t.isFinite()?new r(e.isNegative()===t.isNegative()?1/0:-1/0):n}function Po(e,t){if(e.isFinite()&&!e.isInteger()||t.isFinite()&&!t.isInteger())throw new Error("Integers expected in function leftShift");var r=e.constructor;return e.isNaN()||t.isNaN()||t.isNegative()&&!t.isZero()?new r(NaN):e.isZero()||t.isZero()?e:e.isFinite()||t.isFinite()?t.lt(55)?e.times(Math.pow(2,t.toNumber())+""):e.times(new r(2).pow(t)):new r(NaN)}function Lo(e,t){if(e.isFinite()&&!e.isInteger()||t.isFinite()&&!t.isInteger())throw new Error("Integers expected in function rightArithShift");var r=e.constructor;return e.isNaN()||t.isNaN()||t.isNegative()&&!t.isZero()?new r(NaN):e.isZero()||t.isZero()?e:t.isFinite()?t.lt(55)?e.div(Math.pow(2,t.toNumber())+"").floor():e.div(new r(2).pow(t)).floor():e.isNegative()?new r(-1):e.isFinite()?new r(0):new r(NaN)}r(4490);var Uo="number, number";function $o(e,t){if(!V(e)||!V(t))throw new Error("Integers expected in function bitAnd");return e&t}function Ho(e){if(!V(e))throw new Error("Integer expected in function bitNot");return~e}function Go(e,t){if(!V(e)||!V(t))throw new Error("Integers expected in function bitOr");return e|t}function Vo(e,t){if(!V(e)||!V(t))throw new Error("Integers expected in function bitXor");return e^t}function Zo(e,t){if(!V(e)||!V(t))throw new Error("Integers expected in function leftShift");return e<>t}function Yo(e,t){if(!V(e)||!V(t))throw new Error("Integers expected in function rightLogShift");return e>>>t}$o.signature=Uo,Ho.signature="number",Go.signature=Uo,Vo.signature=Uo,Zo.signature=Uo,Wo.signature=Uo,Yo.signature=Uo;var Jo="bitAnd",Xo=Se(Jo,["typed","matrix","equalScalar","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.concat,a=Va({typed:t,equalScalar:n}),o=so({typed:t,equalScalar:n}),u=Aa({typed:t,equalScalar:n}),s=Xa({typed:t,matrix:r,concat:i});return t(Jo,{"number, number":$o,"BigNumber, BigNumber":ko},s({SS:o,DS:a,Ss:u}))})),Qo="bitNot",Ko=Se(Qo,["typed"],(function(e){var t=e.typed;return t(Qo,{number:Ho,BigNumber:Io,"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),eu="bitOr",tu=Se(eu,["typed","matrix","equalScalar","DenseMatrix","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.DenseMatrix,a=e.concat,o=Ka({typed:t}),u=eo({typed:t,equalScalar:n}),s=to({typed:t,DenseMatrix:i}),c=Xa({typed:t,matrix:r,concat:a});return t(eu,{"number, number":Go,"BigNumber, BigNumber":zo},c({SS:u,DS:o,Ss:s}))})),ru=Se("matAlgo07xSSf",["typed","DenseMatrix"],(function(e){var t=e.typed,r=e.DenseMatrix;return function(e,i,a){var o=e._size,u=e._datatype||void 0===e._data?e._datatype:e.getDataType(),s=i._size,c=i._datatype||void 0===i._data?i._datatype:i.getDataType();if(o.length!==s.length)throw new un(o.length,s.length);if(o[0]!==s[0]||o[1]!==s[1])throw new RangeError("Dimension mismatch. Matrix A ("+o+") must match Matrix B ("+s+")");var f,l,p,m=o[0],h=o[1],d=0,v=a;"string"==typeof u&&u===c&&"mixed"!==u&&(f=u,d=t.convert(0,f),v=t.find(a,[f,f]));var y=[];for(l=0;l0&&s>o)throw new sn(s,o+1)}else{var m=ye(p).valueOf(),h=cn(m);if(f[t]=m,o=s,s=h.length-1,t>0&&s!==o)throw new un(o+1,s+1)}}if(0===f.length)throw new SyntaxError("At least one matrix expected");for(var d=f.shift();f.length;)d=kn(d,f.shift(),s);return c?r(d):d},"...string":function(e){return e.join("")}})})),bu="column",wu=Se(bu,["typed","Index","matrix","range"],(function(e){var t=e.typed,r=e.Index,n=e.matrix,i=e.range;return t(bu,{"Matrix, number":a,"Array, number":function(e,t){return a(n(ye(e)),t).valueOf()}});function a(e,t){if(2!==e.size().length)throw new Error("Only two dimensional matrix is supported");mn(t,e.size()[1]);var a=i(0,e.size()[0]),o=new r(a,t),u=e.subset(o);return l(u)?u:n([[u]])}})),Du="count",Nu=Se(Du,["typed","size","prod"],(function(e){var t=e.typed,r=e.size,n=e.prod;return t(Du,{string:function(e){return e.length},"Matrix | Array":function(e){return n(r(e))}})})),Eu="cross",Au=Se(Eu,["typed","matrix","subtract","multiply"],(function(e){var t=e.typed,r=e.matrix,n=e.subtract,i=e.multiply;return t(Eu,{"Matrix, Matrix":function(e,t){return r(a(e.toArray(),t.toArray()))},"Matrix, Array":function(e,t){return r(a(e.toArray(),t))},"Array, Matrix":function(e,t){return r(a(e,t.toArray()))},"Array, Array":a});function a(e,t){var r=Math.max(cn(e).length,cn(t).length);e=bn(e),t=bn(t);var a=cn(e),o=cn(t);if(1!==a.length||1!==o.length||3!==a[0]||3!==o[0])throw new RangeError("Vectors with length 3 expected (Size A = ["+a.join(", ")+"], B = ["+o.join(", ")+"])");var u=[n(i(e[1],t[2]),i(e[2],t[1])),n(i(e[2],t[0]),i(e[0],t[2])),n(i(e[0],t[1]),i(e[1],t[0]))];return r>1?[u]:u}})),Su="diag",Cu=Se(Su,["typed","matrix","DenseMatrix","SparseMatrix"],(function(e){var t=e.typed,r=e.matrix,n=e.DenseMatrix,i=e.SparseMatrix;return t(Su,{Array:function(e){return a(e,0,cn(e),null)},"Array, number":function(e,t){return a(e,t,cn(e),null)},"Array, BigNumber":function(e,t){return a(e,t.toNumber(),cn(e),null)},"Array, string":function(e,t){return a(e,0,cn(e),t)},"Array, number, string":function(e,t,r){return a(e,t,cn(e),r)},"Array, BigNumber, string":function(e,t,r){return a(e,t.toNumber(),cn(e),r)},Matrix:function(e){return a(e,0,e.size(),e.storage())},"Matrix, number":function(e,t){return a(e,t,e.size(),e.storage())},"Matrix, BigNumber":function(e,t){return a(e,t.toNumber(),e.size(),e.storage())},"Matrix, string":function(e,t){return a(e,0,e.size(),t)},"Matrix, number, string":function(e,t,r){return a(e,t,e.size(),r)},"Matrix, BigNumber, string":function(e,t,r){return a(e,t.toNumber(),e.size(),r)}});function a(e,t,a,o){if(!V(t))throw new TypeError("Second parameter in function diag must be an integer");var u=t>0?t:0,s=t<0?-t:0;switch(a.length){case 1:return function(e,t,r,a,o,u){var s=[a+o,a+u];if(r&&"sparse"!==r&&"dense"!==r)throw new TypeError("Unknown matrix type ".concat(r,'"'));var c="sparse"===r?i.diagonal(s,e,t):n.diagonal(s,e,t);return null!==r?c:c.valueOf()}(e,t,o,a[0],s,u);case 2:return function(e,t,n,i,a,o){if(l(e)){var u=e.diagonal(t);return null!==n?n!==u.storage()?r(u,n):u:u.valueOf()}for(var s=Math.min(i[0]-a,i[1]-o),c=[],f=0;f=2&&s.push("index: ".concat(H(r))),o.length>=3&&s.push("array: ".concat(H(n))),new TypeError("Function ".concat(i," cannot apply callback arguments ")+"".concat(e.name,"(").concat(s.join(", "),") at index ").concat(JSON.stringify(r)))}throw new TypeError("Function ".concat(i," cannot apply callback arguments ")+"to function ".concat(e.name,": ").concat(a.message))}}}var Fu=Se("filter",["typed"],(function(e){return(0,e.typed)("filter",{"Array, function":Ou,"Matrix, function":function(e,t){return e.create(Ou(e.toArray(),t))},"Array, RegExp":Mn,"Matrix, RegExp":function(e,t){return e.create(Mn(e.toArray(),t))}})}));function Ou(e,t){return Cn(e,(function(e,r,n){return Mu(t,e,[r],n,"filter")}))}var Tu="flatten",_u=Se(Tu,["typed","matrix"],(function(e){var t=e.typed,r=e.matrix;return t(Tu,{Array:function(e){return En(e)},Matrix:function(e){var t=En(e.toArray());return r(t)}})})),Bu="forEach",ku=Se(Bu,["typed"],(function(e){return(0,e.typed)(Bu,{"Array, function":Iu,"Matrix, function":function(e,t){e.forEach(t)}})}));function Iu(e,t){!function r(n,i){if(!Array.isArray(n))return Mu(t,n,i,e,"forEach");Sn(n,(function(e,t){r(e,i.concat(t))}))}(e,[])}var zu="getMatrixDataType",Ru=Se(zu,["typed"],(function(e){return(0,e.typed)(zu,{Array:function(e){return _n(e,H)},Matrix:function(e){return e.getDataType()}})})),qu="identity",ju=Se(qu,["typed","config","matrix","BigNumber","DenseMatrix","SparseMatrix"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.BigNumber,o=e.DenseMatrix,u=e.SparseMatrix;return t(qu,{"":function(){return"Matrix"===r.matrix?n([]):[]},string:function(e){return n(e)},"number | BigNumber":function(e){return c(e,e,"Matrix"===r.matrix?"dense":void 0)},"number | BigNumber, string":function(e,t){return c(e,e,t)},"number | BigNumber, number | BigNumber":function(e,t){return c(e,t,"Matrix"===r.matrix?"dense":void 0)},"number | BigNumber, number | BigNumber, string":function(e,t,r){return c(e,t,r)},Array:function(e){return s(e)},"Array, string":function(e,t){return s(e,t)},Matrix:function(e){return s(e.valueOf(),e.storage())},"Matrix, string":function(e,t){return s(e.valueOf(),t)}});function s(e,t){switch(e.length){case 0:return t?n(t):[];case 1:return c(e[0],e[0],t);case 2:return c(e[0],e[1],t);default:throw new Error("Vector containing two values expected")}}function c(e,t,r){var n=a(e)||a(t)?i:null;if(a(e)&&(e=e.toNumber()),a(t)&&(t=t.toNumber()),!V(e)||e<1)throw new Error("Parameters in function identity must be positive integers");if(!V(t)||t<1)throw new Error("Parameters in function identity must be positive integers");var s=n?new i(1):1,c=n?new n(0):0,f=[e,t];if(r){if("sparse"===r)return u.diagonal(f,s,0,c);if("dense"===r)return o.diagonal(f,s,0,c);throw new TypeError('Unknown matrix type "'.concat(r,'"'))}for(var l=dn([],f,c),p=e2||cn(t).length>2)throw new RangeError("Vectors with dimensions greater then 2 are not supported expected (Size x = "+JSON.stringify(e.length)+", y = "+JSON.stringify(t.length)+")");var r=[],i=[];return e.map((function(e){return t.map((function(t){return i=[],r.push(i),e.map((function(e){return t.map((function(t){return i.push(n(e,t))}))}))}))}))&&r}})),Uu=Se("map",["typed"],(function(e){return(0,e.typed)("map",{"Array, function":$u,"Matrix, function":function(e,t){return e.map(t)}})}));function $u(e,t){return function r(n,i){return Array.isArray(n)?n.map((function(e,t){return r(e,i.concat(t))})):Mu(t,n,i,e,"map")}(e,[])}var Hu="diff",Gu=Se(Hu,["typed","matrix","subtract","number"],(function(e){var t=e.typed,r=e.matrix,n=e.subtract,i=e.number;return t(Hu,{"Array | Matrix":function(e){return l(e)?r(o(e.toArray())):o(e)},"Array | Matrix, number":function(e,t){if(!V(t))throw new RangeError("Dimension must be a whole number");return l(e)?r(a(e.toArray(),t)):a(e,t)},"Array, BigNumber":t.referTo("Array,number",(function(e){return function(t,r){return e(t,i(r))}})),"Matrix, BigNumber":t.referTo("Matrix,number",(function(e){return function(t,r){return e(t,i(r))}}))});function a(e,t){if(l(e)&&(e=e.toArray()),!Array.isArray(e))throw RangeError("Array/Matrix does not have that many dimensions");if(t>0){var r=[];return e.forEach((function(e){r.push(a(e,t-1))})),r}if(0===t)return o(e);throw RangeError("Cannot have negative dimension")}function o(e){for(var t=[],r=e.length,n=1;n0?u.resize(e,o):u}var s=[];return e.length>0?dn(s,e,o):s}}));function Zu(){throw new Error('No "bignumber" implementation available')}function Wu(){throw new Error('No "fraction" implementation available')}function Yu(){throw new Error('No "matrix" implementation available')}var Ju="range",Xu=Se(Ju,["typed","config","?matrix","?bignumber","smaller","smallerEq","larger","largerEq","add","isPositive"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.bignumber,a=e.smaller,o=e.smallerEq,u=e.larger,s=e.largerEq,c=e.add,f=e.isPositive;return t(Ju,{string:p,"string, boolean":p,"number, number":function(e,t){return l(m(e,t,1,!1))},"number, number, number":function(e,t,r){return l(m(e,t,r,!1))},"number, number, boolean":function(e,t,r){return l(m(e,t,1,r))},"number, number, number, boolean":function(e,t,r,n){return l(m(e,t,r,n))},"BigNumber, BigNumber":function(e,t){return l(m(e,t,new(0,e.constructor)(1),!1))},"BigNumber, BigNumber, BigNumber":function(e,t,r){return l(m(e,t,r,!1))},"BigNumber, BigNumber, boolean":function(e,t,r){return l(m(e,t,new(0,e.constructor)(1),r))},"BigNumber, BigNumber, BigNumber, boolean":function(e,t,r,n){return l(m(e,t,r,n))},"Unit, Unit, Unit":function(e,t,r){return l(m(e,t,r,!1))},"Unit, Unit, Unit, boolean":function(e,t,r,n){return l(m(e,t,r,n))}});function l(e){return"Matrix"===r.matrix?n?n(e):Yu():e}function p(e,t){var n=function(e){var t=e.split(":").map((function(e){return Number(e)}));if(t.some((function(e){return isNaN(e)})))return null;switch(t.length){case 2:return{start:t[0],end:t[1],step:1};case 3:return{start:t[0],end:t[2],step:t[1]};default:return null}}(e);if(!n)throw new SyntaxError('String "'+e+'" is no valid range');return"BigNumber"===r.number?(void 0===i&&Zu(),l(m(i(n.start),i(n.end),i(n.step)))):l(m(n.start,n.end,n.step,t))}function m(e,t,r,n){for(var i=[],l=f(r)?n?o:a:n?s:u,p=e;l(p,t);)i.push(p),p=c(p,r);return i}})),Qu="reshape",Ku=Se(Qu,["typed","isInteger","matrix"],(function(e){var t=e.typed,r=e.isInteger;return t(Qu,{"Matrix, Array":function(e,t){return e.reshape(t,!0)},"Array, Array":function(e,t){return t.forEach((function(e){if(!r(e))throw new TypeError("Invalid size for dimension: "+e)})),yn(e,t)}})})),es=Se("resize",["config","matrix"],(function(e){var t=e.config,r=e.matrix;return function(e,n,i){if(2!==arguments.length&&3!==arguments.length)throw new ro("resize",arguments.length,2,3);if(l(n)&&(n=n.valueOf()),a(n[0])&&(n=n.map((function(e){return a(e)?e.toNumber():e}))),l(e))return e.resize(n,i,!0);if("string"==typeof e)return function(e,t,r){if(void 0!==r){if("string"!=typeof r||1!==r.length)throw new TypeError("Single character expected as defaultValue")}else r=" ";if(1!==t.length)throw new un(t.length,1);var n=t[0];if("number"!=typeof n||!V(n))throw new TypeError("Invalid size, must contain positive integers (size: "+en(t)+")");if(e.length>n)return e.substring(0,n);if(e.length2)throw new RangeError("Vector must be of dimensions 1x".concat(t));if(2===r.length&&1!==r[1])throw new RangeError("Vector must be of dimensions 1x".concat(t));if(r[0]!==t)throw new RangeError("Vector must be of dimensions 1x".concat(t))}})),ns="rotationMatrix",is=Se(ns,["typed","config","multiplyScalar","addScalar","unaryMinus","norm","matrix","BigNumber","DenseMatrix","SparseMatrix","cos","sin"],(function(e){var t=e.typed,r=e.config,n=e.multiplyScalar,i=e.addScalar,o=e.unaryMinus,u=e.norm,s=e.BigNumber,c=e.matrix,f=e.DenseMatrix,l=e.SparseMatrix,p=e.cos,m=e.sin;return t(ns,{"":function(){return"Matrix"===r.matrix?c([]):[]},string:function(e){return c(e)},"number | BigNumber | Complex | Unit":function(e){return h(e,"Matrix"===r.matrix?"dense":void 0)},"number | BigNumber | Complex | Unit, string":function(e,t){return h(e,t)},"number | BigNumber | Complex | Unit, Array":function(e,t){var r=c(t);return d(r),g(e,r,void 0)},"number | BigNumber | Complex | Unit, Matrix":function(e,t){d(t);var n=t.storage()||("Matrix"===r.matrix?"dense":void 0);return g(e,t,n)},"number | BigNumber | Complex | Unit, Array, string":function(e,t,r){var n=c(t);return d(n),g(e,n,r)},"number | BigNumber | Complex | Unit, Matrix, string":function(e,t,r){return d(t),g(e,t,r)}});function h(e,t){var r=a(e)?new s(-1):-1,i=p(e),o=m(e);return y([[i,n(r,o)],[o,i]],t)}function d(e){var t=e.size();if(t.length<1||3!==t[0])throw new RangeError("Vector must be of dimensions 1x3")}function v(e){return e.reduce((function(e,t){return n(e,t)}))}function y(e,t){if(t){if("sparse"===t)return new l(e);if("dense"===t)return new f(e);throw new TypeError('Unknown matrix type "'.concat(t,'"'))}return e}function g(e,t,r){var n=u(t);if(0===n)throw new RangeError("Rotation around zero vector");var c=a(e)?s:null,f=c?new c(1):1,l=c?new c(-1):-1,h=c?new c(t.get([0])/n):t.get([0])/n,d=c?new c(t.get([1])/n):t.get([1])/n,g=c?new c(t.get([2])/n):t.get([2])/n,x=p(e),b=i(f,o(x)),w=m(e);return y([[i(x,v([h,h,b])),i(v([h,d,b]),v([l,g,w])),i(v([h,g,b]),v([d,w]))],[i(v([h,d,b]),v([g,w])),i(x,v([d,d,b])),i(v([d,g,b]),v([l,h,w]))],[i(v([h,g,b]),v([l,d,w])),i(v([d,g,b]),v([h,w])),i(x,v([g,g,b]))]],r)}})),as=Se("row",["typed","Index","matrix","range"],(function(e){var t=e.typed,r=e.Index,n=e.matrix,i=e.range;return t("row",{"Matrix, number":a,"Array, number":function(e,t){return a(n(ye(e)),t).valueOf()}});function a(e,t){if(2!==e.size().length)throw new Error("Only two dimensional matrix is supported");mn(t,e.size()[0]);var a=i(0,e.size()[1]),o=new r(t,a),u=e.subset(o);return l(u)?u:n([[u]])}})),os="size",us=Se(os,["typed","config","?matrix"],(function(e){var t=e.typed,r=e.config,n=e.matrix;return t(os,{Matrix:function(e){return e.create(e.size())},Array:cn,string:function(e){return"Array"===r.matrix?[e.length]:n([e.length])},"number | Complex | BigNumber | Unit | boolean | null":function(e){return"Array"===r.matrix?[]:n?n([]):Yu()}})})),ss="squeeze",cs=Se(ss,["typed","matrix"],(function(e){var t=e.typed,r=e.matrix;return t(ss,{Array:function(e){return bn(ye(e))},Matrix:function(e){var t=bn(e.toArray());return Array.isArray(t)?r(t):t},any:function(e){return ye(e)}})})),fs="subset",ls=Se(fs,["typed","matrix","zeros","add"],(function(e){var t=e.typed,r=e.matrix,n=e.zeros,i=e.add;return t(fs,{"Matrix, Index":function(e,t){return hn(t)?r():(pn(e,t),e.subset(t))},"Array, Index":t.referTo("Matrix, Index",(function(e){return function(t,n){var i=e(r(t),n);return n.isScalar()?i:i.valueOf()}})),"Object, Index":hs,"string, Index":ps,"Matrix, Index, any, any":function(e,t,r,a){return hn(t)?e:(pn(e,t),e.clone().subset(t,function(e,t){if("string"==typeof e)throw new Error("can't boradcast a string");if(t._isScalar)return e;var r=t.size();if(!r.every((function(e){return e>0})))return e;try{return i(e,n(r))}catch(t){return e}}(r,t),a))},"Array, Index, any, any":t.referTo("Matrix, Index, any, any",(function(e){return function(t,n,i,a){var o=e(r(t),n,i,a);return o.isMatrix?o.valueOf():o}})),"Array, Index, any":t.referTo("Matrix, Index, any, any",(function(e){return function(t,n,i){return e(r(t),n,i,void 0).valueOf()}})),"Matrix, Index, any":t.referTo("Matrix, Index, any, any",(function(e){return function(t,r,n){return e(t,r,n,void 0)}})),"string, Index, string":ms,"string, Index, string, string":ms,"Object, Index, any":ds})}));function ps(e,t){if(!v(t))throw new TypeError("Index expected");if(hn(t))return"";if(pn(Array.from(e),t),1!==t.size().length)throw new un(t.size().length,1);var r=e.length;mn(t.min()[0],r),mn(t.max()[0],r);var n=t.dimension(0),i="";return n.forEach((function(t){i+=e.charAt(t)})),i}function ms(e,t,r,n){if(!t||!0!==t.isIndex)throw new TypeError("Index expected");if(hn(t))return e;if(pn(Array.from(e),t),1!==t.size().length)throw new un(t.size().length,1);if(void 0!==n){if("string"!=typeof n||1!==n.length)throw new TypeError("Single character expected as defaultValue")}else n=" ";var i=t.dimension(0);if(i.size()[0]!==r.length)throw new un(i.size()[0],r.length);var a=e.length;mn(t.min()[0]),mn(t.max()[0]);for(var o=[],u=0;ua)for(var s=a-1,c=o.length;s0?u.resize(e,o):u}var s=[];return e.length>0?dn(s,e,o):s}})),Ds=Se("fft",["typed","matrix","addScalar","multiplyScalar","divideScalar","exp","tau","i","dotDivide","conj","pow","ceil","log2"],(function(e){var t=e.typed,r=(e.matrix,e.addScalar),n=e.multiplyScalar,i=e.divideScalar,a=e.exp,o=e.tau,u=e.i,s=e.dotDivide,c=e.conj,f=e.pow,l=e.ceil,p=e.log2;return t("fft",{Array:m,Matrix:function(e){return e.create(m(e.toArray()))}});function m(e){var t=cn(e);return 1===t.length?d(e,t[0]):h(e.map((function(e){return m(e,t.slice(1))})),0)}function h(e,t){var r=cn(e);if(0!==t)return new Array(r[0]).fill(0).map((function(r,n){return h(e[n],t-1)}));if(1===r.length)return d(e);function n(e){var t=cn(e);return new Array(t[1]).fill(0).map((function(r,n){return new Array(t[0]).fill(0).map((function(t,r){return e[r][n]}))}))}return n(h(n(e),1))}function d(e){var t=e.length;if(1===t)return[e[0]];if(t%2==0){for(var h=[].concat(Te(d(e.filter((function(e,t){return t%2==0})))),Te(d(e.filter((function(e,t){return t%2==1}))))),v=0;v1/4&&(j.push(r(j[U],q)),P.push(r(P[U],o(q,z,V))),U++);var Y=.84*Math.pow(M/W,.2);if(d(Y,F)?Y=F:h(Y,O)&&(Y=O),Y=_?y(Y):Y,q=o(q,Y),A&&h(l(q),A)?q=D?A:g(A):S&&d(l(q),S)&&(q=D?S:g(S)),++$>T)throw new Error("Maximum number of iterations reached, try changing options")}return{t:j,y:P}}}function b(e,t,r,n){return x({a:[[],[.5],[0,3/4],[2/9,1/3,4/9]],c:[null,.5,3/4,1],b:[2/9,1/3,4/9,0],bp:[7/24,1/4,1/3,1/8]})(e,t,r,n)}function w(e,t,r,n){return x({a:[[],[.2],[3/40,9/40],[44/45,-56/15,32/9],[19372/6561,-25360/2187,64448/6561,-212/729],[9017/3168,-355/33,46732/5247,49/176,-5103/18656],[35/384,0,500/1113,125/192,-2187/6784,11/84]],c:[null,.2,.3,.8,8/9,1,1],b:[35/384,0,500/1113,125/192,-2187/6784,11/84,0],bp:[5179/57600,0,7571/16695,393/640,-92097/339200,187/2100,1/40]})(e,t,r,n)}function D(e,t,r,n){var i=n.method?n.method:"RK45",a={RK23:b,RK45:w};if(i.toUpperCase()in a){var o=function(e){for(var t=1;t=_s?Z(e):t<=Ms?Z(e)*function(e){var t,r=e*e,n=Os[0][4]*r,i=r;for(t=0;t<3;t+=1)n=(n+Os[0][t])*r,i=(i+Ts[0][t])*r;return e*(n+Os[0][3])/(i+Ts[0][3])}(t):t<=4?Z(e)*(1-function(e){var t,r=Os[1][8]*e,n=e;for(t=0;t<7;t+=1)r=(r+Os[1][t])*e,n=(n+Ts[1][t])*e;var i=(r+Os[1][7])/(n+Ts[1][7]),a=parseInt(16*e)/16,o=(e-a)*(e+a);return Math.exp(-a*a)*Math.exp(-o)*i}(t)):Z(e)*(1-function(e){var t,r=1/(e*e),n=Os[2][5]*r,i=r;for(t=0;t<4;t+=1)n=(n+Os[2][t])*r,i=(i+Ts[2][t])*r;var a=r*(n+Os[2][4])/(i+Ts[2][4]);a=(Fs-a)/e;var o=(e-(r=parseInt(16*e)/16))*(e+r);return Math.exp(-r*r)*Math.exp(-o)*a}(t))},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Ms=.46875,Fs=.5641895835477563,Os=[[3.1611237438705655,113.86415415105016,377.485237685302,3209.3775891384694,.18577770618460315],[.5641884969886701,8.883149794388377,66.11919063714163,298.6351381974001,881.952221241769,1712.0476126340707,2051.0783778260716,1230.3393547979972,2.1531153547440383e-8],[.30532663496123236,.36034489994980445,.12578172611122926,.016083785148742275,.0006587491615298378,.016315387137302097]],Ts=[[23.601290952344122,244.02463793444417,1282.6165260773723,2844.236833439171],[15.744926110709835,117.6939508913125,537.1811018620099,1621.3895745666903,3290.7992357334597,4362.619090143247,3439.3676741437216,1230.3393548037495],[2.568520192289822,1.8729528499234604,.5279051029514285,.06051834131244132,.0023352049762686918]],_s=Math.pow(2,53),Bs="zeta",ks=Se(Bs,["typed","config","multiply","pow","divide","factorial","equal","smallerEq","isNegative","gamma","sin","subtract","add","?Complex","?BigNumber","pi"],(function(e){var t=e.typed,r=e.config,n=e.multiply,i=e.pow,a=e.divide,o=e.factorial,u=e.equal,s=e.smallerEq,c=e.isNegative,f=e.gamma,l=e.sin,p=e.subtract,m=e.add,h=e.Complex,d=e.BigNumber,v=e.pi;return t(Bs,{number:function(e){return y(e,(function(e){return e}),(function(){return 20}))},BigNumber:function(e){return y(e,(function(e){return new d(e)}),(function(){return Math.abs(Math.log10(r.epsilon))}))},Complex:function(e){return 0===e.re&&0===e.im?new h(-.5):1===e.re?new h(NaN,NaN):e.re===1/0&&0===e.im?new h(1):e.im===1/0||e.re===-1/0?new h(NaN,NaN):g(e,(function(e){return e}),(function(e){return Math.round(19.5+.9*Math.abs(e.im))}),(function(e){return e.re}))}});function y(e,t,r){return u(e,0)?t(-.5):u(e,1)?t(NaN):isFinite(e)?g(e,t,r,(function(e){return e})):c(e)?t(NaN):t(1)}function g(e,t,r,o){var u=r(e);if(o(e)>-(u-1)/2)return function(e,t,r){for(var o=a(1,n(x(r(0),t),p(1,i(2,p(1,e))))),u=r(0),c=r(1);s(c,t);c=m(c,1))u=m(u,a(n(Math.pow(-1,c-1),x(c,t)),i(c,e)));return n(o,u)}(e,t(u),t);var c=n(i(2,e),i(t(v),p(e,1)));return c=n(c,l(n(a(t(v),2),e))),c=n(c,f(p(1,e))),n(c,g(p(1,e),t,r,o))}function x(e,t){for(var r=e,u=e;s(u,t);u=m(u,1)){var c=a(n(o(m(t,p(u,1))),i(4,u)),n(o(p(t,u)),o(n(2,u))));r=m(r,c)}return n(t,r)}})),Is="mode",zs=Se(Is,["typed","isNaN","isNumeric"],(function(e){var t=e.typed,r=e.isNaN,n=e.isNumeric;return t(Is,{"Array | Matrix":i,"...":function(e){return i(e)}});function i(e){if(0===(e=En(e.valueOf())).length)throw new Error("Cannot calculate mode of an empty array");for(var t={},i=[],a=0,o=0;oa&&(a=t[u],i=[u])}return i}}));function Rs(e,t,r){var n;return String(e).includes("Unexpected type")?(n=arguments.length>2?" (type: "+H(r)+", value: "+JSON.stringify(r)+")":" (type: "+e.data.actual+")",new TypeError("Cannot calculate "+t+", unexpected type of argument"+n)):String(e).includes("complex numbers")?(n=arguments.length>2?" (type: "+H(r)+", value: "+JSON.stringify(r)+")":"",new TypeError("Cannot calculate "+t+", no ordering relation is defined for complex numbers"+n)):e}var qs="prod",js=Se(qs,["typed","config","multiplyScalar","numeric"],(function(e){var t=e.typed,r=e.config,n=e.multiplyScalar,i=e.numeric;return t(qs,{"Array | Matrix":a,"Array | Matrix, number | BigNumber":function(e,t){throw new Error("prod(A, dim) is not yet supported")},"...":function(e){return a(e)}});function a(e){var t;if(Vn(e,(function(e){try{t=void 0===t?e:n(t,e)}catch(t){throw Rs(t,"prod",e)}})),"string"==typeof t&&(t=i(t,r.number)),void 0===t)throw new Error("Cannot calculate prod of an empty array");return t}})),Ps="format",Ls=Se(Ps,["typed"],(function(e){return(0,e.typed)(Ps,{any:en,"any, Object | function | number | BigNumber":en})})),Us=Se("bin",["typed","format"],(function(e){var t=e.typed,r=e.format;return t("bin",{"number | BigNumber":function(e){return r(e,{notation:"bin"})},"number | BigNumber, number | BigNumber":function(e,t){return r(e,{notation:"bin",wordSize:t})}})})),$s=Se("oct",["typed","format"],(function(e){var t=e.typed,r=e.format;return t("oct",{"number | BigNumber":function(e){return r(e,{notation:"oct"})},"number | BigNumber, number | BigNumber":function(e,t){return r(e,{notation:"oct",wordSize:t})}})})),Hs=Se("hex",["typed","format"],(function(e){var t=e.typed,r=e.format;return t("hex",{"number | BigNumber":function(e){return r(e,{notation:"hex"})},"number | BigNumber, number | BigNumber":function(e,t){return r(e,{notation:"hex",wordSize:t})}})})),Gs=/\$([\w.]+)/g,Vs="print",Zs=Se(Vs,["typed"],(function(e){return(0,e.typed)(Vs,{"string, Object | Array":Ws,"string, Object | Array, number | Object":Ws})}));function Ws(e,t,r){return e.replace(Gs,(function(e,n){var i=n.split("."),a=t[i.shift()];for(void 0!==a&&a.isMatrix&&(a=a.toArray());i.length&&void 0!==a;){var o=i.shift();a=o?a[o]:a+"."}return void 0!==a?c(a)?a:en(a,r):e}))}var Ys=Se("to",["typed","matrix","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.concat;return t("to",{"Unit, Unit | string":function(e,t){return e.to(t)}},Xa({typed:t,matrix:r,concat:n})({Ds:!0}))})),Js="isPrime",Xs=Se(Js,["typed"],(function(e){var t=e.typed;return t(Js,{number:function(e){if(0*e!=0)return!1;if(e<=3)return e>1;if(e%2==0||e%3==0)return!1;for(var t=5;t*t<=e;t+=6)if(e%t==0||e%(t+2)==0)return!1;return!0},BigNumber:function(e){if(0*e.toNumber()!=0)return!1;if(e.lte(3))return e.gt(1);if(e.mod(2).eq(0)||e.mod(3).eq(0))return!1;if(e.lt(Math.pow(2,32))){for(var t=e.toNumber(),r=5;r*r<=t;r+=6)if(t%r==0||t%(r+2)==0)return!1;return!0}function n(e,t,r){for(var n=1;!t.eq(0);)t.mod(2).eq(0)?(t=t.div(2),e=e.mul(e).mod(r)):(t=t.sub(1),n=e.mul(n).mod(r));return n}for(var i=e.constructor.clone({precision:2*e.toFixed(0).length}),a=0,o=(e=new i(e)).sub(1);o.mod(2).eq(0);)o=o.div(2),a+=1;var u=null;if(e.lt("3317044064679887385961981"))u=[2,3,5,7,11,13,17,19,23,29,31,37,41].filter((function(t){return t1&&void 0!==arguments[1]?arguments[1]:"number";if(void 0!==(arguments.length>2?arguments[2]:void 0))throw new SyntaxError("numeric() takes one or two arguments");var r=H(e);if(!(r in i))throw new TypeError("Cannot convert "+e+' of type "'+r+'"; valid input types are '+Object.keys(i).join(", "));if(!(t in a))throw new TypeError("Cannot convert "+e+' to type "'+t+'"; valid output types are '+Object.keys(a).join(", "));return t===r?e:a[t](e)}})),Ks="divideScalar",ec=Se(Ks,["typed","numeric"],(function(e){var t=e.typed;return e.numeric,t(Ks,{"number, number":function(e,t){return e/t},"Complex, Complex":function(e,t){return e.div(t)},"BigNumber, BigNumber":function(e,t){return e.div(t)},"Fraction, Fraction":function(e,t){return e.div(t)},"Unit, number | Complex | Fraction | BigNumber | Unit":function(e,t){return e.divide(t)},"number | Fraction | Complex | BigNumber, Unit":function(e,t){return t.divideInto(e)}})})),tc=Se("pow",["typed","config","identity","multiply","matrix","inv","fraction","number","Complex"],(function(e){var t=e.typed,r=e.config,n=e.identity,i=e.multiply,a=e.matrix,o=e.inv,u=e.number,s=e.fraction,c=e.Complex;return t("pow",{"number, number":f,"Complex, Complex":function(e,t){return e.pow(t)},"BigNumber, BigNumber":function(e,t){return t.isInteger()||e>=0||r.predictable?e.pow(t):new c(e.toNumber(),0).pow(t.toNumber(),0)},"Fraction, Fraction":function(e,t){var n=e.pow(t);if(null!=n)return n;if(r.predictable)throw new Error("Result of pow is non-rational and cannot be expressed as a fraction");return f(e.valueOf(),t.valueOf())},"Array, number":l,"Array, BigNumber":function(e,t){return l(e,t.toNumber())},"Matrix, number":p,"Matrix, BigNumber":function(e,t){return p(e,t.toNumber())},"Unit, number | BigNumber":function(e,t){return e.pow(t)}});function f(e,t){if(r.predictable&&!V(t)&&e<0)try{var n=s(t),i=u(n);if((t===i||Math.abs((t-i)/t)<1e-14)&&n.d%2==1)return(n.n%2==0?1:-1)*Math.pow(-e,t)}catch(e){}return r.predictable&&(e<-1&&t===1/0||e>-1&&e<0&&t===-1/0)?NaN:V(t)||e>=0||r.predictable?sa(e,t):e*e<1&&t===1/0||e*e>1&&t===-1/0?0:new c(e,0).pow(t,0)}function l(e,t){if(!V(t))throw new TypeError("For A^b, b must be an integer (value is "+t+")");var r=cn(e);if(2!==r.length)throw new Error("For A^b, A must be 2 dimensional (A has "+r.length+" dimensions)");if(r[0]!==r[1])throw new Error("For A^b, A must be square (size is "+r[0]+"x"+r[1]+")");if(t<0)try{return l(o(e),-t)}catch(e){if("Cannot calculate inverse, determinant is zero"===e.message)throw new TypeError("For A^b, when A is not invertible, b must be a positive integer (value is "+t+")");throw e}for(var a=n(r[0]).valueOf(),u=e;t>=1;)1==(1&t)&&(a=i(u,a)),t>>=1,u=i(u,u);return a}function p(e,t){return a(l(e.valueOf(),t))}})),rc="Number of decimals in function round must be an integer",nc="round",ic=Se(nc,["typed","config","matrix","equalScalar","zeros","BigNumber","DenseMatrix"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.equalScalar,a=e.zeros,o=e.BigNumber,u=e.DenseMatrix,s=Aa({typed:t,equalScalar:i}),c=Sa({typed:t,DenseMatrix:u}),f=Ca({typed:t});function l(e){return Math.abs(re(e).exponent)}return t(nc,{number:function(e){var t=ca(e,l(r.epsilon));return ca(se(e,t,r.epsilon)?t:e)},"number, number":function(e,t){var n=l(r.epsilon);if(t>=n)return ca(e,t);var i=ca(e,n);return ca(se(e,i,r.epsilon)?i:e,t)},"number, BigNumber":function(e,t){if(!t.isInteger())throw new TypeError(rc);return new o(e).toDecimalPlaces(t.toNumber())},Complex:function(e){return e.round()},"Complex, number":function(e,t){if(t%1)throw new TypeError(rc);return e.round(t)},"Complex, BigNumber":function(e,t){if(!t.isInteger())throw new TypeError(rc);var r=t.toNumber();return e.round(r)},BigNumber:function(e){var t=new o(e).toDecimalPlaces(l(r.epsilon));return(gi(e,t,r.epsilon)?t:e).toDecimalPlaces(0)},"BigNumber, BigNumber":function(e,t){if(!t.isInteger())throw new TypeError(rc);var n=l(r.epsilon);if(t>=n)return e.toDecimalPlaces(t.toNumber());var i=e.toDecimalPlaces(n);return(gi(e,i,r.epsilon)?i:e).toDecimalPlaces(t.toNumber())},Fraction:function(e){return e.round()},"Fraction, number":function(e,t){if(t%1)throw new TypeError(rc);return e.round(t)},"Fraction, BigNumber":function(e,t){if(!t.isInteger())throw new TypeError(rc);return e.round(t.toNumber())},"Unit, number, Unit":t.referToSelf((function(e){return function(t,r,n){var i=t.toNumeric(n);return n.multiply(e(i,r))}})),"Unit, BigNumber, Unit":t.referToSelf((function(e){return function(t,r,n){return e(t,r.toNumber(),n)}})),"Unit, Unit":t.referToSelf((function(e){return function(t,r){return e(t,0,r)}})),"Array | Matrix, number, Unit":t.referToSelf((function(e){return function(t,r,n){return Zn(t,(function(t){return e(t,r,n)}),!0)}})),"Array | Matrix, BigNumber, Unit":t.referToSelf((function(e){return function(t,r,n){return e(t,r.toNumber(),n)}})),"Array | Matrix, Unit":t.referToSelf((function(e){return function(t,r){return e(t,0,r)}})),"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),"SparseMatrix, number | BigNumber":t.referToSelf((function(e){return function(t,r){return s(t,r,e,!1)}})),"DenseMatrix, number | BigNumber":t.referToSelf((function(e){return function(t,r){return f(t,r,e,!1)}})),"Array, number | BigNumber":t.referToSelf((function(e){return function(t,r){return f(n(t),r,e,!1).valueOf()}})),"number | Complex | BigNumber | Fraction, SparseMatrix":t.referToSelf((function(e){return function(t,r){return i(t,0)?a(r.size(),r.storage()):c(r,t,e,!0)}})),"number | Complex | BigNumber | Fraction, DenseMatrix":t.referToSelf((function(e){return function(t,r){return i(t,0)?a(r.size(),r.storage()):f(r,t,e,!0)}})),"number | Complex | BigNumber | Fraction, Array":t.referToSelf((function(e){return function(t,r){return f(n(r),t,e,!0).valueOf()}}))})})),ac=Se("log",["config","typed","divideScalar","Complex"],(function(e){var t=e.typed,r=e.config,n=e.divideScalar,i=e.Complex;return t("log",{number:function(e){return e>=0||r.predictable?function(e,t){return Math.log(e)}(e):new i(e,0).log()},Complex:function(e){return e.log()},BigNumber:function(e){return!e.isNegative()||r.predictable?e.ln():new i(e.toNumber(),0).log()},"any, any":t.referToSelf((function(e){return function(t,r){return n(e(t),e(r))}}))})})),oc="log1p",uc=Se(oc,["typed","config","divideScalar","log","Complex"],(function(e){var t=e.typed,r=e.config,n=e.divideScalar,i=e.log,a=e.Complex;return t(oc,{number:function(e){return e>=-1||r.predictable?J(e):o(new a(e,0))},Complex:o,BigNumber:function(e){var t=e.plus(1);return!t.isNegative()||r.predictable?t.ln():o(new a(e.toNumber(),0))},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}})),"any, any":t.referToSelf((function(e){return function(t,r){return n(e(t),i(r))}}))});function o(e){var t=e.re+1;return new a(Math.log(Math.sqrt(t*t+e.im*e.im)),Math.atan2(e.im,t))}})),sc="nthRoots",cc=Se(sc,["config","typed","divideScalar","Complex"],(function(e){var t=e.typed,r=(e.config,e.divideScalar,e.Complex),n=[function(e){return new r(e,0)},function(e){return new r(0,e)},function(e){return new r(-e,0)},function(e){return new r(0,-e)}];function i(e,t){if(t<0)throw new Error("Root must be greater than zero");if(0===t)throw new Error("Root must be non-zero");if(t%1!=0)throw new Error("Root must be an integer");if(0===e||0===e.abs())return[new r(0,0)];var i,a="number"==typeof e;(a||0===e.re||0===e.im)&&(i=a?2*+(e<0):0===e.im?2*+(e.re<0):2*+(e.im<0)+1);for(var o=e.arg(),u=e.abs(),s=[],c=Math.pow(u,1/t),f=0;fd&&(g.push(l[D]),x.push(N))}if(o(y,0))throw new Error("Linear system cannot be solved since matrix is singular");for(var E=n(v,y),A=0,S=x.length;A=0;d--){var v=r[d][0]||0;if(o(v,0))h[d]=[0];else{for(var y=0,g=[],x=[],b=m[d],w=m[d+1]-1;w>=b;w--){var D=p[w];D===d?y=l[w]:D=0;m--){var h=r[m][0]||0,d=void 0;if(o(h,0))d=0;else{var v=p[m][m];if(o(v,0))throw new Error("Linear system cannot be solved since matrix is singular");d=n(h,v);for(var y=m-1;y>=0;y--)r[y]=[a(r[y][0]||0,i(d,p[y][m]))]}l[m]=[d]}return new u({data:l,size:[c,1]})}})),xc="lsolveAll",bc=Se(xc,["typed","matrix","divideScalar","multiplyScalar","subtractScalar","equalScalar","DenseMatrix"],(function(e){var t=e.typed,r=e.matrix,n=e.divideScalar,i=e.multiplyScalar,a=e.subtractScalar,o=e.equalScalar,u=e.DenseMatrix,s=hc({DenseMatrix:u});return t(xc,{"SparseMatrix, Array | Matrix":function(e,t){return function(e,t){for(var r=[s(e,t,!0)._data.map((function(e){return e[0]}))],c=e._size[0],f=e._size[1],l=e._values,p=e._index,m=e._ptr,h=0;hh&&(g.push(l[N]),x.push(E))}if(o(D,0))if(o(y[h],0)){if(0===v){var A=Te(y);A[h]=1;for(var S=0,C=x.length;S=0;h--)for(var d=r.length,v=0;v=b;D--){var N=p[D];N===h?w=l[D]:N=0;l--)for(var p=r.length,m=0;m=0;v--)d[v]=a(d[v],c[v][l]);r.push(d)}}else{if(0===m)return[];r.splice(m,1),m-=1,p-=1}else{h[l]=n(h[l],c[l][l]);for(var y=l-1;y>=0;y--)h[y]=a(h[y],i(h[l],c[y][l]))}}return r.map((function(e){return new u({data:e.map((function(e){return[e]})),size:[f,1]})}))}})),Nc=Se("matAlgo08xS0Sid",["typed","equalScalar"],(function(e){var t=e.typed,r=e.equalScalar;return function(e,n,i){var a=e._values,o=e._index,u=e._ptr,s=e._size,c=e._datatype||void 0===e._data?e._datatype:e.getDataType(),f=n._values,l=n._index,p=n._ptr,m=n._size,h=n._datatype||void 0===n._data?n._datatype:n.getDataType();if(s.length!==m.length)throw new un(s.length,m.length);if(s[0]!==m[0]||s[1]!==m[1])throw new RangeError("Dimension mismatch. Matrix A ("+s+") must match Matrix B ("+m+")");if(!a||!f)throw new Error("Cannot perform operation on Pattern Sparse Matrices");var d,v=s[0],y=s[1],g=r,x=0,b=i;"string"==typeof c&&c===h&&"mixed"!==c&&(d=c,g=t.find(r,[d,d]),x=t.convert(0,d),b=t.find(i,[d,d]));for(var w,D,N,E,A=[],S=[],C=[],M=[],F=[],O=0;Ot?1:-1},"BigNumber, BigNumber":function(e,t){return gi(e,t,r.epsilon)?new a(0):new a(e.cmp(t))},"Fraction, Fraction":function(e,t){return new o(e.compare(t))},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},m,p({SS:f,DS:c,Ss:l}))})),kc=Se(_c,["typed","config"],(function(e){var t=e.typed,r=e.config;return t(_c,{"number, number":function(e,t){return se(e,t,r.epsilon)?0:e>t?1:-1}})})),Ic=r(1880),zc="compareNatural",Rc=Se(zc,["typed","compare"],(function(e){var t=e.typed,r=e.compare,n=r.signatures["boolean,boolean"];return t(zc,{"any, any":function e(t,o){var u,s=H(t),c=H(o);if(!("number"!==s&&"BigNumber"!==s&&"Fraction"!==s||"number"!==c&&"BigNumber"!==c&&"Fraction"!==c))return"0"!==(u=r(t,o)).toString()?u>0?1:-1:Ic(s,c);var f=["Array","DenseMatrix","SparseMatrix"];if(f.includes(s)||f.includes(c))return 0!==(u=i(e,t,o))?u:Ic(s,c);if(s!==c)return Ic(s,c);if("Complex"===s)return function(e,t){return e.re>t.re?1:e.ret.im?1:e.imr.length?1:t.lengtht},"BigNumber, BigNumber":function(e,t){return e.gt(t)&&!gi(e,t,r.epsilon)},"Fraction, Fraction":function(e,t){return 1===e.compare(t)},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},f,c({SS:u,DS:o,Ss:s}))})),ef=Se(Qc,["typed","config"],(function(e){var t=e.typed,r=e.config;return t(Qc,{"number, number":function(e,t){return e>t&&!se(e,t,r.epsilon)}})})),tf="largerEq",rf=Se(tf,["typed","config","matrix","DenseMatrix","concat"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.DenseMatrix,a=e.concat,o=Za({typed:t}),u=ru({typed:t,DenseMatrix:i}),s=Sa({typed:t,DenseMatrix:i}),c=Xa({typed:t,matrix:n,concat:a}),f=xi({typed:t});return t(tf,nf({typed:t,config:r}),{"boolean, boolean":function(e,t){return e>=t},"BigNumber, BigNumber":function(e,t){return e.gte(t)||gi(e,t,r.epsilon)},"Fraction, Fraction":function(e,t){return-1!==e.compare(t)},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")}},f,c({SS:u,DS:o,Ss:s}))})),nf=Se(tf,["typed","config"],(function(e){var t=e.typed,r=e.config;return t(tf,{"number, number":function(e,t){return e>=t||se(e,t,r.epsilon)}})})),af="deepEqual",of=Se(af,["typed","equal"],(function(e){var t=e.typed,r=e.equal;return t(af,{"any, any":function(e,t){return n(e.valueOf(),t.valueOf())}});function n(e,t){if(Array.isArray(e)){if(Array.isArray(t)){var i=e.length;if(i!==t.length)return!1;for(var a=0;a1)throw new Error("Only one dimensional matrices supported");return s(e.valueOf(),t,r)}if(Array.isArray(e))return s(e,t,r)}function s(e,t,i){if(t>=e.length)throw new Error("k out of bounds");for(var a=0;a=0){var l=e[c];e[c]=e[s],e[s]=l,--c}else++s;i(e[s],f)>0&&--s,t<=s?u=s:o=s+1}return e[t]}})),pf="sort",mf=Se(pf,["typed","matrix","compare","compareNatural"],(function(e){var t=e.typed,r=e.matrix,n=e.compare,i=e.compareNatural,a=n,o=function(e,t){return-n(e,t)};return t(pf,{Array:function(e){return s(e),e.sort(a)},Matrix:function(e){return c(e),r(e.toArray().sort(a),e.storage())},"Array, function":function(e,t){return s(e),e.sort(t)},"Matrix, function":function(e,t){return c(e),r(e.toArray().sort(t),e.storage())},"Array, string":function(e,t){return s(e),e.sort(u(t))},"Matrix, string":function(e,t){return c(e),r(e.toArray().sort(u(t)),e.storage())}});function u(e){if("asc"===e)return a;if("desc"===e)return o;if("natural"===e)return i;throw new Error('String "asc", "desc", or "natural" expected')}function s(e){if(1!==cn(e).length)throw new Error("One dimensional array expected")}function c(e){if(1!==e.size().length)throw new Error("One dimensional matrix expected")}})),hf=Se("max",["typed","config","numeric","larger"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.larger;return t("max",{"Array | Matrix":o,"Array | Matrix, number | BigNumber":function(e,t){return Wn(e,t.valueOf(),a)},"...":function(e){if(Gn(e))throw new TypeError("Scalar values expected in function max");return o(e)}});function a(e,t){try{return i(e,t)?e:t}catch(e){throw Rs(e,"max",t)}}function o(e){var t;if(Vn(e,(function(e){try{isNaN(e)&&"number"==typeof e?t=NaN:(void 0===t||i(e,t))&&(t=e)}catch(t){throw Rs(t,"max",e)}})),void 0===t)throw new Error("Cannot calculate max of an empty array");return"string"==typeof t&&(t=n(t,r.number)),t}})),df=Se("min",["typed","config","numeric","smaller"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.smaller;return t("min",{"Array | Matrix":o,"Array | Matrix, number | BigNumber":function(e,t){return Wn(e,t.valueOf(),a)},"...":function(e){if(Gn(e))throw new TypeError("Scalar values expected in function min");return o(e)}});function a(e,t){try{return i(e,t)?e:t}catch(e){throw Rs(e,"min",t)}}function o(e){var t;if(Vn(e,(function(e){try{isNaN(e)&&"number"==typeof e?t=NaN:(void 0===t||i(e,t))&&(t=e)}catch(t){throw Rs(t,"min",e)}})),void 0===t)throw new Error("Cannot calculate min of an empty array");return"string"==typeof t&&(t=n(t,r.number)),t}})),vf=Se("ImmutableDenseMatrix",["smaller","DenseMatrix"],(function(e){var t=e.smaller,r=e.DenseMatrix;function n(e,t){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");if(t&&!c(t))throw new Error("Invalid datatype: "+t);if(l(e)||f(e)){var i=new r(e,t);this._data=i._data,this._size=i._size,this._datatype=i._datatype,this._min=null,this._max=null}else if(e&&f(e.data)&&f(e.size))this._data=e.data,this._size=e.size,this._datatype=e.datatype,this._min=void 0!==e.min?e.min:null,this._max=void 0!==e.max?e.max:null;else{if(e)throw new TypeError("Unsupported type of data ("+H(e)+")");this._data=[],this._size=[0],this._datatype=t,this._min=null,this._max=null}}return n.prototype=new r,n.prototype.type="ImmutableDenseMatrix",n.prototype.isImmutableDenseMatrix=!0,n.prototype.subset=function(e){switch(arguments.length){case 1:var t=r.prototype.subset.call(this,e);return l(t)?new n({data:t._data,size:t._size,datatype:t._datatype}):t;case 2:case 3:throw new Error("Cannot invoke set subset on an Immutable Matrix instance");default:throw new SyntaxError("Wrong number of arguments")}},n.prototype.set=function(){throw new Error("Cannot invoke set on an Immutable Matrix instance")},n.prototype.resize=function(){throw new Error("Cannot invoke resize on an Immutable Matrix instance")},n.prototype.reshape=function(){throw new Error("Cannot invoke reshape on an Immutable Matrix instance")},n.prototype.clone=function(){return new n({data:ye(this._data),size:ye(this._size),datatype:this._datatype})},n.prototype.toJSON=function(){return{mathjs:"ImmutableDenseMatrix",data:this._data,size:this._size,datatype:this._datatype}},n.fromJSON=function(e){return new n(e)},n.prototype.swapRows=function(){throw new Error("Cannot invoke swapRows on an Immutable Matrix instance")},n.prototype.min=function(){if(null===this._min){var e=null;this.forEach((function(r){(null===e||t(r,e))&&(e=r)})),this._min=null!==e?e:void 0}return this._min},n.prototype.max=function(){if(null===this._max){var e=null;this.forEach((function(r){(null===e||t(e,r))&&(e=r)})),this._max=null!==e?e:void 0}return this._max},n}),{isClass:!0}),yf=Se("Index",["ImmutableDenseMatrix","getMatrixDataType"],(function(e){var t=e.ImmutableDenseMatrix,r=e.getMatrixDataType;function n(e){if(!(this instanceof n))throw new SyntaxError("Constructor must be called with the new operator");this._dimensions=[],this._sourceSize=[],this._isScalar=!0;for(var t=0,a=arguments.length;t0;){var s=o.right;o.left.right=o.right,o.right.left=o.left,o.left=i,o.right=i.right,i.right=o,o.right.left=o,o.parent=null,o=s,a--}return e.left.right=e.right,e.right.left=e.left,i=e===e.right?null:function(e,i){var a,o=Math.floor(Math.log(i)*n)+1,s=new Array(o),c=0,f=e;if(f)for(c++,f=f.right;f!==e;)c++,f=f.right;for(;c>0;){for(var l=f.degree,p=f.right;a=s[l];){if(r(f.key,a.key)){var m=a;a=f,f=m}u(a,f),s[l]=null,l++}s[l]=f,f=p,c--}e=null;for(var h=0;h=e&&(r(u.value,0)||n(u.key,u.value,this)),(u=i.extractMinimum())&&o.push(u);for(var s=0;s="0"&&e<="9"}function M(){n++,i=r.charAt(n)}function F(e){n=e,i=r.charAt(n)}function O(){var e="",t=n;if("+"===i?M():"-"===i&&(e+=i,M()),!function(e){return e>="0"&&e<="9"||"."===e}(i))return F(t),null;if("."===i){if(e+=i,M(),!C(i))return F(t),null}else{for(;C(i);)e+=i,M();"."===i&&(e+=i,M())}for(;C(i);)e+=i,M();if("E"===i||"e"===i){var r="",a=n;if(r+=i,M(),"+"!==i&&"-"!==i||(r+=i,M()),!C(i))return F(a),e;for(e+=r;C(i);)e+=i,M()}return e}function T(){for(var e="";C(i)||A.isValidAlpha(i);)e+=i,M();var t=e.charAt(0);return A.isValidAlpha(t)?e:null}function _(e){return i===e?(M(),e):null}Object.defineProperty(A,"name",{value:"Unit"}),A.prototype.constructor=A,A.prototype.type="Unit",A.prototype.isUnit=!0,A.parse=function(e,t){if(t=t||{},n=-1,i="","string"!=typeof(r=e))throw new TypeError("Invalid argument in Unit.parse, string expected");var a=new A;a.units=[];var o=1,s=!1;M(),S();var c=O(),f=null;if(c){if("BigNumber"===u.number)f=new D(c);else if("Fraction"===u.number)try{f=new N(c)}catch(e){f=parseFloat(c)}else f=parseFloat(c);S(),_("*")?(o=1,s=!0):_("/")&&(o=-1,s=!0)}for(var l=[],p=1;;){for(S();"("===i;)l.push(o),p*=o,o=1,M(),S();var m;if(!i)break;var h=i;if(null===(m=T()))throw new SyntaxError('Unexpected "'+h+'" in "'+r+'" at index '+n.toString());var d=B(m);if(null===d)throw new SyntaxError('Unit "'+m+'" not found.');var v=o*p;if(S(),_("^")){S();var y=O();if(null===y)throw new SyntaxError('In "'+e+'", "^" must be followed by a floating-point number');v*=y}a.units.push({unit:d.unit,prefix:d.prefix,power:v});for(var g=0;g1||Math.abs(this.units[0].power-1)>1e-15)},A.prototype._normalize=function(e){if(null==e||0===this.units.length)return e;for(var t=e,r=A._getNumberConverter(H(e)),n=0;n1e-12)return!1;return!0},A.prototype.equalBase=function(e){for(var t=0;t1e-12)return!1;return!0},A.prototype.equals=function(e){return this.equalBase(e)&&y(this.value,e.value)},A.prototype.multiply=function(e){for(var t=this.clone(),r=s(e)?e:new A(e),n=0;n0?this.formatUnits():null,fixPrefix:this.fixPrefix}},A.fromJSON=function(e){var t,r=new A(e.value,null!==(t=e.unit)&&void 0!==t?t:void 0);return r.fixPrefix=e.fixPrefix||!1,r},A.prototype.valueOf=A.prototype.toString,A.prototype.simplify=function(){var e,t,r=this.clone(),n=[];for(var i in G)if(Ae(G,i)&&r.hasBase(R[i])){e=i;break}if("NONE"===e)r.units=[];else if(e&&Ae(G,e)&&(t=G[e]),t)r.units=[{unit:t.unit,prefix:t.prefix,power:1}];else{for(var a=!1,o=0;o1e-12&&(Ae(G,u)?n.push({unit:G[u].unit,prefix:G[u].prefix,power:r.dimensions[o]||0}):a=!0)}n.length1e-12){if(!Ae($.si,n))throw new Error("Cannot express custom unit "+n+" in SI units");t.push({unit:$.si[n].unit,prefix:$.si[n].prefix,power:e.dimensions[r]||0})}}return e.units=t,e.fixPrefix=!0,e.skipAutomaticSimplification=!0,null!==this.value?(e.value=null,this.to(e)):e},A.prototype.formatUnits=function(){for(var e="",t="",r=0,n=0,i=0;i0?(r++,e+=" "+this.units[i].prefix.name+this.units[i].unit.name,Math.abs(this.units[i].power-1)>1e-15&&(e+="^"+this.units[i].power)):this.units[i].power<0&&n++;if(n>0)for(var a=0;a0?(t+=" "+this.units[a].prefix.name+this.units[a].unit.name,Math.abs(this.units[a].power+1)>1e-15&&(t+="^"+-this.units[a].power)):(t+=" "+this.units[a].prefix.name+this.units[a].unit.name,t+="^"+this.units[a].power));e=e.substr(1),t=t.substr(1),r>1&&n>0&&(e="("+e+")"),n>1&&r>0&&(t="("+t+")");var o=e;return r>0&&n>0&&(o+=" / "),o+t},A.prototype.format=function(e){var t=this.skipAutomaticSimplification||null===this.value?this.clone():this.simplify(),r=!1;for(var n in void 0!==t.value&&null!==t.value&&o(t.value)&&(r=Math.abs(t.value.re)<1e-14),t.units)Ae(t.units,n)&&t.units[n].unit&&("VA"===t.units[n].unit.name&&r?t.units[n].unit=P.VAR:"VAR"!==t.units[n].unit.name||r||(t.units[n].unit=P.VA));1!==t.units.length||t.fixPrefix||Math.abs(t.units[0].power-Math.round(t.units[0].power))<1e-14&&(t.units[0].prefix=t._bestPrefix());var i=t._denormalize(t.value),a=null!==t.value?x(i,e||{}):"",u=t.formatUnits();return t.value&&o(t.value)&&(a="("+a+")"),u.length>0&&a.length>0&&(a+=" "),a+u},A.prototype._bestPrefix=function(){if(1!==this.units.length)throw new Error("Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!");if(Math.abs(this.units[0].power-Math.round(this.units[0].power))>=1e-14)throw new Error("Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!");var e=null!==this.value?h(this.value):0,t=h(this.units[0].unit.value),r=this.units[0].prefix;if(0===e)return r;var n=this.units[0].power,i=Math.log(e/Math.pow(r.value*t,n))/Math.LN10-1.2;if(i>-2.200001&&i<1.800001)return r;i=Math.abs(i);var a=this.units[0].unit.prefixes;for(var o in a)if(Ae(a,o)){var u=a[o];if(u.scientific){var s=Math.abs(Math.log(e/Math.pow(u.value*t,n))/Math.LN10-1.2);(s0&&!A.isValidAlpha(i)&&!C(i))throw new Error('Invalid unit name (only alphanumeric characters are allowed): "'+e+'"')}}(e);var n,a,o,u=null,s=[],c=0;if(r&&"Unit"===r.type)u=r.clone();else if("string"==typeof r)""!==r&&(n=r);else{if("object"!==t(r))throw new TypeError('Cannot create unit "'+e+'" from "'+r.toString()+'": expecting "string" or "Unit" or "Object"');n=r.definition,a=r.prefixes,c=r.offset,o=r.baseName,r.aliases&&(s=r.aliases.valueOf())}if(s)for(var f=0;f1e-12){h=!1;break}if(h){p=!0,l.base=R[m];break}}if(!p){o=o||e+"_STUFF";var v={dimensions:u.dimensions.slice(0)};v.key=o,R[o]=v,G[o]={unit:l,prefix:I.NONE[""]},l.base=R[o]}}else{if(o=o||e+"_STUFF",z.indexOf(o)>=0)throw new Error('Cannot create new base unit "'+e+'": a base unit with that name already exists (and cannot be overridden)');for(var y in z.push(o),R)Ae(R,y)&&(R[y].dimensions[z.length-1]=0);for(var g={dimensions:[]},x=0;x=-1&&e<=1||r.predictable?Math.acos(e):new n(e,0).acos()},Complex:function(e){return e.acos()},BigNumber:function(e){return e.acos()}})})),Rf="number";function qf(e){return ce(e)}function jf(e){return Math.atan(1/e)}function Pf(e){return isFinite(e)?(Math.log((e+1)/e)+Math.log(e/(e-1)))/2:0}function Lf(e){return Math.asin(1/e)}function Uf(e){var t=1/e;return Math.log(t+Math.sqrt(t*t+1))}function $f(e){return Math.acos(1/e)}function Hf(e){var t=1/e,r=Math.sqrt(t*t-1);return Math.log(r+t)}function Gf(e){return fe(e)}function Vf(e){return le(e)}function Zf(e){return 1/Math.tan(e)}function Wf(e){var t=Math.exp(2*e);return(t+1)/(t-1)}function Yf(e){return 1/Math.sin(e)}function Jf(e){return 0===e?Number.POSITIVE_INFINITY:Math.abs(2/(Math.exp(e)-Math.exp(-e)))*Z(e)}function Xf(e){return 1/Math.cos(e)}function Qf(e){return 2/(Math.exp(e)+Math.exp(-e))}function Kf(e){return me(e)}qf.signature=Rf,jf.signature=Rf,Pf.signature=Rf,Lf.signature=Rf,Uf.signature=Rf,$f.signature=Rf,Hf.signature=Rf,Gf.signature=Rf,Vf.signature=Rf,Zf.signature=Rf,Wf.signature=Rf,Yf.signature=Rf,Jf.signature=Rf,Xf.signature=Rf,Qf.signature=Rf,Kf.signature=Rf;var el="acosh",tl=Se(el,["typed","config","Complex"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(el,{number:function(e){return e>=1||r.predictable?qf(e):e<=-1?new n(Math.log(Math.sqrt(e*e-1)-e),Math.PI):new n(e,0).acosh()},Complex:function(e){return e.acosh()},BigNumber:function(e){return e.acosh()}})})),rl="acot",nl=Se(rl,["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t(rl,{number:jf,Complex:function(e){return e.acot()},BigNumber:function(e){return new r(1).div(e).atan()}})})),il="acoth",al=Se(il,["typed","config","Complex","BigNumber"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(il,{number:function(e){return e>=1||e<=-1||r.predictable?Pf(e):new n(e,0).acoth()},Complex:function(e){return e.acoth()},BigNumber:function(e){return new i(1).div(e).atanh()}})})),ol="acsc",ul=Se(ol,["typed","config","Complex","BigNumber"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(ol,{number:function(e){return e<=-1||e>=1||r.predictable?Lf(e):new n(e,0).acsc()},Complex:function(e){return e.acsc()},BigNumber:function(e){return new i(1).div(e).asin()}})})),sl="acsch",cl=Se(sl,["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t(sl,{number:Uf,Complex:function(e){return e.acsch()},BigNumber:function(e){return new r(1).div(e).asinh()}})})),fl="asec",ll=Se(fl,["typed","config","Complex","BigNumber"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(fl,{number:function(e){return e<=-1||e>=1||r.predictable?$f(e):new n(e,0).asec()},Complex:function(e){return e.asec()},BigNumber:function(e){return new i(1).div(e).acos()}})})),pl="asech",ml=Se(pl,["typed","config","Complex","BigNumber"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(pl,{number:function(e){if(e<=1&&e>=-1||r.predictable){var t=1/e;if(t>0||r.predictable)return Hf(e);var i=Math.sqrt(t*t-1);return new n(Math.log(i-t),Math.PI)}return new n(e,0).asech()},Complex:function(e){return e.asech()},BigNumber:function(e){return new i(1).div(e).acosh()}})})),hl="asin",dl=Se(hl,["typed","config","Complex"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(hl,{number:function(e){return e>=-1&&e<=1||r.predictable?Math.asin(e):new n(e,0).asin()},Complex:function(e){return e.asin()},BigNumber:function(e){return e.asin()}})})),vl=Se("asinh",["typed"],(function(e){return(0,e.typed)("asinh",{number:Gf,Complex:function(e){return e.asinh()},BigNumber:function(e){return e.asinh()}})})),yl=Se("atan",["typed"],(function(e){return(0,e.typed)("atan",{number:function(e){return Math.atan(e)},Complex:function(e){return e.atan()},BigNumber:function(e){return e.atan()}})})),gl="atan2",xl=Se(gl,["typed","matrix","equalScalar","BigNumber","DenseMatrix","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.BigNumber,a=e.DenseMatrix,o=e.concat,u=Va({typed:t,equalScalar:n}),s=Za({typed:t}),c=To({typed:t,equalScalar:n}),f=Aa({typed:t,equalScalar:n}),l=Sa({typed:t,DenseMatrix:a}),p=Xa({typed:t,matrix:r,concat:o});return t(gl,{"number, number":Math.atan2,"BigNumber, BigNumber":function(e,t){return i.atan2(e,t)}},p({scalar:"number | BigNumber",SS:c,DS:s,SD:u,Ss:f,sS:l}))})),bl="atanh",wl=Se(bl,["typed","config","Complex"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(bl,{number:function(e){return e<=1&&e>=-1||r.predictable?Vf(e):new n(e,0).atanh()},Complex:function(e){return e.atanh()},BigNumber:function(e){return e.atanh()}})})),Dl=Se("trigUnit",["typed"],(function(e){var t=e.typed;return{Unit:t.referToSelf((function(e){return function(r){if(!r.hasBase(r.constructor.BASE_UNITS.ANGLE))throw new TypeError("Unit in function cot is no angle");return t.find(e,r.valueType())(r.value)}}))}})),Nl=Se("cos",["typed"],(function(e){var t=e.typed,r=Dl({typed:t});return t("cos",{number:Math.cos,"Complex | BigNumber":function(e){return e.cos()}},r)})),El="cosh",Al=Se(El,["typed"],(function(e){return(0,e.typed)(El,{number:pe,"Complex | BigNumber":function(e){return e.cosh()}})})),Sl=Se("cot",["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t("cot",{number:Zf,Complex:function(e){return e.cot()},BigNumber:function(e){return new r(1).div(e.tan())}},Dl({typed:t}))})),Cl="coth",Ml=Se(Cl,["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t(Cl,{number:Wf,Complex:function(e){return e.coth()},BigNumber:function(e){return new r(1).div(e.tanh())}})})),Fl=Se("csc",["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t("csc",{number:Yf,Complex:function(e){return e.csc()},BigNumber:function(e){return new r(1).div(e.sin())}},Dl({typed:t}))})),Ol="csch",Tl=Se(Ol,["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t(Ol,{number:Jf,Complex:function(e){return e.csch()},BigNumber:function(e){return new r(1).div(e.sinh())}})})),_l=Se("sec",["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t("sec",{number:Xf,Complex:function(e){return e.sec()},BigNumber:function(e){return new r(1).div(e.cos())}},Dl({typed:t}))})),Bl="sech",kl=Se(Bl,["typed","BigNumber"],(function(e){var t=e.typed,r=e.BigNumber;return t(Bl,{number:Qf,Complex:function(e){return e.sech()},BigNumber:function(e){return new r(1).div(e.cosh())}})})),Il=Se("sin",["typed"],(function(e){var t=e.typed,r=Dl({typed:t});return t("sin",{number:Math.sin,"Complex | BigNumber":function(e){return e.sin()}},r)})),zl="sinh",Rl=Se(zl,["typed"],(function(e){return(0,e.typed)(zl,{number:Kf,"Complex | BigNumber":function(e){return e.sinh()}})})),ql=Se("tan",["typed"],(function(e){var t=e.typed,r=Dl({typed:t});return t("tan",{number:Math.tan,"Complex | BigNumber":function(e){return e.tan()}},r)})),jl=Se("tanh",["typed"],(function(e){return(0,e.typed)("tanh",{number:he,"Complex | BigNumber":function(e){return e.tanh()}})})),Pl="setCartesian",Ll=Se(Pl,["typed","size","subset","compareNatural","Index","DenseMatrix"],(function(e){var t=e.typed,r=e.size,n=e.subset,i=e.compareNatural,a=e.Index,o=e.DenseMatrix;return t(Pl,{"Array | Matrix, Array | Matrix":function(e,t){var u=[];if(0!==n(r(e),new a(0))&&0!==n(r(t),new a(0))){var s=En(Array.isArray(e)?e:e.toArray()).sort(i),c=En(Array.isArray(t)?t:t.toArray()).sort(i);u=[];for(var f=0;f0;r--)for(var n=0;ne[n+1].length&&(t=e[n],e[n]=e[n+1],e[n+1]=t);return e}(u)}});function o(e,t){for(var r=[],n=0;nd?m++:h===d&&(c=f(c,l(a[p],s[m])),p++,m++)}return c}});function o(e,t){var r,n,i=u(e),a=u(t);if(1===i.length)r=i[0];else{if(2!==i.length||1!==i[1])throw new RangeError("Expected a column vector, instead got a matrix of size ("+i.join(", ")+")");r=i[0]}if(1===a.length)n=a[0];else{if(2!==a.length||1!==a[1])throw new RangeError("Expected a column vector, instead got a matrix of size ("+a.join(", ")+")");n=a[0]}if(r!==n)throw new RangeError("Vectors must have equal length ("+r+" != "+n+")");if(0===r)throw new RangeError("Cannot calculate the dot product of empty vectors");return r}function u(e){return l(e)?e.size():a(e)}})),pp=Se("trace",["typed","matrix","add"],(function(e){var t=e.typed,r=e.matrix,n=e.add;return t("trace",{Array:function(e){return i(r(e))},SparseMatrix:function(e){var t=e._values,r=e._index,i=e._ptr,a=e._size,o=a[0],u=a[1];if(o===u){var s=0;if(t.length>0)for(var c=0;cc)break}return s}throw new RangeError("Matrix must be square (size: "+en(a)+")")},DenseMatrix:i,any:ye});function i(e){var t=e._size,r=e._data;switch(t.length){case 1:if(1===t[0])return ye(r[0]);throw new RangeError("Matrix must be square (size: "+en(t)+")");case 2:var i=t[0];if(i===t[1]){for(var a=0,o=0;o)'),t+this.index.toHTML(e)}},{key:"_toTex",value:function(e){var t=this.object.toTex(e);return i(this.object)&&(t="\\left(' + object + '\\right)"),t+this.index.toTex(e)}},{key:"toJSON",value:function(){return{mathjs:Ap,object:this.object,index:this.index}}}],[{key:"fromJSON",value:function(e){return new t(e.object,e.index)}}])}(r);return Ga(a,"name",Ap),a}),{isClass:!0,isNode:!0});function Cp(e,t,r){return t=gp(t),yp(e,Mp()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Mp(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Mp=function(){return!!e})()}var Fp="ArrayNode",Op=Se(Fp,["Node"],(function(e){var t=function(e){function t(e){var r;if(_e(this,t),(r=Cp(this,t)).items=e||[],!Array.isArray(r.items)||!r.items.every(z))throw new TypeError("Array containing Nodes expected");return r}return bp(t,e),Ie(t,[{key:"type",get:function(){return Fp}},{key:"isArrayNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var r=An(this.items,(function(r){return r._compile(e,t)}));if("Array"!==e.config.matrix){var n=e.matrix;return function(e,t,i){return n(An(r,(function(r){return r(e,t,i)})))}}return function(e,t,n){return An(r,(function(r){return r(e,t,n)}))}}},{key:"forEach",value:function(e){for(var t=0;t['+this.items.map((function(t){return t.toHTML(e)})).join(',')+']'}},{key:"_toTex",value:function(e){return function t(r,n){var i=r.some(C)&&!r.every(C),a=n||i,o=a?"&":"\\\\",u=r.map((function(r){return r.items?t(r.items,!n):r.toTex(e)})).join(o);return i||!a||a&&!n?"\\begin{bmatrix}"+u+"\\end{bmatrix}":u}(this.items,!1)}}],[{key:"fromJSON",value:function(e){return new t(e.items)}}])}(e.Node);return Ga(t,"name",Fp),t}),{isClass:!0,isNode:!0});function Tp(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r",associativity:"left",associativeWith:[]},"OperatorNode:smallerEq":{op:"<=",associativity:"left",associativeWith:[]},"OperatorNode:largerEq":{op:">=",associativity:"left",associativeWith:[]},RelationalNode:{associativity:"left",associativeWith:[]}},{"OperatorNode:leftShift":{op:"<<",associativity:"left",associativeWith:[]},"OperatorNode:rightArithShift":{op:">>",associativity:"left",associativeWith:[]},"OperatorNode:rightLogShift":{op:">>>",associativity:"left",associativeWith:[]}},{"OperatorNode:to":{op:"to",associativity:"left",associativeWith:[]}},{RangeNode:{}},{"OperatorNode:add":{op:"+",associativity:"left",associativeWith:["OperatorNode:add","OperatorNode:subtract"]},"OperatorNode:subtract":{op:"-",associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{op:"*",associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]},"OperatorNode:divide":{op:"/",associativity:"left",associativeWith:[],latexLeftParens:!1,latexRightParens:!1,latexParens:!1},"OperatorNode:dotMultiply":{op:".*",associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","OperatorNode:dotMultiply","OperatorNode:doDivide"]},"OperatorNode:dotDivide":{op:"./",associativity:"left",associativeWith:[]},"OperatorNode:mod":{op:"mod",associativity:"left",associativeWith:[]}},{"OperatorNode:multiply":{associativity:"left",associativeWith:["OperatorNode:multiply","OperatorNode:divide","Operator:dotMultiply","Operator:dotDivide"]}},{"OperatorNode:unaryPlus":{op:"+",associativity:"right"},"OperatorNode:unaryMinus":{op:"-",associativity:"right"},"OperatorNode:bitNot":{op:"~",associativity:"right"},"OperatorNode:not":{op:"not",associativity:"right"}},{"OperatorNode:pow":{op:"^",associativity:"right",associativeWith:[],latexRightParens:!1},"OperatorNode:dotPow":{op:".^",associativity:"right",associativeWith:[]}},{"OperatorNode:factorial":{op:"!",associativity:"left"}},{"OperatorNode:ctranspose":{op:"'",associativity:"left"}}];function Bp(e,t){if(!t||"auto"!==t)return e;for(var r=e;j(r);)r=r.content;return r}function kp(e,t,r,n){var i=e;"keep"!==t&&(i=e.getContent());for(var a=i.getIdentifier(),o=null,u=0;u<_p.length;u++)if(a in _p[u]){o=u;break}if("OperatorNode:multiply"===a&&i.implicit&&"show"!==r){var s=Bp(i.args[0],t);T(s)&&n&&"OperatorNode:divide"===n.getIdentifier()&&_(Bp(n.args[0],t))||"OperatorNode:divide"===s.getIdentifier()&&_(Bp(s.args[0],t))&&T(Bp(s.args[1]))||(o+=1)}return o}function Ip(e,t){var r=e;"keep"!==t&&(r=e.getContent());var n=r.getIdentifier(),i=kp(r,t);if(null===i)return null;var a=_p[i][n];if(Ae(a,"associativity")){if("left"===a.associativity)return"left";if("right"===a.associativity)return"right";throw Error("'"+n+"' has the invalid associativity '"+a.associativity+"'.")}return null}function zp(e,t,r){var n="keep"!==r?e.getContent():e,i="keep"!==r?e.getContent():t,a=n.getIdentifier(),o=i.getIdentifier(),u=kp(n,r);if(null===u)return null;var s=_p[u][a];if(Ae(s,"associativeWith")&&s.associativeWith instanceof Array){for(var c=0;c)'),t+r+'='+n}},{key:"_toTex",value:function(e){var t=this.object.toTex(e),r=this.index?this.index.toTex(e):"",n=this.value.toTex(e);return u(this,e&&e.parenthesis,e&&e.implicit)&&(n="\\left(".concat(n,"\\right)")),t+r+"="+n}}],[{key:"fromJSON",value:function(e){return new t(e.object,e.index,e.value)}}])}(i);return Ga(s,"name",jp),s}),{isClass:!0,isNode:!0});function Lp(e,t,r){return t=gp(t),yp(e,Up()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Up(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Up=function(){return!!e})()}var $p="BlockNode",Hp=Se($p,["ResultSet","Node"],(function(e){var t=e.ResultSet,r=function(e){function r(e){var t;if(_e(this,r),t=Lp(this,r),!Array.isArray(e))throw new Error("Array expected");return t.blocks=e.map((function(e){var t=e&&e.node,r=!e||void 0===e.visible||e.visible;if(!z(t))throw new TypeError('Property "node" must be a Node');if("boolean"!=typeof r)throw new TypeError('Property "visible" must be a boolean');return{node:t,visible:r}})),t}return bp(r,e),Ie(r,[{key:"type",get:function(){return $p}},{key:"isBlockNode",get:function(){return!0}},{key:"_compile",value:function(e,r){var n=An(this.blocks,(function(t){return{evaluate:t.node._compile(e,r),visible:t.visible}}));return function(e,r,i){var a=[];return Sn(n,(function(t){var n=t.evaluate(e,r,i);t.visible&&a.push(n)})),new t(a)}}},{key:"forEach",value:function(e){for(var t=0;t;')})).join('
    ')}},{key:"_toTex",value:function(e){return this.blocks.map((function(t){return t.node.toTex(e)+(t.visible?"":";")})).join("\\;\\;\n")}}],[{key:"fromJSON",value:function(e){return new r(e.blocks)}}])}(e.Node);return Ga(r,"name",$p),r}),{isClass:!0,isNode:!0});function Gp(e,t,r){return t=gp(t),yp(e,Vp()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Vp(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Vp=function(){return!!e})()}var Zp="ConditionalNode",Wp=Se(Zp,["Node"],(function(e){var t=function(e){function t(e,r,n){var i;if(_e(this,t),i=Gp(this,t),!z(e))throw new TypeError("Parameter condition must be a Node");if(!z(r))throw new TypeError("Parameter trueExpr must be a Node");if(!z(n))throw new TypeError("Parameter falseExpr must be a Node");return i.condition=e,i.trueExpr=r,i.falseExpr=n,i}return bp(t,e),Ie(t,[{key:"type",get:function(){return Zp}},{key:"isConditionalNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var r=this.condition._compile(e,t),n=this.trueExpr._compile(e,t),i=this.falseExpr._compile(e,t);return function(e,t,u){return function(e){if("number"==typeof e||"boolean"==typeof e||"string"==typeof e)return!!e;if(e){if(a(e))return!e.isZero();if(o(e))return!(!e.re&&!e.im);if(s(e))return!!e.value}if(null==e)return!1;throw new TypeError('Unsupported type of condition "'+H(e)+'"')}(r(e,t,u))?n(e,t,u):i(e,t,u)}}},{key:"forEach",value:function(e){e(this.condition,"condition",this),e(this.trueExpr,"trueExpr",this),e(this.falseExpr,"falseExpr",this)}},{key:"map",value:function(e){return new t(this._ifNode(e(this.condition,"condition",this)),this._ifNode(e(this.trueExpr,"trueExpr",this)),this._ifNode(e(this.falseExpr,"falseExpr",this)))}},{key:"clone",value:function(){return new t(this.condition,this.trueExpr,this.falseExpr)}},{key:"_toString",value:function(e){var t=e&&e.parenthesis?e.parenthesis:"keep",r=kp(this,t,e&&e.implicit),n=this.condition.toString(e),i=kp(this.condition,t,e&&e.implicit);("all"===t||"OperatorNode"===this.condition.type||null!==i&&i<=r)&&(n="("+n+")");var a=this.trueExpr.toString(e),o=kp(this.trueExpr,t,e&&e.implicit);("all"===t||"OperatorNode"===this.trueExpr.type||null!==o&&o<=r)&&(a="("+a+")");var u=this.falseExpr.toString(e),s=kp(this.falseExpr,t,e&&e.implicit);return("all"===t||"OperatorNode"===this.falseExpr.type||null!==s&&s<=r)&&(u="("+u+")"),n+" ? "+a+" : "+u}},{key:"toJSON",value:function(){return{mathjs:Zp,condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}}},{key:"_toHTML",value:function(e){var t=e&&e.parenthesis?e.parenthesis:"keep",r=kp(this,t,e&&e.implicit),n=this.condition.toHTML(e),i=kp(this.condition,t,e&&e.implicit);("all"===t||"OperatorNode"===this.condition.type||null!==i&&i<=r)&&(n='('+n+')');var a=this.trueExpr.toHTML(e),o=kp(this.trueExpr,t,e&&e.implicit);("all"===t||"OperatorNode"===this.trueExpr.type||null!==o&&o<=r)&&(a='('+a+')');var u=this.falseExpr.toHTML(e),s=kp(this.falseExpr,t,e&&e.implicit);return("all"===t||"OperatorNode"===this.falseExpr.type||null!==s&&s<=r)&&(u='('+u+')'),n+'?'+a+':'+u}},{key:"_toTex",value:function(e){return"\\begin{cases} {"+this.trueExpr.toTex(e)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(e)+"}\\\\{"+this.falseExpr.toTex(e)+"}, &\\quad{\\text{otherwise}}\\end{cases}"}}],[{key:"fromJSON",value:function(e){return new t(e.condition,e.trueExpr,e.falseExpr)}}])}(e.Node);return Ga(t,"name",Zp),t}),{isClass:!0,isNode:!0}),Yp=r(3144),Jp={Alpha:"A",alpha:"\\alpha",Beta:"B",beta:"\\beta",Gamma:"\\Gamma",gamma:"\\gamma",Delta:"\\Delta",delta:"\\delta",Epsilon:"E",epsilon:"\\epsilon",varepsilon:"\\varepsilon",Zeta:"Z",zeta:"\\zeta",Eta:"H",eta:"\\eta",Theta:"\\Theta",theta:"\\theta",vartheta:"\\vartheta",Iota:"I",iota:"\\iota",Kappa:"K",kappa:"\\kappa",varkappa:"\\varkappa",Lambda:"\\Lambda",lambda:"\\lambda",Mu:"M",mu:"\\mu",Nu:"N",nu:"\\nu",Xi:"\\Xi",xi:"\\xi",Omicron:"O",omicron:"o",Pi:"\\Pi",pi:"\\pi",varpi:"\\varpi",Rho:"P",rho:"\\rho",varrho:"\\varrho",Sigma:"\\Sigma",sigma:"\\sigma",varsigma:"\\varsigma",Tau:"T",tau:"\\tau",Upsilon:"\\Upsilon",upsilon:"\\upsilon",Phi:"\\Phi",phi:"\\phi",varphi:"\\varphi",Chi:"X",chi:"\\chi",Psi:"\\Psi",psi:"\\psi",Omega:"\\Omega",omega:"\\omega",true:"\\mathrm{True}",false:"\\mathrm{False}",i:"i",inf:"\\infty",Inf:"\\infty",infinity:"\\infty",Infinity:"\\infty",oo:"\\infty",lim:"\\lim",undefined:"\\mathbf{?}"},Xp={transpose:"^\\top",ctranspose:"^H",factorial:"!",pow:"^",dotPow:".^\\wedge",unaryPlus:"+",unaryMinus:"-",bitNot:"\\~",not:"\\neg",multiply:"\\cdot",divide:"\\frac",dotMultiply:".\\cdot",dotDivide:".:",mod:"\\mod",add:"+",subtract:"-",to:"\\rightarrow",leftShift:"<<",rightArithShift:">>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"},Qp={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(Xp.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(Xp.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(Xp.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(Xp.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(Xp.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(Xp.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(Xp.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(Xp.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(Xp.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(Xp.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(Xp.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(Xp.bitAnd,"${args[1]}\\right)")},bitNot:{1:Xp.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(Xp.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(Xp.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(Xp.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(Xp.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(Xp.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(Xp.and,"${args[1]}\\right)")},not:{1:Xp.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(Xp.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(Xp.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(Xp.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},pinv:{1:"\\left(${args[0]}\\right)^{+}"},sqrtm:{1:"{${args[0]}}".concat(Xp.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(Xp.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(Xp.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},lgamma:{1:"\\ln\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(Xp.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(Xp.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(Xp.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(Xp.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(Xp.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(Xp.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(Xp.to,"${args[1]}\\right)")},numeric:function(e,t){return e.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(Jp.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}},Kp={deg:"^\\circ"};function em(e){return Yp(e,{preserveFormatting:!0})}function tm(e,t){return(t=void 0!==t&&t)?Ae(Kp,e)?Kp[e]:"\\mathrm{"+em(e)+"}":Ae(Jp,e)?Jp[e]:em(e)}function rm(e,t,r){return t=gp(t),yp(e,nm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function nm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(nm=function(){return!!e})()}var im="ConstantNode",am=Se(im,["Node"],(function(e){var t=function(e){function t(e){var r;return _e(this,t),(r=rm(this,t)).value=e,r}return bp(t,e),Ie(t,[{key:"type",get:function(){return im}},{key:"isConstantNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var r=this.value;return function(){return r}}},{key:"forEach",value:function(e){}},{key:"map",value:function(e){return this.clone()}},{key:"clone",value:function(){return new t(this.value)}},{key:"_toString",value:function(e){return en(this.value,e)}},{key:"_toHTML",value:function(e){var t=this._toString(e);switch(H(this.value)){case"number":case"BigNumber":case"Fraction":return''+t+"";case"string":return''+t+"";case"boolean":return''+t+"";case"null":return''+t+"";case"undefined":return''+t+"";default:return''+t+""}}},{key:"toJSON",value:function(){return{mathjs:im,value:this.value}}},{key:"_toTex",value:function(e){var t=this._toString(e),r=H(this.value);switch(r){case"string":return"\\mathtt{"+em(t)+"}";case"number":case"BigNumber":if(!("BigNumber"===r?this.value.isFinite():isFinite(this.value)))return this.value.valueOf()<0?"-\\infty":"\\infty";var n=t.toLowerCase().indexOf("e");return-1!==n?t.substring(0,n)+"\\cdot10^{"+t.substring(n+1)+"}":t;case"Fraction":return this.value.toLatex();default:return t}}}],[{key:"fromJSON",value:function(e){return new t(e.value)}}])}(e.Node);return Ga(t,"name",im),t}),{isClass:!0,isNode:!0});function om(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(t);try{for(u.s();!(a=u.n()).done;){var s=a.value,c="string"==typeof s?s:s.name;if(o.has(c))throw new Error('Duplicate parameter name "'.concat(c,'"'));o.add(c)}}catch(e){u.e(e)}finally{u.f()}return i.name=e,i.params=t.map((function(e){return e&&e.name||e})),i.types=t.map((function(e){return e&&e.type||"any"})),i.expr=r,i}return bp(n,e),Ie(n,[{key:"type",get:function(){return cm}},{key:"isFunctionAssignmentNode",get:function(){return!0}},{key:"_compile",value:function(e,r){var n=Object.create(r);Sn(this.params,(function(e){n[e]=!0}));var i=this.expr._compile(e,n),a=this.name,o=this.params,u=Fn(this.types,","),s=a+"("+Fn(this.params,", ")+")";return function(e,r,n){var c={};c[u]=function(){for(var t=Object.create(r),a=0;a'+nn(this.params[i])+"");var a=this.expr.toHTML(e);return r(this,t,e&&e.implicit)&&(a='('+a+')'),''+nn(this.name)+'('+n.join(',')+')='+a}},{key:"_toTex",value:function(e){var t=e&&e.parenthesis?e.parenthesis:"keep",n=this.expr.toTex(e);return r(this,t,e&&e.implicit)&&(n="\\left(".concat(n,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(tm).join(",")+"\\right)="+n}}],[{key:"fromJSON",value:function(e){return new n(e.name,e.params,e.expr)}}])}(e.Node);return Ga(n,"name",cm),n}),{isClass:!0,isNode:!0});function lm(e,t,r){return t=gp(t),yp(e,pm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function pm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(pm=function(){return!!e})()}var mm="IndexNode",hm=Se(mm,["Node","size"],(function(e){var t=e.Node,r=e.size,n=function(e){function t(e,r){var n;if(_e(this,t),(n=lm(this,t)).dimensions=e,n.dotNotation=r||!1,!Array.isArray(e)||!e.every(z))throw new TypeError('Array containing Nodes expected for parameter "dimensions"');if(n.dotNotation&&!n.isObjectProperty())throw new Error("dotNotation only applicable for object properties");return n}return bp(t,e),Ie(t,[{key:"type",get:function(){return mm}},{key:"isIndexNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var n=An(this.dimensions,(function(n,i){if(n.filter((function(e){return e.isSymbolNode&&"end"===e.name})).length>0){var a=Object.create(t);a.end=!0;var o=n._compile(e,a);return function(e,t,n){if(!l(n)&&!f(n)&&!c(n))throw new TypeError('Cannot resolve "end": context must be a Matrix, Array, or string but is '+H(n));var a=r(n).valueOf(),u=Object.create(t);return u.end=a[i],o(e,u,n)}}return n._compile(e,t)})),i=ze(e,"index");return function(e,t,r){var a=An(n,(function(n){return n(e,t,r)}));return i.apply(void 0,Te(a))}}},{key:"forEach",value:function(e){for(var t=0;t.'+nn(this.getObjectProperty())+"":'['+t.join(',')+']'}},{key:"_toTex",value:function(e){var t=this.dimensions.map((function(t){return t.toTex(e)}));return this.dotNotation?"."+this.getObjectProperty():"_{"+t.join(",")+"}"}}],[{key:"fromJSON",value:function(e){return new t(e.dimensions,e.dotNotation)}}])}(t);return Ga(n,"name",mm),n}),{isClass:!0,isNode:!0});function dm(e,t,r){return t=gp(t),yp(e,vm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function vm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(vm=function(){return!!e})()}var ym="ObjectNode",gm=Se(ym,["Node"],(function(e){var r=function(e){function r(e){var n;if(_e(this,r),(n=dm(this,r)).properties=e||{},e&&("object"!==t(e)||!Object.keys(e).every((function(t){return z(e[t])}))))throw new TypeError("Object containing Nodes expected");return n}return bp(r,e),Ie(r,[{key:"type",get:function(){return ym}},{key:"isObjectNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var r={};for(var n in this.properties)if(Ae(this.properties,n)){var i=tn(n),a=JSON.parse(i),o=ze(this.properties,n);r[a]=o._compile(e,t)}return function(e,t,n){var i={};for(var a in r)Ae(r,a)&&(i[a]=r[a](e,t,n));return i}}},{key:"forEach",value:function(e){for(var t in this.properties)Ae(this.properties,t)&&e(this.properties[t],"properties["+tn(t)+"]",this)}},{key:"map",value:function(e){var t={};for(var n in this.properties)Ae(this.properties,n)&&(t[n]=this._ifNode(e(this.properties[n],"properties["+tn(n)+"]",this)));return new r(t)}},{key:"clone",value:function(){var e={};for(var t in this.properties)Ae(this.properties,t)&&(e[t]=this.properties[t]);return new r(e)}},{key:"_toString",value:function(e){var t=[];for(var r in this.properties)Ae(this.properties,r)&&t.push(tn(r)+": "+this.properties[r].toString(e));return"{"+t.join(", ")+"}"}},{key:"toJSON",value:function(){return{mathjs:ym,properties:this.properties}}},{key:"_toHTML",value:function(e){var t=[];for(var r in this.properties)Ae(this.properties,r)&&t.push(''+nn(r)+':'+this.properties[r].toHTML(e));return'{'+t.join(',')+'}'}},{key:"_toTex",value:function(e){var t=[];for(var r in this.properties)Ae(this.properties,r)&&t.push("\\mathbf{"+r+":} & "+this.properties[r].toTex(e)+"\\\\");return"\\left\\{\\begin{array}{ll}"+t.join("\n")+"\\end{array}\\right\\}"}}],[{key:"fromJSON",value:function(e){return new r(e.properties)}}])}(e.Node);return Ga(r,"name",ym),r}),{isClass:!0,isNode:!0});function xm(e,t){return new Ve(e,new Ge(t),new Set(Object.keys(t)))}function bm(e,t,r){return t=gp(t),yp(e,wm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function wm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(wm=function(){return!!e})()}var Dm="OperatorNode",Nm=Se(Dm,["Node"],(function(e){function t(e,r){var n=e;if("auto"===r)for(;j(n);)n=n.content;return!!T(n)||!!q(n)&&t(n.args[0],r)}function r(e,r,n,i,a){var o,u=kp(e,r,n),s=Ip(e,r);if("all"===r||i.length>2&&"OperatorNode:add"!==e.getIdentifier()&&"OperatorNode:multiply"!==e.getIdentifier())return i.map((function(e){switch(e.getContent().type){case"ArrayNode":case"ConstantNode":case"SymbolNode":case"ParenthesisNode":return!1;default:return!0}}));switch(i.length){case 0:o=[];break;case 1:var c=kp(i[0],r,n,e);if(a&&null!==c){var f,l;if("keep"===r?(f=i[0].getIdentifier(),l=e.getIdentifier()):(f=i[0].getContent().getIdentifier(),l=e.getContent().getIdentifier()),!1===_p[u][l].latexLeftParens){o=[!1];break}if(!1===_p[c][f].latexParens){o=[!1];break}}if(null===c){o=[!1];break}if(c<=u){o=[!0];break}o=[!1];break;case 2:var p,m,h=kp(i[0],r,n,e),d=zp(e,i[0],r);p=null!==h&&(h===u&&"right"===s&&!d||h=2&&"OperatorNode:multiply"===e.getIdentifier()&&e.implicit&&"all"!==r&&"hide"===n)for(var w=1;w2&&("OperatorNode:add"===this.getIdentifier()||"OperatorNode:multiply"===this.getIdentifier())){var l=i.map((function(t,r){return t=t.toString(e),a[r]&&(t="("+t+")"),t}));return this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===n?l.join(" "):l.join(" "+this.op+" ")}return this.fn+"("+this.args.join(", ")+")"}},{key:"toJSON",value:function(){return{mathjs:Dm,op:this.op,fn:this.fn,args:this.args,implicit:this.implicit,isPercentage:this.isPercentage}}},{key:"_toHTML",value:function(e){var t=e&&e.parenthesis?e.parenthesis:"keep",n=e&&e.implicit?e.implicit:"hide",i=this.args,a=r(this,t,n,i,!1);if(1===i.length){var o=Ip(this,t),u=i[0].toHTML(e);return a[0]&&(u='('+u+')'),"right"===o?''+nn(this.op)+""+u:u+''+nn(this.op)+""}if(2===i.length){var s=i[0].toHTML(e),c=i[1].toHTML(e);return a[0]&&(s='('+s+')'),a[1]&&(c='('+c+')'),this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===n?s+''+c:s+''+nn(this.op)+""+c}var f=i.map((function(t,r){return t=t.toHTML(e),a[r]&&(t='('+t+')'),t}));return i.length>2&&("OperatorNode:add"===this.getIdentifier()||"OperatorNode:multiply"===this.getIdentifier())?this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===n?f.join(''):f.join(''+nn(this.op)+""):''+nn(this.fn)+'('+f.join(',')+')'}},{key:"_toTex",value:function(e){var t=e&&e.parenthesis?e.parenthesis:"keep",n=e&&e.implicit?e.implicit:"hide",i=this.args,a=r(this,t,n,i,!0),o=Xp[this.fn];if(o=void 0===o?this.op:o,1===i.length){var u=Ip(this,t),s=i[0].toTex(e);return a[0]&&(s="\\left(".concat(s,"\\right)")),"right"===u?o+s:s+o}if(2===i.length){var c=i[0],f=c.toTex(e);a[0]&&(f="\\left(".concat(f,"\\right)"));var l,p=i[1].toTex(e);switch(a[1]&&(p="\\left(".concat(p,"\\right)")),l="keep"===t?c.getIdentifier():c.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return o+"{"+f+"}{"+p+"}";case"OperatorNode:pow":switch(f="{"+f+"}",p="{"+p+"}",l){case"ConditionalNode":case"OperatorNode:divide":f="\\left(".concat(f,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&"hide"===n)return f+"~"+p}return f+o+p}if(i.length>2&&("OperatorNode:add"===this.getIdentifier()||"OperatorNode:multiply"===this.getIdentifier())){var m=i.map((function(t,r){return t=t.toTex(e),a[r]&&(t="\\left(".concat(t,"\\right)")),t}));return"OperatorNode:multiply"===this.getIdentifier()&&this.implicit&&"hide"===n?m.join("~"):m.join(o)}return"\\mathrm{"+this.fn+"}\\left("+i.map((function(t){return t.toTex(e)})).join(",")+"\\right)"}},{key:"getIdentifier",value:function(){return this.type+":"+this.fn}}],[{key:"fromJSON",value:function(e){return new t(e.op,e.fn,e.args,e.implicit,e.isPercentage)}}])}(e.Node);return Ga(n,"name",Dm),n}),{isClass:!0,isNode:!0});function Em(e,t,r){return t=gp(t),yp(e,Am()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Am(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Am=function(){return!!e})()}var Sm="ParenthesisNode",Cm=Se(Sm,["Node"],(function(e){var t=function(e){function t(e){var r;if(_e(this,t),r=Em(this,t),!z(e))throw new TypeError('Node expected for parameter "content"');return r.content=e,r}return bp(t,e),Ie(t,[{key:"type",get:function(){return Sm}},{key:"isParenthesisNode",get:function(){return!0}},{key:"_compile",value:function(e,t){return this.content._compile(e,t)}},{key:"getContent",value:function(){return this.content.getContent()}},{key:"forEach",value:function(e){e(this.content,"content",this)}},{key:"map",value:function(e){return new t(e(this.content,"content",this))}},{key:"clone",value:function(){return new t(this.content)}},{key:"_toString",value:function(e){return!e||e&&!e.parenthesis||e&&"keep"===e.parenthesis?"("+this.content.toString(e)+")":this.content.toString(e)}},{key:"toJSON",value:function(){return{mathjs:Sm,content:this.content}}},{key:"_toHTML",value:function(e){return!e||e&&!e.parenthesis||e&&"keep"===e.parenthesis?'('+this.content.toHTML(e)+')':this.content.toHTML(e)}},{key:"_toTex",value:function(e){return!e||e&&!e.parenthesis||e&&"keep"===e.parenthesis?"\\left(".concat(this.content.toTex(e),"\\right)"):this.content.toTex(e)}}],[{key:"fromJSON",value:function(e){return new t(e.content)}}])}(e.Node);return Ga(t,"name",Sm),t}),{isClass:!0,isNode:!0});function Mm(e,t,r){return t=gp(t),yp(e,Fm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Fm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Fm=function(){return!!e})()}var Om="RangeNode",Tm=Se(Om,["Node"],(function(e){function t(e,t,r){var n=kp(e,t,r),i={},a=kp(e.start,t,r);if(i.start=null!==a&&a<=n||"all"===t,e.step){var o=kp(e.step,t,r);i.step=null!==o&&o<=n||"all"===t}var u=kp(e.end,t,r);return i.end=null!==u&&u<=n||"all"===t,i}var r=function(e){function r(e,t,n){var i;if(_e(this,r),i=Mm(this,r),!z(e))throw new TypeError("Node expected");if(!z(t))throw new TypeError("Node expected");if(n&&!z(n))throw new TypeError("Node expected");if(arguments.length>3)throw new Error("Too many arguments");return i.start=e,i.end=t,i.step=n||null,i}return bp(r,e),Ie(r,[{key:"type",get:function(){return Om}},{key:"isRangeNode",get:function(){return!0}},{key:"needsEnd",value:function(){return this.filter((function(e){return U(e)&&"end"===e.name})).length>0}},{key:"_compile",value:function(e,t){var r=e.range,n=this.start._compile(e,t),i=this.end._compile(e,t);if(this.step){var a=this.step._compile(e,t);return function(e,t,o){return r(n(e,t,o),i(e,t,o),a(e,t,o))}}return function(e,t,a){return r(n(e,t,a),i(e,t,a))}}},{key:"forEach",value:function(e){e(this.start,"start",this),e(this.end,"end",this),this.step&&e(this.step,"step",this)}},{key:"map",value:function(e){return new r(this._ifNode(e(this.start,"start",this)),this._ifNode(e(this.end,"end",this)),this.step&&this._ifNode(e(this.step,"step",this)))}},{key:"clone",value:function(){return new r(this.start,this.end,this.step&&this.step)}},{key:"_toString",value:function(e){var r,n=t(this,e&&e.parenthesis?e.parenthesis:"keep",e&&e.implicit),i=this.start.toString(e);if(n.start&&(i="("+i+")"),r=i,this.step){var a=this.step.toString(e);n.step&&(a="("+a+")"),r+=":"+a}var o=this.end.toString(e);return n.end&&(o="("+o+")"),r+":"+o}},{key:"toJSON",value:function(){return{mathjs:Om,start:this.start,end:this.end,step:this.step}}},{key:"_toHTML",value:function(e){var r,n=t(this,e&&e.parenthesis?e.parenthesis:"keep",e&&e.implicit),i=this.start.toHTML(e);if(n.start&&(i='('+i+')'),r=i,this.step){var a=this.step.toHTML(e);n.step&&(a='('+a+')'),r+=':'+a}var o=this.end.toHTML(e);return n.end&&(o='('+o+')'),r+':'+o}},{key:"_toTex",value:function(e){var r=t(this,e&&e.parenthesis?e.parenthesis:"keep",e&&e.implicit),n=this.start.toTex(e);if(r.start&&(n="\\left(".concat(n,"\\right)")),this.step){var i=this.step.toTex(e);r.step&&(i="\\left(".concat(i,"\\right)")),n+=":"+i}var a=this.end.toTex(e);return r.end&&(a="\\left(".concat(a,"\\right)")),n+":"+a}}],[{key:"fromJSON",value:function(e){return new r(e.start,e.end,e.step)}}])}(e.Node);return Ga(r,"name",Om),r}),{isClass:!0,isNode:!0});function _m(e,t,r){return t=gp(t),yp(e,Bm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Bm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Bm=function(){return!!e})()}var km="RelationalNode",Im=Se(km,["Node"],(function(e){var t=e.Node,r={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="},n=function(e){function t(e,r){var n;if(_e(this,t),n=_m(this,t),!Array.isArray(e))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(r))throw new TypeError("Parameter params must be an array");if(e.length!==r.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");return n.conditionals=e,n.params=r,n}return bp(t,e),Ie(t,[{key:"type",get:function(){return km}},{key:"isRelationalNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var r=this,n=this.params.map((function(r){return r._compile(e,t)}));return function(t,i,a){for(var o,u=n[0](t,i,a),s=0;s('+r.toHTML(e)+')':r.toHTML(e)})),a=i[0],o=0;o'+nn(r[this.conditionals[o]])+""+i[o+1];return a}},{key:"_toTex",value:function(e){for(var t=e&&e.parenthesis?e.parenthesis:"keep",r=kp(this,t,e&&e.implicit),n=this.params.map((function(n,i){var a=kp(n,t,e&&e.implicit);return"all"===t||null!==a&&a<=r?"\\left("+n.toTex(e)+"\right)":n.toTex(e)})),i=n[0],a=0;a'+t+"":"i"===t?''+t+"":"Infinity"===t?''+t+"":"NaN"===t?''+t+"":"null"===t?''+t+"":"undefined"===t?''+t+"":''+t+""}},{key:"toJSON",value:function(){return{mathjs:"SymbolNode",name:this.name}}},{key:"_toTex",value:function(e){var r=!1;void 0===t[this.name]&&n(this.name)&&(r=!0);var i=tm(this.name,r);return"\\"===i[0]?i:" "+i}}],[{key:"onUndefinedSymbol",value:function(e){throw new Error("Undefined symbol "+e)}},{key:"fromJSON",value:function(e){return new i(e.name)}}])}(e.Node);return i}),{isClass:!0,isNode:!0});function jm(){return jm="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=gp(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(arguments.length<3?e:r):i.value}},jm.apply(this,arguments)}function Pm(e,t,r){return t=gp(t),yp(e,Lm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Lm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Lm=function(){return!!e})()}var Um="FunctionNode",$m=Se(Um,["math","Node","SymbolNode"],(function(e){var r,n=e.math,i=e.Node,a=e.SymbolNode,o=function(e){return en(e,{truncate:78})};function u(e,r,n){for(var i,a="",o=/\$(?:\{([a-z_][a-z_0-9]*)(?:\[([0-9]+)\])?\}|\$)/gi,u=0;null!==(i=o.exec(e));)if(a+=e.substring(u,i.index),u=i.index,"$$"===i[0])a+="$",u++;else{u+=i[0].length;var s=r[i[1]];if(!s)throw new ReferenceError("Template: Property "+i[1]+" does not exist.");if(void 0===i[2])switch(t(s)){case"string":a+=s;break;case"object":if(z(s))a+=s.toTex(n);else{if(!Array.isArray(s))throw new TypeError("Template: "+i[1]+" has to be a Node, String or array of Nodes");a+=s.map((function(e,t){if(z(e))return e.toTex(n);throw new TypeError("Template: "+i[1]+"["+t+"] is not a Node.")})).join(",")}break;default:throw new TypeError("Template: "+i[1]+" has to be a Node, String or array of Nodes")}else{if(!z(s[i[2]]&&s[i[2]]))throw new TypeError("Template: "+i[1]+"["+i[2]+"] is not a Node.");a+=s[i[2]].toTex(n)}}return a+e.slice(u)}var s=function(e){function r(e,t){var n;if(_e(this,r),n=Pm(this,r),"string"==typeof e&&(e=new a(e)),!z(e))throw new TypeError('Node expected as parameter "fn"');if(!Array.isArray(t)||!t.every(z))throw new TypeError('Array containing Nodes expected for parameter "args"');return n.fn=e,n.args=t||[],n}return bp(r,e),Ie(r,[{key:"name",get:function(){return this.fn.name||""}},{key:"type",get:function(){return Um}},{key:"isFunctionNode",get:function(){return!0}},{key:"_compile",value:function(e,t){var n=this.args.map((function(r){return r._compile(e,t)}));if(!U(this.fn)){if(S(this.fn)&&I(this.fn.index)&&this.fn.index.isObjectProperty()){var i=this.fn.object._compile(e,t),a=this.fn.index.getObjectProperty(),u=this.args;return function(t,r,o){var s=i(t,r,o),c=function(e,t){if(!je(e,t))throw new Error('No access to method "'+t+'"');return e[t]}(s,a);if(null!=c&&c.rawArgs)return c(u,e,xm(t,r));var f=n.map((function(e){return e(t,r,o)}));return c.apply(s,f)}}var s=this.fn.toString(),c=this.fn._compile(e,t),f=this.args;return function(t,r,i){var a=c(t,r,i);if("function"!=typeof a)throw new TypeError("Expression '".concat(s,"' did not evaluate to a function; value is:")+"\n ".concat(o(a)));if(a.rawArgs)return a(f,e,xm(t,r));var u=n.map((function(e){return e(t,r,i)}));return a.apply(a,u)}}var l=this.fn.name;if(t[l]){var p=this.args;return function(t,r,i){var a=ze(r,l);if("function"!=typeof a)throw new TypeError("Argument '".concat(l,"' was not a function; received: ").concat(o(a)));if(a.rawArgs)return a(p,e,xm(t,r));var u=n.map((function(e){return e(t,r,i)}));return a.apply(a,u)}}var m=l in e?ze(e,l):void 0,h="function"==typeof m&&!0===m.rawArgs,d=function(t){var n;if(t.has(l))n=t.get(l);else{if(!(l in e))return r.onUndefinedFunction(l);n=ze(e,l)}if("function"==typeof n)return n;throw new TypeError("'".concat(l,"' is not a function; its value is:\n ").concat(o(n)))};if(h){var v=this.args;return function(t,r,n){return d(t)(v,e,xm(t,r))}}switch(n.length){case 0:return function(e,t,r){return d(e)()};case 1:return function(e,t,r){return d(e)((0,n[0])(e,t,r))};case 2:return function(e,t,r){var i=d(e),a=n[0],o=n[1];return i(a(e,t,r),o(e,t,r))};default:return function(e,t,r){var i=d(e),a=n.map((function(n){return n(e,t,r)}));return i.apply(void 0,Te(a))}}}},{key:"forEach",value:function(e){e(this.fn,"fn",this);for(var t=0;t'+nn(this.fn)+'('+t.join(',')+')'}},{key:"toTex",value:function(e){var n;return e&&"object"===t(e.handler)&&Ae(e.handler,this.name)&&(n=e.handler[this.name](this,e)),void 0!==n?n:jm(gp(r.prototype),"toTex",this).call(this,e)}},{key:"_toTex",value:function(e){var r,i,a=this.args.map((function(t){return t.toTex(e)}));switch(Qp[this.name]&&(r=Qp[this.name]),!n[this.name]||"function"!=typeof n[this.name].toTex&&"object"!==t(n[this.name].toTex)&&"string"!=typeof n[this.name].toTex||(r=n[this.name].toTex),t(r)){case"function":i=r(this,e);break;case"string":i=u(r,this,e);break;case"object":switch(t(r[a.length])){case"function":i=r[a.length](this,e);break;case"string":i=u(r[a.length],this,e)}}return void 0!==i?i:u("\\mathrm{${name}}\\left(${args}\\right)",this,e)}},{key:"getIdentifier",value:function(){return this.type+":"+this.name}}])}(i);return r=s,Ga(s,"name",Um),Ga(s,"onUndefinedFunction",(function(e){throw new Error("Undefined function "+e)})),Ga(s,"fromJSON",(function(e){return new r(e.fn,e.args)})),s}),{isClass:!0,isNode:!0}),Hm="parse",Gm=Se(Hm,["typed","numeric","config","AccessorNode","ArrayNode","AssignmentNode","BlockNode","ConditionalNode","ConstantNode","FunctionAssignmentNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","RangeNode","RelationalNode","SymbolNode"],(function(e){var t=e.typed,r=e.numeric,n=e.config,i=e.AccessorNode,a=e.ArrayNode,o=e.AssignmentNode,u=e.BlockNode,s=e.ConditionalNode,c=e.ConstantNode,f=e.FunctionAssignmentNode,l=e.FunctionNode,p=e.IndexNode,m=e.ObjectNode,h=e.OperatorNode,d=e.ParenthesisNode,v=e.RangeNode,y=e.RelationalNode,g=e.SymbolNode,x=t(Hm,{string:function(e){return L(e,{})},"Array | Matrix":function(e){return b(e,{})},"string, Object":function(e,t){return L(e,void 0!==t.nodes?t.nodes:{})},"Array | Matrix, Object":b});function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0!==t.nodes?t.nodes:{};return Zn(e,(function(e){if("string"!=typeof e)throw new TypeError("String expected");return L(e,r)}))}var w={NULL:0,DELIMITER:1,NUMBER:2,SYMBOL:3,UNKNOWN:4},D={",":!0,"(":!0,")":!0,"[":!0,"]":!0,"{":!0,"}":!0,'"':!0,"'":!0,";":!0,"+":!0,"-":!0,"*":!0,".*":!0,"/":!0,"./":!0,"%":!0,"^":!0,".^":!0,"~":!0,"!":!0,"&":!0,"|":!0,"^|":!0,"=":!0,":":!0,"?":!0,"==":!0,"!=":!0,"<":!0,">":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},N={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},E={true:!0,false:!1,null:null,undefined:void 0},A=["NaN","Infinity"],C={'"':'"',"'":"'","\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"};function M(e,t){return e.expression.substr(e.index,t)}function F(e){return M(e,1)}function O(e){e.index++}function B(e){return e.expression.charAt(e.index-1)}function I(e){return e.expression.charAt(e.index+1)}function z(e){for(e.tokenType=w.NULL,e.token="",e.comment="";;){if("#"===F(e))for(;"\n"!==F(e)&&""!==F(e);)e.comment+=F(e),O(e);if(!x.isWhitespace(F(e),e.nestingLevel))break;O(e)}if(""!==F(e)){if("\n"===F(e)&&!e.nestingLevel)return e.tokenType=w.DELIMITER,e.token=F(e),void O(e);var t=F(e),r=M(e,2),n=M(e,3);if(3===n.length&&D[n])return e.tokenType=w.DELIMITER,e.token=n,O(e),O(e),void O(e);if(2===r.length&&D[r])return e.tokenType=w.DELIMITER,e.token=r,O(e),void O(e);if(D[t])return e.tokenType=w.DELIMITER,e.token=t,void O(e);if(x.isDigitDot(t)){e.tokenType=w.NUMBER;var i=M(e,2);if("0b"===i||"0o"===i||"0x"===i){for(e.token+=F(e),O(e),e.token+=F(e),O(e);x.isHexDigit(F(e));)e.token+=F(e),O(e);if("."===F(e))for(e.token+=".",O(e);x.isHexDigit(F(e));)e.token+=F(e),O(e);else if("i"===F(e))for(e.token+="i",O(e);x.isDigit(F(e));)e.token+=F(e),O(e);return}if("."===F(e)){if(e.token+=F(e),O(e),!x.isDigit(F(e)))return void(e.tokenType=w.DELIMITER)}else{for(;x.isDigit(F(e));)e.token+=F(e),O(e);x.isDecimalMark(F(e),I(e))&&(e.token+=F(e),O(e))}for(;x.isDigit(F(e));)e.token+=F(e),O(e);if("E"===F(e)||"e"===F(e))if(x.isDigit(I(e))||"-"===I(e)||"+"===I(e)){if(e.token+=F(e),O(e),"+"!==F(e)&&"-"!==F(e)||(e.token+=F(e),O(e)),!x.isDigit(F(e)))throw ce(e,'Digit expected, got "'+F(e)+'"');for(;x.isDigit(F(e));)e.token+=F(e),O(e);if(x.isDecimalMark(F(e),I(e)))throw ce(e,'Digit expected, got "'+F(e)+'"')}else if("."===I(e))throw O(e),ce(e,'Digit expected, got "'+F(e)+'"')}else{if(!x.isAlpha(F(e),B(e),I(e))){for(e.tokenType=w.UNKNOWN;""!==F(e);)e.token+=F(e),O(e);throw ce(e,'Syntax error in part "'+e.token+'"')}for(;x.isAlpha(F(e),B(e),I(e))||x.isDigit(F(e));)e.token+=F(e),O(e);Ae(N,e.token)?e.tokenType=w.DELIMITER:e.tokenType=w.SYMBOL}}else e.tokenType=w.DELIMITER}function R(e){do{z(e)}while("\n"===e.token)}function j(e){e.nestingLevel++}function P(e){e.nestingLevel--}function L(e,t){var r={extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:w.NULL,nestingLevel:0,conditionalLevel:null};Yr(r,{expression:e,extraNodes:t}),z(r);var n=function(e){var t,r,n=[];for(""!==e.token&&"\n"!==e.token&&";"!==e.token&&(t=$(e),e.comment&&(t.comment=e.comment));"\n"===e.token||";"===e.token;)0===n.length&&t&&(r=";"!==e.token,n.push({node:t,visible:r})),z(e),"\n"!==e.token&&";"!==e.token&&""!==e.token&&(t=$(e),e.comment&&(t.comment=e.comment),r=";"!==e.token,n.push({node:t,visible:r}));return n.length>0?new u(n):(t||(t=new c(void 0),e.comment&&(t.comment=e.comment)),t)}(r);if(""!==r.token)throw r.tokenType===w.DELIMITER?fe(r,"Unexpected operator "+r.token):ce(r,'Unexpected part "'+r.token+'"');return n}function $(e){var t,r,n,i,a=function(e){for(var t=function(e){for(var t=H(e);"or"===e.token;)R(e),t=new h("or","or",[t,H(e)]);return t}(e);"?"===e.token;){var r=e.conditionalLevel;e.conditionalLevel=e.nestingLevel,R(e);var n=t,i=$(e);if(":"!==e.token)throw ce(e,"False part of conditional expression expected");e.conditionalLevel=null,R(e);var a=$(e);t=new s(n,i,a),e.conditionalLevel=r}return t}(e);if("="===e.token){if(U(a))return t=a.name,R(e),n=$(e),new o(new g(t),n);if(S(a))return R(e),n=$(e),new o(a.object,a.index,n);if(k(a)&&U(a.fn)&&(i=!0,r=[],t=a.name,a.args.forEach((function(e,t){U(e)?r[t]=e.name:i=!1})),i))return R(e),n=$(e),new f(t,r,n);throw ce(e,"Invalid left hand side of assignment operator =")}return a}function H(e){for(var t=G(e);"xor"===e.token;)R(e),t=new h("xor","xor",[t,G(e)]);return t}function G(e){for(var t=V(e);"and"===e.token;)R(e),t=new h("and","and",[t,V(e)]);return t}function V(e){for(var t=Z(e);"|"===e.token;)R(e),t=new h("|","bitOr",[t,Z(e)]);return t}function Z(e){for(var t=W(e);"^|"===e.token;)R(e),t=new h("^|","bitXor",[t,W(e)]);return t}function W(e){for(var t=Y(e);"&"===e.token;)R(e),t=new h("&","bitAnd",[t,Y(e)]);return t}function Y(e){for(var t=[J(e)],r=[],n={"==":"equal","!=":"unequal","<":"smaller",">":"larger","<=":"smallerEq",">=":"largerEq"};Ae(n,e.token);){var i={name:e.token,fn:n[e.token]};r.push(i),R(e),t.push(J(e))}return 1===t.length?t[0]:2===t.length?new h(r[0].name,r[0].fn,t):new y(r.map((function(e){return e.fn})),t)}function J(e){var t,r,n,i;t=X(e);for(var a={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};Ae(a,e.token);)n=a[r=e.token],R(e),i=[t,X(e)],t=new h(r,n,i);return t}function X(e){var t,r,n,i;t=Q(e);for(var a={to:"to",in:"to"};Ae(a,e.token);)n=a[r=e.token],R(e),"in"===r&&""===e.token?t=new h("*","multiply",[t,new g("in")],!0):(i=[t,Q(e)],t=new h(r,n,i));return t}function Q(e){var t,r=[];if(t=":"===e.token?new c(1):K(e),":"===e.token&&e.conditionalLevel!==e.nestingLevel){for(r.push(t);":"===e.token&&r.length<3;)R(e),")"===e.token||"]"===e.token||","===e.token||""===e.token?r.push(new g("end")):r.push(K(e));t=3===r.length?new v(r[0],r[2],r[1]):new v(r[0],r[1])}return t}function K(e){var t,r,n,i;t=ee(e);for(var a={"+":"add","-":"subtract"};Ae(a,e.token);){n=a[r=e.token],R(e);var o=ee(e);i=o.isPercentage?[t,new h("*","multiply",[t,o])]:[t,o],t=new h(r,n,i)}return t}function ee(e){var t,r,n,i;r=t=te(e);for(var a={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide"};Ae(a,e.token);)i=a[n=e.token],R(e),r=te(e),t=new h(n,i,[t,r]);return t}function te(e){var t,r;for(r=t=re(e);e.tokenType===w.SYMBOL||"in"===e.token&&T(t)||!(e.tokenType!==w.NUMBER||T(r)||q(r)&&"!"!==r.op)||"("===e.token;)r=re(e),t=new h("*","multiply",[t,r],!0);return t}function re(e){for(var t=ne(e),r=t,n=[];"/"===e.token&&_(r);){if(n.push(Yr({},e)),R(e),e.tokenType!==w.NUMBER){Yr(e,n.pop());break}if(n.push(Yr({},e)),R(e),e.tokenType!==w.SYMBOL&&"("!==e.token){n.pop(),Yr(e,n.pop());break}Yr(e,n.pop()),n.pop(),r=ne(e),t=new h("/","divide",[t,r])}return t}function ne(e){var t,r,n,i;t=ie(e);for(var a={"%":"mod",mod:"mod"};Ae(a,e.token);)n=a[r=e.token],R(e),"%"===r&&e.tokenType===w.DELIMITER&&"("!==e.token?t=new h("/","divide",[t,new c(100)],!1,!0):(i=[t,ie(e)],t=new h(r,n,i));return t}function ie(e){var t,i,o,u={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return Ae(u,e.token)?(o=u[e.token],t=e.token,R(e),i=[ie(e)],new h(t,o,i)):function(e){var t,i,o,u;return t=function(e){var t,i,o;t=function(e){var t=[];if(e.tokenType===w.SYMBOL&&Ae(e.extraNodes,e.token)){var i=e.extraNodes[e.token];if(z(e),"("===e.token){if(t=[],j(e),z(e),")"!==e.token)for(t.push($(e));","===e.token;)z(e),t.push($(e));if(")"!==e.token)throw ce(e,"Parenthesis ) expected");P(e),z(e)}return new i(t)}return function(e){var t;return e.tokenType===w.SYMBOL||e.tokenType===w.DELIMITER&&e.token in N?(t=e.token,z(e),ae(e,Ae(E,t)?new c(E[t]):A.includes(t)?new c(r(t,"number")):new g(t))):function(e){var t;return'"'===e.token||"'"===e.token?(t=oe(e,e.token),ae(e,new c(t))):function(e){var t,i,o,u;if("["===e.token){if(j(e),z(e),"]"!==e.token){var s=ue(e);if(";"===e.token){for(o=1,i=[s];";"===e.token;)z(e),"]"!==e.token&&(i[o]=ue(e),o++);if("]"!==e.token)throw ce(e,"End of matrix ] expected");P(e),z(e),u=i[0].items.length;for(var f=1;f0},x.isDecimalMark=function(e,t){return"."===e&&"/"!==t&&"*"!==t&&"^"!==t},x.isDigitDot=function(e){return e>="0"&&e<="9"||"."===e},x.isDigit=function(e){return e>="0"&&e<="9"},x.isHexDigit=function(e){return e>="0"&&e<="9"||e>="a"&&e<="f"||e>="A"&&e<="F"},t.addConversion({from:"string",to:"Node",convert:x}),x})),Vm="compile",Zm=Se(Vm,["typed","parse"],(function(e){var t=e.typed,r=e.parse;return t(Vm,{string:function(e){return r(e).compile()},"Array | Matrix":function(e){return Zn(e,(function(e){return r(e).compile()}))}})})),Wm="evaluate",Ym=Se(Wm,["typed","parse"],(function(e){var t=e.typed,r=e.parse;return t(Wm,{string:function(e){var t=We();return r(e).compile().evaluate(t)},"string, Map | Object":function(e,t){return r(e).compile().evaluate(t)},"Array | Matrix":function(e){var t=We();return Zn(e,(function(e){return r(e).compile().evaluate(t)}))},"Array | Matrix, Map | Object":function(e,t){return Zn(e,(function(e){return r(e).compile().evaluate(t)}))}})})),Jm=Se("Parser",["evaluate"],(function(e){var t=e.evaluate;function r(){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");Object.defineProperty(this,"scope",{value:We(),writable:!1})}return r.prototype.type="Parser",r.prototype.isParser=!0,r.prototype.evaluate=function(e){return t(e,this.scope)},r.prototype.get=function(e){if(this.scope.has(e))return this.scope.get(e)},r.prototype.getAll=function(){return function(e){if(e instanceof Ge)return e.wrappedObject;var t,r={},n=$e(e.keys());try{for(n.s();!(t=n.n()).done;){var i=t.value;Re(r,i,e.get(i))}}catch(e){n.e(e)}finally{n.f()}return r}(this.scope)},r.prototype.getAllAsMap=function(){return this.scope},r.prototype.set=function(e,t){return this.scope.set(e,t),t},r.prototype.remove=function(e){this.scope.delete(e)},r.prototype.clear=function(){this.scope.clear()},r}),{isClass:!0}),Xm="parser",Qm=Se(Xm,["typed","Parser"],(function(e){var t=e.typed,r=e.Parser;return t(Xm,{"":function(){return new r}})})),Km=Se("lup",["typed","matrix","abs","addScalar","divideScalar","multiplyScalar","subtractScalar","larger","equalScalar","unaryMinus","DenseMatrix","SparseMatrix","Spa"],(function(e){var t=e.typed,r=e.matrix,n=e.abs,i=e.addScalar,a=e.divideScalar,o=e.multiplyScalar,u=e.subtractScalar,s=e.larger,c=e.equalScalar,f=e.unaryMinus,l=e.DenseMatrix,p=e.SparseMatrix,m=e.Spa;return t("lup",{DenseMatrix:function(e){return h(e)},SparseMatrix:function(e){return function(e){var t,r,i,u=e._size[0],l=e._size[1],h=Math.min(u,l),d=e._values,v=e._index,y=e._ptr,g=[],x=[],b=[],w=[u,h],D=[],N=[],E=[],A=[h,l],S=[],C=[];for(t=0;t0&&e.forEach(0,r-1,(function(t,r){p._forEachRow(t,g,x,b,(function(n,i){n>t&&e.accumulate(n,f(o(i,r)))}))}));var M,F,O,T,_=r,B=e.get(r),k=n(B);e.forEach(r+1,u-1,(function(e,t){var r=n(t);s(r,k)&&(_=e,k=r,B=t)})),r!==_&&(p._swapRows(r,_,w[1],g,x,b),p._swapRows(r,_,A[1],D,N,E),e.swap(r,_),F=_,O=C[M=r],T=C[F],S[O]=F,S[T]=M,C[M]=T,C[F]=O),e.forEach(0,u-1,(function(e,t){e<=r?(D.push(t),N.push(e)):(t=a(t,B),c(t,0)||(g.push(t),x.push(e)))}))};for(r=0;r0)for(t=0;t0)for(var n="Complex"===r[0][0].type?d(0):0,i=0;i=0;){var s=r[o+u],c=r[n+s];-1===c?(u--,a[t++]=s):(r[n+s]=r[i+c],r[o+ ++u]=c)}return t}function rh(e){return-e-2}var nh=Se("csAmd",["add","multiply","transpose"],(function(e){var t=e.add,r=e.multiply,n=e.transpose;return function(e,o){if(!o||e<=0||e>3)return null;var u=o._size,s=u[0],c=u[1],f=0,l=Math.max(16,10*Math.sqrt(c)),p=function(e,i,a,o,u){var s=n(i);if(1===e&&o===a)return t(i,s);if(2===e){for(var c=s._index,f=s._ptr,l=0,p=0;pu))for(var h=f[p+1];mo)r[u+p]=0,r[i+p]=-1,l++,t[p]=rh(e),r[u+e]++;else{var h=r[s+m];-1!==h&&(c[h]=p),r[f+p]=r[s+m],r[s+m]=p}}return l}(c,O,B,q,R,j,l,k,z,L,I),H=0;$G?(g=d,x=W,b=B[0+d]-G):(x=O[g=F[W++]],b=B[0+g]),y=1;y<=b;y++)(w=B[k+(m=F[x++])])<=0||(Z+=w,B[k+m]=-w,F[J++]=m,-1!==B[I+m]&&(L[B[I+m]]=L[m]),-1!==L[m]?B[I+L[m]]=B[I+m]:B[z+B[q+m]]=B[I+m]);g!==d&&(O[g]=rh(d),B[j+g]=0)}for(0!==G&&(T=J),B[q+d]=Z,O[d]=Y,B[0+d]=J-Y,B[R+d]=-2,U=i(U,f,B,j,c),D=Y;D=U?B[j+g]-=w:0!==B[j+g]&&(B[j+g]=B[q+g]+X)}for(D=Y;D0?(M+=Q,F[S++]=g,C+=g):(O[g]=rh(d),B[j+g]=0)}B[R+m]=S-E+1;var K=S,ee=E+B[0+m];for(W=A+1;W=0))for(m=B[P+(C=L[m])],B[P+C]=-1;-1!==m&&-1!==B[I+m];m=B[I+m],U++){for(b=B[0+m],N=B[R+m],W=O[m]+1;W<=O[m]+b-1;W++)B[j+F[W]]=U;var re=m;for(h=B[I+m];-1!==h;){var ne=B[0+h]===b&&B[R+h]===N;for(W=O[h]+1;ne&&W<=O[h]+b-1;W++)B[j+F[W]]!==U&&(ne=0);ne?(O[h]=rh(m),B[k+m]+=B[k+h],B[k+h]=0,B[R+h]=-1,h=B[I+h],B[I+re]=h):(re=h,h=B[I+h])}}for(W=Y,D=Y;D=0;h--)B[k+h]>0||(B[I+h]=B[z+O[h]],B[z+O[h]]=h);for(g=c;g>=0;g--)B[k+g]<=0||-1!==O[g]&&(B[I+g]=B[z+O[g]],B[z+O[g]]=g);for(d=0,m=0;m<=c;m++)-1===O[m]&&(d=th(m,d,B,z,I,_,j));return _.splice(_.length-1,1),_};function i(e,t,r,n,i){if(e<2||e+t<0){for(var a=0;a=1&&D[o]++,2===S.jleaf&&D[S.q]--}-1!==r[o]&&(v[0+o]=r[o])}for(o=0;o=0;r--)-1!==e[r]&&(a[o+r]=a[0+e[r]],a[0+e[r]]=r);for(r=0;r=0;s--)for(f=r[s],l=r[s+1],c=f;c=0;u--)m[u]=-1,-1!==(s=h[u])&&(0==d[g+s]++&&(d[y+s]=u),d[0+u]=d[v+s],d[v+s]=u);for(t.lnz=0,t.m2=a,s=0;s=0;){e=n[l];var p=i?i[e]:e;uh(c,e)||(sh(c,e),n[f+l]=p<0?0:ch(c[p]));var m=1;for(o=n[f+l],u=p<0?0:ch(c[p+1]);o3)throw new Error("Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]");if(r<0||r>1)throw new Error("Partial pivoting threshold must be a number from 0 to 1");var n=l(t,e,!1),i=p(e,n,r);return{L:i.L,U:i.U,p:i.pinv,q:n.q,toString:function(){return"L: "+this.L.toString()+"\nU: "+this.U.toString()+"\np: "+this.p.toString()+(this.q?"\nq: "+this.q.toString():"")+"\n"}}}})}));function hh(e,t){var r,n=t.length,i=[];if(e)for(r=0;r0&&r(h[h.length-1]);)h.pop();if(h.length<2)throw new RangeError("Polynomial [".concat(e,", ").concat(t,"] must have a non-zero non-constant coefficient"));switch(h.length){case 2:return[c(u(h[0],h[1]))];case 3:var d=Ea(h,3),v=d[0],y=d[1],g=d[2],x=o(2,g),b=o(y,y),w=o(4,g,v);if(n(b,w))return[u(c(y),x)];var D=s(a(b,w));return[u(a(D,y),x),u(a(c(D),y),x)];case 4:var N=Ea(h,4),E=N[0],A=N[1],S=N[2],C=N[3],M=c(o(3,C)),F=o(S,S),O=o(3,C,A),T=i(o(2,S,S,S),o(27,C,C,E)),_=o(9,C,S,A);if(n(F,O)&&n(T,_))return[u(S,M)];var B,k=a(F,O),I=a(T,_),z=i(o(18,C,S,A,E),o(S,S,A,A)),R=i(o(4,S,S,S,E),o(4,C,A,A,A),o(27,C,C,E,E));return n(z,R)?[u(a(o(4,C,S,A),i(o(9,C,C,E),o(S,S,S))),o(C,k)),u(a(o(9,C,E),o(S,A)),o(2,k))]:(B=n(F,O)?I:u(i(I,s(a(o(I,I),o(4,k,k,k)))),2),f(B,!0).toArray().map((function(e){return u(i(S,e,u(k,e)),M)})).map((function(e){return"Complex"===l(e)&&n(m(e),m(e)+p(e))?m(e):e})));default:throw new RangeError("only implemented for cubic or lower-order polynomials, not ".concat(h))}}})})),xh=Se("Help",["evaluate"],(function(e){var t=e.evaluate;function r(e){if(!(this instanceof r))throw new SyntaxError("Constructor must be called with the new operator");if(!e)throw new Error('Argument "doc" missing');this.doc=e}return r.prototype.type="Help",r.prototype.isHelp=!0,r.prototype.toString=function(){var e=this.doc||{},r="\n";if(e.name&&(r+="Name: "+e.name+"\n\n"),e.category&&(r+="Category: "+e.category+"\n\n"),e.description&&(r+="Description:\n "+e.description+"\n\n"),e.syntax&&(r+="Syntax:\n "+e.syntax.join("\n ")+"\n\n"),e.examples){r+="Examples:\n";for(var n=!1,i=t("config()"),a={config:function(e){return n=!0,t("config(newConfig)",{newConfig:e})}},o=0;o1 and B<3]"],seealso:["bignumber","boolean","complex","matrix,","number","range","string","unit"]},matrix:{name:"matrix",category:"Construction",syntax:["[]","[a1, b1, ...; a2, b2, ...]","matrix()",'matrix("dense")',"matrix([...])"],description:"Create a matrix.",examples:["[]","[1, 2, 3]","[1, 2, 3; 4, 5, 6]","matrix()","matrix([3, 4])",'matrix([3, 4; 5, 6], "sparse")','matrix([3, 4; 5, 6], "sparse", "number")'],seealso:["bignumber","boolean","complex","index","number","string","unit","sparse"]},number:{name:"number",category:"Construction",syntax:["x","number(x)","number(unit, valuelessUnit)"],description:"Create a number or convert a string or boolean into a number.",examples:["2","2e3","4.05","number(2)",'number("7.2")',"number(true)","number([true, false, true, true])",'number(unit("52cm"), "m")'],seealso:["bignumber","boolean","complex","fraction","index","matrix","string","unit"]},sparse:{name:"sparse",category:"Construction",syntax:["sparse()","sparse([a1, b1, ...; a1, b2, ...])",'sparse([a1, b1, ...; a1, b2, ...], "number")'],description:"Create a sparse matrix.",examples:["sparse()","sparse([3, 4; 5, 6])",'sparse([3, 0; 5, 0], "number")'],seealso:["bignumber","boolean","complex","index","number","string","unit","matrix"]},splitUnit:{name:"splitUnit",category:"Construction",syntax:["splitUnit(unit: Unit, parts: Unit[])"],description:"Split a unit in an array of units whose sum is equal to the original unit.",examples:['splitUnit(1 m, ["feet", "inch"])'],seealso:["unit","createUnit"]},string:{name:"string",category:"Construction",syntax:['"text"',"string(x)"],description:"Create a string or convert a value to a string",examples:['"Hello World!"',"string(4.2)","string(3 + 2i)"],seealso:["bignumber","boolean","complex","index","matrix","number","unit"]},unit:{name:"unit",category:"Construction",syntax:["value unit","unit(value, unit)","unit(string)"],description:"Create a unit.",examples:["5.5 mm","3 inch",'unit(7.1, "kilogram")','unit("23 deg")'],seealso:["bignumber","boolean","complex","index","matrix","number","string"]},e:wh,E:wh,false:{name:"false",category:"Constants",syntax:["false"],description:"Boolean value false",examples:["false"],seealso:["true"]},i:{name:"i",category:"Constants",syntax:["i"],description:"Imaginary unit, defined as i*i=-1. A complex number is described as a + b*i, where a is the real part, and b is the imaginary part.",examples:["i","i * i","sqrt(-1)"],seealso:[]},Infinity:{name:"Infinity",category:"Constants",syntax:["Infinity"],description:"Infinity, a number which is larger than the maximum number that can be handled by a floating point number.",examples:["Infinity","1 / 0"],seealso:[]},LN2:{name:"LN2",category:"Constants",syntax:["LN2"],description:"Returns the natural logarithm of 2, approximately equal to 0.693",examples:["LN2","log(2)"],seealso:[]},LN10:{name:"LN10",category:"Constants",syntax:["LN10"],description:"Returns the natural logarithm of 10, approximately equal to 2.302",examples:["LN10","log(10)"],seealso:[]},LOG2E:{name:"LOG2E",category:"Constants",syntax:["LOG2E"],description:"Returns the base-2 logarithm of E, approximately equal to 1.442",examples:["LOG2E","log(e, 2)"],seealso:[]},LOG10E:{name:"LOG10E",category:"Constants",syntax:["LOG10E"],description:"Returns the base-10 logarithm of E, approximately equal to 0.434",examples:["LOG10E","log(e, 10)"],seealso:[]},NaN:{name:"NaN",category:"Constants",syntax:["NaN"],description:"Not a number",examples:["NaN","0 / 0"],seealso:[]},null:{name:"null",category:"Constants",syntax:["null"],description:"Value null",examples:["null"],seealso:["true","false"]},pi:Dh,PI:Dh,phi:{name:"phi",category:"Constants",syntax:["phi"],description:"Phi is the golden ratio. Two quantities are in the golden ratio if their ratio is the same as the ratio of their sum to the larger of the two quantities. Phi is defined as `(1 + sqrt(5)) / 2` and is approximately 1.618034...",examples:["phi"],seealso:[]},SQRT1_2:{name:"SQRT1_2",category:"Constants",syntax:["SQRT1_2"],description:"Returns the square root of 1/2, approximately equal to 0.707",examples:["SQRT1_2","sqrt(1/2)"],seealso:[]},SQRT2:{name:"SQRT2",category:"Constants",syntax:["SQRT2"],description:"Returns the square root of 2, approximately equal to 1.414",examples:["SQRT2","sqrt(2)"],seealso:[]},tau:{name:"tau",category:"Constants",syntax:["tau"],description:"Tau is the ratio constant of a circle's circumference to radius, equal to 2 * pi, approximately 6.2832.",examples:["tau","2 * pi"],seealso:["pi"]},true:{name:"true",category:"Constants",syntax:["true"],description:"Boolean value true",examples:["true"],seealso:["false"]},version:{name:"version",category:"Constants",syntax:["version"],description:"A string with the version number of math.js",examples:["version"],seealso:[]},speedOfLight:{description:"Speed of light in vacuum",examples:["speedOfLight"]},gravitationConstant:{description:"Newtonian constant of gravitation",examples:["gravitationConstant"]},planckConstant:{description:"Planck constant",examples:["planckConstant"]},reducedPlanckConstant:{description:"Reduced Planck constant",examples:["reducedPlanckConstant"]},magneticConstant:{description:"Magnetic constant (vacuum permeability)",examples:["magneticConstant"]},electricConstant:{description:"Electric constant (vacuum permeability)",examples:["electricConstant"]},vacuumImpedance:{description:"Characteristic impedance of vacuum",examples:["vacuumImpedance"]},coulomb:{description:"Coulomb's constant",examples:["coulomb"]},elementaryCharge:{description:"Elementary charge",examples:["elementaryCharge"]},bohrMagneton:{description:"Borh magneton",examples:["bohrMagneton"]},conductanceQuantum:{description:"Conductance quantum",examples:["conductanceQuantum"]},inverseConductanceQuantum:{description:"Inverse conductance quantum",examples:["inverseConductanceQuantum"]},magneticFluxQuantum:{description:"Magnetic flux quantum",examples:["magneticFluxQuantum"]},nuclearMagneton:{description:"Nuclear magneton",examples:["nuclearMagneton"]},klitzing:{description:"Von Klitzing constant",examples:["klitzing"]},bohrRadius:{description:"Borh radius",examples:["bohrRadius"]},classicalElectronRadius:{description:"Classical electron radius",examples:["classicalElectronRadius"]},electronMass:{description:"Electron mass",examples:["electronMass"]},fermiCoupling:{description:"Fermi coupling constant",examples:["fermiCoupling"]},fineStructure:{description:"Fine-structure constant",examples:["fineStructure"]},hartreeEnergy:{description:"Hartree energy",examples:["hartreeEnergy"]},protonMass:{description:"Proton mass",examples:["protonMass"]},deuteronMass:{description:"Deuteron Mass",examples:["deuteronMass"]},neutronMass:{description:"Neutron mass",examples:["neutronMass"]},quantumOfCirculation:{description:"Quantum of circulation",examples:["quantumOfCirculation"]},rydberg:{description:"Rydberg constant",examples:["rydberg"]},thomsonCrossSection:{description:"Thomson cross section",examples:["thomsonCrossSection"]},weakMixingAngle:{description:"Weak mixing angle",examples:["weakMixingAngle"]},efimovFactor:{description:"Efimov factor",examples:["efimovFactor"]},atomicMass:{description:"Atomic mass constant",examples:["atomicMass"]},avogadro:{description:"Avogadro's number",examples:["avogadro"]},boltzmann:{description:"Boltzmann constant",examples:["boltzmann"]},faraday:{description:"Faraday constant",examples:["faraday"]},firstRadiation:{description:"First radiation constant",examples:["firstRadiation"]},loschmidt:{description:"Loschmidt constant at T=273.15 K and p=101.325 kPa",examples:["loschmidt"]},gasConstant:{description:"Gas constant",examples:["gasConstant"]},molarPlanckConstant:{description:"Molar Planck constant",examples:["molarPlanckConstant"]},molarVolume:{description:"Molar volume of an ideal gas at T=273.15 K and p=101.325 kPa",examples:["molarVolume"]},sackurTetrode:{description:"Sackur-Tetrode constant at T=1 K and p=101.325 kPa",examples:["sackurTetrode"]},secondRadiation:{description:"Second radiation constant",examples:["secondRadiation"]},stefanBoltzmann:{description:"Stefan-Boltzmann constant",examples:["stefanBoltzmann"]},wienDisplacement:{description:"Wien displacement law constant",examples:["wienDisplacement"]},molarMass:{description:"Molar mass constant",examples:["molarMass"]},molarMassC12:{description:"Molar mass constant of carbon-12",examples:["molarMassC12"]},gravity:{description:"Standard acceleration of gravity (standard acceleration of free-fall on Earth)",examples:["gravity"]},planckLength:{description:"Planck length",examples:["planckLength"]},planckMass:{description:"Planck mass",examples:["planckMass"]},planckTime:{description:"Planck time",examples:["planckTime"]},planckCharge:{description:"Planck charge",examples:["planckCharge"]},planckTemperature:{description:"Planck temperature",examples:["planckTemperature"]},derivative:{name:"derivative",category:"Algebra",syntax:["derivative(expr, variable)","derivative(expr, variable, {simplify: boolean})"],description:"Takes the derivative of an expression expressed in parser Nodes. The derivative will be taken over the supplied variable in the second parameter. If there are multiple variables in the expression, it will return a partial derivative.",examples:['derivative("2x^3", "x")','derivative("2x^3", "x", {simplify: false})','derivative("2x^2 + 3x + 4", "x")','derivative("sin(2x)", "x")','f = parse("x^2 + x")','x = parse("x")',"df = derivative(f, x)","df.evaluate({x: 3})"],seealso:["simplify","parse","evaluate"]},lsolve:{name:"lsolve",category:"Algebra",syntax:["x=lsolve(L, b)"],description:"Finds one solution of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lsolve(a, b)"],seealso:["lsolveAll","lup","lusolve","usolve","matrix","sparse"]},lsolveAll:{name:"lsolveAll",category:"Algebra",syntax:["x=lsolveAll(L, b)"],description:"Finds all solutions of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lsolve(a, b)"],seealso:["lsolve","lup","lusolve","usolve","matrix","sparse"]},lup:{name:"lup",category:"Algebra",syntax:["lup(m)"],description:"Calculate the Matrix LU decomposition with partial pivoting. Matrix A is decomposed in three matrices (L, U, P) where P * A = L * U",examples:["lup([[2, 1], [1, 4]])","lup(matrix([[2, 1], [1, 4]]))","lup(sparse([[2, 1], [1, 4]]))"],seealso:["lusolve","lsolve","usolve","matrix","sparse","slu","qr"]},lusolve:{name:"lusolve",category:"Algebra",syntax:["x=lusolve(A, b)","x=lusolve(lu, b)"],description:"Solves the linear system A * x = b where A is an [n x n] matrix and b is a [n] column vector.",examples:["a = [-2, 3; 2, 1]","b = [11, 9]","x = lusolve(a, b)"],seealso:["lup","slu","lsolve","usolve","matrix","sparse"]},leafCount:{name:"leafCount",category:"Algebra",syntax:["leafCount(expr)"],description:"Computes the number of leaves in the parse tree of the given expression",examples:['leafCount("e^(i*pi)-1")','leafCount(parse("{a: 22/7, b: 10^(1/2)}"))'],seealso:["simplify"]},polynomialRoot:{name:"polynomialRoot",category:"Algebra",syntax:["x=polynomialRoot(-6, 3)","x=polynomialRoot(4, -4, 1)","x=polynomialRoot(-8, 12, -6, 1)"],description:"Finds the roots of a univariate polynomial given by its coefficients starting from constant, linear, and so on, increasing in degree.",examples:["a = polynomialRoot(-6, 11, -6, 1)"],seealso:["cbrt","sqrt"]},resolve:{name:"resolve",category:"Algebra",syntax:["resolve(node, scope)"],description:"Recursively substitute variables in an expression tree.",examples:['resolve(parse("1 + x"), { x: 7 })','resolve(parse("size(text)"), { text: "Hello World" })','resolve(parse("x + y"), { x: parse("3z") })','resolve(parse("3x"), { x: parse("y+z"), z: parse("w^y") })'],seealso:["simplify","evaluate"],mayThrow:["ReferenceError"]},simplify:{name:"simplify",category:"Algebra",syntax:["simplify(expr)","simplify(expr, rules)"],description:"Simplify an expression tree.",examples:['simplify("3 + 2 / 4")','simplify("2x + x")','f = parse("x * (x + 2 + x)")',"simplified = simplify(f)","simplified.evaluate({x: 2})"],seealso:["simplifyCore","derivative","evaluate","parse","rationalize","resolve"]},simplifyConstant:{name:"simplifyConstant",category:"Algebra",syntax:["simplifyConstant(expr)","simplifyConstant(expr, options)"],description:"Replace constant subexpressions of node with their values.",examples:['simplifyConstant("(3-3)*x")','simplifyConstant(parse("z-cos(tau/8)"))'],seealso:["simplify","simplifyCore","evaluate"]},simplifyCore:{name:"simplifyCore",category:"Algebra",syntax:["simplifyCore(node)"],description:"Perform simple one-pass simplifications on an expression tree.",examples:['simplifyCore(parse("0*x"))','simplifyCore(parse("(x+0)*2"))'],seealso:["simplify","simplifyConstant","evaluate"]},symbolicEqual:{name:"symbolicEqual",category:"Algebra",syntax:["symbolicEqual(expr1, expr2)","symbolicEqual(expr1, expr2, options)"],description:"Returns true if the difference of the expressions simplifies to 0",examples:['symbolicEqual("x*y","y*x")','symbolicEqual("abs(x^2)", "x^2")','symbolicEqual("abs(x)", "x", {context: {abs: {trivial: true}}})'],seealso:["simplify","evaluate"]},rationalize:{name:"rationalize",category:"Algebra",syntax:["rationalize(expr)","rationalize(expr, scope)","rationalize(expr, scope, detailed)"],description:"Transform a rationalizable expression in a rational fraction. If rational fraction is one variable polynomial then converts the numerator and denominator in canonical form, with decreasing exponents, returning the coefficients of numerator.",examples:['rationalize("2x/y - y/(x+1)")','rationalize("2x/y - y/(x+1)", true)'],seealso:["simplify"]},slu:{name:"slu",category:"Algebra",syntax:["slu(A, order, threshold)"],description:"Calculate the Matrix LU decomposition with full pivoting. Matrix A is decomposed in two matrices (L, U) and two permutation vectors (pinv, q) where P * A * Q = L * U",examples:["slu(sparse([4.5, 0, 3.2, 0; 3.1, 2.9, 0, 0.9; 0, 1.7, 3, 0; 3.5, 0.4, 0, 1]), 1, 0.001)"],seealso:["lusolve","lsolve","usolve","matrix","sparse","lup","qr"]},usolve:{name:"usolve",category:"Algebra",syntax:["x=usolve(U, b)"],description:"Finds one solution of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.",examples:["x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])"],seealso:["usolveAll","lup","lusolve","lsolve","matrix","sparse"]},usolveAll:{name:"usolveAll",category:"Algebra",syntax:["x=usolve(U, b)"],description:"Finds all solutions of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.",examples:["x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])"],seealso:["usolve","lup","lusolve","lsolve","matrix","sparse"]},qr:{name:"qr",category:"Algebra",syntax:["qr(A)"],description:"Calculates the Matrix QR decomposition. Matrix `A` is decomposed in two matrices (`Q`, `R`) where `Q` is an orthogonal matrix and `R` is an upper triangular matrix.",examples:["qr([[1, -1, 4], [1, 4, -2], [1, 4, 2], [1, -1, 0]])"],seealso:["lup","slu","matrix"]},abs:{name:"abs",category:"Arithmetic",syntax:["abs(x)"],description:"Compute the absolute value.",examples:["abs(3.5)","abs(-4.2)"],seealso:["sign"]},add:{name:"add",category:"Operators",syntax:["x + y","add(x, y)"],description:"Add two values.",examples:["a = 2.1 + 3.6","a - 3.6","3 + 2i","3 cm + 2 inch",'"2.3" + "4"'],seealso:["subtract"]},cbrt:{name:"cbrt",category:"Arithmetic",syntax:["cbrt(x)","cbrt(x, allRoots)"],description:"Compute the cubic root value. If x = y * y * y, then y is the cubic root of x. When `x` is a number or complex number, an optional second argument `allRoots` can be provided to return all three cubic roots. If not provided, the principal root is returned",examples:["cbrt(64)","cube(4)","cbrt(-8)","cbrt(2 + 3i)","cbrt(8i)","cbrt(8i, true)","cbrt(27 m^3)"],seealso:["square","sqrt","cube","multiply"]},ceil:{name:"ceil",category:"Arithmetic",syntax:["ceil(x)"],description:"Round a value towards plus infinity. If x is complex, both real and imaginary part are rounded towards plus infinity.",examples:["ceil(3.2)","ceil(3.8)","ceil(-4.2)"],seealso:["floor","fix","round"]},cube:{name:"cube",category:"Arithmetic",syntax:["cube(x)"],description:"Compute the cube of a value. The cube of x is x * x * x.",examples:["cube(2)","2^3","2 * 2 * 2"],seealso:["multiply","square","pow"]},divide:{name:"divide",category:"Operators",syntax:["x / y","divide(x, y)"],description:"Divide two values.",examples:["a = 2 / 3","a * 3","4.5 / 2","3 + 4 / 2","(3 + 4) / 2","18 km / 4.5"],seealso:["multiply"]},dotDivide:{name:"dotDivide",category:"Operators",syntax:["x ./ y","dotDivide(x, y)"],description:"Divide two values element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","b = [2, 1, 1; 3, 2, 5]","a ./ b"],seealso:["multiply","dotMultiply","divide"]},dotMultiply:{name:"dotMultiply",category:"Operators",syntax:["x .* y","dotMultiply(x, y)"],description:"Multiply two values element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","b = [2, 1, 1; 3, 2, 5]","a .* b"],seealso:["multiply","divide","dotDivide"]},dotPow:{name:"dotPow",category:"Operators",syntax:["x .^ y","dotPow(x, y)"],description:"Calculates the power of x to y element wise.",examples:["a = [1, 2, 3; 4, 5, 6]","a .^ 2"],seealso:["pow"]},exp:{name:"exp",category:"Arithmetic",syntax:["exp(x)"],description:"Calculate the exponent of a value.",examples:["exp(1.3)","e ^ 1.3","log(exp(1.3))","x = 2.4","(exp(i*x) == cos(x) + i*sin(x)) # Euler's formula"],seealso:["expm","expm1","pow","log"]},expm:{name:"expm",category:"Arithmetic",syntax:["exp(x)"],description:"Compute the matrix exponential, expm(A) = e^A. The matrix must be square. Not to be confused with exp(a), which performs element-wise exponentiation.",examples:["expm([[0,2],[0,0]])"],seealso:["exp"]},expm1:{name:"expm1",category:"Arithmetic",syntax:["expm1(x)"],description:"Calculate the value of subtracting 1 from the exponential value.",examples:["expm1(2)","pow(e, 2) - 1","log(expm1(2) + 1)"],seealso:["exp","pow","log"]},fix:{name:"fix",category:"Arithmetic",syntax:["fix(x)"],description:"Round a value towards zero. If x is complex, both real and imaginary part are rounded towards zero.",examples:["fix(3.2)","fix(3.8)","fix(-4.2)","fix(-4.8)"],seealso:["ceil","floor","round"]},floor:{name:"floor",category:"Arithmetic",syntax:["floor(x)"],description:"Round a value towards minus infinity.If x is complex, both real and imaginary part are rounded towards minus infinity.",examples:["floor(3.2)","floor(3.8)","floor(-4.2)"],seealso:["ceil","fix","round"]},gcd:{name:"gcd",category:"Arithmetic",syntax:["gcd(a, b)","gcd(a, b, c, ...)"],description:"Compute the greatest common divisor.",examples:["gcd(8, 12)","gcd(-4, 6)","gcd(25, 15, -10)"],seealso:["lcm","xgcd"]},hypot:{name:"hypot",category:"Arithmetic",syntax:["hypot(a, b, c, ...)","hypot([a, b, c, ...])"],description:"Calculate the hypotenusa of a list with values. ",examples:["hypot(3, 4)","sqrt(3^2 + 4^2)","hypot(-2)","hypot([3, 4, 5])"],seealso:["abs","norm"]},lcm:{name:"lcm",category:"Arithmetic",syntax:["lcm(x, y)"],description:"Compute the least common multiple.",examples:["lcm(4, 6)","lcm(6, 21)","lcm(6, 21, 5)"],seealso:["gcd"]},log:{name:"log",category:"Arithmetic",syntax:["log(x)","log(x, base)"],description:"Compute the logarithm of a value. If no base is provided, the natural logarithm of x is calculated. If base if provided, the logarithm is calculated for the specified base. log(x, base) is defined as log(x) / log(base).",examples:["log(3.5)","a = log(2.4)","exp(a)","10 ^ 4","log(10000, 10)","log(10000) / log(10)","b = log(1024, 2)","2 ^ b"],seealso:["exp","log1p","log2","log10"]},log2:{name:"log2",category:"Arithmetic",syntax:["log2(x)"],description:"Calculate the 2-base of a value. This is the same as calculating `log(x, 2)`.",examples:["log2(0.03125)","log2(16)","log2(16) / log2(2)","pow(2, 4)"],seealso:["exp","log1p","log","log10"]},log1p:{name:"log1p",category:"Arithmetic",syntax:["log1p(x)","log1p(x, base)"],description:"Calculate the logarithm of a `value+1`",examples:["log1p(2.5)","exp(log1p(1.4))","pow(10, 4)","log1p(9999, 10)","log1p(9999) / log(10)"],seealso:["exp","log","log2","log10"]},log10:{name:"log10",category:"Arithmetic",syntax:["log10(x)"],description:"Compute the 10-base logarithm of a value.",examples:["log10(0.00001)","log10(10000)","10 ^ 4","log(10000) / log(10)","log(10000, 10)"],seealso:["exp","log"]},mod:{name:"mod",category:"Operators",syntax:["x % y","x mod y","mod(x, y)"],description:"Calculates the modulus, the remainder of an integer division.",examples:["7 % 3","11 % 2","10 mod 4","isOdd(x) = x % 2","isOdd(2)","isOdd(3)"],seealso:["divide"]},multiply:{name:"multiply",category:"Operators",syntax:["x * y","multiply(x, y)"],description:"multiply two values.",examples:["a = 2.1 * 3.4","a / 3.4","2 * 3 + 4","2 * (3 + 4)","3 * 2.1 km"],seealso:["divide"]},norm:{name:"norm",category:"Arithmetic",syntax:["norm(x)","norm(x, p)"],description:"Calculate the norm of a number, vector or matrix.",examples:["abs(-3.5)","norm(-3.5)","norm(3 - 4i)","norm([1, 2, -3], Infinity)","norm([1, 2, -3], -Infinity)","norm([3, 4], 2)","norm([[1, 2], [3, 4]], 1)",'norm([[1, 2], [3, 4]], "inf")','norm([[1, 2], [3, 4]], "fro")']},nthRoot:{name:"nthRoot",category:"Arithmetic",syntax:["nthRoot(a)","nthRoot(a, root)"],description:'Calculate the nth root of a value. The principal nth root of a positive real number A, is the positive real solution of the equation "x^root = A".',examples:["4 ^ 3","nthRoot(64, 3)","nthRoot(9, 2)","sqrt(9)"],seealso:["nthRoots","pow","sqrt"]},nthRoots:{name:"nthRoots",category:"Arithmetic",syntax:["nthRoots(A)","nthRoots(A, root)"],description:'Calculate the nth roots of a value. An nth root of a positive real number A, is a positive real solution of the equation "x^root = A". This function returns an array of complex values.',examples:["nthRoots(1)","nthRoots(1, 3)"],seealso:["sqrt","pow","nthRoot"]},pow:{name:"pow",category:"Operators",syntax:["x ^ y","pow(x, y)"],description:"Calculates the power of x to y, x^y.",examples:["2^3","2*2*2","1 + e ^ (pi * i)","pow([[1, 2], [4, 3]], 2)","pow([[1, 2], [4, 3]], -1)"],seealso:["multiply","nthRoot","nthRoots","sqrt"]},round:{name:"round",category:"Arithmetic",syntax:["round(x)","round(x, n)","round(unit, valuelessUnit)","round(unit, n, valuelessUnit)"],description:"round a value towards the nearest integer.If x is complex, both real and imaginary part are rounded towards the nearest integer. When n is specified, the value is rounded to n decimals.",examples:["round(3.2)","round(3.8)","round(-4.2)","round(-4.8)","round(pi, 3)","round(123.45678, 2)","round(3.241cm, 2, cm)","round([3.2, 3.8, -4.7])"],seealso:["ceil","floor","fix"]},sign:{name:"sign",category:"Arithmetic",syntax:["sign(x)"],description:"Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]},sqrt:{name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]},sqrtm:{name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[33, 24], [48, 57]])"],seealso:["sqrt","abs","square","multiply"]},square:{name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]},subtract:{name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]},unaryMinus:{name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]},unaryPlus:{name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]},xgcd:{name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]},invmod:{name:"invmod",category:"Arithmetic",syntax:["invmod(a, b)"],description:"Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax ≣ 1 (mod b)",examples:["invmod(8, 12)","invmod(7, 13)","invmod(15151, 15122)"],seealso:["gcd","xgcd"]},bitAnd:{name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]},bitNot:{name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]},bitOr:{name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]},bitXor:{name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]},leftShift:{name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]},rightArithShift:{name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]},rightLogShift:{name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]},bellNumbers:{name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]},catalan:{name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]},composition:{name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]},stirlingS2:{name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]},config:{name:"config",category:"Core",syntax:["config()","config(options)"],description:"Get configuration or change configuration.",examples:["config()","1/3 + 1/4",'config({number: "Fraction"})',"1/3 + 1/4"],seealso:[]},import:{name:"import",category:"Core",syntax:["import(functions)","import(functions, options)"],description:"Import functions or constants from an object.",examples:["import({myFn: f(x)=x^2, myConstant: 32 })","myFn(2)","myConstant"],seealso:[]},typed:{name:"typed",category:"Core",syntax:["typed(signatures)","typed(name, signatures)"],description:"Create a typed function.",examples:['double = typed({ "number": f(x)=x+x, "string": f(x)=concat(x,x) })',"double(2)",'double("hello")'],seealso:[]},arg:{name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]},conj:{name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]},re:{name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]},im:{name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]},evaluate:{name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate(expression, scope)","evaluate([expr1, expr2, expr3, ...])","evaluate([expr1, expr2, expr3, ...], scope)"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(16)")','evaluate("2 inch to cm")','evaluate("sin(x * pi)", { "x": 1/2 })','evaluate(["width=2", "height=4","width*height"])'],seealso:[]},help:{name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]},distance:{name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]},intersect:{name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]},and:{name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]},not:{name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]},or:{name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]},xor:{name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]},concat:{name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},count:{name:"count",category:"Matrix",syntax:["count(x)"],description:"Count the number of elements of a matrix, array or string.",examples:["a = [1, 2; 3, 4; 5, 6]","count(a)","size(a)",'count("hello world")'],seealso:["size"]},cross:{name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]},column:{name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row","matrixFromColumns"]},ctranspose:{name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]},det:{name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},diag:{name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},diff:{name:"diff",category:"Matrix",syntax:["diff(arr)","diff(arr, dim)"],description:["Create a new matrix or array with the difference of the passed matrix or array.","Dim parameter is optional and used to indicant the dimension of the array/matrix to apply the difference","If no dimension parameter is passed it is assumed as dimension 0","Dimension is zero-based in javascript and one-based in the parser","Arrays must be 'rectangular' meaning arrays like [1, 2]","If something is passed as a matrix it will be returned as a matrix but other than that all matrices are converted to arrays"],examples:["A = [1, 2, 4, 7, 0]","diff(A)","diff(A, 1)","B = [[1, 2], [3, 4]]","diff(B)","diff(B, 1)","diff(B, 2)","diff(B, bignumber(2))","diff([[1, 2], matrix([3, 4])], 2)"],seealso:["subtract","partitionSelect"]},dot:{name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]},getMatrixDataType:{name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]},identity:{name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]},filter:{name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]},flatten:{name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]},forEach:{name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["numberOfPets = {}","addPet(n) = numberOfPets[n] = (numberOfPets[n] ? numberOfPets[n]:0 ) + 1;",'forEach(["Dog","Cat","Cat"], addPet)',"numberOfPets"],seealso:["map","sort","filter"]},inv:{name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]},pinv:{name:"pinv",category:"Matrix",syntax:["pinv(x)"],description:"Calculate the Moore–Penrose inverse of a matrix",examples:["pinv([1, 2; 3, 4])","pinv([[1, 0], [0, 1], [0, 1]])","pinv(4)"],seealso:["inv"]},eigs:{name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and optionally eigenvectors of a square matrix",examples:["eigs([[5, 2.3], [2.3, 1]])","eigs([[1, 2, 3], [4, 5, 6], [7, 8, 9]], { precision: 1e-6, eigenvectors: false })"],seealso:["inv"]},kron:{name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]},matrixFromFunction:{name:"matrixFromFunction",category:"Matrix",syntax:["matrixFromFunction(size, fn)","matrixFromFunction(size, fn, format)","matrixFromFunction(size, fn, format, datatype)","matrixFromFunction(size, format, fn)","matrixFromFunction(size, format, datatype, fn)"],description:"Create a matrix by evaluating a generating function at each index.",examples:["f(I) = I[1] - I[2]","matrixFromFunction([3,3], f)","g(I) = I[1] - I[2] == 1 ? 4 : 0",'matrixFromFunction([100, 100], "sparse", g)',"matrixFromFunction([5], random)"],seealso:["matrix","matrixFromRows","matrixFromColumns","zeros"]},matrixFromRows:{name:"matrixFromRows",category:"Matrix",syntax:["matrixFromRows(...arr)","matrixFromRows(row1, row2)","matrixFromRows(row1, row2, row3)"],description:"Create a dense matrix from vectors as individual rows.",examples:["matrixFromRows([1, 2, 3], [[4],[5],[6]])"],seealso:["matrix","matrixFromColumns","matrixFromFunction","zeros"]},matrixFromColumns:{name:"matrixFromColumns",category:"Matrix",syntax:["matrixFromColumns(...arr)","matrixFromColumns(row1, row2)","matrixFromColumns(row1, row2, row3)"],description:"Create a dense matrix from vectors as individual columns.",examples:["matrixFromColumns([1, 2, 3], [[4],[5],[6]])"],seealso:["matrix","matrixFromRows","matrixFromFunction","zeros"]},map:{name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]},ones:{name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]},partitionSelect:{name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1, compareText)',"arr = [5, 2, 1]","partitionSelect(arr, 0) # returns 1, arr is now: [1, 2, 5]","arr","partitionSelect(arr, 1, 'desc') # returns 2, arr is now: [5, 2, 1]","arr"],seealso:["sort"]},range:{name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"range(1m, 1m, 3m)","a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]},resize:{name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]},reshape:{name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])","reshape([1, 2, 3, 4], [-1, 2])"],seealso:["size","squeeze","resize"]},rotate:{name:"rotate",category:"Matrix",syntax:["rotate(w, theta)","rotate(w, theta, v)"],description:"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.",examples:["rotate([1, 0], pi / 2)",'rotate(matrix([1, 0]), unit("35deg"))','rotate([1, 0, 0], unit("90deg"), [0, 0, 1])','rotate(matrix([1, 0, 0]), unit("90deg"), matrix([0, 0, 1]))'],seealso:["matrix","rotationMatrix"]},rotationMatrix:{name:"rotationMatrix",category:"Matrix",syntax:["rotationMatrix(theta)","rotationMatrix(theta, v)","rotationMatrix(theta, v, format)"],description:"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.",examples:["rotationMatrix(pi / 2)",'rotationMatrix(unit("45deg"), [0, 0, 1])','rotationMatrix(1, matrix([0, 0, 1]), "sparse")'],seealso:["cos","sin"]},row:{name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column","matrixFromRows"]},size:{name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","count","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]},sort:{name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"], "natural")',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]},squeeze:{name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]},subset:{name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of the entries of a matrix or characters of a string. Indexes are one-based. There should be one index specification for each dimension of the target. Each specification can be a single index, a list of indices, or a range in colon notation `l:u`. In a range, both the lower bound l and upper bound u are included; and if a bound is omitted it defaults to the most extreme valid value. The cartesian product of the indices specified in each dimension determines the target of the operation.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]","f[[1,2], [1,3]] = [9, 10; 11, 12]","f"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]},trace:{name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]},transpose:{name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]},zeros:{name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]},fft:{name:"fft",category:"Matrix",syntax:["fft(x)"],description:"Calculate N-dimensional fourier transform",examples:["fft([[1, 0], [1, 0]])"],seealso:["ifft"]},ifft:{name:"ifft",category:"Matrix",syntax:["ifft(x)"],description:"Calculate N-dimensional inverse fourier transform",examples:["ifft([[2, 2], [0, 0]])"],seealso:["fft"]},sylvester:{name:"sylvester",category:"Algebra",syntax:["sylvester(A,B,C)"],description:"Solves the real-valued Sylvester equation AX+XB=C for X",examples:["sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])","A = [[-1, -2], [1, 1]]; B = [[2, -1], [1, -2]]; C = [[-3, 2], [3, 0]]","sylvester(A, B, C)"],seealso:["schur","lyap"]},schur:{name:"schur",category:"Algebra",syntax:["schur(A)"],description:"Performs a real Schur decomposition of the real matrix A = UTU'",examples:["schur([[1, 0], [-4, 3]])","A = [[1, 0], [-4, 3]]","schur(A)"],seealso:["lyap","sylvester"]},lyap:{name:"lyap",category:"Algebra",syntax:["lyap(A,Q)"],description:"Solves the Continuous-time Lyapunov equation AP+PA'+Q=0 for P",examples:["lyap([[-2, 0], [1, -4]], [[3, 1], [1, 3]])","A = [[-2, 0], [1, -4]]","Q = [[3, 1], [1, 3]]","lyap(A,Q)"],seealso:["schur","sylvester"]},solveODE:{name:"solveODE",category:"Numeric",syntax:["solveODE(func, tspan, y0)","solveODE(func, tspan, y0, options)"],description:"Numerical Integration of Ordinary Differential Equations.",examples:["f(t,y) = y","tspan = [0, 4]","solveODE(f, tspan, 1)","solveODE(f, tspan, [1, 2])",'solveODE(f, tspan, 1, { method:"RK23", maxStep:0.1 })'],seealso:["derivative","simplifyCore"]},combinations:{name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]},combinationsWithRep:{name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]},factorial:{name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]},gamma:{name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]},kldivergence:{name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]},lgamma:{name:"lgamma",category:"Probability",syntax:["lgamma(n)"],description:"Logarithm of the gamma function for real, positive numbers and complex numbers, using Lanczos approximation for numbers and Stirling series for complex numbers.",examples:["lgamma(4)","lgamma(1/2)","lgamma(i)","lgamma(complex(1.1, 2))"],seealso:["gamma"]},multinomial:{name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]},permutations:{name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]},pickRandom:{name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]},random:{name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]},randomInt:{name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]},compare:{name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]},compareNatural:{name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]},compareText:{name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]},deepEqual:{name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]},equal:{name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]},equalText:{name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]},larger:{name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]},largerEq:{name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]},smaller:{name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]},smallerEq:{name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]},unequal:{name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]},setCartesian:{name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays and the values will be sorted in ascending order before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]},setDifference:{name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]},setDistinct:{name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]},setIntersect:{name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]},setIsSubset:{name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]},setMultiplicity:{name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]},setPowerset:{name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]},setSize:{name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]},setSymDifference:{name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]},setUnion:{name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]},zpk2tf:{name:"zpk2tf",category:"Signal",syntax:["zpk2tf(z, p, k)"],description:"Compute the transfer function of a zero-pole-gain model.",examples:["zpk2tf([1, 2], [-1, -2], 1)","zpk2tf([1, 2], [-1, -2])","zpk2tf([1 - 3i, 2 + 2i], [-1, -2])"],seealso:[]},freqz:{name:"freqz",category:"Signal",syntax:["freqz(b, a)","freqz(b, a, w)"],description:"Calculates the frequency response of a filter given its numerator and denominator coefficients.",examples:["freqz([1, 2], [1, 2, 3])","freqz([1, 2], [1, 2, 3], [0, 1])","freqz([1, 2], [1, 2, 3], 512)"],seealso:[]},erf:{name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]},zeta:{name:"zeta",category:"Special",syntax:["zeta(s)"],description:"Compute the Riemann Zeta Function using an infinite series and Riemanns Functional Equation for the entire complex plane",examples:["zeta(0.2)","zeta(-0.5)","zeta(4)"],seealso:[]},cumsum:{name:"cumsum",category:"Statistics",syntax:["cumsum(a, b, c, ...)","cumsum(A)"],description:"Compute the cumulative sum of all values.",examples:["cumsum(2, 3, 4, 1)","cumsum([2, 3, 4, 1])","cumsum([1, 2; 3, 4])","cumsum([1, 2; 3, 4], 1)","cumsum([1, 2; 3, 4], 2)"],seealso:["max","mean","median","min","prod","std","sum","variance"]},mad:{name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]},max:{name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dimension)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]},mean:{name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dimension)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]},median:{name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]},min:{name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dimension)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]},mode:{name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]},prod:{name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]},quantileSeq:{name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:"Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \n\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.",examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]},std:{name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, dimension)","std(A, normalization)","std(A, dimension, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]},sum:{name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)","sum(A, dimension)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]},variance:{name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, dimension)","variance(A, normalization)","variance(A, dimension, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]},corr:{name:"corr",category:"Statistics",syntax:["corr(A,B)"],description:"Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.",examples:["corr([2, 4, 6, 8],[1, 2, 3, 6])","corr(matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]]))"],seealso:["max","mean","min","median","min","prod","std","sum"]},acos:{name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]},acosh:{name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]},acot:{name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]},acoth:{name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]},acsc:{name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]},acsch:{name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]},asec:{name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]},asech:{name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]},asin:{name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]},asinh:{name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]},atan:{name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]},atanh:{name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]},atan2:{name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]},cos:{name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]},cosh:{name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]},cot:{name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]},coth:{name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]},csc:{name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]},csch:{name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]},sec:{name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]},sech:{name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]},sin:{name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]},sinh:{name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]},tan:{name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]},tanh:{name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]},to:{name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]},clone:{name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]},format:{name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]},bin:{name:"bin",category:"Utils",syntax:["bin(value)"],description:"Format a number as binary",examples:["bin(2)"],seealso:["oct","hex"]},oct:{name:"oct",category:"Utils",syntax:["oct(value)"],description:"Format a number as octal",examples:["oct(56)"],seealso:["bin","hex"]},hex:{name:"hex",category:"Utils",syntax:["hex(value)"],description:"Format a number as hexadecimal",examples:["hex(240)"],seealso:["bin","oct"]},isNaN:{name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]},isInteger:{name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]},isNegative:{name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]},isNumeric:{name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]},hasNumericValue:{name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]},isPositive:{name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]},isPrime:{name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]},isZero:{name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]},print:{name:"print",category:"Utils",syntax:["print(template, values)","print(template, values, precision)"],description:"Interpolate values into a string template.",examples:['print("Lucy is $age years old", {age: 5})','print("The value of pi is $pi", {pi: pi}, 3)','print("Hello, $user.name!", {user: {name: "John"}})','print("Values: $1, $2, $3", [6, 9, 4])'],seealso:["format"]},typeOf:{name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]},numeric:{name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction")','numeric(4, "Fraction")','numeric(fraction(2, 5), "number")'],seealso:["number","fraction","bignumber","string","format"]}},Eh="help",Ah=Se(Eh,["typed","mathWithTransform","Help"],(function(e){var t=e.typed,r=e.mathWithTransform,n=e.Help;return t(Eh,{any:function(e){var t,i=e;if("string"!=typeof e)for(t in r)if(Ae(r,t)&&e===r[t]){i=t;break}var a=ze(Nh,i);if(!a){var o="function"==typeof i?i.name:i;throw new Error('No documentation found on "'+o+'"')}return new n(a)}})})),Sh="chain",Ch=Se(Sh,["typed","Chain"],(function(e){var t=e.typed,r=e.Chain;return t(Sh,{"":function(){return new r},any:function(e){return new r(e)}})})),Mh=Se("det",["typed","matrix","subtractScalar","multiply","divideScalar","isZero","unaryMinus"],(function(e){var t=e.typed,r=e.matrix,n=e.subtractScalar,i=e.multiply,a=e.divideScalar,o=e.isZero,u=e.unaryMinus;return t("det",{any:function(e){return ye(e)},"Array | Matrix":function(e){var t;switch((t=l(e)?e.size():Array.isArray(e)?(e=r(e)).size():[]).length){case 0:return ye(e);case 1:if(1===t[0])return ye(e.valueOf()[0]);if(0===t[0])return 1;throw new RangeError("Matrix must be square (size: "+en(t)+")");case 2:var s=t[0],c=t[1];if(s===c)return function(e,t,r){if(1===t)return ye(e[0][0]);if(2===t)return n(i(e[0][0],e[1][1]),i(e[1][0],e[0][1]));for(var s=!1,c=new Array(t).fill(0).map((function(e,t){return t})),f=0;fx&&(x=c(v[f][g]),b=f),f++;if(0===x)throw Error("Cannot calculate inverse, determinant is zero");(f=b)!==g&&(h=v[g],v[g]=v[f],v[f]=h,h=y[g],y[g]=y[f],y[f]=h);var w=v[g],D=y[g];for(f=0;f=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}function Bh(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:t.epsilon,u=arguments.length>3?arguments[3]:void 0,p=arguments.length>4?arguments[4]:void 0;if("number"===u)return function(e,r,n){var i,a,o=e.length,u=Math.abs(r/o);if(n){a=new Array(o);for(var s=0;s=Math.abs(u);){var d=h[0][0],g=h[0][1];e=v(e,(c=e[d][d],f=e[g][g],l=e[d][g],p=void 0,p=f-c,i=Math.abs(p)<=t.epsilon?Math.PI/4:.5*Math.atan(2*l/(f-c))),d,g),n&&(a=m(a,i,d,g)),h=y(e)}for(var b=Array(o).fill(0),w=0;w=i(v);){var A=E[0][0],S=E[0][1];e=d(e,(b=e[A][A],w=e[S][S],D=e[A][S],N=void 0,N=n(w,b),u=i(N)<=t.epsilon?f(-1).acos().div(4):s(.5,a(l(2,D,c(N))))),A,S),o&&(p=h(p,u,A,S)),E=g(e)}for(var C=Array(m).fill(0),M=0;M=5)return null;for(u=0;;){var s=d(e,a);if(b(M(C(a,[s])),n))break;if(++u>=10)return null;a=F(s)}return a}function S(e,t,r){var n="BigNumber"===r,i="Complex"===r,a=Array(e).fill(0).map((function(e){return 2*Math.random()-1}));return n&&(a=a.map((function(e){return c(e)}))),i&&(a=a.map((function(e){return g(e)}))),F(a=C(a,t),r)}function C(e,t){var n,a=l(e),u=_h(t);try{for(u.s();!(n=u.n()).done;){var s=n.value;s=p(s,a),e=r(e,i(o(w(s,e),w(s,s)),s))}}catch(e){u.e(e)}finally{u.f()}return e}function M(e){return s(u(w(e,e)))}function F(e,t){var r="Complex"===t,n="BigNumber"===t?c(1):r?g(1):1;return i(o(n,M(e)),e)}return function(e,l,p,d){var w=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],S=function(e,r,n,i,u){var l,p="BigNumber"===i,m="Complex"===i,h=p?c(0):0,d=p?c(1):m?g(1):1,v=p?c(1):1,w=p?c(10):2,D=a(w,w);u&&(l=Array(r).fill(d));for(var N=!1;!N;){N=!0;for(var E=0;E1&&(k=f(Array(T-1).fill(v)))),T-=1,F.pop();for(var U=0;U2&&(k=f(Array(T-2).fill(v)))),T-=2,F.pop(),F.pop();for(var H=0;H100){var G=Error("The eigenvalues failed to converge. Only found these eigenvalues: "+O.join(", "));throw G.values=O,G.vectors=[],G}var V=p?i(B,function(e,t){for(var r=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:{},a=!("eigenvectors"in i)||i.eigenvectors,o=function(e,t,r){var n=e.toArray(),i=e.size();if(2!==i.length||i[0]!==i[1])throw new RangeError("Matrix must be square (size: ".concat(en(i),")"));var a=i[0];if(function(e,t,r){for(var n=0;n1&&(g=o(g,m),x=-x),d=n(d,o(y=y*(l-b+1)/((2*l-b+1)*b),g)),v=n(v,o(y*x,g));for(var w=o(a(v),d),D=0;Dm&&++a>1e3)throw new Error("computing square root of matrix: iterative method could not converge")}while(t>m);return o}return t(Rh,{"Array | Matrix":function(e){var t=l(e)?e.size():cn(e);switch(t.length){case 1:if(1===t[0])return a(e,o);throw new RangeError("Matrix must be square (size: "+en(t)+")");case 2:if(t[0]===t[1])return h(e);throw new RangeError("Matrix must be square (size: "+en(t)+")");default:throw new RangeError("Matrix must be at most two dimensional (size: "+en(t)+")")}}})})),jh="sylvester",Ph=Se(jh,["typed","schur","matrixFromColumns","matrix","multiply","range","concat","transpose","index","subset","add","subtract","identity","lusolve","abs"],(function(e){var t=e.typed,r=e.schur,n=e.matrixFromColumns,i=e.matrix,a=e.multiply,o=e.range,u=e.concat,s=e.transpose,c=e.index,f=e.subset,l=e.add,p=e.subtract,m=e.identity,h=e.lusolve,d=e.abs;return t(jh,{"Matrix, Matrix, Matrix":v,"Array, Matrix, Matrix":function(e,t,r){return v(i(e),t,r)},"Array, Array, Matrix":function(e,t,r){return v(i(e),i(t),r)},"Array, Matrix, Array":function(e,t,r){return v(i(e),t,i(r))},"Matrix, Array, Matrix":function(e,t,r){return v(e,i(t),r)},"Matrix, Array, Array":function(e,t,r){return v(e,i(t),i(r))},"Matrix, Matrix, Array":function(e,t,r){return v(e,t,i(r))},"Array, Array, Array":function(e,t,r){return v(i(e),i(t),i(r)).toArray()}});function v(e,t,v){for(var y=t.size()[0],g=e.size()[0],x=r(e),b=x.T,w=x.U,D=r(a(-1,t)),N=D.T,E=D.U,A=a(a(s(w),v),E),S=o(0,g),C=[],M=function(e,t){return u(e,t,1)},F=function(e,t){return u(e,t,0)},O=0;O1e-5){for(var T=F(f(A,c(S,O)),f(A,c(S,O+1))),_=0;_100)break}while(o(u(s,t))>1e-4);return{U:c,T:s}}})),$h="lyap",Hh=Se($h,["typed","matrix","sylvester","multiply","transpose"],(function(e){var t=e.typed,r=e.matrix,n=e.sylvester,i=e.multiply,a=e.transpose;return t($h,{"Matrix, Matrix":function(e,t){return n(e,a(e),i(-1,t))},"Array, Matrix":function(e,t){return n(r(e),a(r(e)),i(-1,t))},"Matrix, Array":function(e,t){return n(e,a(r(e)),r(i(-1,t)))},"Array, Array":function(e,t){return n(r(e),a(r(e)),r(i(-1,t))).toArray()}})})),Gh=Se("divide",["typed","matrix","multiply","equalScalar","divideScalar","inv"],(function(e){var t=e.typed,r=e.matrix,n=e.multiply,i=e.equalScalar,a=e.divideScalar,o=e.inv,u=Aa({typed:t,equalScalar:i}),s=Ca({typed:t});return t("divide",xe({"Array | Matrix, Array | Matrix":function(e,t){return n(e,o(t))},"DenseMatrix, any":function(e,t){return s(e,t,a,!1)},"SparseMatrix, any":function(e,t){return u(e,t,a,!1)},"Array, any":function(e,t){return s(r(e),t,a,!1).valueOf()},"any, Array | Matrix":function(e,t){return n(e,o(t))}},a.signatures))})),Vh="distance",Zh=Se(Vh,["typed","addScalar","subtractScalar","divideScalar","multiplyScalar","deepEqual","sqrt","abs"],(function(e){var t=e.typed,r=e.addScalar,n=e.subtractScalar,i=e.multiplyScalar,o=e.divideScalar,u=e.deepEqual,s=e.sqrt,c=e.abs;return t(Vh,{"Array, Array, Array":function(e,t,r){if(2===e.length&&2===t.length&&2===r.length){if(!l(e))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!l(t))throw new TypeError("Array with 2 numbers or BigNumbers expected for second argument");if(!l(r))throw new TypeError("Array with 2 numbers or BigNumbers expected for third argument");if(u(t,r))throw new TypeError("LinePoint1 should not be same with LinePoint2");var a=n(r[1],t[1]),o=n(t[0],r[0]),s=n(i(r[0],t[1]),i(t[0],r[1]));return v(e[0],e[1],a,o,s)}throw new TypeError("Invalid Arguments: Try again")},"Object, Object, Object":function(e,t,r){if(2===Object.keys(e).length&&2===Object.keys(t).length&&2===Object.keys(r).length){if(!l(e))throw new TypeError("Values of pointX and pointY should be numbers or BigNumbers");if(!l(t))throw new TypeError("Values of lineOnePtX and lineOnePtY should be numbers or BigNumbers");if(!l(r))throw new TypeError("Values of lineTwoPtX and lineTwoPtY should be numbers or BigNumbers");if(u(d(t),d(r)))throw new TypeError("LinePoint1 should not be same with LinePoint2");if("pointX"in e&&"pointY"in e&&"lineOnePtX"in t&&"lineOnePtY"in t&&"lineTwoPtX"in r&&"lineTwoPtY"in r){var a=n(r.lineTwoPtY,t.lineOnePtY),o=n(t.lineOnePtX,r.lineTwoPtX),s=n(i(r.lineTwoPtX,t.lineOnePtY),i(t.lineOnePtX,r.lineTwoPtY));return v(e.pointX,e.pointY,a,o,s)}throw new TypeError("Key names do not match")}throw new TypeError("Invalid Arguments: Try again")},"Array, Array":function(e,t){if(2===e.length&&3===t.length){if(!l(e))throw new TypeError("Array with 2 numbers or BigNumbers expected for first argument");if(!p(t))throw new TypeError("Array with 3 numbers or BigNumbers expected for second argument");return v(e[0],e[1],t[0],t[1],t[2])}if(3===e.length&&6===t.length){if(!p(e))throw new TypeError("Array with 3 numbers or BigNumbers expected for first argument");if(!h(t))throw new TypeError("Array with 6 numbers or BigNumbers expected for second argument");return y(e[0],e[1],e[2],t[0],t[1],t[2],t[3],t[4],t[5])}if(e.length===t.length&&e.length>0){if(!m(e))throw new TypeError("All values of an array should be numbers or BigNumbers");if(!m(t))throw new TypeError("All values of an array should be numbers or BigNumbers");return g(e,t)}throw new TypeError("Invalid Arguments: Try again")},"Object, Object":function(e,t){if(2===Object.keys(e).length&&3===Object.keys(t).length){if(!l(e))throw new TypeError("Values of pointX and pointY should be numbers or BigNumbers");if(!p(t))throw new TypeError("Values of xCoeffLine, yCoeffLine and constant should be numbers or BigNumbers");if("pointX"in e&&"pointY"in e&&"xCoeffLine"in t&&"yCoeffLine"in t&&"constant"in t)return v(e.pointX,e.pointY,t.xCoeffLine,t.yCoeffLine,t.constant);throw new TypeError("Key names do not match")}if(3===Object.keys(e).length&&6===Object.keys(t).length){if(!p(e))throw new TypeError("Values of pointX, pointY and pointZ should be numbers or BigNumbers");if(!h(t))throw new TypeError("Values of x0, y0, z0, a, b and c should be numbers or BigNumbers");if("pointX"in e&&"pointY"in e&&"x0"in t&&"y0"in t&&"z0"in t&&"a"in t&&"b"in t&&"c"in t)return y(e.pointX,e.pointY,e.pointZ,t.x0,t.y0,t.z0,t.a,t.b,t.c);throw new TypeError("Key names do not match")}if(2===Object.keys(e).length&&2===Object.keys(t).length){if(!l(e))throw new TypeError("Values of pointOneX and pointOneY should be numbers or BigNumbers");if(!l(t))throw new TypeError("Values of pointTwoX and pointTwoY should be numbers or BigNumbers");if("pointOneX"in e&&"pointOneY"in e&&"pointTwoX"in t&&"pointTwoY"in t)return g([e.pointOneX,e.pointOneY],[t.pointTwoX,t.pointTwoY]);throw new TypeError("Key names do not match")}if(3===Object.keys(e).length&&3===Object.keys(t).length){if(!p(e))throw new TypeError("Values of pointOneX, pointOneY and pointOneZ should be numbers or BigNumbers");if(!p(t))throw new TypeError("Values of pointTwoX, pointTwoY and pointTwoZ should be numbers or BigNumbers");if("pointOneX"in e&&"pointOneY"in e&&"pointOneZ"in e&&"pointTwoX"in t&&"pointTwoY"in t&&"pointTwoZ"in t)return g([e.pointOneX,e.pointOneY,e.pointOneZ],[t.pointTwoX,t.pointTwoY,t.pointTwoZ]);throw new TypeError("Key names do not match")}throw new TypeError("Invalid Arguments: Try again")},Array:function(e){if(!function(e){if(2===e[0].length&&f(e[0][0])&&f(e[0][1])){if(e.some((function(e){return 2!==e.length||!f(e[0])||!f(e[1])})))return!1}else{if(!(3===e[0].length&&f(e[0][0])&&f(e[0][1])&&f(e[0][2])))return!1;if(e.some((function(e){return 3!==e.length||!f(e[0])||!f(e[1])||!f(e[2])})))return!1}return!0}(e))throw new TypeError("Incorrect array format entered for pairwise distance calculation");return function(e){for(var t=[],r=[],n=[],i=0;i1&&Array.isArray(e[0])&&e.every((function(e){return Array.isArray(e)&&1===e.length}))?m(e):e}function x(e){return 2===e.length&&d(e[0])&&d(e[1])}function b(e){return 3===e.length&&d(e[0])&&d(e[1])&&d(e[2])}function w(e,t,r,n,i,o,u,c,l,p,m,h){var d=s(f(e,t),f(r,n)),v=s(f(i,o),f(u,c)),y=s(f(l,p),f(m,h));return a(a(d,v),y)}})),Yh=Se("sum",["typed","config","add","numeric"],(function(e){var t=e.typed,r=e.config,n=e.add,i=e.numeric;return t("sum",{"Array | Matrix":a,"Array | Matrix, number | BigNumber":function(e,t){try{return Wn(e,t,n)}catch(e){throw Rs(e,"sum")}},"...":function(e){if(Gn(e))throw new TypeError("Scalar values expected in function sum");return a(e)}});function a(e){var t;return Vn(e,(function(e){try{t=void 0===t?e:n(t,e)}catch(t){throw Rs(t,"sum",e)}})),void 0===t&&(t=i(0,r.number)),"string"==typeof t&&(t=i(t,r.number)),t}})),Jh="cumsum",Xh=Se(Jh,["typed","add","unaryPlus"],(function(e){var t=e.typed,r=e.add,n=e.unaryPlus;return t(Jh,{Array:i,Matrix:function(e){return e.create(i(e.valueOf()))},"Array, number | BigNumber":o,"Matrix, number | BigNumber":function(e,t){return e.create(o(e.valueOf(),t))},"...":function(e){if(Gn(e))throw new TypeError("All values expected to be scalar in function cumsum");return i(e)}});function i(e){try{return a(e)}catch(e){throw Rs(e,Jh)}}function a(e){if(0===e.length)return[];for(var t=[n(e[0])],i=1;i=r.length)throw new sn(t,r.length);try{return u(e,t)}catch(e){throw Rs(e,Jh)}}function u(e,t){var r,n,i;if(t<=0){var o=e[0][0];if(Array.isArray(o)){for(i=Hn(e),n=[],r=0;r0&&(o=e[c]);return s(o,n)}var f=a(e,(t-1)/2);return u(f)}catch(e){throw Rs(e,"median")}}var u=t({"number | BigNumber | Complex | Unit":function(e){return e}}),s=t({"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit":function(e,t){return n(r(e,t),2)}});return t(ed,{"Array | Matrix":o,"Array | Matrix, number | BigNumber":function(e,t){throw new Error("median(A, dim) is not yet supported")},"...":function(e){if(Gn(e))throw new TypeError("Scalar values expected in function median");return o(e)}})})),rd=Se("mad",["typed","abs","map","median","subtract"],(function(e){var t=e.typed,r=e.abs,n=e.map,i=e.median,a=e.subtract;return t("mad",{"Array | Matrix":o,"...":function(e){return o(e)}});function o(e){if(0===(e=En(e.valueOf())).length)throw new Error("Cannot calculate median absolute deviation (mad) of an empty array");try{var t=i(e);return i(n(e,(function(e){return r(a(e,t))})))}catch(e){throw e instanceof TypeError&&e.message.includes("median")?new TypeError(e.message.replace("median","mad")):Rs(e,"mad")}}})),nd="unbiased",id="variance",ad=Se(id,["typed","add","subtract","multiply","divide","apply","isNaN"],(function(e){var t=e.typed,r=e.add,n=e.subtract,i=e.multiply,o=e.divide,u=e.apply,s=e.isNaN;return t(id,{"Array | Matrix":function(e){return c(e,nd)},"Array | Matrix, string":c,"Array | Matrix, number | BigNumber":function(e,t){return f(e,t,nd)},"Array | Matrix, number | BigNumber, string":f,"...":function(e){return c(e,nd)}});function c(e,t){var u,c=0;if(0===e.length)throw new SyntaxError("Function variance requires one or more parameters (0 provided)");if(Vn(e,(function(e){try{u=void 0===u?e:r(u,e),c++}catch(t){throw Rs(t,"variance",e)}})),0===c)throw new Error("Cannot calculate variance of an empty array");var f=o(u,c);if(u=void 0,Vn(e,(function(e){var t=n(e,f);u=void 0===u?i(t,t):r(u,i(t,t))})),s(u))return u;switch(t){case"uncorrected":return o(u,c);case"biased":return o(u,c+1);case"unbiased":var l=a(u)?u.mul(0):0;return 1===c?l:o(u,c-1);default:throw new Error('Unknown normalization "'+t+'". Choose "unbiased" (default), "uncorrected", or "biased".')}}function f(e,t,r){try{if(0===e.length)throw new SyntaxError("Function variance requires one or more parameters (0 provided)");return u(e,t,(function(e){return c(e,r)}))}catch(e){throw Rs(e,"variance")}}})),od="quantileSeq",ud=Se(od,["typed","?bignumber","add","subtract","divide","multiply","partitionSelect","compare","isInteger","smaller","smallerEq","larger"],(function(e){var t=e.typed,r=e.bignumber,n=e.add,a=e.subtract,o=e.divide,u=e.multiply,s=e.partitionSelect,c=e.compare,f=e.isInteger,l=e.smaller,p=e.smallerEq,m=e.larger,h=va({typed:t,isInteger:f});return t(od,{"Array | Matrix, number | BigNumber":function(e,t){return v(e,t,!1)},"Array | Matrix, number | BigNumber, number":function(e,t,r){return d(e,t,!1,r,v)},"Array | Matrix, number | BigNumber, boolean":v,"Array | Matrix, number | BigNumber, boolean, number":function(e,t,r,n){return d(e,t,r,n,v)},"Array | Matrix, Array | Matrix":function(e,t){return y(e,t,!1)},"Array | Matrix, Array | Matrix, number":function(e,t,r){return d(e,t,!1,r,y)},"Array | Matrix, Array | Matrix, boolean":y,"Array | Matrix, Array | Matrix, boolean, number":function(e,t,r,n){return d(e,t,r,n,y)}});function d(e,t,r,n,i){return h(e,n,(function(e){return i(e,t,r)}))}function v(e,t,a){var u,s=e.valueOf();if(l(t,0))throw new Error("N/prob must be non-negative");if(p(t,1))return i(t)?g(s,t,a):r(g(s,t,a));if(m(t,1)){if(!f(t))throw new Error("N must be a positive integer");if(m(t,4294967295))throw new Error("N must be less than or equal to 2^32-1, as that is the maximum length of an Array");var c=n(t,1);u=[];for(var h=0;l(h,t);h++){var d=o(h+1,c);u.push(g(s,d,a))}return i(t)?u:r(u)}}function y(e,t,r){for(var n=e.valueOf(),i=t.valueOf(),a=[],o=0;o0&&(p=o[y])}return n(u(p,a(1,v)),u(m,v))}})),sd=Se("std",["typed","map","sqrt","variance"],(function(e){var t=e.typed,r=e.map,n=e.sqrt,i=e.variance;return t("std",{"Array | Matrix":a,"Array | Matrix, string":a,"Array | Matrix, number | BigNumber":a,"Array | Matrix, number | BigNumber, string":a,"...":function(e){return a(e)}});function a(e,t){if(0===e.length)throw new SyntaxError("Function std requires one or more parameters (0 provided)");try{var a=i.apply(null,arguments);return p(a)?r(a,n):n(a)}catch(e){throw e instanceof TypeError&&e.message.includes(" variance")?new TypeError(e.message.replace(" variance"," std")):e}}})),cd="corr",fd=Se(cd,["typed","matrix","mean","sqrt","sum","add","subtract","multiply","pow","divide"],(function(e){var t=e.typed,r=e.matrix,n=e.sqrt,i=e.sum,a=e.add,o=e.subtract,u=e.multiply,s=e.pow,c=e.divide;return t(cd,{"Array, Array":function(e,t){return f(e,t)},"Matrix, Matrix":function(e,t){var n=f(e.toArray(),t.toArray());return Array.isArray(n)?r(n):n}});function f(e,t){var r=[];if(Array.isArray(e[0])&&Array.isArray(t[0])){if(e.length!==t.length)throw new SyntaxError("Dimension mismatch. Array A and B must have the same length.");for(var n=0;n>1;return ld(e,r)*ld(r+1,t)}function pd(e,t){if(!V(e)||e<0)throw new TypeError("Positive integer value expected in function combinations");if(!V(t)||t<0)throw new TypeError("Positive integer value expected in function combinations");if(t>e)throw new TypeError("k must be less than or equal to n");for(var r=e-t,n=1,i=2,a=t171?1/0:ld(1,e-1);if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*xd(1-e));if(e>=171.35)return 1/0;if(e>85){var r=e*e,n=r*e,i=n*e,a=i*e;return Math.sqrt(2*Math.PI/e)*Math.pow(e/Math.E,e)*(1+1/(12*e)+1/(288*r)-139/(51840*n)-571/(2488320*i)+163879/(209018880*a)+5246819/(75246796800*a*e))}--e,t=wd[0];for(var o=1;o=1;n--)r+=Nd[n]/(e+n);return Dd+(e+.5)*Math.log(t)-t+Math.log(r)}Ed.signature="number";var Ad="gamma",Sd=Se(Ad,["typed","config","multiplyScalar","pow","BigNumber","Complex"],(function(e){var t=e.typed,r=e.config,n=(e.multiplyScalar,e.pow,e.BigNumber),i=e.Complex;return t(Ad,{number:xd,Complex:function e(t){if(0===t.im)return xd(t.re);if(t.re<.5){var r=new i(1-t.re,-t.im),n=new i(Math.PI*t.re,Math.PI*t.im);return new i(Math.PI).div(n.sin()).div(e(r))}t=new i(t.re-1,t.im);for(var a=new i(wd[0],0),o=1;o2;)s+=o-=2,u=u.times(s);return new n(u.toPrecision(n.precision))}})),Cd="lgamma",Md=Se(Cd,["Complex","typed"],(function(e){var t=e.Complex,r=e.typed,n=[-.029550653594771242,.00641025641025641,-.0019175269175269176,.0008417508417508417,-.0005952380952380953,.0007936507936507937,-.002777777777777778,.08333333333333333];return r(Cd,{number:Ed,Complex:function e(r){if(r.isNaN())return new t(NaN,NaN);if(0===r.im)return new t(Ed(r.re),0);if(r.re>=7||Math.abs(r.im)>=7)return i(r);if(r.re<=.1){var n=(s=6.283185307179586,(!0^((c=r.im)>0||!(c<0)&&1/c==1/0)?-s:s)*Math.floor(.5*r.re+.25)),o=r.mul(Math.PI).sin().log(),u=e(new t(1-r.re,-r.im));return new t(1.1447298858494002,n).sub(o).sub(u)}return r.im>=0?a(r):a(r.conjugate()).conjugate();var s,c},BigNumber:function(){throw new Error("mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber")}});function i(e){for(var r=e.sub(.5).mul(e.log()).sub(e).add(Dd),i=new t(1,0).div(e),a=i.div(e),o=n[0],u=n[1],s=2*a.re,c=a.re*a.re+a.im*a.im,f=2;f<8;f++){var l=u;u=-c*o+n[f],o=s*o+l}var p=i.mul(a.mul(o).add(u));return r.add(p)}function a(e){var r=0,n=0,a=e;for(e=e.add(1);e.re<=7;){var o=(a=a.mul(e)).im<0?1:0;0!==o&&0===n&&r++,n=o,e=e.add(1)}return i(e).sub(a.log()).sub(new t(0,2*r*Math.PI*1))}})),Fd="factorial",Od=Se(Fd,["typed","gamma"],(function(e){var t=e.typed,r=e.gamma;return t(Fd,{number:function(e){if(e<0)throw new Error("Value must be non-negative");return r(e+1)},BigNumber:function(e){if(e.isNegative())throw new Error("Value must be non-negative");return r(e.plus(1))},"Array | Matrix":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Td="kldivergence",_d=Se(Td,["typed","matrix","divide","sum","multiply","map","dotDivide","log","isNumeric"],(function(e){var t=e.typed,r=e.matrix,n=e.divide,i=e.sum,a=e.multiply,o=e.map,u=e.dotDivide,s=e.log,c=e.isNumeric;return t(Td,{"Array, Array":function(e,t){return f(r(e),r(t))},"Matrix, Array":function(e,t){return f(e,r(t))},"Array, Matrix":function(e,t){return f(r(e),t)},"Matrix, Matrix":function(e,t){return f(e,t)}});function f(e,t){var r=t.size().length,f=e.size().length;if(r>1)throw new Error("first object must be one dimensional");if(f>1)throw new Error("second object must be one dimensional");if(r!==f)throw new Error("Length of two vectors must be equal");if(0===i(e))throw new Error("Sum of elements in first object must be non zero");if(0===i(t))throw new Error("Sum of elements in second object must be non zero");var l=n(e,i(e)),p=n(t,i(t)),m=i(a(l,o(u(l,p),(function(e){return s(e)}))));return c(m)?m:Number.NaN}})),Bd="multinomial",kd=Se(Bd,["typed","add","divide","multiply","factorial","isInteger","isPositive"],(function(e){var t=e.typed,r=e.add,n=e.divide,i=e.multiply,a=e.factorial,o=e.isInteger,u=e.isPositive;return t(Bd,{"Array | Matrix":function(e){var t=0,s=1;return Vn(e,(function(e){if(!o(e)||!u(e))throw new TypeError("Positive integer value expected in function multinomial");t=r(t,e),s=i(s,a(e))})),n(a(t),s)}})})),Id="permutations",zd=Se(Id,["typed","factorial"],(function(e){var t=e.typed,r=e.factorial;return t(Id,{"number | BigNumber":r,"number, number":function(e,t){if(!V(e)||e<0)throw new TypeError("Positive integer value expected in function permutations");if(!V(t)||t<0)throw new TypeError("Positive integer value expected in function permutations");if(t>e)throw new TypeError("second argument k must be less than or equal to first argument n");return ld(e-t+1,e)},"BigNumber, BigNumber":function(e,t){var r,n;if(!Rd(e)||!Rd(t))throw new TypeError("Positive integer value expected in function permutations");if(t.gt(e))throw new TypeError("second argument k must be less than or equal to first argument n");for(r=e.mul(0).add(1),n=e.minus(t).plus(1);n.lte(e);n=n.plus(1))r=r.times(n);return r}})}));function Rd(e){return e.isInteger()&&e.gte(0)}r(9089);var qd=r(7391),jd=qd(Date.now());function Pd(e){var t,r;return t=null===(r=e)?jd:qd(String(r)),function(){return t()}}var Ld="pickRandom",Ud=Se(Ld,["typed","config","?on"],(function(e){var t=e.typed,r=e.config,n=e.on,a=Pd(r.randomSeed);return n&&n("config",(function(e,t){e.randomSeed!==t.randomSeed&&(a=Pd(e.randomSeed))})),t(Ld,{"Array | Matrix":function(e){return o(e,{})},"Array | Matrix, Object":function(e,t){return o(e,t)},"Array | Matrix, number":function(e,t){return o(e,{number:t})},"Array | Matrix, Array | Matrix":function(e,t){return o(e,{weights:t})},"Array | Matrix, Array | Matrix, number":function(e,t,r){return o(e,{number:r,weights:t})},"Array | Matrix, number, Array | Matrix":function(e,t,r){return o(e,{number:t,weights:r})}});function o(e,t){var r=t.number,n=t.weights,o=t.elementWise,u=void 0===o||o,s=void 0===r;s&&(r=1);var c=l(e)?e.create:l(n)?n.create:null;e=e.valueOf(),n&&(n=n.valueOf()),!0===u&&(e=En(e),n=En(n));var f=0;if(void 0!==n){if(n.length!==e.length)throw new Error("Weights must have the same length as possibles");for(var p=0,m=n.length;p1)for(var n=0,i=e.shift();nv)return m[d][v];for(var y=0;y<=d;++y)if(m[y]||(m[y]=[h(0===y?1:0)]),0!==y)for(var g=m[y],x=m[y-1],b=g.length;b<=y&&b<=v;++b)g[b]=b===y?1:r(n(h(b),x[b]),x[b-1]);return m[d][v]}})})),Jd="bellNumbers",Xd=Se(Jd,["typed","addScalar","isNegative","isInteger","stirlingS2"],(function(e){var t=e.typed,r=e.addScalar,n=e.isNegative,i=e.isInteger,a=e.stirlingS2;return t(Jd,{"number | BigNumber":function(e){if(!i(e)||n(e))throw new TypeError("Non-negative integer value expected in function bellNumbers");for(var t=0,o=0;o<=e;o++)t=r(t,a(e,o));return t}})})),Qd="catalan",Kd=Se(Qd,["typed","addScalar","divideScalar","multiplyScalar","combinations","isNegative","isInteger"],(function(e){var t=e.typed,r=e.addScalar,n=e.divideScalar,i=e.multiplyScalar,a=e.combinations,o=e.isNegative,u=e.isInteger;return t(Qd,{"number | BigNumber":function(e){if(!u(e)||o(e))throw new TypeError("Non-negative integer value expected in function catalan");return n(a(i(e,2),e),r(e,1))}})})),ev="composition",tv=Se(ev,["typed","addScalar","combinations","isNegative","isPositive","isInteger","larger"],(function(e){var t=e.typed,r=e.addScalar,n=e.combinations,i=e.isPositive,a=(e.isNegative,e.isInteger),o=e.larger;return t(ev,{"number | BigNumber, number | BigNumber":function(e,t){if(!(a(e)&&i(e)&&a(t)&&i(t)))throw new TypeError("Positive integer value expected in function composition");if(o(t,e))throw new TypeError("k must be less than or equal to n in function composition");return n(r(e,-1),r(t,-1))}})})),rv="leafCount",nv=Se(rv,["parse","typed"],(function(e){function t(e){var r=0;return e.forEach((function(e){r+=t(e)})),r||1}return e.parse,(0,e.typed)(rv,{Node:function(e){return t(e)}})}));function iv(e){return T(e)||q(e)&&e.isUnary()&&T(e.args[0])}function av(e){return!!T(e)||!(!k(e)&&!q(e)||!e.args.every(av))||!(!j(e)||!av(e.content))}function ov(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 uv(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:u,n=o;if("string"==typeof e?n=e:q(e)?n=e.fn.toString():k(e)?n=e.name:j(e)&&(n="paren"),Ae(r,n)){var i=r[n];if(Ae(i,t))return i[t];if(Ae(u,n))return u[n][t]}if(Ae(r,o)){var a=r[o];return Ae(a,t)?a[t]:u[o][t]}if(Ae(u,n)){var s=u[n];if(Ae(s,t))return s[t]}return u[o][t]}function c(e){return s(e,"associative",arguments.length>1&&void 0!==arguments[1]?arguments[1]:u)}function f(e,t){var r,n=[];return c(e,t)?(r=e.op,function e(t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:u)},isAssociative:c,mergeContext:function(e,t){var r=uv({},e);for(var n in t)Ae(e,n)?r[n]=uv(uv({},t[n]),e[n]):r[n]=t[n];return r},flatten:function e(t,r){if(!t.args||0===t.args.length)return t;t.args=f(t,r);for(var n=0;n2&&c(t,r)){for(var o=t.args.pop();t.args.length>0;)o=n([t.args.pop(),o]);t.args=o.args}}},unflattenl:function e(t,r){if(t.args&&0!==t.args.length){for(var n=l(t),i=t.args.length,a=0;a2&&c(t,r)){for(var o=t.args.shift();t.args.length>0;)o=n([o,t.args.shift()]);t.args=o.args}}},defaultContext:u,realContext:{divide:{total:a},log:{total:a}},positiveContext:{subtract:{total:a},abs:{trivial:i},log:{total:i}}}})),cv=Se("simplify",["config","typed","parse","add","subtract","multiply","divide","pow","isZero","equal","resolve","simplifyConstant","simplifyCore","?fraction","?bignumber","mathWithTransform","matrix","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","SymbolNode"],(function(e){e.config;var r=e.typed,n=e.parse,i=(e.add,e.subtract,e.multiply,e.divide,e.pow,e.isZero,e.equal),a=e.resolve,o=e.simplifyConstant,u=e.simplifyCore,s=(e.fraction,e.bignumber,e.mathWithTransform,e.matrix,e.AccessorNode),c=e.ArrayNode,f=e.ConstantNode,l=e.FunctionNode,p=e.IndexNode,m=e.ObjectNode,h=e.OperatorNode,d=e.ParenthesisNode,v=e.SymbolNode,y=sv({FunctionNode:l,OperatorNode:h,SymbolNode:v}),g=y.hasProperty,x=y.isCommutative,b=y.isAssociative,w=y.mergeContext,D=y.flatten,N=y.unflattenr,E=y.unflattenl,A=y.createMakeNodeFunction,S=y.defaultContext,C=y.realContext,M=y.positiveContext;r.addConversion({from:"Object",to:"Map",convert:Ye});var F=r("simplify",{Node:z,"Node, Map":function(e,t){return z(e,!1,t)},"Node, Map, Object":function(e,t,r){return z(e,!1,t,r)},"Node, Array":z,"Node, Array, Map":z,"Node, Array, Map, Object":z});function O(e){return e.transform((function(e,t,r){return j(e)?O(e.content):e}))}r.removeConversion({from:"Object",to:"Map",convert:Ye}),F.defaultContext=S,F.realContext=C,F.positiveContext=M;var _={true:!0,false:!0,e:!0,i:!0,Infinity:!0,LN2:!0,LN10:!0,LOG2E:!0,LOG10E:!0,NaN:!0,phi:!0,pi:!0,SQRT1_2:!0,SQRT2:!0,tau:!0};function B(e,t){var r={};if(e.s){var i=e.s.split("->");if(2!==i.length)throw SyntaxError("Could not parse rule: "+e.s);r.l=i[0],r.r=i[1]}else r.l=e.l,r.r=e.r;r.l=O(n(r.l)),r.r=O(n(r.r));for(var a=0,o=["imposeContext","repeat","assuming"];a n+-n1",assuming:{subtract:{total:!0}}},{s:"n-n -> 0",assuming:{subtract:{total:!1}}},{s:"-(cl*v) -> v * (-cl)",assuming:{multiply:{commutative:!0},subtract:{total:!0}}},{s:"-(cl*v) -> (-cl) * v",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{s:"-(v*cl) -> v * (-cl)",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{l:"-(n1/n2)",r:"-n1/n2"},{l:"-v",r:"v * (-1)"},{l:"(n1 + n2)*(-1)",r:"n1*(-1) + n2*(-1)",repeat:!0},{l:"n/n1^n2",r:"n*n1^-n2"},{l:"n/n1",r:"n*n1^-1"},{s:"(n1*n2)^n3 -> n1^n3 * n2^n3",assuming:{multiply:{commutative:!0}}},{s:"(n1*n2)^(-1) -> n2^(-1) * n1^(-1)",assuming:{multiply:{commutative:!1}}},{s:"(n ^ n1) ^ n2 -> n ^ (n1 * n2)",assuming:{divide:{total:!0}}},{l:" vd * ( vd * n1 + n2)",r:"vd^2 * n1 + vd * n2"},{s:" vd * (vd^n4 * n1 + n2) -> vd^(1+n4) * n1 + vd * n2",assuming:{divide:{total:!0}}},{s:"vd^n3 * ( vd * n1 + n2) -> vd^(n3+1) * n1 + vd^n3 * n2",assuming:{divide:{total:!0}}},{s:"vd^n3 * (vd^n4 * n1 + n2) -> vd^(n3+n4) * n1 + vd^n3 * n2",assuming:{divide:{total:!0}}},{l:"n*n",r:"n^2"},{s:"n * n^n1 -> n^(n1+1)",assuming:{divide:{total:!0}}},{s:"n^n1 * n^n2 -> n^(n1+n2)",assuming:{divide:{total:!0}}},o,{s:"n+n -> 2*n",assuming:{add:{total:!0}}},{l:"n+-n",r:"0"},{l:"vd*n + vd",r:"vd*(n+1)"},{l:"n3*n1 + n3*n2",r:"n3*(n1+n2)"},{l:"n3^(-n4)*n1 + n3 * n2",r:"n3^(-n4)*(n1 + n3^(n4+1) *n2)"},{l:"n3^(-n4)*n1 + n3^n5 * n2",r:"n3^(-n4)*(n1 + n3^(n4+n5)*n2)"},{s:"n*vd + vd -> (n+1)*vd",assuming:{multiply:{commutative:!1}}},{s:"vd + n*vd -> (1+n)*vd",assuming:{multiply:{commutative:!1}}},{s:"n1*n3 + n2*n3 -> (n1+n2)*n3",assuming:{multiply:{commutative:!1}}},{s:"n^n1 * n -> n^(n1+1)",assuming:{divide:{total:!0},multiply:{commutative:!1}}},{s:"n1*n3^(-n4) + n2 * n3 -> (n1 + n2*n3^(n4 + 1))*n3^(-n4)",assuming:{multiply:{commutative:!1}}},{s:"n1*n3^(-n4) + n2 * n3^n5 -> (n1 + n2*n3^(n4 + n5))*n3^(-n4)",assuming:{multiply:{commutative:!1}}},{l:"n*cd + cd",r:"(n+1)*cd"},{s:"cd*n + cd -> cd*(n+1)",assuming:{multiply:{commutative:!1}}},{s:"cd + cd*n -> cd*(1+n)",assuming:{multiply:{commutative:!1}}},o,{s:"(-n)*n1 -> -(n*n1)",assuming:{subtract:{total:!0}}},{s:"n1*(-n) -> -(n1*n)",assuming:{subtract:{total:!0},multiply:{commutative:!1}}},{s:"ce+ve -> ve+ce",assuming:{add:{commutative:!0}},imposeContext:{add:{commutative:!1}}},{s:"vd*cd -> cd*vd",assuming:{multiply:{commutative:!0}},imposeContext:{multiply:{commutative:!1}}},{l:"n+-n1",r:"n-n1"},{l:"n+-(n1)",r:"n-(n1)"},{s:"n*(n1^-1) -> n/n1",assuming:{multiply:{commutative:!0}}},{s:"n*n1^-n2 -> n/n1^n2",assuming:{multiply:{commutative:!0}}},{s:"n^-1 -> 1/n",assuming:{multiply:{commutative:!0}}},{l:"n^1",r:"n"},{s:"n*(n1/n2) -> (n*n1)/n2",assuming:{multiply:{associative:!0}}},{s:"n-(n1+n2) -> n-n1-n2",assuming:{addition:{associative:!0,commutative:!0}}},{l:"1*n",r:"n",imposeContext:{multiply:{commutative:!0}}},{s:"n1/(n2/n3) -> (n1*n3)/n2",assuming:{multiply:{associative:!0}}},{l:"n1/(-n2)",r:"-n1/n2"}];var k=0;function I(){return new v("_p"+k++)}function z(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:We(),i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=i.consoleDebug;r=function(e,r){for(var n=[],i=0;i ").concat(r[l].r.toString()))),o){var m=u.toString({parenthesis:"all"});m!==f&&(console.log("Applying",p,"produced",m),f=m)}E(u,i.context)}c=u.toString({parenthesis:"all"})}return u}function R(e,t,r){var n=e;if(e)for(var i=0;i=2&&2===e.args.length){for(var o=function(e,t){var r,n,i=[],a=A(e);if(x(e,t))for(var o=0;o1&&(s=a(e.args.slice(0,u))),r=1===(n=e.args.slice(u)).length?n[0]:a(n),i.push(a([s,r]))}return i}(t,r),u=[],s=0;s2)throw Error("Unexpected non-binary associative function: "+e.toString());return[]}for(var p=[],m=0;m2)throw new Error("permuting >2 commutative non-associative rule arguments not yet implemented");var y=$(e.args[0],t.args[1],r);if(0===y.length)return[];var g=$(e.args[1],t.args[0],r);if(0===g.length)return[];p=[y,g]}a=function(e){if(0===e.length)return e;for(var t=e.reduce(L),r=[],n={},i=0;i="a"&&e.name[1]<="z"?e.name.substring(0,2):e.name[0]){case"n":case"_p":a[0].placeholders[e.name]=t;break;case"c":case"cl":if(!T(t))return[];a[0].placeholders[e.name]=t;break;case"v":if(T(t))return[];a[0].placeholders[e.name]=t;break;case"vl":if(!U(t))return[];a[0].placeholders[e.name]=t;break;case"cd":if(!iv(t))return[];a[0].placeholders[e.name]=t;break;case"vd":if(iv(t))return[];a[0].placeholders[e.name]=t;break;case"ce":if(!av(t))return[];a[0].placeholders[e.name]=t;break;case"ve":if(av(t))return[];a[0].placeholders[e.name]=t;break;default:throw new Error("Invalid symbol in rule: "+e.name)}}else{if(!(e instanceof f))return[];if(!i(e.value,t.value))return[]}return a}function H(e,t){if(e instanceof f&&t instanceof f){if(!i(e.value,t.value))return!1}else if(e instanceof v&&t instanceof v){if(e.name!==t.name)return!1}else{if(!(e instanceof h&&t instanceof h||e instanceof l&&t instanceof l))return!1;if(e instanceof h){if(e.op!==t.op||e.fn!==t.fn)return!1}else if(e instanceof l&&e.name!==t.name)return!1;if(e.args.length!==t.args.length)return!1;for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}function lv(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1?(v=B(y,E,g,r),S.unshift(v),v=B(y,S,g,r)):v=B(y,s,g,r)}else v=B(y,s,g,r);else v=B(y,s=e.args.map((function(e){return k(e,r)})),g,r);return v;case"ParenthesisNode":return k(e.content,r);case"AccessorNode":return function(e,t,r){if(!I(t))return new c(M(e),M(t));if(C(e)||l(e)){for(var n=Array.from(t.dimensions);n.length>0;)if(T(n[0])&&"string"!=typeof n[0].value){var i=O(n.shift().value,r);C(e)?e=e.items[i-1]:(e=e.valueOf()[i-1])instanceof Array&&(e=a(e))}else{if(!(n.length>1&&T(n[1])&&"string"!=typeof n[1].value))break;var o,u=O(n[1].value,r),s=[],m=C(e)?e.items:e.valueOf(),d=fv(m);try{for(d.s();!(o=d.n()).done;){var v=o.value;if(C(v))s.push(v.items[u-1]);else{if(!l(e))break;s.push(v[u-1])}}}catch(e){d.e(e)}finally{d.f()}if(s.length!==m.length)break;e=C(e)?new f(s):a(s),n.splice(1,1)}return n.length===t.dimensions.length?new c(M(e),t):n.length>0?(t=new h(n),new c(M(e),t)):e}if(R(e)&&1===t.dimensions.length&&T(t.dimensions[0])){var y=t.dimensions[0].value;return y in e.properties?e.properties[y]:new p}return new c(M(e),t)}(k(e.object,r),k(e.index,r),r);case"ArrayNode":var _=e.items.map((function(e){return k(e,r)}));return _.some(z)?new f(_.map(M)):a(_);case"IndexNode":return new h(e.dimensions.map((function(e){return N(e,r)})));case"ObjectNode":var j={};for(var P in e.properties)j[P]=N(e.properties[P],r);return new d(j);default:throw new Error("Unimplemented node type in simplifyConstant: ".concat(e.type))}}return N})),mv="simplifyCore",hv=Se(mv,["typed","parse","equal","isZero","add","subtract","multiply","divide","pow","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","ParenthesisNode","SymbolNode"],(function(e){var t=e.typed,r=(e.parse,e.equal),n=e.isZero,i=(e.add,e.subtract,e.multiply,e.divide,e.pow,e.AccessorNode),a=e.ArrayNode,o=e.ConstantNode,u=e.FunctionNode,s=e.IndexNode,c=e.ObjectNode,f=e.OperatorNode,l=(e.ParenthesisNode,e.SymbolNode),p=new o(0),m=new o(1),h=new o(!0),d=new o(!1);function v(e){return q(e)&&["and","not","or"].includes(e.op)}var y=sv({FunctionNode:u,OperatorNode:f,SymbolNode:l}),g=y.hasProperty,x=y.isCommutative;function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=t?t.context:void 0;if(g(e,"trivial",o)){if(k(e)&&1===e.args.length)return b(e.args[0],t);var l=!1,y=0;if(e.forEach((function(e){1==++y&&(l=b(e,t))})),1===y)return l}var w=e;if(k(w)){var D=function(e){var t,r="OperatorNode:"+e,n=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return Tp(e,t);var r=Object.prototype.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)?Tp(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(_p);try{for(n.s();!(t=n.n()).done;){var i=t.value;if(r in i)return i[r].op}}catch(e){n.e(e)}finally{n.f()}return null}(w.name);if(!D)return new u(b(w.fn),w.args.map((function(e){return b(e,t)})));if(w.args.length>2&&g(w,"associative",o))for(;w.args.length>2;){var N=w.args.pop(),E=w.args.pop();w.args.push(new f(D,w.name,[N,E]))}w=new f(D,w.name,w.args)}if(q(w)&&w.isUnary()){var A=b(w.args[0],t);if("~"===w.op&&q(A)&&A.isUnary()&&"~"===A.op)return A.args[0];if("not"===w.op&&q(A)&&A.isUnary()&&"not"===A.op&&v(A.args[0]))return A.args[0];var M=!0;if("-"===w.op&&q(A)&&(A.isBinary()&&"subtract"===A.fn&&(w=new f("-","subtract",[A.args[1],A.args[0]]),M=!1),A.isUnary()&&"-"===A.op))return A.args[0];if(M)return new f(w.op,w.fn,[A])}if(q(w)&&w.isBinary()){var F=b(w.args[0],t),O=b(w.args[1],t);if("+"===w.op){if(T(F)&&n(F.value))return O;if(T(O)&&n(O.value))return F;q(O)&&O.isUnary()&&"-"===O.op&&(O=O.args[0],w=new f("-","subtract",[F,O]))}if("-"===w.op)return q(O)&&O.isUnary()&&"-"===O.op?b(new f("+","add",[F,O.args[0]]),t):T(F)&&n(F.value)?b(new f("-","unaryMinus",[O])):T(O)&&n(O.value)?F:new f(w.op,w.fn,[F,O]);if("*"===w.op){if(T(F)){if(n(F.value))return p;if(r(F.value,1))return O}if(T(O)){if(n(O.value))return p;if(r(O.value,1))return F;if(x(w,o))return new f(w.op,w.fn,[O,F],w.implicit)}return new f(w.op,w.fn,[F,O],w.implicit)}if("/"===w.op)return T(F)&&n(F.value)?p:T(O)&&r(O.value,1)?F:new f(w.op,w.fn,[F,O]);if("^"===w.op&&T(O)){if(n(O.value))return m;if(r(O.value,1))return F}if("and"===w.op){if(T(F)){if(!F.value)return d;if(v(O))return O;if(T(O))return O.value?h:d}if(T(O)){if(!O.value)return d;if(v(F))return F}}if("or"===w.op){if(T(F)){if(F.value)return h;if(v(O))return O}if(T(O)){if(O.value)return h;if(v(F))return F}}return new f(w.op,w.fn,[F,O])}if(q(w))return new f(w.op,w.fn,w.args.map((function(e){return b(e,t)})));if(C(w))return new a(w.items.map((function(e){return b(e,t)})));if(S(w))return new i(b(w.object,t),b(w.index,t));if(I(w))return new s(w.dimensions.map((function(e){return b(e,t)})));if(R(w)){var _={};for(var B in w.properties)_[B]=b(w.properties[B],t);return new c(_)}return w}return t(mv,{Node:b,"Node,Object":b})})),dv=Se("resolve",["typed","parse","ConstantNode","FunctionNode","OperatorNode","ParenthesisNode"],(function(e){var t=e.typed,r=e.parse,n=e.ConstantNode,i=e.FunctionNode,a=e.OperatorNode,o=e.ParenthesisNode;function u(e,t){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Set;if(!t)return e;if(U(e)){if(s.has(e.name)){var c=Array.from(s).join(", ");throw new ReferenceError("recursive loop of variable definitions among {".concat(c,"}"))}var f=t.get(e.name);if(z(f)){var l=new Set(s);return l.add(e.name),u(f,t,l)}return"number"==typeof f?r(String(f)):void 0!==f?new n(f):e}if(q(e)){var p=e.args.map((function(e){return u(e,t,s)}));return new a(e.op,e.fn,p,e.implicit)}if(j(e))return new o(u(e.content,t,s));if(k(e)){var m=e.args.map((function(e){return u(e,t,s)}));return new i(e.name,m)}return e.map((function(e){return u(e,t,s)}))}return t("resolve",{Node:u,"Node, Map | null | undefined":u,"Node, Object":function(e,t){return u(e,Ye(t))},"Array | Matrix":t.referToSelf((function(e){return function(t){return t.map((function(t){return e(t)}))}})),"Array | Matrix, null | undefined":t.referToSelf((function(e){return function(t){return t.map((function(t){return e(t)}))}})),"Array, Object":t.referTo("Array,Map",(function(e){return function(t,r){return e(t,Ye(r))}})),"Matrix, Object":t.referTo("Matrix,Map",(function(e){return function(t,r){return e(t,Ye(r))}})),"Array | Matrix, Map":t.referToSelf((function(e){return function(t,r){return t.map((function(t){return e(t,r)}))}}))})})),vv="symbolicEqual",yv=Se(vv,["parse","simplify","typed","OperatorNode"],(function(e){e.parse;var t=e.simplify,r=e.typed,n=e.OperatorNode;function i(e,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=new n("-","subtract",[e,r]),o=t(a,{},i);return T(o)&&!o.value}return r(vv,{"Node, Node":i,"Node, Node, Object":i})})),gv="derivative",xv=Se(gv,["typed","config","parse","simplify","equal","isZero","numeric","ConstantNode","FunctionNode","OperatorNode","ParenthesisNode","SymbolNode"],(function(e){var t=e.typed,r=e.config,n=e.parse,i=e.simplify,a=e.equal,o=e.isZero,u=e.numeric,s=e.ConstantNode,c=e.FunctionNode,f=e.OperatorNode,l=e.ParenthesisNode,p=e.SymbolNode;function m(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{simplify:!0},n={};v(n,e,t.name);var a=y(e,n);return r.simplify?i(a):a}t.addConversion({from:"identifier",to:"SymbolNode",convert:n});var h=t(gv,{"Node, SymbolNode":m,"Node, SymbolNode, Object":m});t.removeConversion({from:"identifier",to:"SymbolNode",convert:n}),h._simplify=!0,h.toTex=function(e){return d.apply(null,e.args)};var d=t("_derivTex",{"Node, SymbolNode":function(e,t){return T(e)&&"string"===H(e.value)?d(n(e.value).toString(),t.toString(),1):d(e.toTex(),t.toString(),1)},"Node, ConstantNode":function(e,t){if("string"===H(t.value))return d(e,n(t.value));throw new Error("The second parameter to 'derivative' is a non-string constant")},"Node, SymbolNode, ConstantNode":function(e,t,r){return d(e.toString(),t.name,r.value)},"string, string, number":function(e,t,r){return(1===r?"{d\\over d"+t+"}":"{d^{"+r+"}\\over d"+t+"^{"+r+"}}")+"\\left[".concat(e,"\\right]")}}),v=t("constTag",{"Object, ConstantNode, string":function(e,t){return e[t]=!0,!0},"Object, SymbolNode, string":function(e,t,r){return t.name!==r&&(e[t]=!0,!0)},"Object, ParenthesisNode, string":function(e,t,r){return v(e,t.content,r)},"Object, FunctionAssignmentNode, string":function(e,t,r){return t.params.includes(r)?v(e,t.expr,r):(e[t]=!0,!0)},"Object, FunctionNode | OperatorNode, string":function(e,t,r){if(t.args.length>0){for(var n=v(e,t.args[0],r),i=1;i0){var n=e.args.filter((function(e){return void 0===t[e]})),i=1===n.length?n[0]:new f("*","multiply",n),u=r.concat(y(i,t));return new f("*","multiply",u)}return new f("+","add",e.args.map((function(r){return new f("*","multiply",e.args.map((function(e){return e===r?y(e,t):e.clone()})))})))}if("/"===e.op&&e.isBinary()){var s=e.args[0],l=e.args[1];return void 0!==t[l]?new f("/","divide",[y(s,t),l]):void 0!==t[s]?new f("*","multiply",[new f("-","unaryMinus",[s]),new f("/","divide",[y(l,t),new f("^","pow",[l.clone(),g(2)])])]):new f("/","divide",[new f("-","subtract",[new f("*","multiply",[y(s,t),l.clone()]),new f("*","multiply",[s.clone(),y(l,t)])]),new f("^","pow",[l.clone(),g(2)])])}if("^"===e.op&&e.isBinary()){var p=e.args[0],m=e.args[1];if(void 0!==t[p])return T(p)&&(o(p.value)||a(p.value,1))?g(0):new f("*","multiply",[e,new f("*","multiply",[new c("log",[p.clone()]),y(m.clone(),t)])]);if(void 0!==t[m]){if(T(m)){if(o(m.value))return g(0);if(a(m.value,1))return y(p,t)}var h=new f("^","pow",[p.clone(),new f("-","subtract",[m,g(1)])]);return new f("*","multiply",[m.clone(),new f("*","multiply",[y(p,t),h])])}return new f("*","multiply",[new f("^","pow",[p.clone(),m.clone()]),new f("+","add",[new f("*","multiply",[y(p,t),new f("/","divide",[m.clone(),p.clone()])]),new f("*","multiply",[y(m,t),new c("log",[p.clone()])])])])}throw new Error('Cannot process operator "'+e.op+'" in derivative: the operator is not supported, undefined, or the number of arguments passed to it are not supported')}});function g(e,t){return new s(u(e,t||r.number))}return h})),bv="rationalize",wv=Se(bv,["config","typed","equal","isZero","add","subtract","multiply","divide","pow","parse","simplifyConstant","simplifyCore","simplify","?bignumber","?fraction","mathWithTransform","matrix","AccessorNode","ArrayNode","ConstantNode","FunctionNode","IndexNode","ObjectNode","OperatorNode","SymbolNode","ParenthesisNode"],(function(e){e.config;var t=e.typed,r=(e.equal,e.isZero,e.add,e.subtract,e.multiply,e.divide,e.pow,e.parse,e.simplifyConstant),n=e.simplifyCore,i=e.simplify,a=(e.fraction,e.bignumber,e.mathWithTransform,e.matrix,e.AccessorNode,e.ArrayNode,e.ConstantNode),o=(e.FunctionNode,e.IndexNode,e.ObjectNode,e.OperatorNode),u=e.SymbolNode;function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=function(){var e=[n,{l:"n+n",r:"2*n"},{l:"n+-n",r:"0"},r,{l:"n*(n1^-1)",r:"n/n1"},{l:"n*n1^-n2",r:"n/n1^n2"},{l:"n1^-1",r:"1/n1"},{l:"n*(n1/n2)",r:"(n*n1)/n2"},{l:"1*n",r:"n"}],t=[{l:"(-n1)/(-n2)",r:"n1/n2"},{l:"(-n1)*(-n2)",r:"n1*n2"},{l:"n1--n2",r:"n1+n2"},{l:"n1-n2",r:"n1+(-n2)"},{l:"(n1+n2)*n3",r:"(n1*n3 + n2*n3)"},{l:"n1*(n2+n3)",r:"(n1*n2+n1*n3)"},{l:"c1*n + c2*n",r:"(c1+c2)*n"},{l:"c1*n + n",r:"(c1+1)*n"},{l:"c1*n - c2*n",r:"(c1-c2)*n"},{l:"c1*n - n",r:"(c1-1)*n"},{l:"v/c",r:"(1/c)*v"},{l:"v/-c",r:"-(1/c)*v"},{l:"-v*-c",r:"c*v"},{l:"-v*c",r:"-c*v"},{l:"v*-c",r:"-c*v"},{l:"v*c",r:"c*v"},{l:"-(-n1*n2)",r:"(n1*n2)"},{l:"-(n1*n2)",r:"(-n1*n2)"},{l:"-(-n1+n2)",r:"(n1-n2)"},{l:"-(n1+n2)",r:"(-n1-n2)"},{l:"(n1^n2)^n3",r:"(n1^(n2*n3))"},{l:"-(-n1/n2)",r:"(n1/n2)"},{l:"-(n1/n2)",r:"(-n1/n2)"}],i=[{l:"(n1/(n2/n3))",r:"((n1*n3)/n2)"},{l:"(n1/n2/n3)",r:"(n1/(n2*n3))"}],a={};return a.firstRules=e.concat(t,i),a.distrDivRules=[{l:"(n1/n2 + n3/n4)",r:"((n1*n4 + n3*n2)/(n2*n4))"},{l:"(n1/n2 + n3)",r:"((n1 + n3*n2)/n2)"},{l:"(n1 + n2/n3)",r:"((n1*n3 + n2)/n3)"}],a.sucDivRules=i,a.firstRulesAgain=e.concat(t),a.finalRules=[n,{l:"n*-n",r:"-n^2"},{l:"n*n",r:"n^2"},r,{l:"n*-n^n1",r:"-n^(n1+1)"},{l:"n*n^n1",r:"n^(n1+1)"},{l:"n^n1*-n^n2",r:"-n^(n1+n2)"},{l:"n^n1*n^n2",r:"n^(n1+n2)"},{l:"n^n1*-n",r:"-n^(n1+1)"},{l:"n^n1*n",r:"n^(n1+1)"},{l:"n^n1/-n",r:"-n^(n1-1)"},{l:"n^n1/n",r:"n^(n1-1)"},{l:"n/-n^n1",r:"-n^(1-n1)"},{l:"n/n^n1",r:"n^(1-n1)"},{l:"n^n1/-n^n2",r:"n^(n1-n2)"},{l:"n^n1/n^n2",r:"n^(n1-n2)"},{l:"n1+(-n2*n3)",r:"n1-n2*n3"},{l:"v*(-c)",r:"-c*v"},{l:"n1+-n2",r:"n1-n2"},{l:"v*c",r:"c*v"},{l:"(n1^n2)^n3",r:"(n1^(n2*n3))"}],a}(),u=function(e,t,r,n){var a=[],o=i(e,n,t,{exactFractions:!1}),u="+-*"+((r=!!r)?"/":"");!function e(t){var r=t.type;if("FunctionNode"===r)throw new Error("There is an unsolved function call");if("OperatorNode"===r)if("^"===t.op){if("ConstantNode"!==t.args[1].type||!V(parseFloat(t.args[1].value)))throw new Error("There is a non-integer exponent");e(t.args[0])}else{if(!u.includes(t.op))throw new Error("Operator "+t.op+" invalid in polynomial expression");for(var n=0;n=1){var m,h;e=c(e);var d,v=!0,y=!1;for(e=i(e,o.firstRules,{},l);h=v?o.distrDivRules:o.sucDivRules,v=!v,(d=(e=i(e,h,{},p)).toString())!==m;)y=!0,m=d;y&&(e=i(e,o.firstRulesAgain,{},l)),e=i(e,o.finalRules,{},l)}var g=[],x={};return"OperatorNode"===e.type&&e.isBinary()&&"/"===e.op?(1===s&&(e.args[0]=f(e.args[0],g),e.args[1]=f(e.args[1])),a&&(x.numerator=e.args[0],x.denominator=e.args[1])):(1===s&&(e=f(e,g)),a&&(x.numerator=e,x.denominator=null)),a?(x.coefficients=g,x.variables=u.variables,x.expression=e,x):e}return e.ParenthesisNode,t(bv,{Node:s,"Node, boolean":function(e,t){return s(e,{},t)},"Node, Object":s,"Node, Object, boolean":s});function c(e,t,r){var n=e.type,i=arguments.length>1;if("OperatorNode"===n&&e.isBinary()){var u,s=!1;if("^"===e.op&&("ParenthesisNode"!==e.args[0].type&&"OperatorNode"!==e.args[0].type||"ConstantNode"!==e.args[1].type||(s=(u=parseFloat(e.args[1].value))>=2&&V(u))),s){if(u>2){var f=e.args[0],l=new o("^","pow",[e.args[0].cloneDeep(),new a(u-1)]);e=new o("*","multiply",[f,l])}else e=new o("*","multiply",[e.args[0],e.args[0].cloneDeep()]);i&&("content"===r?t.content=e:t.args[r]=e)}}if("ParenthesisNode"===n)c(e.content,e,"content");else if("ConstantNode"!==n&&"SymbolNode"!==n)for(var p=0;pr&&(t[c]=0),t[c]+=o.cte*("+"===o.oper?1:-1),void(r=Math.max(c,r))}o.cte=c,""===o.fire&&(t[0]+=o.cte*("+"===o.oper?1:-1))}}(e,null,{cte:1,oper:"+",fire:""});for(var i,s=!0,c=r=t.length-1;c>=0;c--)if(0!==t[c]){var f=new a(s?t[c]:Math.abs(t[c])),l=t[c]<0?"-":"+";if(c>0){var p=new u(n);if(c>1){var m=new a(c);p=new o("^","pow",[p,m])}f=-1===t[c]&&s?new o("-","unaryMinus",[p]):1===Math.abs(t[c])?p:new o("*","multiply",[f,p])}i=s?f:"+"===l?new o("+","add",[i,f]):new o("-","subtract",[i,f]),s=!1}return s?new a(0):i}})),Dv="zpk2tf",Nv=Se(Dv,["typed","add","multiply","Complex","number"],(function(e){var t=e.typed,r=e.add,n=e.multiply,i=e.Complex,a=e.number;return t(Dv,{"Array,Array,number":function(e,t,r){return o(e,t,r)},"Array,Array":function(e,t){return o(e,t,1)},"Matrix,Matrix,number":function(e,t,r){return o(e.valueOf(),t.valueOf(),r)},"Matrix,Matrix":function(e,t){return o(e.valueOf(),t.valueOf(),1)}});function o(e,t,r){e.some((function(e){return"BigNumber"===e.type}))&&(e=e.map((function(e){return a(e)}))),t.some((function(e){return"BigNumber"===e.type}))&&(t=t.map((function(e){return a(e)})));for(var o=[i(1,0)],s=[i(1,0)],c=0;c=0&&o-u0?0:2;else if(u&&!0===u.isSet)u=u.map((function(e){return e-1}));else if(f(u)||l(u))"boolean"!==r(u)&&(u=u.map((function(e){return e-1})));else if(i(u))u--;else if(a(u))u=u.toNumber()-1;else if("string"!=typeof u)throw new TypeError("Dimension must be an Array, Matrix, number, string, or Range");e[n]=u}var s=new t;return t.apply(s,e),s}}),{isTransformFunction:!0}),rg=Se("map",["typed"],(function(e){var t=e.typed;function r(e,t,r){var i,a;return e[0]&&(i=e[0].compile().evaluate(r)),e[1]&&(a=U(e[1])||B(e[1])?e[1].compile().evaluate(r):Xy(e[1],t,r)),n(i,a)}r.rawArgs=!0;var n=t("map",{"Array, function":function(e,t){return ng(e,t,e)},"Matrix, function":function(e,t){return e.create(ng(e.valueOf(),t,e))}});return r}),{isTransformFunction:!0});function ng(e,t,r){return function e(n,i){return Array.isArray(n)?An(n,(function(t,r){return e(t,i.concat(r+1))})):Mu(t,n,i,r,"map")}(e,[])}function ig(e){if(2===e.length&&p(e[0])){var t=(e=e.slice())[1];i(t)?e[1]=t-1:a(t)&&(e[1]=t.minus(1))}return e}var ag=Se("max",["typed","config","numeric","larger"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.larger,a=hf({typed:t,config:r,numeric:n,larger:i});return t("max",{"...any":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),og=Se("mean",["typed","add","divide"],(function(e){var t=e.typed,r=e.add,n=e.divide,i=Kh({typed:t,add:r,divide:n});return t("mean",{"...any":function(e){e=ig(e);try{return i.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),ug=Se("min",["typed","config","numeric","smaller"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.smaller,a=df({typed:t,config:r,numeric:n,smaller:i});return t("min",{"...any":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),sg=Se("range",["typed","config","?matrix","?bignumber","smaller","smallerEq","larger","largerEq","add","isPositive"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.bignumber,a=e.smaller,o=e.smallerEq,u=e.larger,s=e.largerEq,c=e.add,f=e.isPositive,l=Xu({typed:t,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:o,larger:u,largerEq:s,add:c,isPositive:f});return t("range",{"...any":function(e){return"boolean"!=typeof e[e.length-1]&&e.push(!0),l.apply(null,e)}})}),{isTransformFunction:!0}),cg=Se("row",["typed","Index","matrix","range"],(function(e){var t=e.typed,r=e.Index,n=e.matrix,a=e.range,o=as({typed:t,Index:r,matrix:n,range:a});return t("row",{"...any":function(e){var t=e.length-1,r=e[t];i(r)&&(e[t]=r-1);try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),fg=Se("subset",["typed","matrix","zeros","add"],(function(e){var t=e.typed,r=e.matrix,n=e.zeros,i=e.add,a=ls({typed:t,matrix:r,zeros:n,add:i});return t("subset",{"...any":function(e){try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),lg=Se("concat",["typed","matrix","isInteger"],(function(e){var t=e.typed,r=e.matrix,n=e.isInteger,o=xu({typed:t,matrix:r,isInteger:n});return t("concat",{"...any":function(e){var t=e.length-1,r=e[t];i(r)?e[t]=r-1:a(r)&&(e[t]=r.minus(1));try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),pg="diff",mg=Se(pg,["typed","matrix","subtract","number","bignumber"],(function(e){var t=e.typed,r=e.matrix,n=e.subtract,i=e.number,a=e.bignumber,o=Gu({typed:t,matrix:r,subtract:n,number:i,bignumber:a});return t(pg,{"...any":function(e){e=ig(e);try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),hg=Se("std",["typed","map","sqrt","variance"],(function(e){var t=e.typed,r=e.map,n=e.sqrt,i=e.variance,a=sd({typed:t,map:r,sqrt:n,variance:i});return t("std",{"...any":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),dg=Se("sum",["typed","config","add","numeric"],(function(e){var t=e.typed,r=e.config,n=e.add,i=e.numeric,a=Yh({typed:t,config:r,add:n,numeric:i});return t("sum",{"...any":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),vg=Se("quantileSeq",["typed","bignumber","add","subtract","divide","multiply","partitionSelect","compare","isInteger","smaller","smallerEq","larger"],(function(e){var t=e.typed,r=e.bignumber,n=e.add,i=e.subtract,a=e.divide,o=e.multiply,u=e.partitionSelect,s=e.compare,c=e.isInteger,f=e.smaller,l=e.smallerEq,p=e.larger,m=ud({typed:t,bignumber:r,add:n,subtract:i,divide:a,multiply:o,partitionSelect:u,compare:s,isInteger:c,smaller:f,smallerEq:l,larger:p});return t("quantileSeq",{"Array | Matrix, number | BigNumber":m,"Array | Matrix, number | BigNumber, number":function(e,t,r){return m(e,t,h(r))},"Array | Matrix, number | BigNumber, boolean":m,"Array | Matrix, number | BigNumber, boolean, number":function(e,t,r,n){return m(e,t,r,h(n))},"Array | Matrix, Array | Matrix":m,"Array | Matrix, Array | Matrix, number":function(e,t,r){return m(e,t,h(r))},"Array | Matrix, Array | Matrix, boolean":m,"Array | Matrix, Array | Matrix, boolean, number":function(e,t,r,n){return m(e,t,r,h(n))}});function h(e){return ig([[],e])[1]}}),{isTransformFunction:!0}),yg="cumsum",gg=Se(yg,["typed","add","unaryPlus"],(function(e){var t=e.typed,r=e.add,n=e.unaryPlus,o=Xh({typed:t,add:r,unaryPlus:n});return t(yg,{"...any":function(e){if(2===e.length&&p(e[0])){var t=e[1];i(t)?e[1]=t-1:a(t)&&(e[1]=t.minus(1))}try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),xg="variance",bg=Se(xg,["typed","add","subtract","multiply","divide","apply","isNaN"],(function(e){var t=e.typed,r=e.add,n=e.subtract,i=e.multiply,a=e.divide,o=e.apply,u=e.isNaN,s=ad({typed:t,add:r,subtract:n,multiply:i,divide:a,apply:o,isNaN:u});return t(xg,{"...any":function(e){e=ig(e);try{return s.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),wg="print",Dg=Se(wg,["typed","matrix","zeros","add"],(function(e){var t=e.typed,r=e.matrix,n=e.zeros,i=e.add,a=Zs({typed:t,matrix:r,zeros:n,add:i});return t(wg,{"string, Object | Array":function(e,t){return a(o(e),t)},"string, Object | Array, number | Object":function(e,t,r){return a(o(e),t,r)}});function o(e){return e.replace(Gs,(function(e){return"$"+e.slice(1).split(".").map((function(e){return!isNaN(e)&&e.length>0?parseInt(e)-1:e})).join(".")}))}}),{isTransformFunction:!0}),Ng=Se("and",["typed","matrix","zeros","add","equalScalar","not","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.zeros,a=e.not,o=e.concat,u=Tc({typed:t,matrix:r,equalScalar:n,zeros:i,not:a,concat:o});function s(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)&&!u(n,!0))return!1;var i=e[1].compile().evaluate(r);return u(n,i)}return s.rawArgs=!0,s}),{isTransformFunction:!0}),Eg=Se("or",["typed","matrix","equalScalar","DenseMatrix","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.DenseMatrix,a=e.concat,o=vu({typed:t,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function u(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)&&o(n,!1))return!0;var i=e[1].compile().evaluate(r);return o(n,i)}return u.rawArgs=!0,u}),{isTransformFunction:!0}),Ag=Se("bitAnd",["typed","matrix","zeros","add","equalScalar","not","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.zeros,a=e.not,o=e.concat,u=Xo({typed:t,matrix:r,equalScalar:n,zeros:i,not:a,concat:o});function s(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)){if(isNaN(n))return NaN;if(0===n||!1===n)return 0}var i=e[1].compile().evaluate(r);return u(n,i)}return s.rawArgs=!0,s}),{isTransformFunction:!0}),Sg=Se("bitOr",["typed","matrix","equalScalar","DenseMatrix","concat"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.DenseMatrix,a=e.concat,o=tu({typed:t,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function u(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)){if(isNaN(n))return NaN;if(-1===n)return-1;if(!0===n)return 1}var i=e[1].compile().evaluate(r);return o(n,i)}return u.rawArgs=!0,u}),{isTransformFunction:!0}),Cg=(r(4170),r(6034),r(1504));var Mg={epsilon:1e-12,matrix:"Matrix",number:"number",precision:64,predictable:!1,randomSeed:null},Fg=["Matrix","Array"],Og=["number","BigNumber","Fraction"];function Tg(e,t){function r(r){if(r){var n=ge(e,ye);_g(r,"matrix",Fg),_g(r,"number",Og),be(e,r);var i=ge(e,ye),a=ge(r,ye);return t("config",i,n,a),i}return ge(e,ye)}return r.MATRIX_OPTIONS=Fg,r.NUMBER_OPTIONS=Og,Object.keys(Mg).forEach((function(t){Object.defineProperty(r,t,{get:function(){return e[t]},enumerable:!0,configurable:!0})})),r}function _g(e,t,r){void 0===e[t]||r.includes(e[t])||console.warn('Warning: Unknown value "'+e[t]+'" for configuration option "'+t+'". Available options: '+r.map((function(e){return JSON.stringify(e)})).join(", ")+".")}const Bg=function e(r,n){var _=Yr({},Mg,n);if("function"!=typeof Object.create)throw new Error("ES5 not supported by this JavaScript engine. Please load the es5-shim and es5-sham library for compatibility.");var H,V,Z=(H={isNumber:i,isComplex:o,isBigNumber:a,isFraction:u,isUnit:s,isString:c,isArray:f,isMatrix:l,isCollection:p,isDenseMatrix:m,isSparseMatrix:h,isRange:d,isIndex:v,isBoolean:y,isResultSet:g,isHelp:x,isFunction:b,isDate:w,isRegExp:D,isObject:N,isNull:E,isUndefined:A,isAccessorNode:S,isArrayNode:C,isAssignmentNode:M,isBlockNode:F,isConditionalNode:O,isConstantNode:T,isFunctionAssignmentNode:B,isFunctionNode:k,isIndexNode:I,isNode:z,isObjectNode:R,isOperatorNode:q,isParenthesisNode:j,isRangeNode:P,isRelationalNode:L,isSymbolNode:U,isChain:$},V=new Cg,H.on=V.on.bind(V),H.off=V.off.bind(V),H.once=V.once.bind(V),H.emit=V.emit.bind(V),H);Z.config=Tg(_,Z.emit),Z.expression={transform:{},mathWithTransform:{config:Z.config}};var W={};function Y(){for(var e=arguments.length,t=new Array(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:t.fn;if(a.includes("."))throw new Error("Factory name should not contain a nested path. Name: "+JSON.stringify(a));var o=v(t)?n.expression.transform:n,u=a in n.expression.transform,s=Ae(o,a)?o[a]:void 0,c=function(){var i={};t.dependencies.map(Me).forEach((function(e){if(e.includes("."))throw new Error("Factory dependency should not contain a nested path. Name: "+JSON.stringify(e));"math"===e?i.math=n:"mathWithTransform"===e?i.mathWithTransform=n.expression.mathWithTransform:"classes"===e?i.classes=n:i[e]=n[e]}));var o=t(i);if(o&&"function"==typeof o.transform)throw new Error('Transforms cannot be attached to factory functions. Please create a separate function for it with exports.path="expression.transform"');if(void 0===s||r.override)return o;if(e.isTypedFunction(s)&&e.isTypedFunction(o))return e(s,o);if(r.silent)return s;throw new Error('Cannot import "'+a+'": already exists')};t.meta&&!1===t.meta.lazy?(o[a]=c(),s&&u?p(a):(v(t)||d(t))&&Ee(n.expression.mathWithTransform,a,(function(){return o[a]}))):(Ee(o,a,c),s&&u?p(a):(v(t)||d(t))&&Ee(n.expression.mathWithTransform,a,(function(){return o[a]}))),i[a]=t,n.emit("import",a,c)}function h(e){return!Ae(y,e)}function d(e){return!(e.fn.includes(".")||Ae(y,e.fn)||e.meta&&e.meta.isClass)}function v(e){return void 0!==e&&void 0!==e.meta&&!0===e.meta.isTransformFunction||!1}var y={expression:!0,type:!0,docs:!0,error:!0,json:!0,chain:!0};return function(e,r){var n=arguments.length;if(1!==n&&2!==n)throw new ro("import",n,1,2);r||(r={});var i,f={};for(var p in function e(n,i,a){if(Array.isArray(i))i.forEach((function(t){return e(n,t)}));else if("object"===t(i))for(var o in i)Ae(i,o)&&e(n,i[o],o);else if(Ce(i)||void 0!==a){var u=Ce(i)?v(i)?i.fn+".transform":i.fn:a;if(Ae(n,u)&&n[u]!==i&&!r.silent)throw new Error('Cannot import "'+u+'" twice');n[u]=i}else if(!r.silent)throw new TypeError("Factory, Object, or Array expected")}(f,e),f)if(Ae(f,p)){var h=f[p];if(Ce(h))m(h,r);else if("function"==typeof(i=h)||"number"==typeof i||"string"==typeof i||"boolean"==typeof i||null===i||s(i)||o(i)||a(i)||u(i)||l(i)||Array.isArray(i))c(p,h,r);else if(!r.silent)throw new TypeError("Factory, Object, or Array expected")}}}(Y,0,Z,W);return Z.import=J,Z.on("config",(function(){Object.values(W).forEach((function(e){e&&e.meta&&e.meta.recreateOnConfigChange&&J(e,{override:!0})}))})),Z.create=e.bind(null,r),Z.factory=Se,Z.import(Object.values(De(r))),Z.ArgumentsError=ro,Z.DimensionError=un,Z.IndexError=sn,Z}(e)})(),n.default})())); +//# sourceMappingURL=math.js.map +;// This file is autogenerated. +// It's here at this path for backwards compatibility for links to it +// but the npm package now exports both CJS and ESM. +// See https://github.com/bgrins/TinyColor/ for instructions. + (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.tinycolor = factory()); +})(this, (function () { 'use strict'; + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + + // https://github.com/bgrins/TinyColor + // Brian Grinstead, MIT License + + var trimLeft = /^\s+/; + var trimRight = /\s+$/; + function tinycolor(color, opts) { + color = color ? color : ""; + opts = opts || {}; + + // If input is already a tinycolor, return itself + if (color instanceof tinycolor) { + return color; + } + // If we are called as a function, call using new instead + if (!(this instanceof tinycolor)) { + return new tinycolor(color, opts); + } + var rgb = inputToRGB(color); + this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format; + this._gradientType = opts.gradientType; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by `inputToRgb` + if (this._r < 1) this._r = Math.round(this._r); + if (this._g < 1) this._g = Math.round(this._g); + if (this._b < 1) this._b = Math.round(this._b); + this._ok = rgb.ok; + } + tinycolor.prototype = { + isDark: function isDark() { + return this.getBrightness() < 128; + }, + isLight: function isLight() { + return !this.isDark(); + }, + isValid: function isValid() { + return this._ok; + }, + getOriginalInput: function getOriginalInput() { + return this._originalInput; + }, + getFormat: function getFormat() { + return this._format; + }, + getAlpha: function getAlpha() { + return this._a; + }, + getBrightness: function getBrightness() { + //http://www.w3.org/TR/AERT#color-contrast + var rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + }, + getLuminance: function getLuminance() { + //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + var rgb = this.toRgb(); + var RsRGB, GsRGB, BsRGB, R, G, B; + RsRGB = rgb.r / 255; + GsRGB = rgb.g / 255; + BsRGB = rgb.b / 255; + if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4); + if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4); + if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4); + return 0.2126 * R + 0.7152 * G + 0.0722 * B; + }, + setAlpha: function setAlpha(value) { + this._a = boundAlpha(value); + this._roundA = Math.round(100 * this._a) / 100; + return this; + }, + toHsv: function toHsv() { + var hsv = rgbToHsv(this._r, this._g, this._b); + return { + h: hsv.h * 360, + s: hsv.s, + v: hsv.v, + a: this._a + }; + }, + toHsvString: function toHsvString() { + var hsv = rgbToHsv(this._r, this._g, this._b); + var h = Math.round(hsv.h * 360), + s = Math.round(hsv.s * 100), + v = Math.round(hsv.v * 100); + return this._a == 1 ? "hsv(" + h + ", " + s + "%, " + v + "%)" : "hsva(" + h + ", " + s + "%, " + v + "%, " + this._roundA + ")"; + }, + toHsl: function toHsl() { + var hsl = rgbToHsl(this._r, this._g, this._b); + return { + h: hsl.h * 360, + s: hsl.s, + l: hsl.l, + a: this._a + }; + }, + toHslString: function toHslString() { + var hsl = rgbToHsl(this._r, this._g, this._b); + var h = Math.round(hsl.h * 360), + s = Math.round(hsl.s * 100), + l = Math.round(hsl.l * 100); + return this._a == 1 ? "hsl(" + h + ", " + s + "%, " + l + "%)" : "hsla(" + h + ", " + s + "%, " + l + "%, " + this._roundA + ")"; + }, + toHex: function toHex(allow3Char) { + return rgbToHex(this._r, this._g, this._b, allow3Char); + }, + toHexString: function toHexString(allow3Char) { + return "#" + this.toHex(allow3Char); + }, + toHex8: function toHex8(allow4Char) { + return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); + }, + toHex8String: function toHex8String(allow4Char) { + return "#" + this.toHex8(allow4Char); + }, + toRgb: function toRgb() { + return { + r: Math.round(this._r), + g: Math.round(this._g), + b: Math.round(this._b), + a: this._a + }; + }, + toRgbString: function toRgbString() { + return this._a == 1 ? "rgb(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ")" : "rgba(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ", " + this._roundA + ")"; + }, + toPercentageRgb: function toPercentageRgb() { + return { + r: Math.round(bound01(this._r, 255) * 100) + "%", + g: Math.round(bound01(this._g, 255) * 100) + "%", + b: Math.round(bound01(this._b, 255) * 100) + "%", + a: this._a + }; + }, + toPercentageRgbString: function toPercentageRgbString() { + return this._a == 1 ? "rgb(" + Math.round(bound01(this._r, 255) * 100) + "%, " + Math.round(bound01(this._g, 255) * 100) + "%, " + Math.round(bound01(this._b, 255) * 100) + "%)" : "rgba(" + Math.round(bound01(this._r, 255) * 100) + "%, " + Math.round(bound01(this._g, 255) * 100) + "%, " + Math.round(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; + }, + toName: function toName() { + if (this._a === 0) { + return "transparent"; + } + if (this._a < 1) { + return false; + } + return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; + }, + toFilter: function toFilter(secondColor) { + var hex8String = "#" + rgbaToArgbHex(this._r, this._g, this._b, this._a); + var secondHex8String = hex8String; + var gradientType = this._gradientType ? "GradientType = 1, " : ""; + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = "#" + rgbaToArgbHex(s._r, s._g, s._b, s._a); + } + return "progid:DXImageTransform.Microsoft.gradient(" + gradientType + "startColorstr=" + hex8String + ",endColorstr=" + secondHex8String + ")"; + }, + toString: function toString(format) { + var formatSet = !!format; + format = format || this._format; + var formattedString = false; + var hasAlpha = this._a < 1 && this._a >= 0; + var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); + if (needsAlphaFormat) { + // Special case for "transparent", all other non-alpha formats + // will return rgba when there is transparency. + if (format === "name" && this._a === 0) { + return this.toName(); + } + return this.toRgbString(); + } + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex4") { + formattedString = this.toHex8String(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + return formattedString || this.toHexString(); + }, + clone: function clone() { + return tinycolor(this.toString()); + }, + _applyModification: function _applyModification(fn, args) { + var color = fn.apply(null, [this].concat([].slice.call(args))); + this._r = color._r; + this._g = color._g; + this._b = color._b; + this.setAlpha(color._a); + return this; + }, + lighten: function lighten() { + return this._applyModification(_lighten, arguments); + }, + brighten: function brighten() { + return this._applyModification(_brighten, arguments); + }, + darken: function darken() { + return this._applyModification(_darken, arguments); + }, + desaturate: function desaturate() { + return this._applyModification(_desaturate, arguments); + }, + saturate: function saturate() { + return this._applyModification(_saturate, arguments); + }, + greyscale: function greyscale() { + return this._applyModification(_greyscale, arguments); + }, + spin: function spin() { + return this._applyModification(_spin, arguments); + }, + _applyCombination: function _applyCombination(fn, args) { + return fn.apply(null, [this].concat([].slice.call(args))); + }, + analogous: function analogous() { + return this._applyCombination(_analogous, arguments); + }, + complement: function complement() { + return this._applyCombination(_complement, arguments); + }, + monochromatic: function monochromatic() { + return this._applyCombination(_monochromatic, arguments); + }, + splitcomplement: function splitcomplement() { + return this._applyCombination(_splitcomplement, arguments); + }, + // Disabled until https://github.com/bgrins/TinyColor/issues/254 + // polyad: function (number) { + // return this._applyCombination(polyad, [number]); + // }, + triad: function triad() { + return this._applyCombination(polyad, [3]); + }, + tetrad: function tetrad() { + return this._applyCombination(polyad, [4]); + } + }; + + // If input is an object, force 1 into "1.0" to handle ratios properly + // String input requires "1.0" as input, so 1 will be treated as 1 + tinycolor.fromRatio = function (color, opts) { + if (_typeof(color) == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + return tinycolor(color, opts); + }; + + // Given a string or object, convert that input to RGB + // Possible string inputs: + // + // "red" + // "#f00" or "f00" + // "#ff0000" or "ff0000" + // "#ff000000" or "ff000000" + // "rgb 255 0 0" or "rgb (255, 0, 0)" + // "rgb 1.0 0 0" or "rgb (1, 0, 0)" + // "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" + // "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" + // "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" + // "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" + // "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" + // + function inputToRGB(color) { + var rgb = { + r: 0, + g: 0, + b: 0 + }; + var a = 1; + var s = null; + var v = null; + var l = null; + var ok = false; + var format = false; + if (typeof color == "string") { + color = stringInputToObject(color); + } + if (_typeof(color) == "object") { + if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { + s = convertToPercentage(color.s); + v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, s, v); + ok = true; + format = "hsv"; + } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { + s = convertToPercentage(color.s); + l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, s, l); + ok = true; + format = "hsl"; + } + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + a = boundAlpha(a); + return { + ok: ok, + format: color.format || format, + r: Math.min(255, Math.max(rgb.r, 0)), + g: Math.min(255, Math.max(rgb.g, 0)), + b: Math.min(255, Math.max(rgb.b, 0)), + a: a + }; + } + + // Conversion Functions + // -------------------- + + // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from: + // + + // `rgbToRgb` + // Handle bounds / percentage checking to conform to CSS color spec + // + // *Assumes:* r, g, b in [0, 255] or [0, 1] + // *Returns:* { r, g, b } in [0, 255] + function rgbToRgb(r, g, b) { + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; + } + + // `rgbToHsl` + // Converts an RGB color value to HSL. + // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] + // *Returns:* { h, s, l } in [0,1] + function rgbToHsl(r, g, b) { + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + var max = Math.max(r, g, b), + min = Math.min(r, g, b); + var h, + s, + l = (max + min) / 2; + if (max == min) { + h = s = 0; // achromatic + } else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + return { + h: h, + s: s, + l: l + }; + } + + // `hslToRgb` + // Converts an HSL color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hslToRgb(h, s, l) { + var r, g, b; + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + function hue2rgb(p, q, t) { + if (t < 0) t += 1; + if (t > 1) t -= 1; + if (t < 1 / 6) return p + (q - p) * 6 * t; + if (t < 1 / 2) return q; + if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; + return p; + } + if (s === 0) { + r = g = b = l; // achromatic + } else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1 / 3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1 / 3); + } + return { + r: r * 255, + g: g * 255, + b: b * 255 + }; + } + + // `rgbToHsv` + // Converts an RGB color value to HSV + // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] + // *Returns:* { h, s, v } in [0,1] + function rgbToHsv(r, g, b) { + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + var max = Math.max(r, g, b), + min = Math.min(r, g, b); + var h, + s, + v = max; + var d = max - min; + s = max === 0 ? 0 : d / max; + if (max == min) { + h = 0; // achromatic + } else { + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + return { + h: h, + s: s, + v: v + }; + } + + // `hsvToRgb` + // Converts an HSV color value to RGB. + // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] + // *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + var i = Math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + return { + r: r * 255, + g: g * 255, + b: b * 255 + }; + } + + // `rgbToHex` + // Converts an RGB color to hex + // Assumes r, g, and b are contained in the set [0, 255] + // Returns a 3 or 6 character hex + function rgbToHex(r, g, b, allow3Char) { + var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + return hex.join(""); + } + + // `rgbaToHex` + // Converts an RGBA color plus alpha transparency to hex + // Assumes r, g, b are contained in the set [0, 255] and + // a in [0, 1]. Returns a 4 or 8 character rgba hex + function rgbaToHex(r, g, b, a, allow4Char) { + var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))]; + + // Return a 4 character hex if possible + if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + return hex.join(""); + } + + // `rgbaToArgbHex` + // Converts an RGBA color to an ARGB Hex8 string + // Rarely used, but required for "toFilter()" + function rgbaToArgbHex(r, g, b, a) { + var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))]; + return hex.join(""); + } + + // `equals` + // Can be called with any tinycolor input + tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) return false; + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); + }; + tinycolor.random = function () { + return tinycolor.fromRatio({ + r: Math.random(), + g: Math.random(), + b: Math.random() + }); + }; + + // Modification Functions + // ---------------------- + // Thanks to less.js for some of the basics here + // + + function _desaturate(color, amount) { + amount = amount === 0 ? 0 : amount || 10; + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + } + function _saturate(color, amount) { + amount = amount === 0 ? 0 : amount || 10; + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); + } + function _greyscale(color) { + return tinycolor(color).desaturate(100); + } + function _lighten(color, amount) { + amount = amount === 0 ? 0 : amount || 10; + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + } + function _brighten(color, amount) { + amount = amount === 0 ? 0 : amount || 10; + var rgb = tinycolor(color).toRgb(); + rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100)))); + rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100)))); + rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100)))); + return tinycolor(rgb); + } + function _darken(color, amount) { + amount = amount === 0 ? 0 : amount || 10; + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); + } + + // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. + // Values outside of this range will be wrapped into this range. + function _spin(color, amount) { + var hsl = tinycolor(color).toHsl(); + var hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return tinycolor(hsl); + } + + // Combination Functions + // --------------------- + // Thanks to jQuery xColor for some of the ideas behind these + // + + function _complement(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); + } + function polyad(color, number) { + if (isNaN(number) || number <= 0) { + throw new Error("Argument to polyad must be a positive number"); + } + var hsl = tinycolor(color).toHsl(); + var result = [tinycolor(color)]; + var step = 360 / number; + for (var i = 1; i < number; i++) { + result.push(tinycolor({ + h: (hsl.h + i * step) % 360, + s: hsl.s, + l: hsl.l + })); + } + return result; + } + function _splitcomplement(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [tinycolor(color), tinycolor({ + h: (h + 72) % 360, + s: hsl.s, + l: hsl.l + }), tinycolor({ + h: (h + 216) % 360, + s: hsl.s, + l: hsl.l + })]; + } + function _analogous(color, results, slices) { + results = results || 6; + slices = slices || 30; + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; + } + function _monochromatic(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, + s = hsv.s, + v = hsv.v; + var ret = []; + var modification = 1 / results; + while (results--) { + ret.push(tinycolor({ + h: h, + s: s, + v: v + })); + v = (v + modification) % 1; + } + return ret; + } + + // Utility Functions + // --------------------- + + tinycolor.mix = function (color1, color2, amount) { + amount = amount === 0 ? 0 : amount || 50; + var rgb1 = tinycolor(color1).toRgb(); + var rgb2 = tinycolor(color2).toRgb(); + var p = amount / 100; + var rgba = { + r: (rgb2.r - rgb1.r) * p + rgb1.r, + g: (rgb2.g - rgb1.g) * p + rgb1.g, + b: (rgb2.b - rgb1.b) * p + rgb1.b, + a: (rgb2.a - rgb1.a) * p + rgb1.a + }; + return tinycolor(rgba); + }; + + // Readability Functions + // --------------------- + // false + // tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false + tinycolor.isReadable = function (color1, color2, wcag2) { + var readability = tinycolor.readability(color1, color2); + var wcag2Parms, out; + out = false; + wcag2Parms = validateWCAG2Parms(wcag2); + switch (wcag2Parms.level + wcag2Parms.size) { + case "AAsmall": + case "AAAlarge": + out = readability >= 4.5; + break; + case "AAlarge": + out = readability >= 3; + break; + case "AAAsmall": + out = readability >= 7; + break; + } + return out; + }; + + // `mostReadable` + // Given a base color and a list of possible foreground or background + // colors for that base, returns the most readable color. + // Optionally returns Black or White if the most readable color is unreadable. + // *Example* + // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" + // tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" + // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" + // tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" + tinycolor.mostReadable = function (baseColor, colorList, args) { + var bestColor = null; + var bestScore = 0; + var readability; + var includeFallbackColors, level, size; + args = args || {}; + includeFallbackColors = args.includeFallbackColors; + level = args.level; + size = args.size; + for (var i = 0; i < colorList.length; i++) { + readability = tinycolor.readability(baseColor, colorList[i]); + if (readability > bestScore) { + bestScore = readability; + bestColor = tinycolor(colorList[i]); + } + } + if (tinycolor.isReadable(baseColor, bestColor, { + level: level, + size: size + }) || !includeFallbackColors) { + return bestColor; + } else { + args.includeFallbackColors = false; + return tinycolor.mostReadable(baseColor, ["#fff", "#000"], args); + } + }; + + // Big List of Colors + // ------------------ + // + var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" + }; + + // Make it easy to access colors via `hexNames[hex]` + var hexNames = tinycolor.hexNames = flip(names); + + // Utilities + // --------- + + // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }` + function flip(o) { + var flipped = {}; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; + } + + // Return a valid alpha value [0,1] with all invalid values being set to 1 + function boundAlpha(a) { + a = parseFloat(a); + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + return a; + } + + // Take input from [0, n] and return it as [0, 1] + function bound01(n, max) { + if (isOnePointZero(n)) n = "100%"; + var processPercent = isPercentage(n); + n = Math.min(max, Math.max(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if (Math.abs(n - max) < 0.000001) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return n % max / parseFloat(max); + } + + // Force a number between 0 and 1 + function clamp01(val) { + return Math.min(1, Math.max(0, val)); + } + + // Parse a base-16 hex value into a base-10 integer + function parseIntFromHex(val) { + return parseInt(val, 16); + } + + // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 + // + function isOnePointZero(n) { + return typeof n == "string" && n.indexOf(".") != -1 && parseFloat(n) === 1; + } + + // Check to see if string passed in is a percentage + function isPercentage(n) { + return typeof n === "string" && n.indexOf("%") != -1; + } + + // Force a hex value to have 2 characters + function pad2(c) { + return c.length == 1 ? "0" + c : "" + c; + } + + // Replace a decimal with it's percentage value + function convertToPercentage(n) { + if (n <= 1) { + n = n * 100 + "%"; + } + return n; + } + + // Converts a decimal to a hex value + function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); + } + // Converts a hex value to a decimal + function convertHexToDecimal(h) { + return parseIntFromHex(h) / 255; + } + var matchers = function () { + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + return { + CSS_UNIT: new RegExp(CSS_UNIT), + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; + }(); + + // `isValidCSSUnit` + // Take in a single string / number and check to see if it looks like a CSS unit + // (see `matchers` above for definition). + function isValidCSSUnit(color) { + return !!matchers.CSS_UNIT.exec(color); + } + + // `stringInputToObject` + // Permissive string parsing. Take in a number of formats, and output an object + // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}` + function stringInputToObject(color) { + color = color.replace(trimLeft, "").replace(trimRight, "").toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } else if (color == "transparent") { + return { + r: 0, + g: 0, + b: 0, + a: 0, + format: "name" + }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if (match = matchers.rgb.exec(color)) { + return { + r: match[1], + g: match[2], + b: match[3] + }; + } + if (match = matchers.rgba.exec(color)) { + return { + r: match[1], + g: match[2], + b: match[3], + a: match[4] + }; + } + if (match = matchers.hsl.exec(color)) { + return { + h: match[1], + s: match[2], + l: match[3] + }; + } + if (match = matchers.hsla.exec(color)) { + return { + h: match[1], + s: match[2], + l: match[3], + a: match[4] + }; + } + if (match = matchers.hsv.exec(color)) { + return { + h: match[1], + s: match[2], + v: match[3] + }; + } + if (match = matchers.hsva.exec(color)) { + return { + h: match[1], + s: match[2], + v: match[3], + a: match[4] + }; + } + if (match = matchers.hex8.exec(color)) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + a: convertHexToDecimal(match[4]), + format: named ? "name" : "hex8" + }; + } + if (match = matchers.hex6.exec(color)) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if (match = matchers.hex4.exec(color)) { + return { + r: parseIntFromHex(match[1] + "" + match[1]), + g: parseIntFromHex(match[2] + "" + match[2]), + b: parseIntFromHex(match[3] + "" + match[3]), + a: convertHexToDecimal(match[4] + "" + match[4]), + format: named ? "name" : "hex8" + }; + } + if (match = matchers.hex3.exec(color)) { + return { + r: parseIntFromHex(match[1] + "" + match[1]), + g: parseIntFromHex(match[2] + "" + match[2]), + b: parseIntFromHex(match[3] + "" + match[3]), + format: named ? "name" : "hex" + }; + } + return false; + } + function validateWCAG2Parms(parms) { + // return valid WCAG2 parms for isReadable. + // If input parms are invalid, return {"level":"AA", "size":"small"} + var level, size; + parms = parms || { + level: "AA", + size: "small" + }; + level = (parms.level || "AA").toUpperCase(); + size = (parms.size || "small").toLowerCase(); + if (level !== "AA" && level !== "AAA") { + level = "AA"; + } + if (size !== "small" && size !== "large") { + size = "small"; + } + return { + level: level, + size: size + }; + } + + return tinycolor; + +})); + +;// https://d3js.org v7.9.0 Copyright 2010-2023 Mike Bostock +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : +typeof define === 'function' && define.amd ? define(['exports'], factory) : +(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {})); +})(this, (function (exports) { 'use strict'; + +var version = "7.9.0"; + +function ascending$3(a, b) { + return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function descending$2(a, b) { + return a == null || b == null ? NaN + : b < a ? -1 + : b > a ? 1 + : b >= a ? 0 + : NaN; +} + +function bisector(f) { + let compare1, compare2, delta; + + // If an accessor is specified, promote it to a comparator. In this case we + // can test whether the search value is (self-) comparable. We can’t do this + // for a comparator (except for specific, known comparators) because we can’t + // tell if the comparator is symmetric, and an asymmetric comparator can’t be + // used to test whether a single value is comparable. + if (f.length !== 2) { + compare1 = ascending$3; + compare2 = (d, x) => ascending$3(f(d), x); + delta = (d, x) => f(d) - x; + } else { + compare1 = f === ascending$3 || f === descending$2 ? f : zero$1; + compare2 = f; + delta = f; + } + + function left(a, x, lo = 0, hi = a.length) { + if (lo < hi) { + if (compare1(x, x) !== 0) return hi; + do { + const mid = (lo + hi) >>> 1; + if (compare2(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } while (lo < hi); + } + return lo; + } + + function right(a, x, lo = 0, hi = a.length) { + if (lo < hi) { + if (compare1(x, x) !== 0) return hi; + do { + const mid = (lo + hi) >>> 1; + if (compare2(a[mid], x) <= 0) lo = mid + 1; + else hi = mid; + } while (lo < hi); + } + return lo; + } + + function center(a, x, lo = 0, hi = a.length) { + const i = left(a, x, lo, hi - 1); + return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i; + } + + return {left, center, right}; +} + +function zero$1() { + return 0; +} + +function number$3(x) { + return x === null ? NaN : +x; +} + +function* numbers(values, valueof) { + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + yield value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + yield value; + } + } + } +} + +const ascendingBisect = bisector(ascending$3); +const bisectRight = ascendingBisect.right; +const bisectLeft = ascendingBisect.left; +const bisectCenter = bisector(number$3).center; +var bisect = bisectRight; + +function blur(values, r) { + if (!((r = +r) >= 0)) throw new RangeError("invalid r"); + let length = values.length; + if (!((length = Math.floor(length)) >= 0)) throw new RangeError("invalid length"); + if (!length || !r) return values; + const blur = blurf(r); + const temp = values.slice(); + blur(values, temp, 0, length, 1); + blur(temp, values, 0, length, 1); + blur(values, temp, 0, length, 1); + return values; +} + +const blur2 = Blur2(blurf); + +const blurImage = Blur2(blurfImage); + +function Blur2(blur) { + return function(data, rx, ry = rx) { + if (!((rx = +rx) >= 0)) throw new RangeError("invalid rx"); + if (!((ry = +ry) >= 0)) throw new RangeError("invalid ry"); + let {data: values, width, height} = data; + if (!((width = Math.floor(width)) >= 0)) throw new RangeError("invalid width"); + if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError("invalid height"); + if (!width || !height || (!rx && !ry)) return data; + const blurx = rx && blur(rx); + const blury = ry && blur(ry); + const temp = values.slice(); + if (blurx && blury) { + blurh(blurx, temp, values, width, height); + blurh(blurx, values, temp, width, height); + blurh(blurx, temp, values, width, height); + blurv(blury, values, temp, width, height); + blurv(blury, temp, values, width, height); + blurv(blury, values, temp, width, height); + } else if (blurx) { + blurh(blurx, values, temp, width, height); + blurh(blurx, temp, values, width, height); + blurh(blurx, values, temp, width, height); + } else if (blury) { + blurv(blury, values, temp, width, height); + blurv(blury, temp, values, width, height); + blurv(blury, values, temp, width, height); + } + return data; + }; +} + +function blurh(blur, T, S, w, h) { + for (let y = 0, n = w * h; y < n;) { + blur(T, S, y, y += w, 1); + } +} + +function blurv(blur, T, S, w, h) { + for (let x = 0, n = w * h; x < w; ++x) { + blur(T, S, x, x + n, w); + } +} + +function blurfImage(radius) { + const blur = blurf(radius); + return (T, S, start, stop, step) => { + start <<= 2, stop <<= 2, step <<= 2; + blur(T, S, start + 0, stop + 0, step); + blur(T, S, start + 1, stop + 1, step); + blur(T, S, start + 2, stop + 2, step); + blur(T, S, start + 3, stop + 3, step); + }; +} + +// Given a target array T, a source array S, sets each value T[i] to the average +// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop, +// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between +// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an +// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted +// according to r - ⌊radius⌋. +function blurf(radius) { + const radius0 = Math.floor(radius); + if (radius0 === radius) return bluri(radius); + const t = radius - radius0; + const w = 2 * radius + 1; + return (T, S, start, stop, step) => { // stop must be aligned! + if (!((stop -= step) >= start)) return; // inclusive stop + let sum = radius0 * S[start]; + const s0 = step * radius0; + const s1 = s0 + step; + for (let i = start, j = start + s0; i < j; i += step) { + sum += S[Math.min(stop, i)]; + } + for (let i = start, j = stop; i <= j; i += step) { + sum += S[Math.min(stop, i + s0)]; + T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w; + sum -= S[Math.max(start, i - s0)]; + } + }; +} + +// Like blurf, but optimized for integer radius. +function bluri(radius) { + const w = 2 * radius + 1; + return (T, S, start, stop, step) => { // stop must be aligned! + if (!((stop -= step) >= start)) return; // inclusive stop + let sum = radius * S[start]; + const s = step * radius; + for (let i = start, j = start + s; i < j; i += step) { + sum += S[Math.min(stop, i)]; + } + for (let i = start, j = stop; i <= j; i += step) { + sum += S[Math.min(stop, i + s)]; + T[i] = sum / w; + sum -= S[Math.max(start, i - s)]; + } + }; +} + +function count$1(values, valueof) { + let count = 0; + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + ++count; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + ++count; + } + } + } + return count; +} + +function length$3(array) { + return array.length | 0; +} + +function empty$2(length) { + return !(length > 0); +} + +function arrayify(values) { + return typeof values !== "object" || "length" in values ? values : Array.from(values); +} + +function reducer(reduce) { + return values => reduce(...values); +} + +function cross$2(...values) { + const reduce = typeof values[values.length - 1] === "function" && reducer(values.pop()); + values = values.map(arrayify); + const lengths = values.map(length$3); + const j = values.length - 1; + const index = new Array(j + 1).fill(0); + const product = []; + if (j < 0 || lengths.some(empty$2)) return product; + while (true) { + product.push(index.map((j, i) => values[i][j])); + let i = j; + while (++index[i] === lengths[i]) { + if (i === 0) return reduce ? product.map(reduce) : product; + index[i--] = 0; + } + } +} + +function cumsum(values, valueof) { + var sum = 0, index = 0; + return Float64Array.from(values, valueof === undefined + ? v => (sum += +v || 0) + : v => (sum += +valueof(v, index++, values) || 0)); +} + +function variance(values, valueof) { + let count = 0; + let delta; + let mean = 0; + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + delta = value - mean; + mean += delta / ++count; + sum += delta * (value - mean); + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + delta = value - mean; + mean += delta / ++count; + sum += delta * (value - mean); + } + } + } + if (count > 1) return sum / (count - 1); +} + +function deviation(values, valueof) { + const v = variance(values, valueof); + return v ? Math.sqrt(v) : v; +} + +function extent$1(values, valueof) { + let min; + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + return [min, max]; +} + +// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423 +class Adder { + constructor() { + this._partials = new Float64Array(32); + this._n = 0; + } + add(x) { + const p = this._partials; + let i = 0; + for (let j = 0; j < this._n && j < 32; j++) { + const y = p[j], + hi = x + y, + lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x); + if (lo) p[i++] = lo; + x = hi; + } + p[i] = x; + this._n = i + 1; + return this; + } + valueOf() { + const p = this._partials; + let n = this._n, x, y, lo, hi = 0; + if (n > 0) { + hi = p[--n]; + while (n > 0) { + x = hi; + y = p[--n]; + hi = x + y; + lo = y - (hi - x); + if (lo) break; + } + if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) { + y = lo * 2; + x = hi + y; + if (y == x - hi) hi = x; + } + } + return hi; + } +} + +function fsum(values, valueof) { + const adder = new Adder(); + if (valueof === undefined) { + for (let value of values) { + if (value = +value) { + adder.add(value); + } + } + } else { + let index = -1; + for (let value of values) { + if (value = +valueof(value, ++index, values)) { + adder.add(value); + } + } + } + return +adder; +} + +function fcumsum(values, valueof) { + const adder = new Adder(); + let index = -1; + return Float64Array.from(values, valueof === undefined + ? v => adder.add(+v || 0) + : v => adder.add(+valueof(v, ++index, values) || 0) + ); +} + +class InternMap extends Map { + constructor(entries, key = keyof) { + super(); + Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}}); + if (entries != null) for (const [key, value] of entries) this.set(key, value); + } + get(key) { + return super.get(intern_get(this, key)); + } + has(key) { + return super.has(intern_get(this, key)); + } + set(key, value) { + return super.set(intern_set(this, key), value); + } + delete(key) { + return super.delete(intern_delete(this, key)); + } +} + +class InternSet extends Set { + constructor(values, key = keyof) { + super(); + Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}}); + if (values != null) for (const value of values) this.add(value); + } + has(value) { + return super.has(intern_get(this, value)); + } + add(value) { + return super.add(intern_set(this, value)); + } + delete(value) { + return super.delete(intern_delete(this, value)); + } +} + +function intern_get({_intern, _key}, value) { + const key = _key(value); + return _intern.has(key) ? _intern.get(key) : value; +} + +function intern_set({_intern, _key}, value) { + const key = _key(value); + if (_intern.has(key)) return _intern.get(key); + _intern.set(key, value); + return value; +} + +function intern_delete({_intern, _key}, value) { + const key = _key(value); + if (_intern.has(key)) { + value = _intern.get(key); + _intern.delete(key); + } + return value; +} + +function keyof(value) { + return value !== null && typeof value === "object" ? value.valueOf() : value; +} + +function identity$9(x) { + return x; +} + +function group(values, ...keys) { + return nest(values, identity$9, identity$9, keys); +} + +function groups(values, ...keys) { + return nest(values, Array.from, identity$9, keys); +} + +function flatten$1(groups, keys) { + for (let i = 1, n = keys.length; i < n; ++i) { + groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value])); + } + return groups; +} + +function flatGroup(values, ...keys) { + return flatten$1(groups(values, ...keys), keys); +} + +function flatRollup(values, reduce, ...keys) { + return flatten$1(rollups(values, reduce, ...keys), keys); +} + +function rollup(values, reduce, ...keys) { + return nest(values, identity$9, reduce, keys); +} + +function rollups(values, reduce, ...keys) { + return nest(values, Array.from, reduce, keys); +} + +function index$4(values, ...keys) { + return nest(values, identity$9, unique, keys); +} + +function indexes(values, ...keys) { + return nest(values, Array.from, unique, keys); +} + +function unique(values) { + if (values.length !== 1) throw new Error("duplicate key"); + return values[0]; +} + +function nest(values, map, reduce, keys) { + return (function regroup(values, i) { + if (i >= keys.length) return reduce(values); + const groups = new InternMap(); + const keyof = keys[i++]; + let index = -1; + for (const value of values) { + const key = keyof(value, ++index, values); + const group = groups.get(key); + if (group) group.push(value); + else groups.set(key, [value]); + } + for (const [key, values] of groups) { + groups.set(key, regroup(values, i)); + } + return map(groups); + })(values, 0); +} + +function permute(source, keys) { + return Array.from(keys, key => source[key]); +} + +function sort(values, ...F) { + if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); + values = Array.from(values); + let [f] = F; + if ((f && f.length !== 2) || F.length > 1) { + const index = Uint32Array.from(values, (d, i) => i); + if (F.length > 1) { + F = F.map(f => values.map(f)); + index.sort((i, j) => { + for (const f of F) { + const c = ascendingDefined(f[i], f[j]); + if (c) return c; + } + }); + } else { + f = values.map(f); + index.sort((i, j) => ascendingDefined(f[i], f[j])); + } + return permute(values, index); + } + return values.sort(compareDefined(f)); +} + +function compareDefined(compare = ascending$3) { + if (compare === ascending$3) return ascendingDefined; + if (typeof compare !== "function") throw new TypeError("compare is not a function"); + return (a, b) => { + const x = compare(a, b); + if (x || x === 0) return x; + return (compare(b, b) === 0) - (compare(a, a) === 0); + }; +} + +function ascendingDefined(a, b) { + return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0); +} + +function groupSort(values, reduce, key) { + return (reduce.length !== 2 + ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending$3(av, bv) || ascending$3(ak, bk))) + : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending$3(ak, bk)))) + .map(([key]) => key); +} + +var array$5 = Array.prototype; + +var slice$3 = array$5.slice; + +function constant$b(x) { + return () => x; +} + +const e10 = Math.sqrt(50), + e5 = Math.sqrt(10), + e2 = Math.sqrt(2); + +function tickSpec(start, stop, count) { + const step = (stop - start) / Math.max(0, count), + power = Math.floor(Math.log10(step)), + error = step / Math.pow(10, power), + factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1; + let i1, i2, inc; + if (power < 0) { + inc = Math.pow(10, -power) / factor; + i1 = Math.round(start * inc); + i2 = Math.round(stop * inc); + if (i1 / inc < start) ++i1; + if (i2 / inc > stop) --i2; + inc = -inc; + } else { + inc = Math.pow(10, power) * factor; + i1 = Math.round(start / inc); + i2 = Math.round(stop / inc); + if (i1 * inc < start) ++i1; + if (i2 * inc > stop) --i2; + } + if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2); + return [i1, i2, inc]; +} + +function ticks(start, stop, count) { + stop = +stop, start = +start, count = +count; + if (!(count > 0)) return []; + if (start === stop) return [start]; + const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count); + if (!(i2 >= i1)) return []; + const n = i2 - i1 + 1, ticks = new Array(n); + if (reverse) { + if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc; + else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc; + } else { + if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc; + else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc; + } + return ticks; +} + +function tickIncrement(start, stop, count) { + stop = +stop, start = +start, count = +count; + return tickSpec(start, stop, count)[2]; +} + +function tickStep(start, stop, count) { + stop = +stop, start = +start, count = +count; + const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count); + return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc); +} + +function nice$1(start, stop, count) { + let prestep; + while (true) { + const step = tickIncrement(start, stop, count); + if (step === prestep || step === 0 || !isFinite(step)) { + return [start, stop]; + } else if (step > 0) { + start = Math.floor(start / step) * step; + stop = Math.ceil(stop / step) * step; + } else if (step < 0) { + start = Math.ceil(start * step) / step; + stop = Math.floor(stop * step) / step; + } + prestep = step; + } +} + +function thresholdSturges(values) { + return Math.max(1, Math.ceil(Math.log(count$1(values)) / Math.LN2) + 1); +} + +function bin() { + var value = identity$9, + domain = extent$1, + threshold = thresholdSturges; + + function histogram(data) { + if (!Array.isArray(data)) data = Array.from(data); + + var i, + n = data.length, + x, + step, + values = new Array(n); + + for (i = 0; i < n; ++i) { + values[i] = value(data[i], i, data); + } + + var xz = domain(values), + x0 = xz[0], + x1 = xz[1], + tz = threshold(values, x0, x1); + + // Convert number of thresholds into uniform thresholds, and nice the + // default domain accordingly. + if (!Array.isArray(tz)) { + const max = x1, tn = +tz; + if (domain === extent$1) [x0, x1] = nice$1(x0, x1, tn); + tz = ticks(x0, x1, tn); + + // If the domain is aligned with the first tick (which it will by + // default), then we can use quantization rather than bisection to bin + // values, which is substantially faster. + if (tz[0] <= x0) step = tickIncrement(x0, x1, tn); + + // If the last threshold is coincident with the domain’s upper bound, the + // last bin will be zero-width. If the default domain is used, and this + // last threshold is coincident with the maximum input value, we can + // extend the niced upper bound by one tick to ensure uniform bin widths; + // otherwise, we simply remove the last threshold. Note that we don’t + // coerce values or the domain to numbers, and thus must be careful to + // compare order (>=) rather than strict equality (===)! + if (tz[tz.length - 1] >= x1) { + if (max >= x1 && domain === extent$1) { + const step = tickIncrement(x0, x1, tn); + if (isFinite(step)) { + if (step > 0) { + x1 = (Math.floor(x1 / step) + 1) * step; + } else if (step < 0) { + x1 = (Math.ceil(x1 * -step) + 1) / -step; + } + } + } else { + tz.pop(); + } + } + } + + // Remove any thresholds outside the domain. + // Be careful not to mutate an array owned by the user! + var m = tz.length, a = 0, b = m; + while (tz[a] <= x0) ++a; + while (tz[b - 1] > x1) --b; + if (a || b < m) tz = tz.slice(a, b), m = b - a; + + var bins = new Array(m + 1), + bin; + + // Initialize bins. + for (i = 0; i <= m; ++i) { + bin = bins[i] = []; + bin.x0 = i > 0 ? tz[i - 1] : x0; + bin.x1 = i < m ? tz[i] : x1; + } + + // Assign data to bins by value, ignoring any outside the domain. + if (isFinite(step)) { + if (step > 0) { + for (i = 0; i < n; ++i) { + if ((x = values[i]) != null && x0 <= x && x <= x1) { + bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]); + } + } + } else if (step < 0) { + for (i = 0; i < n; ++i) { + if ((x = values[i]) != null && x0 <= x && x <= x1) { + const j = Math.floor((x0 - x) * step); + bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding + } + } + } + } else { + for (i = 0; i < n; ++i) { + if ((x = values[i]) != null && x0 <= x && x <= x1) { + bins[bisect(tz, x, 0, m)].push(data[i]); + } + } + } + + return bins; + } + + histogram.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$b(_), histogram) : value; + }; + + histogram.domain = function(_) { + return arguments.length ? (domain = typeof _ === "function" ? _ : constant$b([_[0], _[1]]), histogram) : domain; + }; + + histogram.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : constant$b(Array.isArray(_) ? slice$3.call(_) : _), histogram) : threshold; + }; + + return histogram; +} + +function max$3(values, valueof) { + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } + return max; +} + +function maxIndex(values, valueof) { + let max; + let maxIndex = -1; + let index = -1; + if (valueof === undefined) { + for (const value of values) { + ++index; + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value, maxIndex = index; + } + } + } else { + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value, maxIndex = index; + } + } + } + return maxIndex; +} + +function min$2(values, valueof) { + let min; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } + return min; +} + +function minIndex(values, valueof) { + let min; + let minIndex = -1; + let index = -1; + if (valueof === undefined) { + for (const value of values) { + ++index; + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value, minIndex = index; + } + } + } else { + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value, minIndex = index; + } + } + } + return minIndex; +} + +// Based on https://github.com/mourner/quickselect +// ISC license, Copyright 2018 Vladimir Agafonkin. +function quickselect(array, k, left = 0, right = Infinity, compare) { + k = Math.floor(k); + left = Math.floor(Math.max(0, left)); + right = Math.floor(Math.min(array.length - 1, right)); + + if (!(left <= k && k <= right)) return array; + + compare = compare === undefined ? ascendingDefined : compareDefined(compare); + + while (right > left) { + if (right - left > 600) { + const n = right - left + 1; + const m = k - left + 1; + const z = Math.log(n); + const s = 0.5 * Math.exp(2 * z / 3); + const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); + const newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); + const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); + quickselect(array, k, newLeft, newRight, compare); + } + + const t = array[k]; + let i = left; + let j = right; + + swap$1(array, left, k); + if (compare(array[right], t) > 0) swap$1(array, left, right); + + while (i < j) { + swap$1(array, i, j), ++i, --j; + while (compare(array[i], t) < 0) ++i; + while (compare(array[j], t) > 0) --j; + } + + if (compare(array[left], t) === 0) swap$1(array, left, j); + else ++j, swap$1(array, j, right); + + if (j <= k) left = j + 1; + if (k <= j) right = j - 1; + } + + return array; +} + +function swap$1(array, i, j) { + const t = array[i]; + array[i] = array[j]; + array[j] = t; +} + +function greatest(values, compare = ascending$3) { + let max; + let defined = false; + if (compare.length === 1) { + let maxValue; + for (const element of values) { + const value = compare(element); + if (defined + ? ascending$3(value, maxValue) > 0 + : ascending$3(value, value) === 0) { + max = element; + maxValue = value; + defined = true; + } + } + } else { + for (const value of values) { + if (defined + ? compare(value, max) > 0 + : compare(value, value) === 0) { + max = value; + defined = true; + } + } + } + return max; +} + +function quantile$1(values, p, valueof) { + values = Float64Array.from(numbers(values, valueof)); + if (!(n = values.length) || isNaN(p = +p)) return; + if (p <= 0 || n < 2) return min$2(values); + if (p >= 1) return max$3(values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = max$3(quickselect(values, i0).subarray(0, i0 + 1)), + value1 = min$2(values.subarray(i0 + 1)); + return value0 + (value1 - value0) * (i - i0); +} + +function quantileSorted(values, p, valueof = number$3) { + if (!(n = values.length) || isNaN(p = +p)) return; + if (p <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); +} + +function quantileIndex(values, p, valueof = number$3) { + if (isNaN(p = +p)) return; + numbers = Float64Array.from(values, (_, i) => number$3(valueof(values[i], i, values))); + if (p <= 0) return minIndex(numbers); + if (p >= 1) return maxIndex(numbers); + var numbers, + index = Uint32Array.from(values, (_, i) => i), + j = numbers.length - 1, + i = Math.floor(j * p); + quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j])); + i = greatest(index.subarray(0, i + 1), (i) => numbers[i]); + return i >= 0 ? i : -1; +} + +function thresholdFreedmanDiaconis(values, min, max) { + const c = count$1(values), d = quantile$1(values, 0.75) - quantile$1(values, 0.25); + return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1; +} + +function thresholdScott(values, min, max) { + const c = count$1(values), d = deviation(values); + return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1; +} + +function mean(values, valueof) { + let count = 0; + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + ++count, sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + ++count, sum += value; + } + } + } + if (count) return sum / count; +} + +function median(values, valueof) { + return quantile$1(values, 0.5, valueof); +} + +function medianIndex(values, valueof) { + return quantileIndex(values, 0.5, valueof); +} + +function* flatten(arrays) { + for (const array of arrays) { + yield* array; + } +} + +function merge(arrays) { + return Array.from(flatten(arrays)); +} + +function mode(values, valueof) { + const counts = new InternMap(); + if (valueof === undefined) { + for (let value of values) { + if (value != null && value >= value) { + counts.set(value, (counts.get(value) || 0) + 1); + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && value >= value) { + counts.set(value, (counts.get(value) || 0) + 1); + } + } + } + let modeValue; + let modeCount = 0; + for (const [value, count] of counts) { + if (count > modeCount) { + modeCount = count; + modeValue = value; + } + } + return modeValue; +} + +function pairs(values, pairof = pair) { + const pairs = []; + let previous; + let first = false; + for (const value of values) { + if (first) pairs.push(pairof(previous, value)); + previous = value; + first = true; + } + return pairs; +} + +function pair(a, b) { + return [a, b]; +} + +function range$2(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +function rank(values, valueof = ascending$3) { + if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); + let V = Array.from(values); + const R = new Float64Array(V.length); + if (valueof.length !== 2) V = V.map(valueof), valueof = ascending$3; + const compareIndex = (i, j) => valueof(V[i], V[j]); + let k, r; + values = Uint32Array.from(V, (_, i) => i); + // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123 + values.sort(valueof === ascending$3 ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex)); + values.forEach((j, i) => { + const c = compareIndex(j, k === undefined ? j : k); + if (c >= 0) { + if (k === undefined || c > 0) k = j, r = i; + R[j] = r; + } else { + R[j] = NaN; + } + }); + return R; +} + +function least(values, compare = ascending$3) { + let min; + let defined = false; + if (compare.length === 1) { + let minValue; + for (const element of values) { + const value = compare(element); + if (defined + ? ascending$3(value, minValue) < 0 + : ascending$3(value, value) === 0) { + min = element; + minValue = value; + defined = true; + } + } + } else { + for (const value of values) { + if (defined + ? compare(value, min) < 0 + : compare(value, value) === 0) { + min = value; + defined = true; + } + } + } + return min; +} + +function leastIndex(values, compare = ascending$3) { + if (compare.length === 1) return minIndex(values, compare); + let minValue; + let min = -1; + let index = -1; + for (const value of values) { + ++index; + if (min < 0 + ? compare(value, value) === 0 + : compare(value, minValue) < 0) { + minValue = value; + min = index; + } + } + return min; +} + +function greatestIndex(values, compare = ascending$3) { + if (compare.length === 1) return maxIndex(values, compare); + let maxValue; + let max = -1; + let index = -1; + for (const value of values) { + ++index; + if (max < 0 + ? compare(value, value) === 0 + : compare(value, maxValue) > 0) { + maxValue = value; + max = index; + } + } + return max; +} + +function scan(values, compare) { + const index = leastIndex(values, compare); + return index < 0 ? undefined : index; +} + +var shuffle$1 = shuffler(Math.random); + +function shuffler(random) { + return function shuffle(array, i0 = 0, i1 = array.length) { + let m = i1 - (i0 = +i0); + while (m) { + const i = random() * m-- | 0, t = array[m + i0]; + array[m + i0] = array[i + i0]; + array[i + i0] = t; + } + return array; + }; +} + +function sum$2(values, valueof) { + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value = +value) { + sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if (value = +valueof(value, ++index, values)) { + sum += value; + } + } + } + return sum; +} + +function transpose(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = min$2(matrix, length$2), transpose = new Array(m); ++i < m;) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { + row[j] = matrix[j][i]; + } + } + return transpose; +} + +function length$2(d) { + return d.length; +} + +function zip() { + return transpose(arguments); +} + +function every(values, test) { + if (typeof test !== "function") throw new TypeError("test is not a function"); + let index = -1; + for (const value of values) { + if (!test(value, ++index, values)) { + return false; + } + } + return true; +} + +function some(values, test) { + if (typeof test !== "function") throw new TypeError("test is not a function"); + let index = -1; + for (const value of values) { + if (test(value, ++index, values)) { + return true; + } + } + return false; +} + +function filter$1(values, test) { + if (typeof test !== "function") throw new TypeError("test is not a function"); + const array = []; + let index = -1; + for (const value of values) { + if (test(value, ++index, values)) { + array.push(value); + } + } + return array; +} + +function map$1(values, mapper) { + if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); + if (typeof mapper !== "function") throw new TypeError("mapper is not a function"); + return Array.from(values, (value, index) => mapper(value, index, values)); +} + +function reduce(values, reducer, value) { + if (typeof reducer !== "function") throw new TypeError("reducer is not a function"); + const iterator = values[Symbol.iterator](); + let done, next, index = -1; + if (arguments.length < 3) { + ({done, value} = iterator.next()); + if (done) return; + ++index; + } + while (({done, value: next} = iterator.next()), !done) { + value = reducer(value, next, ++index, values); + } + return value; +} + +function reverse$1(values) { + if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable"); + return Array.from(values).reverse(); +} + +function difference(values, ...others) { + values = new InternSet(values); + for (const other of others) { + for (const value of other) { + values.delete(value); + } + } + return values; +} + +function disjoint(values, other) { + const iterator = other[Symbol.iterator](), set = new InternSet(); + for (const v of values) { + if (set.has(v)) return false; + let value, done; + while (({value, done} = iterator.next())) { + if (done) break; + if (Object.is(v, value)) return false; + set.add(value); + } + } + return true; +} + +function intersection(values, ...others) { + values = new InternSet(values); + others = others.map(set$2); + out: for (const value of values) { + for (const other of others) { + if (!other.has(value)) { + values.delete(value); + continue out; + } + } + } + return values; +} + +function set$2(values) { + return values instanceof InternSet ? values : new InternSet(values); +} + +function superset(values, other) { + const iterator = values[Symbol.iterator](), set = new Set(); + for (const o of other) { + const io = intern(o); + if (set.has(io)) continue; + let value, done; + while (({value, done} = iterator.next())) { + if (done) return false; + const ivalue = intern(value); + set.add(ivalue); + if (Object.is(io, ivalue)) break; + } + } + return true; +} + +function intern(value) { + return value !== null && typeof value === "object" ? value.valueOf() : value; +} + +function subset(values, other) { + return superset(other, values); +} + +function union(...others) { + const set = new InternSet(); + for (const other of others) { + for (const o of other) { + set.add(o); + } + } + return set; +} + +function identity$8(x) { + return x; +} + +var top = 1, + right = 2, + bottom = 3, + left = 4, + epsilon$6 = 1e-6; + +function translateX(x) { + return "translate(" + x + ",0)"; +} + +function translateY(y) { + return "translate(0," + y + ")"; +} + +function number$2(scale) { + return d => +scale(d); +} + +function center$1(scale, offset) { + offset = Math.max(0, scale.bandwidth() - offset * 2) / 2; + if (scale.round()) offset = Math.round(offset); + return d => +scale(d) + offset; +} + +function entering() { + return !this.__axis; +} + +function axis(orient, scale) { + var tickArguments = [], + tickValues = null, + tickFormat = null, + tickSizeInner = 6, + tickSizeOuter = 6, + tickPadding = 3, + offset = typeof window !== "undefined" && window.devicePixelRatio > 1 ? 0 : 0.5, + k = orient === top || orient === left ? -1 : 1, + x = orient === left || orient === right ? "x" : "y", + transform = orient === top || orient === bottom ? translateX : translateY; + + function axis(context) { + var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, + format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$8) : tickFormat, + spacing = Math.max(tickSizeInner, 0) + tickPadding, + range = scale.range(), + range0 = +range[0] + offset, + range1 = +range[range.length - 1] + offset, + position = (scale.bandwidth ? center$1 : number$2)(scale.copy(), offset), + selection = context.selection ? context.selection() : context, + path = selection.selectAll(".domain").data([null]), + tick = selection.selectAll(".tick").data(values, scale).order(), + tickExit = tick.exit(), + tickEnter = tick.enter().append("g").attr("class", "tick"), + line = tick.select("line"), + text = tick.select("text"); + + path = path.merge(path.enter().insert("path", ".tick") + .attr("class", "domain") + .attr("stroke", "currentColor")); + + tick = tick.merge(tickEnter); + + line = line.merge(tickEnter.append("line") + .attr("stroke", "currentColor") + .attr(x + "2", k * tickSizeInner)); + + text = text.merge(tickEnter.append("text") + .attr("fill", "currentColor") + .attr(x, k * spacing) + .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); + + if (context !== selection) { + path = path.transition(context); + tick = tick.transition(context); + line = line.transition(context); + text = text.transition(context); + + tickExit = tickExit.transition(context) + .attr("opacity", epsilon$6) + .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute("transform"); }); + + tickEnter + .attr("opacity", epsilon$6) + .attr("transform", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); }); + } + + tickExit.remove(); + + path + .attr("d", orient === left || orient === right + ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H" + offset + "V" + range1 + "H" + k * tickSizeOuter : "M" + offset + "," + range0 + "V" + range1) + : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V" + offset + "H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + "," + offset + "H" + range1)); + + tick + .attr("opacity", 1) + .attr("transform", function(d) { return transform(position(d) + offset); }); + + line + .attr(x + "2", k * tickSizeInner); + + text + .attr(x, k * spacing) + .text(format); + + selection.filter(entering) + .attr("fill", "none") + .attr("font-size", 10) + .attr("font-family", "sans-serif") + .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); + + selection + .each(function() { this.__axis = position; }); + } + + axis.scale = function(_) { + return arguments.length ? (scale = _, axis) : scale; + }; + + axis.ticks = function() { + return tickArguments = Array.from(arguments), axis; + }; + + axis.tickArguments = function(_) { + return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice(); + }; + + axis.tickValues = function(_) { + return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice(); + }; + + axis.tickFormat = function(_) { + return arguments.length ? (tickFormat = _, axis) : tickFormat; + }; + + axis.tickSize = function(_) { + return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; + }; + + axis.tickSizeInner = function(_) { + return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; + }; + + axis.tickSizeOuter = function(_) { + return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; + }; + + axis.tickPadding = function(_) { + return arguments.length ? (tickPadding = +_, axis) : tickPadding; + }; + + axis.offset = function(_) { + return arguments.length ? (offset = +_, axis) : offset; + }; + + return axis; +} + +function axisTop(scale) { + return axis(top, scale); +} + +function axisRight(scale) { + return axis(right, scale); +} + +function axisBottom(scale) { + return axis(bottom, scale); +} + +function axisLeft(scale) { + return axis(left, scale); +} + +var noop$3 = {value: () => {}}; + +function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t); + _[t] = []; + } + return new Dispatch(_); +} + +function Dispatch(_) { + this._ = _; +} + +function parseTypenames$1(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); +} + +Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames$1(typename + "", _), + t, + i = -1, + n = T.length; + + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) return t; + return; + } + + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set$1(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set$1(_[t], typename.name, null); + } + + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } +}; + +function get$1(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } +} + +function set$1(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop$3, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; +} + +var xhtml = "http://www.w3.org/1999/xhtml"; + +var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" +}; + +function namespace(name) { + var prefix = name += "", i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins +} + +function creatorInherit(name) { + return function() { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml + ? document.createElement(name) + : document.createElementNS(uri, name); + }; +} + +function creatorFixed(fullname) { + return function() { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; +} + +function creator(name) { + var fullname = namespace(name); + return (fullname.local + ? creatorFixed + : creatorInherit)(fullname); +} + +function none$2() {} + +function selector(selector) { + return selector == null ? none$2 : function() { + return this.querySelector(selector); + }; +} + +function selection_select(select) { + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new Selection$1(subgroups, this._parents); +} + +// Given something array like (or null), returns something that is strictly an +// array. This is used to ensure that array-like objects passed to d3.selectAll +// or selection.selectAll are converted into proper arrays when creating a +// selection; we don’t ever want to create a selection backed by a live +// HTMLCollection or NodeList. However, note that selection.selectAll will use a +// static NodeList as a group, since it safely derived from querySelectorAll. +function array$4(x) { + return x == null ? [] : Array.isArray(x) ? x : Array.from(x); +} + +function empty$1() { + return []; +} + +function selectorAll(selector) { + return selector == null ? empty$1 : function() { + return this.querySelectorAll(selector); + }; +} + +function arrayAll(select) { + return function() { + return array$4(select.apply(this, arguments)); + }; +} + +function selection_selectAll(select) { + if (typeof select === "function") select = arrayAll(select); + else select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new Selection$1(subgroups, parents); +} + +function matcher(selector) { + return function() { + return this.matches(selector); + }; +} + +function childMatcher(selector) { + return function(node) { + return node.matches(selector); + }; +} + +var find$1 = Array.prototype.find; + +function childFind(match) { + return function() { + return find$1.call(this.children, match); + }; +} + +function childFirst() { + return this.firstElementChild; +} + +function selection_selectChild(match) { + return this.select(match == null ? childFirst + : childFind(typeof match === "function" ? match : childMatcher(match))); +} + +var filter = Array.prototype.filter; + +function children() { + return Array.from(this.children); +} + +function childrenFilter(match) { + return function() { + return filter.call(this.children, match); + }; +} + +function selection_selectChildren(match) { + return this.selectAll(match == null ? children + : childrenFilter(typeof match === "function" ? match : childMatcher(match))); +} + +function selection_filter(match) { + if (typeof match !== "function") match = matcher(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Selection$1(subgroups, this._parents); +} + +function sparse(update) { + return new Array(update.length); +} + +function selection_enter() { + return new Selection$1(this._enter || this._groups.map(sparse), this._parents); +} + +function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; +} + +EnterNode.prototype = { + constructor: EnterNode, + appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, + insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, + querySelector: function(selector) { return this._parent.querySelector(selector); }, + querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } +}; + +function constant$a(x) { + return function() { + return x; + }; +} + +function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; + + // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Put any non-null nodes that don’t fit into exit. + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } +} + +function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = new Map, + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; + + // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + ""; + if (nodeByKeyValue.has(keyValue)) { + exit[i] = node; + } else { + nodeByKeyValue.set(keyValue, node); + } + } + } + + // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + for (i = 0; i < dataLength; ++i) { + keyValue = key.call(parent, data[i], i, data) + ""; + if (node = nodeByKeyValue.get(keyValue)) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue.delete(keyValue); + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Add any remaining nodes that were not bound to data to exit. + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) { + exit[i] = node; + } + } +} + +function datum(node) { + return node.__data__; +} + +function selection_data(value, key) { + if (!arguments.length) return Array.from(this, datum); + + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + + if (typeof value !== "function") value = constant$a(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = arraylike(value.call(parent, parent && parent.__data__, j, parents)), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); + + // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + previous._next = next || null; + } + } + } + + update = new Selection$1(update, parents); + update._enter = enter; + update._exit = exit; + return update; +} + +// Given some data, this returns an array-like view of it: an object that +// exposes a length property and allows numeric indexing. Note that unlike +// selectAll, this isn’t worried about “live” collections because the resulting +// array will only be used briefly while data is being bound. (It is possible to +// cause the data to change while iterating by using a key function, but please +// don’t; we’d rather avoid a gratuitous copy.) +function arraylike(data) { + return typeof data === "object" && "length" in data + ? data // Array, TypedArray, NodeList, array-like + : Array.from(data); // Map, Set, iterable, string, or anything else +} + +function selection_exit() { + return new Selection$1(this._exit || this._groups.map(sparse), this._parents); +} + +function selection_join(onenter, onupdate, onexit) { + var enter = this.enter(), update = this, exit = this.exit(); + if (typeof onenter === "function") { + enter = onenter(enter); + if (enter) enter = enter.selection(); + } else { + enter = enter.append(onenter + ""); + } + if (onupdate != null) { + update = onupdate(update); + if (update) update = update.selection(); + } + if (onexit == null) exit.remove(); else onexit(exit); + return enter && update ? enter.merge(update).order() : update; +} + +function selection_merge(context) { + var selection = context.selection ? context.selection() : context; + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Selection$1(merges, this._parents); +} + +function selection_order() { + + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; +} + +function selection_sort(compare) { + if (!compare) compare = ascending$2; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + sortgroup.sort(compareNode); + } + + return new Selection$1(sortgroups, this._parents).order(); +} + +function ascending$2(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function selection_call() { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; +} + +function selection_nodes() { + return Array.from(this); +} + +function selection_node() { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; +} + +function selection_size() { + let size = 0; + for (const node of this) ++size; // eslint-disable-line no-unused-vars + return size; +} + +function selection_empty() { + return !this.node(); +} + +function selection_each(callback) { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; +} + +function attrRemove$1(name) { + return function() { + this.removeAttribute(name); + }; +} + +function attrRemoveNS$1(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant$1(name, value) { + return function() { + this.setAttribute(name, value); + }; +} + +function attrConstantNS$1(fullname, value) { + return function() { + this.setAttributeNS(fullname.space, fullname.local, value); + }; +} + +function attrFunction$1(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name); + else this.setAttribute(name, v); + }; +} + +function attrFunctionNS$1(fullname, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local); + else this.setAttributeNS(fullname.space, fullname.local, v); + }; +} + +function selection_attr(name, value) { + var fullname = namespace(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local + ? node.getAttributeNS(fullname.space, fullname.local) + : node.getAttribute(fullname); + } + + return this.each((value == null + ? (fullname.local ? attrRemoveNS$1 : attrRemove$1) : (typeof value === "function" + ? (fullname.local ? attrFunctionNS$1 : attrFunction$1) + : (fullname.local ? attrConstantNS$1 : attrConstant$1)))(fullname, value)); +} + +function defaultView(node) { + return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView; // node is a Document +} + +function styleRemove$1(name) { + return function() { + this.style.removeProperty(name); + }; +} + +function styleConstant$1(name, value, priority) { + return function() { + this.style.setProperty(name, value, priority); + }; +} + +function styleFunction$1(name, value, priority) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name); + else this.style.setProperty(name, v, priority); + }; +} + +function selection_style(name, value, priority) { + return arguments.length > 1 + ? this.each((value == null + ? styleRemove$1 : typeof value === "function" + ? styleFunction$1 + : styleConstant$1)(name, value, priority == null ? "" : priority)) + : styleValue(this.node(), name); +} + +function styleValue(node, name) { + return node.style.getPropertyValue(name) + || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); +} + +function propertyRemove(name) { + return function() { + delete this[name]; + }; +} + +function propertyConstant(name, value) { + return function() { + this[name] = value; + }; +} + +function propertyFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) delete this[name]; + else this[name] = v; + }; +} + +function selection_property(name, value) { + return arguments.length > 1 + ? this.each((value == null + ? propertyRemove : typeof value === "function" + ? propertyFunction + : propertyConstant)(name, value)) + : this.node()[name]; +} + +function classArray(string) { + return string.trim().split(/^|\s+/); +} + +function classList(node) { + return node.classList || new ClassList(node); +} + +function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); +} + +ClassList.prototype = { + add: function(name) { + var i = this._names.indexOf(name); + if (i < 0) { + this._names.push(name); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function(name) { + var i = this._names.indexOf(name); + if (i >= 0) { + this._names.splice(i, 1); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function(name) { + return this._names.indexOf(name) >= 0; + } +}; + +function classedAdd(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.add(names[i]); +} + +function classedRemove(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.remove(names[i]); +} + +function classedTrue(names) { + return function() { + classedAdd(this, names); + }; +} + +function classedFalse(names) { + return function() { + classedRemove(this, names); + }; +} + +function classedFunction(names, value) { + return function() { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; +} + +function selection_classed(name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), i = -1, n = names.length; + while (++i < n) if (!list.contains(names[i])) return false; + return true; + } + + return this.each((typeof value === "function" + ? classedFunction : value + ? classedTrue + : classedFalse)(names, value)); +} + +function textRemove() { + this.textContent = ""; +} + +function textConstant$1(value) { + return function() { + this.textContent = value; + }; +} + +function textFunction$1(value) { + return function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; +} + +function selection_text(value) { + return arguments.length + ? this.each(value == null + ? textRemove : (typeof value === "function" + ? textFunction$1 + : textConstant$1)(value)) + : this.node().textContent; +} + +function htmlRemove() { + this.innerHTML = ""; +} + +function htmlConstant(value) { + return function() { + this.innerHTML = value; + }; +} + +function htmlFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; +} + +function selection_html(value) { + return arguments.length + ? this.each(value == null + ? htmlRemove : (typeof value === "function" + ? htmlFunction + : htmlConstant)(value)) + : this.node().innerHTML; +} + +function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); +} + +function selection_raise() { + return this.each(raise); +} + +function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); +} + +function selection_lower() { + return this.each(lower); +} + +function selection_append(name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function() { + return this.appendChild(create.apply(this, arguments)); + }); +} + +function constantNull() { + return null; +} + +function selection_insert(name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function() { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); +} + +function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); +} + +function selection_remove() { + return this.each(remove); +} + +function selection_cloneShallow() { + var clone = this.cloneNode(false), parent = this.parentNode; + return parent ? parent.insertBefore(clone, this.nextSibling) : clone; +} + +function selection_cloneDeep() { + var clone = this.cloneNode(true), parent = this.parentNode; + return parent ? parent.insertBefore(clone, this.nextSibling) : clone; +} + +function selection_clone(deep) { + return this.select(deep ? selection_cloneDeep : selection_cloneShallow); +} + +function selection_datum(value) { + return arguments.length + ? this.property("__data__", value) + : this.node().__data__; +} + +function contextListener(listener) { + return function(event) { + listener.call(this, event, this.__data__); + }; +} + +function parseTypenames(typenames) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return {type: t, name: name}; + }); +} + +function onRemove(typename) { + return function() { + var on = this.__on; + if (!on) return; + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.options); + } else { + on[++i] = o; + } + } + if (++i) on.length = i; + else delete this.__on; + }; +} + +function onAdd(typename, value, options) { + return function() { + var on = this.__on, o, listener = contextListener(value); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.options); + this.addEventListener(o.type, o.listener = listener, o.options = options); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, options); + o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options}; + if (!on) this.__on = [o]; + else on.push(o); + }; +} + +function selection_on(typename, value, options) { + var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; + + if (arguments.length < 2) { + var on = this.node().__on; + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options)); + return this; +} + +function dispatchEvent(node, type, params) { + var window = defaultView(node), + event = window.CustomEvent; + + if (typeof event === "function") { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; + else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); +} + +function dispatchConstant(type, params) { + return function() { + return dispatchEvent(this, type, params); + }; +} + +function dispatchFunction(type, params) { + return function() { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; +} + +function selection_dispatch(type, params) { + return this.each((typeof params === "function" + ? dispatchFunction + : dispatchConstant)(type, params)); +} + +function* selection_iterator() { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) yield node; + } + } +} + +var root$1 = [null]; + +function Selection$1(groups, parents) { + this._groups = groups; + this._parents = parents; +} + +function selection() { + return new Selection$1([[document.documentElement]], root$1); +} + +function selection_selection() { + return this; +} + +Selection$1.prototype = selection.prototype = { + constructor: Selection$1, + select: selection_select, + selectAll: selection_selectAll, + selectChild: selection_selectChild, + selectChildren: selection_selectChildren, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + join: selection_join, + merge: selection_merge, + selection: selection_selection, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + clone: selection_clone, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch, + [Symbol.iterator]: selection_iterator +}; + +function select(selector) { + return typeof selector === "string" + ? new Selection$1([[document.querySelector(selector)]], [document.documentElement]) + : new Selection$1([[selector]], root$1); +} + +function create$1(name) { + return select(creator(name).call(document.documentElement)); +} + +var nextId = 0; + +function local$1() { + return new Local; +} + +function Local() { + this._ = "@" + (++nextId).toString(36); +} + +Local.prototype = local$1.prototype = { + constructor: Local, + get: function(node) { + var id = this._; + while (!(id in node)) if (!(node = node.parentNode)) return; + return node[id]; + }, + set: function(node, value) { + return node[this._] = value; + }, + remove: function(node) { + return this._ in node && delete node[this._]; + }, + toString: function() { + return this._; + } +}; + +function sourceEvent(event) { + let sourceEvent; + while (sourceEvent = event.sourceEvent) event = sourceEvent; + return event; +} + +function pointer(event, node) { + event = sourceEvent(event); + if (node === undefined) node = event.currentTarget; + if (node) { + var svg = node.ownerSVGElement || node; + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + point.x = event.clientX, point.y = event.clientY; + point = point.matrixTransform(node.getScreenCTM().inverse()); + return [point.x, point.y]; + } + if (node.getBoundingClientRect) { + var rect = node.getBoundingClientRect(); + return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; + } + } + return [event.pageX, event.pageY]; +} + +function pointers(events, node) { + if (events.target) { // i.e., instanceof Event, not TouchList or iterable + events = sourceEvent(events); + if (node === undefined) node = events.currentTarget; + events = events.touches || [events]; + } + return Array.from(events, event => pointer(event, node)); +} + +function selectAll(selector) { + return typeof selector === "string" + ? new Selection$1([document.querySelectorAll(selector)], [document.documentElement]) + : new Selection$1([array$4(selector)], root$1); +} + +// These are typically used in conjunction with noevent to ensure that we can +// preventDefault on the event. +const nonpassive = {passive: false}; +const nonpassivecapture = {capture: true, passive: false}; + +function nopropagation$2(event) { + event.stopImmediatePropagation(); +} + +function noevent$2(event) { + event.preventDefault(); + event.stopImmediatePropagation(); +} + +function dragDisable(view) { + var root = view.document.documentElement, + selection = select(view).on("dragstart.drag", noevent$2, nonpassivecapture); + if ("onselectstart" in root) { + selection.on("selectstart.drag", noevent$2, nonpassivecapture); + } else { + root.__noselect = root.style.MozUserSelect; + root.style.MozUserSelect = "none"; + } +} + +function yesdrag(view, noclick) { + var root = view.document.documentElement, + selection = select(view).on("dragstart.drag", null); + if (noclick) { + selection.on("click.drag", noevent$2, nonpassivecapture); + setTimeout(function() { selection.on("click.drag", null); }, 0); + } + if ("onselectstart" in root) { + selection.on("selectstart.drag", null); + } else { + root.style.MozUserSelect = root.__noselect; + delete root.__noselect; + } +} + +var constant$9 = x => () => x; + +function DragEvent(type, { + sourceEvent, + subject, + target, + identifier, + active, + x, y, dx, dy, + dispatch +}) { + Object.defineProperties(this, { + type: {value: type, enumerable: true, configurable: true}, + sourceEvent: {value: sourceEvent, enumerable: true, configurable: true}, + subject: {value: subject, enumerable: true, configurable: true}, + target: {value: target, enumerable: true, configurable: true}, + identifier: {value: identifier, enumerable: true, configurable: true}, + active: {value: active, enumerable: true, configurable: true}, + x: {value: x, enumerable: true, configurable: true}, + y: {value: y, enumerable: true, configurable: true}, + dx: {value: dx, enumerable: true, configurable: true}, + dy: {value: dy, enumerable: true, configurable: true}, + _: {value: dispatch} + }); +} + +DragEvent.prototype.on = function() { + var value = this._.on.apply(this._, arguments); + return value === this._ ? this : value; +}; + +// Ignore right-click, since that should open the context menu. +function defaultFilter$2(event) { + return !event.ctrlKey && !event.button; +} + +function defaultContainer() { + return this.parentNode; +} + +function defaultSubject(event, d) { + return d == null ? {x: event.x, y: event.y} : d; +} + +function defaultTouchable$2() { + return navigator.maxTouchPoints || ("ontouchstart" in this); +} + +function drag() { + var filter = defaultFilter$2, + container = defaultContainer, + subject = defaultSubject, + touchable = defaultTouchable$2, + gestures = {}, + listeners = dispatch("start", "drag", "end"), + active = 0, + mousedownx, + mousedowny, + mousemoving, + touchending, + clickDistance2 = 0; + + function drag(selection) { + selection + .on("mousedown.drag", mousedowned) + .filter(touchable) + .on("touchstart.drag", touchstarted) + .on("touchmove.drag", touchmoved, nonpassive) + .on("touchend.drag touchcancel.drag", touchended) + .style("touch-action", "none") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + function mousedowned(event, d) { + if (touchending || !filter.call(this, event, d)) return; + var gesture = beforestart(this, container.call(this, event, d), event, d, "mouse"); + if (!gesture) return; + select(event.view) + .on("mousemove.drag", mousemoved, nonpassivecapture) + .on("mouseup.drag", mouseupped, nonpassivecapture); + dragDisable(event.view); + nopropagation$2(event); + mousemoving = false; + mousedownx = event.clientX; + mousedowny = event.clientY; + gesture("start", event); + } + + function mousemoved(event) { + noevent$2(event); + if (!mousemoving) { + var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny; + mousemoving = dx * dx + dy * dy > clickDistance2; + } + gestures.mouse("drag", event); + } + + function mouseupped(event) { + select(event.view).on("mousemove.drag mouseup.drag", null); + yesdrag(event.view, mousemoving); + noevent$2(event); + gestures.mouse("end", event); + } + + function touchstarted(event, d) { + if (!filter.call(this, event, d)) return; + var touches = event.changedTouches, + c = container.call(this, event, d), + n = touches.length, i, gesture; + + for (i = 0; i < n; ++i) { + if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) { + nopropagation$2(event); + gesture("start", event, touches[i]); + } + } + } + + function touchmoved(event) { + var touches = event.changedTouches, + n = touches.length, i, gesture; + + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches[i].identifier]) { + noevent$2(event); + gesture("drag", event, touches[i]); + } + } + } + + function touchended(event) { + var touches = event.changedTouches, + n = touches.length, i, gesture; + + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + for (i = 0; i < n; ++i) { + if (gesture = gestures[touches[i].identifier]) { + nopropagation$2(event); + gesture("end", event, touches[i]); + } + } + } + + function beforestart(that, container, event, d, identifier, touch) { + var dispatch = listeners.copy(), + p = pointer(touch || event, container), dx, dy, + s; + + if ((s = subject.call(that, new DragEvent("beforestart", { + sourceEvent: event, + target: drag, + identifier, + active, + x: p[0], + y: p[1], + dx: 0, + dy: 0, + dispatch + }), d)) == null) return; + + dx = s.x - p[0] || 0; + dy = s.y - p[1] || 0; + + return function gesture(type, event, touch) { + var p0 = p, n; + switch (type) { + case "start": gestures[identifier] = gesture, n = active++; break; + case "end": delete gestures[identifier], --active; // falls through + case "drag": p = pointer(touch || event, container), n = active; break; + } + dispatch.call( + type, + that, + new DragEvent(type, { + sourceEvent: event, + subject: s, + target: drag, + identifier, + active: n, + x: p[0] + dx, + y: p[1] + dy, + dx: p[0] - p0[0], + dy: p[1] - p0[1], + dispatch + }), + d + ); + }; + } + + drag.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$9(!!_), drag) : filter; + }; + + drag.container = function(_) { + return arguments.length ? (container = typeof _ === "function" ? _ : constant$9(_), drag) : container; + }; + + drag.subject = function(_) { + return arguments.length ? (subject = typeof _ === "function" ? _ : constant$9(_), drag) : subject; + }; + + drag.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$9(!!_), drag) : touchable; + }; + + drag.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? drag : value; + }; + + drag.clickDistance = function(_) { + return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); + }; + + return drag; +} + +function define(constructor, factory, prototype) { + constructor.prototype = factory.prototype = prototype; + prototype.constructor = constructor; +} + +function extend(parent, definition) { + var prototype = Object.create(parent.prototype); + for (var key in definition) prototype[key] = definition[key]; + return prototype; +} + +function Color() {} + +var darker = 0.7; +var brighter = 1 / darker; + +var reI = "\\s*([+-]?\\d+)\\s*", + reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*", + reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*", + reHex = /^#([0-9a-f]{3,8})$/, + reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`), + reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`), + reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`), + reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`), + reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`), + reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`); + +var named = { + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkgrey: 0xa9a9a9, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + grey: 0x808080, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 +}; + +define(Color, color, { + copy(channels) { + return Object.assign(new this.constructor, this, channels); + }, + displayable() { + return this.rgb().displayable(); + }, + hex: color_formatHex, // Deprecated! Use color.formatHex. + formatHex: color_formatHex, + formatHex8: color_formatHex8, + formatHsl: color_formatHsl, + formatRgb: color_formatRgb, + toString: color_formatRgb +}); + +function color_formatHex() { + return this.rgb().formatHex(); +} + +function color_formatHex8() { + return this.rgb().formatHex8(); +} + +function color_formatHsl() { + return hslConvert(this).formatHsl(); +} + +function color_formatRgb() { + return this.rgb().formatRgb(); +} + +function color(format) { + var m, l; + format = (format + "").trim().toLowerCase(); + return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000 + : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00 + : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000 + : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000 + : null) // invalid hex + : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) + : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) + : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) + : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) + : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) + : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) + : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins + : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) + : null; +} + +function rgbn(n) { + return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); +} + +function rgba(r, g, b, a) { + if (a <= 0) r = g = b = NaN; + return new Rgb(r, g, b, a); +} + +function rgbConvert(o) { + if (!(o instanceof Color)) o = color(o); + if (!o) return new Rgb; + o = o.rgb(); + return new Rgb(o.r, o.g, o.b, o.opacity); +} + +function rgb(r, g, b, opacity) { + return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); +} + +function Rgb(r, g, b, opacity) { + this.r = +r; + this.g = +g; + this.b = +b; + this.opacity = +opacity; +} + +define(Rgb, rgb, extend(Color, { + brighter(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + darker(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + rgb() { + return this; + }, + clamp() { + return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity)); + }, + displayable() { + return (-0.5 <= this.r && this.r < 255.5) + && (-0.5 <= this.g && this.g < 255.5) + && (-0.5 <= this.b && this.b < 255.5) + && (0 <= this.opacity && this.opacity <= 1); + }, + hex: rgb_formatHex, // Deprecated! Use color.formatHex. + formatHex: rgb_formatHex, + formatHex8: rgb_formatHex8, + formatRgb: rgb_formatRgb, + toString: rgb_formatRgb +})); + +function rgb_formatHex() { + return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`; +} + +function rgb_formatHex8() { + return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`; +} + +function rgb_formatRgb() { + const a = clampa(this.opacity); + return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`; +} + +function clampa(opacity) { + return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity)); +} + +function clampi(value) { + return Math.max(0, Math.min(255, Math.round(value) || 0)); +} + +function hex(value) { + value = clampi(value); + return (value < 16 ? "0" : "") + value.toString(16); +} + +function hsla(h, s, l, a) { + if (a <= 0) h = s = l = NaN; + else if (l <= 0 || l >= 1) h = s = NaN; + else if (s <= 0) h = NaN; + return new Hsl(h, s, l, a); +} + +function hslConvert(o) { + if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Color)) o = color(o); + if (!o) return new Hsl; + if (o instanceof Hsl) return o; + o = o.rgb(); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + h = NaN, + s = max - min, + l = (max + min) / 2; + if (s) { + if (r === max) h = (g - b) / s + (g < b) * 6; + else if (g === max) h = (b - r) / s + 2; + else h = (r - g) / s + 4; + s /= l < 0.5 ? max + min : 2 - max - min; + h *= 60; + } else { + s = l > 0 && l < 1 ? 0 : h; + } + return new Hsl(h, s, l, o.opacity); +} + +function hsl$2(h, s, l, opacity) { + return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); +} + +function Hsl(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Hsl, hsl$2, extend(Color, { + brighter(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + darker(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + rgb() { + var h = this.h % 360 + (this.h < 0) * 360, + s = isNaN(h) || isNaN(this.s) ? 0 : this.s, + l = this.l, + m2 = l + (l < 0.5 ? l : 1 - l) * s, + m1 = 2 * l - m2; + return new Rgb( + hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), + hsl2rgb(h, m1, m2), + hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), + this.opacity + ); + }, + clamp() { + return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity)); + }, + displayable() { + return (0 <= this.s && this.s <= 1 || isNaN(this.s)) + && (0 <= this.l && this.l <= 1) + && (0 <= this.opacity && this.opacity <= 1); + }, + formatHsl() { + const a = clampa(this.opacity); + return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`; + } +})); + +function clamph(value) { + value = (value || 0) % 360; + return value < 0 ? value + 360 : value; +} + +function clampt(value) { + return Math.max(0, Math.min(1, value || 0)); +} + +/* From FvD 13.37, CSS Color Module Level 3 */ +function hsl2rgb(h, m1, m2) { + return (h < 60 ? m1 + (m2 - m1) * h / 60 + : h < 180 ? m2 + : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 + : m1) * 255; +} + +const radians$1 = Math.PI / 180; +const degrees$2 = 180 / Math.PI; + +// https://observablehq.com/@mbostock/lab-and-rgb +const K = 18, + Xn = 0.96422, + Yn = 1, + Zn = 0.82521, + t0$1 = 4 / 29, + t1$1 = 6 / 29, + t2 = 3 * t1$1 * t1$1, + t3 = t1$1 * t1$1 * t1$1; + +function labConvert(o) { + if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); + if (o instanceof Hcl) return hcl2lab(o); + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = rgb2lrgb(o.r), + g = rgb2lrgb(o.g), + b = rgb2lrgb(o.b), + y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; + if (r === g && g === b) x = z = y; else { + x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); + z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); + } + return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); +} + +function gray(l, opacity) { + return new Lab(l, 0, 0, opacity == null ? 1 : opacity); +} + +function lab$1(l, a, b, opacity) { + return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); +} + +function Lab(l, a, b, opacity) { + this.l = +l; + this.a = +a; + this.b = +b; + this.opacity = +opacity; +} + +define(Lab, lab$1, extend(Color, { + brighter(k) { + return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + darker(k) { + return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + rgb() { + var y = (this.l + 16) / 116, + x = isNaN(this.a) ? y : y + this.a / 500, + z = isNaN(this.b) ? y : y - this.b / 200; + x = Xn * lab2xyz(x); + y = Yn * lab2xyz(y); + z = Zn * lab2xyz(z); + return new Rgb( + lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), + lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), + lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), + this.opacity + ); + } +})); + +function xyz2lab(t) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0$1; +} + +function lab2xyz(t) { + return t > t1$1 ? t * t * t : t2 * (t - t0$1); +} + +function lrgb2rgb(x) { + return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); +} + +function rgb2lrgb(x) { + return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); +} + +function hclConvert(o) { + if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); + if (!(o instanceof Lab)) o = labConvert(o); + if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); + var h = Math.atan2(o.b, o.a) * degrees$2; + return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); +} + +function lch(l, c, h, opacity) { + return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function hcl$2(h, c, l, opacity) { + return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function Hcl(h, c, l, opacity) { + this.h = +h; + this.c = +c; + this.l = +l; + this.opacity = +opacity; +} + +function hcl2lab(o) { + if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); + var h = o.h * radians$1; + return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); +} + +define(Hcl, hcl$2, extend(Color, { + brighter(k) { + return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); + }, + darker(k) { + return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); + }, + rgb() { + return hcl2lab(this).rgb(); + } +})); + +var A = -0.14861, + B$1 = +1.78277, + C = -0.29227, + D$1 = -0.90649, + E = +1.97294, + ED = E * D$1, + EB = E * B$1, + BC_DA = B$1 * C - D$1 * A; + +function cubehelixConvert(o) { + if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), + bl = b - l, + k = (E * (g - l) - C * bl) / D$1, + s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 + h = s ? Math.atan2(k, bl) * degrees$2 - 120 : NaN; + return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); +} + +function cubehelix$3(h, s, l, opacity) { + return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); +} + +function Cubehelix(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Cubehelix, cubehelix$3, extend(Color, { + brighter(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + darker(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + rgb() { + var h = isNaN(this.h) ? 0 : (this.h + 120) * radians$1, + l = +this.l, + a = isNaN(this.s) ? 0 : this.s * l * (1 - l), + cosh = Math.cos(h), + sinh = Math.sin(h); + return new Rgb( + 255 * (l + a * (A * cosh + B$1 * sinh)), + 255 * (l + a * (C * cosh + D$1 * sinh)), + 255 * (l + a * (E * cosh)), + this.opacity + ); + } +})); + +function basis$1(t1, v0, v1, v2, v3) { + var t2 = t1 * t1, t3 = t2 * t1; + return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + + (4 - 6 * t2 + 3 * t3) * v1 + + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + + t3 * v3) / 6; +} + +function basis$2(values) { + var n = values.length - 1; + return function(t) { + var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), + v1 = values[i], + v2 = values[i + 1], + v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, + v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; + return basis$1((t - i / n) * n, v0, v1, v2, v3); + }; +} + +function basisClosed$1(values) { + var n = values.length; + return function(t) { + var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), + v0 = values[(i + n - 1) % n], + v1 = values[i % n], + v2 = values[(i + 1) % n], + v3 = values[(i + 2) % n]; + return basis$1((t - i / n) * n, v0, v1, v2, v3); + }; +} + +var constant$8 = x => () => x; + +function linear$2(a, d) { + return function(t) { + return a + t * d; + }; +} + +function exponential$1(a, b, y) { + return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { + return Math.pow(a + t * b, y); + }; +} + +function hue$1(a, b) { + var d = b - a; + return d ? linear$2(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$8(isNaN(a) ? b : a); +} + +function gamma$1(y) { + return (y = +y) === 1 ? nogamma : function(a, b) { + return b - a ? exponential$1(a, b, y) : constant$8(isNaN(a) ? b : a); + }; +} + +function nogamma(a, b) { + var d = b - a; + return d ? linear$2(a, d) : constant$8(isNaN(a) ? b : a); +} + +var interpolateRgb = (function rgbGamma(y) { + var color = gamma$1(y); + + function rgb$1(start, end) { + var r = color((start = rgb(start)).r, (end = rgb(end)).r), + g = color(start.g, end.g), + b = color(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.r = r(t); + start.g = g(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } + + rgb$1.gamma = rgbGamma; + + return rgb$1; +})(1); + +function rgbSpline(spline) { + return function(colors) { + var n = colors.length, + r = new Array(n), + g = new Array(n), + b = new Array(n), + i, color; + for (i = 0; i < n; ++i) { + color = rgb(colors[i]); + r[i] = color.r || 0; + g[i] = color.g || 0; + b[i] = color.b || 0; + } + r = spline(r); + g = spline(g); + b = spline(b); + color.opacity = 1; + return function(t) { + color.r = r(t); + color.g = g(t); + color.b = b(t); + return color + ""; + }; + }; +} + +var rgbBasis = rgbSpline(basis$2); +var rgbBasisClosed = rgbSpline(basisClosed$1); + +function numberArray(a, b) { + if (!b) b = []; + var n = a ? Math.min(b.length, a.length) : 0, + c = b.slice(), + i; + return function(t) { + for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t; + return c; + }; +} + +function isNumberArray(x) { + return ArrayBuffer.isView(x) && !(x instanceof DataView); +} + +function array$3(a, b) { + return (isNumberArray(b) ? numberArray : genericArray)(a, b); +} + +function genericArray(a, b) { + var nb = b ? b.length : 0, + na = a ? Math.min(nb, a.length) : 0, + x = new Array(na), + c = new Array(nb), + i; + + for (i = 0; i < na; ++i) x[i] = interpolate$2(a[i], b[i]); + for (; i < nb; ++i) c[i] = b[i]; + + return function(t) { + for (i = 0; i < na; ++i) c[i] = x[i](t); + return c; + }; +} + +function date$1(a, b) { + var d = new Date; + return a = +a, b = +b, function(t) { + return d.setTime(a * (1 - t) + b * t), d; + }; +} + +function interpolateNumber(a, b) { + return a = +a, b = +b, function(t) { + return a * (1 - t) + b * t; + }; +} + +function object$1(a, b) { + var i = {}, + c = {}, + k; + + if (a === null || typeof a !== "object") a = {}; + if (b === null || typeof b !== "object") b = {}; + + for (k in b) { + if (k in a) { + i[k] = interpolate$2(a[k], b[k]); + } else { + c[k] = b[k]; + } + } + + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +} + +var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, + reB = new RegExp(reA.source, "g"); + +function zero(b) { + return function() { + return b; + }; +} + +function one(b) { + return function(t) { + return b(t) + ""; + }; +} + +function interpolateString(a, b) { + var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = reA.exec(a)) + && (bm = reB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: interpolateNumber(am, bm)}); + } + bi = reB.lastIndex; + } + + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 ? (q[0] + ? one(q[0].x) + : zero(b)) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); +} + +function interpolate$2(a, b) { + var t = typeof b, c; + return b == null || t === "boolean" ? constant$8(b) + : (t === "number" ? interpolateNumber + : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString) + : b instanceof color ? interpolateRgb + : b instanceof Date ? date$1 + : isNumberArray(b) ? numberArray + : Array.isArray(b) ? genericArray + : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object$1 + : interpolateNumber)(a, b); +} + +function discrete(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; +} + +function hue(a, b) { + var i = hue$1(+a, +b); + return function(t) { + var x = i(t); + return x - 360 * Math.floor(x / 360); + }; +} + +function interpolateRound(a, b) { + return a = +a, b = +b, function(t) { + return Math.round(a * (1 - t) + b * t); + }; +} + +var degrees$1 = 180 / Math.PI; + +var identity$7 = { + translateX: 0, + translateY: 0, + rotate: 0, + skewX: 0, + scaleX: 1, + scaleY: 1 +}; + +function decompose(a, b, c, d, e, f) { + var scaleX, scaleY, skewX; + if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; + if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; + if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; + if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; + return { + translateX: e, + translateY: f, + rotate: Math.atan2(b, a) * degrees$1, + skewX: Math.atan(skewX) * degrees$1, + scaleX: scaleX, + scaleY: scaleY + }; +} + +var svgNode; + +/* eslint-disable no-undef */ +function parseCss(value) { + const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + ""); + return m.isIdentity ? identity$7 : decompose(m.a, m.b, m.c, m.d, m.e, m.f); +} + +function parseSvg(value) { + if (value == null) return identity$7; + if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); + svgNode.setAttribute("transform", value); + if (!(value = svgNode.transform.baseVal.consolidate())) return identity$7; + value = value.matrix; + return decompose(value.a, value.b, value.c, value.d, value.e, value.f); +} + +function interpolateTransform(parse, pxComma, pxParen, degParen) { + + function pop(s) { + return s.length ? s.pop() + " " : ""; + } + + function translate(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push("translate(", null, pxComma, null, pxParen); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb || yb) { + s.push("translate(" + xb + pxComma + yb + pxParen); + } + } + + function rotate(a, b, s, q) { + if (a !== b) { + if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path + q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "rotate(" + b + degParen); + } + } + + function skewX(a, b, s, q) { + if (a !== b) { + q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "skewX(" + b + degParen); + } + } + + function scale(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push(pop(s) + "scale(", null, ",", null, ")"); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb !== 1 || yb !== 1) { + s.push(pop(s) + "scale(" + xb + "," + yb + ")"); + } + } + + return function(a, b) { + var s = [], // string constants and placeholders + q = []; // number interpolators + a = parse(a), b = parse(b); + translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); + rotate(a.rotate, b.rotate, s, q); + skewX(a.skewX, b.skewX, s, q); + scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); + a = b = null; // gc + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; +} + +var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); +var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); + +var epsilon2$1 = 1e-12; + +function cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; +} + +function sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; +} + +function tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); +} + +var interpolateZoom = (function zoomRho(rho, rho2, rho4) { + + // p0 = [ux0, uy0, w0] + // p1 = [ux1, uy1, w1] + function zoom(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2], + dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + i, + S; + + // Special case for u0 ≅ u1. + if (d2 < epsilon2$1) { + S = Math.log(w1 / w0) / rho; + i = function(t) { + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(rho * t * S) + ]; + }; + } + + // General case. + else { + var d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), + b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); + S = (r1 - r0) / rho; + i = function(t) { + var s = t * S, + coshr0 = cosh(r0), + u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / cosh(rho * s + r0) + ]; + }; + } + + i.duration = S * 1000 * rho / Math.SQRT2; + + return i; + } + + zoom.rho = function(_) { + var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2; + return zoomRho(_1, _2, _4); + }; + + return zoom; +})(Math.SQRT2, 2, 4); + +function hsl(hue) { + return function(start, end) { + var h = hue((start = hsl$2(start)).h, (end = hsl$2(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hsl$1 = hsl(hue$1); +var hslLong = hsl(nogamma); + +function lab(start, end) { + var l = nogamma((start = lab$1(start)).l, (end = lab$1(end)).l), + a = nogamma(start.a, end.a), + b = nogamma(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.l = l(t); + start.a = a(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; +} + +function hcl(hue) { + return function(start, end) { + var h = hue((start = hcl$2(start)).h, (end = hcl$2(end)).h), + c = nogamma(start.c, end.c), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.c = c(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hcl$1 = hcl(hue$1); +var hclLong = hcl(nogamma); + +function cubehelix$1(hue) { + return (function cubehelixGamma(y) { + y = +y; + + function cubehelix(start, end) { + var h = hue((start = cubehelix$3(start)).h, (end = cubehelix$3(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(Math.pow(t, y)); + start.opacity = opacity(t); + return start + ""; + }; + } + + cubehelix.gamma = cubehelixGamma; + + return cubehelix; + })(1); +} + +var cubehelix$2 = cubehelix$1(hue$1); +var cubehelixLong = cubehelix$1(nogamma); + +function piecewise(interpolate, values) { + if (values === undefined) values = interpolate, interpolate = interpolate$2; + var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); + while (i < n) I[i] = interpolate(v, v = values[++i]); + return function(t) { + var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); + return I[i](t - i); + }; +} + +function quantize$1(interpolator, n) { + var samples = new Array(n); + for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); + return samples; +} + +var frame = 0, // is an animation frame pending? + timeout$1 = 0, // is a timeout pending? + interval$1 = 0, // are any timers active? + pokeDelay = 1000, // how frequently we check for clock skew + taskHead, + taskTail, + clockLast = 0, + clockNow = 0, + clockSkew = 0, + clock = typeof performance === "object" && performance.now ? performance : Date, + setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; + +function now() { + return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); +} + +function clearNow() { + clockNow = 0; +} + +function Timer() { + this._call = + this._time = + this._next = null; +} + +Timer.prototype = timer.prototype = { + constructor: Timer, + restart: function(callback, delay, time) { + if (typeof callback !== "function") throw new TypeError("callback is not a function"); + time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); + if (!this._next && taskTail !== this) { + if (taskTail) taskTail._next = this; + else taskHead = this; + taskTail = this; + } + this._call = callback; + this._time = time; + sleep(); + }, + stop: function() { + if (this._call) { + this._call = null; + this._time = Infinity; + sleep(); + } + } +}; + +function timer(callback, delay, time) { + var t = new Timer; + t.restart(callback, delay, time); + return t; +} + +function timerFlush() { + now(); // Get the current time, if not already set. + ++frame; // Pretend we’ve set an alarm, if we haven’t already. + var t = taskHead, e; + while (t) { + if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e); + t = t._next; + } + --frame; +} + +function wake() { + clockNow = (clockLast = clock.now()) + clockSkew; + frame = timeout$1 = 0; + try { + timerFlush(); + } finally { + frame = 0; + nap(); + clockNow = 0; + } +} + +function poke() { + var now = clock.now(), delay = now - clockLast; + if (delay > pokeDelay) clockSkew -= delay, clockLast = now; +} + +function nap() { + var t0, t1 = taskHead, t2, time = Infinity; + while (t1) { + if (t1._call) { + if (time > t1._time) time = t1._time; + t0 = t1, t1 = t1._next; + } else { + t2 = t1._next, t1._next = null; + t1 = t0 ? t0._next = t2 : taskHead = t2; + } + } + taskTail = t0; + sleep(time); +} + +function sleep(time) { + if (frame) return; // Soonest alarm already set, or will be. + if (timeout$1) timeout$1 = clearTimeout(timeout$1); + var delay = time - clockNow; // Strictly less than if we recomputed clockNow. + if (delay > 24) { + if (time < Infinity) timeout$1 = setTimeout(wake, time - clock.now() - clockSkew); + if (interval$1) interval$1 = clearInterval(interval$1); + } else { + if (!interval$1) clockLast = clock.now(), interval$1 = setInterval(poke, pokeDelay); + frame = 1, setFrame(wake); + } +} + +function timeout(callback, delay, time) { + var t = new Timer; + delay = delay == null ? 0 : +delay; + t.restart(elapsed => { + t.stop(); + callback(elapsed + delay); + }, delay, time); + return t; +} + +function interval(callback, delay, time) { + var t = new Timer, total = delay; + if (delay == null) return t.restart(callback, delay, time), t; + t._restart = t.restart; + t.restart = function(callback, delay, time) { + delay = +delay, time = time == null ? now() : +time; + t._restart(function tick(elapsed) { + elapsed += total; + t._restart(tick, total += delay, time); + callback(elapsed); + }, delay, time); + }; + t.restart(callback, delay, time); + return t; +} + +var emptyOn = dispatch("start", "end", "cancel", "interrupt"); +var emptyTween = []; + +var CREATED = 0; +var SCHEDULED = 1; +var STARTING = 2; +var STARTED = 3; +var RUNNING = 4; +var ENDING = 5; +var ENDED = 6; + +function schedule(node, name, id, index, group, timing) { + var schedules = node.__transition; + if (!schedules) node.__transition = {}; + else if (id in schedules) return; + create(node, id, { + name: name, + index: index, // For context during callback. + group: group, // For context during callback. + on: emptyOn, + tween: emptyTween, + time: timing.time, + delay: timing.delay, + duration: timing.duration, + ease: timing.ease, + timer: null, + state: CREATED + }); +} + +function init(node, id) { + var schedule = get(node, id); + if (schedule.state > CREATED) throw new Error("too late; already scheduled"); + return schedule; +} + +function set(node, id) { + var schedule = get(node, id); + if (schedule.state > STARTED) throw new Error("too late; already running"); + return schedule; +} + +function get(node, id) { + var schedule = node.__transition; + if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found"); + return schedule; +} + +function create(node, id, self) { + var schedules = node.__transition, + tween; + + // Initialize the self timer when the transition is created. + // Note the actual delay is not known until the first callback! + schedules[id] = self; + self.timer = timer(schedule, 0, self.time); + + function schedule(elapsed) { + self.state = SCHEDULED; + self.timer.restart(start, self.delay, self.time); + + // If the elapsed delay is less than our first sleep, start immediately. + if (self.delay <= elapsed) start(elapsed - self.delay); + } + + function start(elapsed) { + var i, j, n, o; + + // If the state is not SCHEDULED, then we previously errored on start. + if (self.state !== SCHEDULED) return stop(); + + for (i in schedules) { + o = schedules[i]; + if (o.name !== self.name) continue; + + // While this element already has a starting transition during this frame, + // defer starting an interrupting transition until that transition has a + // chance to tick (and possibly end); see d3/d3-transition#54! + if (o.state === STARTED) return timeout(start); + + // Interrupt the active transition, if any. + if (o.state === RUNNING) { + o.state = ENDED; + o.timer.stop(); + o.on.call("interrupt", node, node.__data__, o.index, o.group); + delete schedules[i]; + } + + // Cancel any pre-empted transitions. + else if (+i < id) { + o.state = ENDED; + o.timer.stop(); + o.on.call("cancel", node, node.__data__, o.index, o.group); + delete schedules[i]; + } + } + + // Defer the first tick to end of the current frame; see d3/d3#1576. + // Note the transition may be canceled after start and before the first tick! + // Note this must be scheduled before the start event; see d3/d3-transition#16! + // Assuming this is successful, subsequent callbacks go straight to tick. + timeout(function() { + if (self.state === STARTED) { + self.state = RUNNING; + self.timer.restart(tick, self.delay, self.time); + tick(elapsed); + } + }); + + // Dispatch the start event. + // Note this must be done before the tween are initialized. + self.state = STARTING; + self.on.call("start", node, node.__data__, self.index, self.group); + if (self.state !== STARTING) return; // interrupted + self.state = STARTED; + + // Initialize the tween, deleting null tween. + tween = new Array(n = self.tween.length); + for (i = 0, j = -1; i < n; ++i) { + if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { + tween[++j] = o; + } + } + tween.length = j + 1; + } + + function tick(elapsed) { + var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), + i = -1, + n = tween.length; + + while (++i < n) { + tween[i].call(node, t); + } + + // Dispatch the end event. + if (self.state === ENDING) { + self.on.call("end", node, node.__data__, self.index, self.group); + stop(); + } + } + + function stop() { + self.state = ENDED; + self.timer.stop(); + delete schedules[id]; + for (var i in schedules) return; // eslint-disable-line no-unused-vars + delete node.__transition; + } +} + +function interrupt(node, name) { + var schedules = node.__transition, + schedule, + active, + empty = true, + i; + + if (!schedules) return; + + name = name == null ? null : name + ""; + + for (i in schedules) { + if ((schedule = schedules[i]).name !== name) { empty = false; continue; } + active = schedule.state > STARTING && schedule.state < ENDING; + schedule.state = ENDED; + schedule.timer.stop(); + schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group); + delete schedules[i]; + } + + if (empty) delete node.__transition; +} + +function selection_interrupt(name) { + return this.each(function() { + interrupt(this, name); + }); +} + +function tweenRemove(id, name) { + var tween0, tween1; + return function() { + var schedule = set(this, id), + tween = schedule.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = tween0 = tween; + for (var i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1 = tween1.slice(); + tween1.splice(i, 1); + break; + } + } + } + + schedule.tween = tween1; + }; +} + +function tweenFunction(id, name, value) { + var tween0, tween1; + if (typeof value !== "function") throw new Error; + return function() { + var schedule = set(this, id), + tween = schedule.tween; + + // If this node shared tween with the previous node, + // just assign the updated shared tween and we’re done! + // Otherwise, copy-on-write. + if (tween !== tween0) { + tween1 = (tween0 = tween).slice(); + for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { + if (tween1[i].name === name) { + tween1[i] = t; + break; + } + } + if (i === n) tween1.push(t); + } + + schedule.tween = tween1; + }; +} + +function transition_tween(name, value) { + var id = this._id; + + name += ""; + + if (arguments.length < 2) { + var tween = get(this.node(), id).tween; + for (var i = 0, n = tween.length, t; i < n; ++i) { + if ((t = tween[i]).name === name) { + return t.value; + } + } + return null; + } + + return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); +} + +function tweenValue(transition, name, value) { + var id = transition._id; + + transition.each(function() { + var schedule = set(this, id); + (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); + }); + + return function(node) { + return get(node, id).value[name]; + }; +} + +function interpolate$1(a, b) { + var c; + return (typeof b === "number" ? interpolateNumber + : b instanceof color ? interpolateRgb + : (c = color(b)) ? (b = c, interpolateRgb) + : interpolateString)(a, b); +} + +function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; +} + +function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant(name, interpolate, value1) { + var string00, + string1 = value1 + "", + interpolate0; + return function() { + var string0 = this.getAttribute(name); + return string0 === string1 ? null + : string0 === string00 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, value1); + }; +} + +function attrConstantNS(fullname, interpolate, value1) { + var string00, + string1 = value1 + "", + interpolate0; + return function() { + var string0 = this.getAttributeNS(fullname.space, fullname.local); + return string0 === string1 ? null + : string0 === string00 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, value1); + }; +} + +function attrFunction(name, interpolate, value) { + var string00, + string10, + interpolate0; + return function() { + var string0, value1 = value(this), string1; + if (value1 == null) return void this.removeAttribute(name); + string0 = this.getAttribute(name); + string1 = value1 + ""; + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); + }; +} + +function attrFunctionNS(fullname, interpolate, value) { + var string00, + string10, + interpolate0; + return function() { + var string0, value1 = value(this), string1; + if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); + string0 = this.getAttributeNS(fullname.space, fullname.local); + string1 = value1 + ""; + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); + }; +} + +function transition_attr(name, value) { + var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1; + return this.attrTween(name, typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, "attr." + name, value)) + : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname) + : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value)); +} + +function attrInterpolate(name, i) { + return function(t) { + this.setAttribute(name, i.call(this, t)); + }; +} + +function attrInterpolateNS(fullname, i) { + return function(t) { + this.setAttributeNS(fullname.space, fullname.local, i.call(this, t)); + }; +} + +function attrTweenNS(fullname, value) { + var t0, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i); + return t0; + } + tween._value = value; + return tween; +} + +function attrTween(name, value) { + var t0, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i); + return t0; + } + tween._value = value; + return tween; +} + +function transition_attrTween(name, value) { + var key = "attr." + name; + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + var fullname = namespace(name); + return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); +} + +function delayFunction(id, value) { + return function() { + init(this, id).delay = +value.apply(this, arguments); + }; +} + +function delayConstant(id, value) { + return value = +value, function() { + init(this, id).delay = value; + }; +} + +function transition_delay(value) { + var id = this._id; + + return arguments.length + ? this.each((typeof value === "function" + ? delayFunction + : delayConstant)(id, value)) + : get(this.node(), id).delay; +} + +function durationFunction(id, value) { + return function() { + set(this, id).duration = +value.apply(this, arguments); + }; +} + +function durationConstant(id, value) { + return value = +value, function() { + set(this, id).duration = value; + }; +} + +function transition_duration(value) { + var id = this._id; + + return arguments.length + ? this.each((typeof value === "function" + ? durationFunction + : durationConstant)(id, value)) + : get(this.node(), id).duration; +} + +function easeConstant(id, value) { + if (typeof value !== "function") throw new Error; + return function() { + set(this, id).ease = value; + }; +} + +function transition_ease(value) { + var id = this._id; + + return arguments.length + ? this.each(easeConstant(id, value)) + : get(this.node(), id).ease; +} + +function easeVarying(id, value) { + return function() { + var v = value.apply(this, arguments); + if (typeof v !== "function") throw new Error; + set(this, id).ease = v; + }; +} + +function transition_easeVarying(value) { + if (typeof value !== "function") throw new Error; + return this.each(easeVarying(this._id, value)); +} + +function transition_filter(match) { + if (typeof match !== "function") match = matcher(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Transition(subgroups, this._parents, this._name, this._id); +} + +function transition_merge(transition) { + if (transition._id !== this._id) throw new Error; + + for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Transition(merges, this._parents, this._name, this._id); +} + +function start(name) { + return (name + "").trim().split(/^|\s+/).every(function(t) { + var i = t.indexOf("."); + if (i >= 0) t = t.slice(0, i); + return !t || t === "start"; + }); +} + +function onFunction(id, name, listener) { + var on0, on1, sit = start(name) ? init : set; + return function() { + var schedule = sit(this, id), + on = schedule.on; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); + + schedule.on = on1; + }; +} + +function transition_on(name, listener) { + var id = this._id; + + return arguments.length < 2 + ? get(this.node(), id).on.on(name) + : this.each(onFunction(id, name, listener)); +} + +function removeFunction(id) { + return function() { + var parent = this.parentNode; + for (var i in this.__transition) if (+i !== id) return; + if (parent) parent.removeChild(this); + }; +} + +function transition_remove() { + return this.on("end.remove", removeFunction(this._id)); +} + +function transition_select(select) { + var name = this._name, + id = this._id; + + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + schedule(subgroup[i], name, id, i, subgroup, get(node, id)); + } + } + } + + return new Transition(subgroups, this._parents, name, id); +} + +function transition_selectAll(select) { + var name = this._name, + id = this._id; + + if (typeof select !== "function") select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) { + if (child = children[k]) { + schedule(child, name, id, k, children, inherit); + } + } + subgroups.push(children); + parents.push(node); + } + } + } + + return new Transition(subgroups, parents, name, id); +} + +var Selection = selection.prototype.constructor; + +function transition_selection() { + return new Selection(this._groups, this._parents); +} + +function styleNull(name, interpolate) { + var string00, + string10, + interpolate0; + return function() { + var string0 = styleValue(this, name), + string1 = (this.style.removeProperty(name), styleValue(this, name)); + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, string10 = string1); + }; +} + +function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; +} + +function styleConstant(name, interpolate, value1) { + var string00, + string1 = value1 + "", + interpolate0; + return function() { + var string0 = styleValue(this, name); + return string0 === string1 ? null + : string0 === string00 ? interpolate0 + : interpolate0 = interpolate(string00 = string0, value1); + }; +} + +function styleFunction(name, interpolate, value) { + var string00, + string10, + interpolate0; + return function() { + var string0 = styleValue(this, name), + value1 = value(this), + string1 = value1 + ""; + if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name)); + return string0 === string1 ? null + : string0 === string00 && string1 === string10 ? interpolate0 + : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1)); + }; +} + +function styleMaybeRemove(id, name) { + var on0, on1, listener0, key = "style." + name, event = "end." + key, remove; + return function() { + var schedule = set(this, id), + on = schedule.on, + listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener); + + schedule.on = on1; + }; +} + +function transition_style(name, value, priority) { + var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1; + return value == null ? this + .styleTween(name, styleNull(name, i)) + .on("end.style." + name, styleRemove(name)) + : typeof value === "function" ? this + .styleTween(name, styleFunction(name, i, tweenValue(this, "style." + name, value))) + .each(styleMaybeRemove(this._id, name)) + : this + .styleTween(name, styleConstant(name, i, value), priority) + .on("end.style." + name, null); +} + +function styleInterpolate(name, i, priority) { + return function(t) { + this.style.setProperty(name, i.call(this, t), priority); + }; +} + +function styleTween(name, value, priority) { + var t, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority); + return t; + } + tween._value = value; + return tween; +} + +function transition_styleTween(name, value, priority) { + var key = "style." + (name += ""); + if (arguments.length < 2) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); +} + +function textConstant(value) { + return function() { + this.textContent = value; + }; +} + +function textFunction(value) { + return function() { + var value1 = value(this); + this.textContent = value1 == null ? "" : value1; + }; +} + +function transition_text(value) { + return this.tween("text", typeof value === "function" + ? textFunction(tweenValue(this, "text", value)) + : textConstant(value == null ? "" : value + "")); +} + +function textInterpolate(i) { + return function(t) { + this.textContent = i.call(this, t); + }; +} + +function textTween(value) { + var t0, i0; + function tween() { + var i = value.apply(this, arguments); + if (i !== i0) t0 = (i0 = i) && textInterpolate(i); + return t0; + } + tween._value = value; + return tween; +} + +function transition_textTween(value) { + var key = "text"; + if (arguments.length < 1) return (key = this.tween(key)) && key._value; + if (value == null) return this.tween(key, null); + if (typeof value !== "function") throw new Error; + return this.tween(key, textTween(value)); +} + +function transition_transition() { + var name = this._name, + id0 = this._id, + id1 = newId(); + + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + var inherit = get(node, id0); + schedule(node, name, id1, i, group, { + time: inherit.time + inherit.delay + inherit.duration, + delay: 0, + duration: inherit.duration, + ease: inherit.ease + }); + } + } + } + + return new Transition(groups, this._parents, name, id1); +} + +function transition_end() { + var on0, on1, that = this, id = that._id, size = that.size(); + return new Promise(function(resolve, reject) { + var cancel = {value: reject}, + end = {value: function() { if (--size === 0) resolve(); }}; + + that.each(function() { + var schedule = set(this, id), + on = schedule.on; + + // If this node shared a dispatch with the previous node, + // just assign the updated shared dispatch and we’re done! + // Otherwise, copy-on-write. + if (on !== on0) { + on1 = (on0 = on).copy(); + on1._.cancel.push(cancel); + on1._.interrupt.push(cancel); + on1._.end.push(end); + } + + schedule.on = on1; + }); + + // The selection was empty, resolve end immediately + if (size === 0) resolve(); + }); +} + +var id = 0; + +function Transition(groups, parents, name, id) { + this._groups = groups; + this._parents = parents; + this._name = name; + this._id = id; +} + +function transition(name) { + return selection().transition(name); +} + +function newId() { + return ++id; +} + +var selection_prototype = selection.prototype; + +Transition.prototype = transition.prototype = { + constructor: Transition, + select: transition_select, + selectAll: transition_selectAll, + selectChild: selection_prototype.selectChild, + selectChildren: selection_prototype.selectChildren, + filter: transition_filter, + merge: transition_merge, + selection: transition_selection, + transition: transition_transition, + call: selection_prototype.call, + nodes: selection_prototype.nodes, + node: selection_prototype.node, + size: selection_prototype.size, + empty: selection_prototype.empty, + each: selection_prototype.each, + on: transition_on, + attr: transition_attr, + attrTween: transition_attrTween, + style: transition_style, + styleTween: transition_styleTween, + text: transition_text, + textTween: transition_textTween, + remove: transition_remove, + tween: transition_tween, + delay: transition_delay, + duration: transition_duration, + ease: transition_ease, + easeVarying: transition_easeVarying, + end: transition_end, + [Symbol.iterator]: selection_prototype[Symbol.iterator] +}; + +const linear$1 = t => +t; + +function quadIn(t) { + return t * t; +} + +function quadOut(t) { + return t * (2 - t); +} + +function quadInOut(t) { + return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; +} + +function cubicIn(t) { + return t * t * t; +} + +function cubicOut(t) { + return --t * t * t + 1; +} + +function cubicInOut(t) { + return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; +} + +var exponent$1 = 3; + +var polyIn = (function custom(e) { + e = +e; + + function polyIn(t) { + return Math.pow(t, e); + } + + polyIn.exponent = custom; + + return polyIn; +})(exponent$1); + +var polyOut = (function custom(e) { + e = +e; + + function polyOut(t) { + return 1 - Math.pow(1 - t, e); + } + + polyOut.exponent = custom; + + return polyOut; +})(exponent$1); + +var polyInOut = (function custom(e) { + e = +e; + + function polyInOut(t) { + return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; + } + + polyInOut.exponent = custom; + + return polyInOut; +})(exponent$1); + +var pi$4 = Math.PI, + halfPi$3 = pi$4 / 2; + +function sinIn(t) { + return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi$3); +} + +function sinOut(t) { + return Math.sin(t * halfPi$3); +} + +function sinInOut(t) { + return (1 - Math.cos(pi$4 * t)) / 2; +} + +// tpmt is two power minus ten times t scaled to [0,1] +function tpmt(x) { + return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494; +} + +function expIn(t) { + return tpmt(1 - +t); +} + +function expOut(t) { + return 1 - tpmt(t); +} + +function expInOut(t) { + return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2; +} + +function circleIn(t) { + return 1 - Math.sqrt(1 - t * t); +} + +function circleOut(t) { + return Math.sqrt(1 - --t * t); +} + +function circleInOut(t) { + return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; +} + +var b1 = 4 / 11, + b2 = 6 / 11, + b3 = 8 / 11, + b4 = 3 / 4, + b5 = 9 / 11, + b6 = 10 / 11, + b7 = 15 / 16, + b8 = 21 / 22, + b9 = 63 / 64, + b0 = 1 / b1 / b1; + +function bounceIn(t) { + return 1 - bounceOut(1 - t); +} + +function bounceOut(t) { + return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; +} + +function bounceInOut(t) { + return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; +} + +var overshoot = 1.70158; + +var backIn = (function custom(s) { + s = +s; + + function backIn(t) { + return (t = +t) * t * (s * (t - 1) + t); + } + + backIn.overshoot = custom; + + return backIn; +})(overshoot); + +var backOut = (function custom(s) { + s = +s; + + function backOut(t) { + return --t * t * ((t + 1) * s + t) + 1; + } + + backOut.overshoot = custom; + + return backOut; +})(overshoot); + +var backInOut = (function custom(s) { + s = +s; + + function backInOut(t) { + return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; + } + + backInOut.overshoot = custom; + + return backInOut; +})(overshoot); + +var tau$5 = 2 * Math.PI, + amplitude = 1, + period = 0.3; + +var elasticIn = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau$5); + + function elasticIn(t) { + return a * tpmt(-(--t)) * Math.sin((s - t) / p); + } + + elasticIn.amplitude = function(a) { return custom(a, p * tau$5); }; + elasticIn.period = function(p) { return custom(a, p); }; + + return elasticIn; +})(amplitude, period); + +var elasticOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau$5); + + function elasticOut(t) { + return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p); + } + + elasticOut.amplitude = function(a) { return custom(a, p * tau$5); }; + elasticOut.period = function(p) { return custom(a, p); }; + + return elasticOut; +})(amplitude, period); + +var elasticInOut = (function custom(a, p) { + var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau$5); + + function elasticInOut(t) { + return ((t = t * 2 - 1) < 0 + ? a * tpmt(-t) * Math.sin((s - t) / p) + : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2; + } + + elasticInOut.amplitude = function(a) { return custom(a, p * tau$5); }; + elasticInOut.period = function(p) { return custom(a, p); }; + + return elasticInOut; +})(amplitude, period); + +var defaultTiming = { + time: null, // Set on use. + delay: 0, + duration: 250, + ease: cubicInOut +}; + +function inherit(node, id) { + var timing; + while (!(timing = node.__transition) || !(timing = timing[id])) { + if (!(node = node.parentNode)) { + throw new Error(`transition ${id} not found`); + } + } + return timing; +} + +function selection_transition(name) { + var id, + timing; + + if (name instanceof Transition) { + id = name._id, name = name._name; + } else { + id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + ""; + } + + for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + schedule(node, name, id, i, group, timing || inherit(node, id)); + } + } + } + + return new Transition(groups, this._parents, name, id); +} + +selection.prototype.interrupt = selection_interrupt; +selection.prototype.transition = selection_transition; + +var root = [null]; + +function active(node, name) { + var schedules = node.__transition, + schedule, + i; + + if (schedules) { + name = name == null ? null : name + ""; + for (i in schedules) { + if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) { + return new Transition([[node]], root, name, +i); + } + } + } + + return null; +} + +var constant$7 = x => () => x; + +function BrushEvent(type, { + sourceEvent, + target, + selection, + mode, + dispatch +}) { + Object.defineProperties(this, { + type: {value: type, enumerable: true, configurable: true}, + sourceEvent: {value: sourceEvent, enumerable: true, configurable: true}, + target: {value: target, enumerable: true, configurable: true}, + selection: {value: selection, enumerable: true, configurable: true}, + mode: {value: mode, enumerable: true, configurable: true}, + _: {value: dispatch} + }); +} + +function nopropagation$1(event) { + event.stopImmediatePropagation(); +} + +function noevent$1(event) { + event.preventDefault(); + event.stopImmediatePropagation(); +} + +var MODE_DRAG = {name: "drag"}, + MODE_SPACE = {name: "space"}, + MODE_HANDLE = {name: "handle"}, + MODE_CENTER = {name: "center"}; + +const {abs: abs$3, max: max$2, min: min$1} = Math; + +function number1(e) { + return [+e[0], +e[1]]; +} + +function number2(e) { + return [number1(e[0]), number1(e[1])]; +} + +var X = { + name: "x", + handles: ["w", "e"].map(type), + input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; }, + output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } +}; + +var Y = { + name: "y", + handles: ["n", "s"].map(type), + input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; }, + output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } +}; + +var XY = { + name: "xy", + handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type), + input: function(xy) { return xy == null ? null : number2(xy); }, + output: function(xy) { return xy; } +}; + +var cursors = { + overlay: "crosshair", + selection: "move", + n: "ns-resize", + e: "ew-resize", + s: "ns-resize", + w: "ew-resize", + nw: "nwse-resize", + ne: "nesw-resize", + se: "nwse-resize", + sw: "nesw-resize" +}; + +var flipX = { + e: "w", + w: "e", + nw: "ne", + ne: "nw", + se: "sw", + sw: "se" +}; + +var flipY = { + n: "s", + s: "n", + nw: "sw", + ne: "se", + se: "ne", + sw: "nw" +}; + +var signsX = { + overlay: +1, + selection: +1, + n: null, + e: +1, + s: null, + w: -1, + nw: -1, + ne: +1, + se: +1, + sw: -1 +}; + +var signsY = { + overlay: +1, + selection: +1, + n: -1, + e: null, + s: +1, + w: null, + nw: -1, + ne: -1, + se: +1, + sw: +1 +}; + +function type(t) { + return {type: t}; +} + +// Ignore right-click, since that should open the context menu. +function defaultFilter$1(event) { + return !event.ctrlKey && !event.button; +} + +function defaultExtent$1() { + var svg = this.ownerSVGElement || this; + if (svg.hasAttribute("viewBox")) { + svg = svg.viewBox.baseVal; + return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]]; + } + return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; +} + +function defaultTouchable$1() { + return navigator.maxTouchPoints || ("ontouchstart" in this); +} + +// Like d3.local, but with the name “__brush” rather than auto-generated. +function local(node) { + while (!node.__brush) if (!(node = node.parentNode)) return; + return node.__brush; +} + +function empty(extent) { + return extent[0][0] === extent[1][0] + || extent[0][1] === extent[1][1]; +} + +function brushSelection(node) { + var state = node.__brush; + return state ? state.dim.output(state.selection) : null; +} + +function brushX() { + return brush$1(X); +} + +function brushY() { + return brush$1(Y); +} + +function brush() { + return brush$1(XY); +} + +function brush$1(dim) { + var extent = defaultExtent$1, + filter = defaultFilter$1, + touchable = defaultTouchable$1, + keys = true, + listeners = dispatch("start", "brush", "end"), + handleSize = 6, + touchending; + + function brush(group) { + var overlay = group + .property("__brush", initialize) + .selectAll(".overlay") + .data([type("overlay")]); + + overlay.enter().append("rect") + .attr("class", "overlay") + .attr("pointer-events", "all") + .attr("cursor", cursors.overlay) + .merge(overlay) + .each(function() { + var extent = local(this).extent; + select(this) + .attr("x", extent[0][0]) + .attr("y", extent[0][1]) + .attr("width", extent[1][0] - extent[0][0]) + .attr("height", extent[1][1] - extent[0][1]); + }); + + group.selectAll(".selection") + .data([type("selection")]) + .enter().append("rect") + .attr("class", "selection") + .attr("cursor", cursors.selection) + .attr("fill", "#777") + .attr("fill-opacity", 0.3) + .attr("stroke", "#fff") + .attr("shape-rendering", "crispEdges"); + + var handle = group.selectAll(".handle") + .data(dim.handles, function(d) { return d.type; }); + + handle.exit().remove(); + + handle.enter().append("rect") + .attr("class", function(d) { return "handle handle--" + d.type; }) + .attr("cursor", function(d) { return cursors[d.type]; }); + + group + .each(redraw) + .attr("fill", "none") + .attr("pointer-events", "all") + .on("mousedown.brush", started) + .filter(touchable) + .on("touchstart.brush", started) + .on("touchmove.brush", touchmoved) + .on("touchend.brush touchcancel.brush", touchended) + .style("touch-action", "none") + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + brush.move = function(group, selection, event) { + if (group.tween) { + group + .on("start.brush", function(event) { emitter(this, arguments).beforestart().start(event); }) + .on("interrupt.brush end.brush", function(event) { emitter(this, arguments).end(event); }) + .tween("brush", function() { + var that = this, + state = that.__brush, + emit = emitter(that, arguments), + selection0 = state.selection, + selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), + i = interpolate$2(selection0, selection1); + + function tween(t) { + state.selection = t === 1 && selection1 === null ? null : i(t); + redraw.call(that); + emit.brush(); + } + + return selection0 !== null && selection1 !== null ? tween : tween(1); + }); + } else { + group + .each(function() { + var that = this, + args = arguments, + state = that.__brush, + selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), + emit = emitter(that, args).beforestart(); + + interrupt(that); + state.selection = selection1 === null ? null : selection1; + redraw.call(that); + emit.start(event).brush(event).end(event); + }); + } + }; + + brush.clear = function(group, event) { + brush.move(group, null, event); + }; + + function redraw() { + var group = select(this), + selection = local(this).selection; + + if (selection) { + group.selectAll(".selection") + .style("display", null) + .attr("x", selection[0][0]) + .attr("y", selection[0][1]) + .attr("width", selection[1][0] - selection[0][0]) + .attr("height", selection[1][1] - selection[0][1]); + + group.selectAll(".handle") + .style("display", null) + .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) + .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) + .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) + .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); + } + + else { + group.selectAll(".selection,.handle") + .style("display", "none") + .attr("x", null) + .attr("y", null) + .attr("width", null) + .attr("height", null); + } + } + + function emitter(that, args, clean) { + var emit = that.__brush.emitter; + return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean); + } + + function Emitter(that, args, clean) { + this.that = that; + this.args = args; + this.state = that.__brush; + this.active = 0; + this.clean = clean; + } + + Emitter.prototype = { + beforestart: function() { + if (++this.active === 1) this.state.emitter = this, this.starting = true; + return this; + }, + start: function(event, mode) { + if (this.starting) this.starting = false, this.emit("start", event, mode); + else this.emit("brush", event); + return this; + }, + brush: function(event, mode) { + this.emit("brush", event, mode); + return this; + }, + end: function(event, mode) { + if (--this.active === 0) delete this.state.emitter, this.emit("end", event, mode); + return this; + }, + emit: function(type, event, mode) { + var d = select(this.that).datum(); + listeners.call( + type, + this.that, + new BrushEvent(type, { + sourceEvent: event, + target: brush, + selection: dim.output(this.state.selection), + mode, + dispatch: listeners + }), + d + ); + } + }; + + function started(event) { + if (touchending && !event.touches) return; + if (!filter.apply(this, arguments)) return; + + var that = this, + type = event.target.__data__.type, + mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE), + signX = dim === Y ? null : signsX[type], + signY = dim === X ? null : signsY[type], + state = local(that), + extent = state.extent, + selection = state.selection, + W = extent[0][0], w0, w1, + N = extent[0][1], n0, n1, + E = extent[1][0], e0, e1, + S = extent[1][1], s0, s1, + dx = 0, + dy = 0, + moving, + shifting = signX && signY && keys && event.shiftKey, + lockX, + lockY, + points = Array.from(event.touches || [event], t => { + const i = t.identifier; + t = pointer(t, that); + t.point0 = t.slice(); + t.identifier = i; + return t; + }); + + interrupt(that); + var emit = emitter(that, arguments, true).beforestart(); + + if (type === "overlay") { + if (selection) moving = true; + const pts = [points[0], points[1] || points[0]]; + state.selection = selection = [[ + w0 = dim === Y ? W : min$1(pts[0][0], pts[1][0]), + n0 = dim === X ? N : min$1(pts[0][1], pts[1][1]) + ], [ + e0 = dim === Y ? E : max$2(pts[0][0], pts[1][0]), + s0 = dim === X ? S : max$2(pts[0][1], pts[1][1]) + ]]; + if (points.length > 1) move(event); + } else { + w0 = selection[0][0]; + n0 = selection[0][1]; + e0 = selection[1][0]; + s0 = selection[1][1]; + } + + w1 = w0; + n1 = n0; + e1 = e0; + s1 = s0; + + var group = select(that) + .attr("pointer-events", "none"); + + var overlay = group.selectAll(".overlay") + .attr("cursor", cursors[type]); + + if (event.touches) { + emit.moved = moved; + emit.ended = ended; + } else { + var view = select(event.view) + .on("mousemove.brush", moved, true) + .on("mouseup.brush", ended, true); + if (keys) view + .on("keydown.brush", keydowned, true) + .on("keyup.brush", keyupped, true); + + dragDisable(event.view); + } + + redraw.call(that); + emit.start(event, mode.name); + + function moved(event) { + for (const p of event.changedTouches || [event]) { + for (const d of points) + if (d.identifier === p.identifier) d.cur = pointer(p, that); + } + if (shifting && !lockX && !lockY && points.length === 1) { + const point = points[0]; + if (abs$3(point.cur[0] - point[0]) > abs$3(point.cur[1] - point[1])) + lockY = true; + else + lockX = true; + } + for (const point of points) + if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1]; + moving = true; + noevent$1(event); + move(event); + } + + function move(event) { + const point = points[0], point0 = point.point0; + var t; + + dx = point[0] - point0[0]; + dy = point[1] - point0[1]; + + switch (mode) { + case MODE_SPACE: + case MODE_DRAG: { + if (signX) dx = max$2(W - w0, min$1(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; + if (signY) dy = max$2(N - n0, min$1(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; + break; + } + case MODE_HANDLE: { + if (points[1]) { + if (signX) w1 = max$2(W, min$1(E, points[0][0])), e1 = max$2(W, min$1(E, points[1][0])), signX = 1; + if (signY) n1 = max$2(N, min$1(S, points[0][1])), s1 = max$2(N, min$1(S, points[1][1])), signY = 1; + } else { + if (signX < 0) dx = max$2(W - w0, min$1(E - w0, dx)), w1 = w0 + dx, e1 = e0; + else if (signX > 0) dx = max$2(W - e0, min$1(E - e0, dx)), w1 = w0, e1 = e0 + dx; + if (signY < 0) dy = max$2(N - n0, min$1(S - n0, dy)), n1 = n0 + dy, s1 = s0; + else if (signY > 0) dy = max$2(N - s0, min$1(S - s0, dy)), n1 = n0, s1 = s0 + dy; + } + break; + } + case MODE_CENTER: { + if (signX) w1 = max$2(W, min$1(E, w0 - dx * signX)), e1 = max$2(W, min$1(E, e0 + dx * signX)); + if (signY) n1 = max$2(N, min$1(S, n0 - dy * signY)), s1 = max$2(N, min$1(S, s0 + dy * signY)); + break; + } + } + + if (e1 < w1) { + signX *= -1; + t = w0, w0 = e0, e0 = t; + t = w1, w1 = e1, e1 = t; + if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); + } + + if (s1 < n1) { + signY *= -1; + t = n0, n0 = s0, s0 = t; + t = n1, n1 = s1, s1 = t; + if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); + } + + if (state.selection) selection = state.selection; // May be set by brush.move! + if (lockX) w1 = selection[0][0], e1 = selection[1][0]; + if (lockY) n1 = selection[0][1], s1 = selection[1][1]; + + if (selection[0][0] !== w1 + || selection[0][1] !== n1 + || selection[1][0] !== e1 + || selection[1][1] !== s1) { + state.selection = [[w1, n1], [e1, s1]]; + redraw.call(that); + emit.brush(event, mode.name); + } + } + + function ended(event) { + nopropagation$1(event); + if (event.touches) { + if (event.touches.length) return; + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! + } else { + yesdrag(event.view, moving); + view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); + } + group.attr("pointer-events", "all"); + overlay.attr("cursor", cursors.overlay); + if (state.selection) selection = state.selection; // May be set by brush.move (on start)! + if (empty(selection)) state.selection = null, redraw.call(that); + emit.end(event, mode.name); + } + + function keydowned(event) { + switch (event.keyCode) { + case 16: { // SHIFT + shifting = signX && signY; + break; + } + case 18: { // ALT + if (mode === MODE_HANDLE) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + move(event); + } + break; + } + case 32: { // SPACE; takes priority over ALT + if (mode === MODE_HANDLE || mode === MODE_CENTER) { + if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; + if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; + mode = MODE_SPACE; + overlay.attr("cursor", cursors.selection); + move(event); + } + break; + } + default: return; + } + noevent$1(event); + } + + function keyupped(event) { + switch (event.keyCode) { + case 16: { // SHIFT + if (shifting) { + lockX = lockY = shifting = false; + move(event); + } + break; + } + case 18: { // ALT + if (mode === MODE_CENTER) { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + move(event); + } + break; + } + case 32: { // SPACE + if (mode === MODE_SPACE) { + if (event.altKey) { + if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; + if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; + mode = MODE_CENTER; + } else { + if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; + if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; + mode = MODE_HANDLE; + } + overlay.attr("cursor", cursors[type]); + move(event); + } + break; + } + default: return; + } + noevent$1(event); + } + } + + function touchmoved(event) { + emitter(this, arguments).moved(event); + } + + function touchended(event) { + emitter(this, arguments).ended(event); + } + + function initialize() { + var state = this.__brush || {selection: null}; + state.extent = number2(extent.apply(this, arguments)); + state.dim = dim; + return state; + } + + brush.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : constant$7(number2(_)), brush) : extent; + }; + + brush.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant$7(!!_), brush) : filter; + }; + + brush.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$7(!!_), brush) : touchable; + }; + + brush.handleSize = function(_) { + return arguments.length ? (handleSize = +_, brush) : handleSize; + }; + + brush.keyModifiers = function(_) { + return arguments.length ? (keys = !!_, brush) : keys; + }; + + brush.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? brush : value; + }; + + return brush; +} + +var abs$2 = Math.abs; +var cos$2 = Math.cos; +var sin$2 = Math.sin; +var pi$3 = Math.PI; +var halfPi$2 = pi$3 / 2; +var tau$4 = pi$3 * 2; +var max$1 = Math.max; +var epsilon$5 = 1e-12; + +function range$1(i, j) { + return Array.from({length: j - i}, (_, k) => i + k); +} + +function compareValue(compare) { + return function(a, b) { + return compare( + a.source.value + a.target.value, + b.source.value + b.target.value + ); + }; +} + +function chord() { + return chord$1(false, false); +} + +function chordTranspose() { + return chord$1(false, true); +} + +function chordDirected() { + return chord$1(true, false); +} + +function chord$1(directed, transpose) { + var padAngle = 0, + sortGroups = null, + sortSubgroups = null, + sortChords = null; + + function chord(matrix) { + var n = matrix.length, + groupSums = new Array(n), + groupIndex = range$1(0, n), + chords = new Array(n * n), + groups = new Array(n), + k = 0, dx; + + matrix = Float64Array.from({length: n * n}, transpose + ? (_, i) => matrix[i % n][i / n | 0] + : (_, i) => matrix[i / n | 0][i % n]); + + // Compute the scaling factor from value to angle in [0, 2pi]. + for (let i = 0; i < n; ++i) { + let x = 0; + for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i]; + k += groupSums[i] = x; + } + k = max$1(0, tau$4 - padAngle * n) / k; + dx = k ? padAngle : tau$4 / n; + + // Compute the angles for each group and constituent chord. + { + let x = 0; + if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b])); + for (const i of groupIndex) { + const x0 = x; + if (directed) { + const subgroupIndex = range$1(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]); + if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b])); + for (const j of subgroupIndex) { + if (j < 0) { + const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null}); + chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]}; + } else { + const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null}); + chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]}; + } + } + groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]}; + } else { + const subgroupIndex = range$1(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]); + if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b])); + for (const j of subgroupIndex) { + let chord; + if (i < j) { + chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null}); + chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]}; + } else { + chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null}); + chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]}; + if (i === j) chord.source = chord.target; + } + if (chord.source && chord.target && chord.source.value < chord.target.value) { + const source = chord.source; + chord.source = chord.target; + chord.target = source; + } + } + groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]}; + } + x += dx; + } + } + + // Remove empty chords. + chords = Object.values(chords); + chords.groups = groups; + return sortChords ? chords.sort(sortChords) : chords; + } + + chord.padAngle = function(_) { + return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle; + }; + + chord.sortGroups = function(_) { + return arguments.length ? (sortGroups = _, chord) : sortGroups; + }; + + chord.sortSubgroups = function(_) { + return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; + }; + + chord.sortChords = function(_) { + return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; + }; + + return chord; +} + +const pi$2 = Math.PI, + tau$3 = 2 * pi$2, + epsilon$4 = 1e-6, + tauEpsilon = tau$3 - epsilon$4; + +function append$1(strings) { + this._ += strings[0]; + for (let i = 1, n = strings.length; i < n; ++i) { + this._ += arguments[i] + strings[i]; + } +} + +function appendRound$1(digits) { + let d = Math.floor(digits); + if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`); + if (d > 15) return append$1; + const k = 10 ** d; + return function(strings) { + this._ += strings[0]; + for (let i = 1, n = strings.length; i < n; ++i) { + this._ += Math.round(arguments[i] * k) / k + strings[i]; + } + }; +} + +let Path$1 = class Path { + constructor(digits) { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; + this._append = digits == null ? append$1 : appendRound$1(digits); + } + moveTo(x, y) { + this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`; + } + closePath() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._append`Z`; + } + } + lineTo(x, y) { + this._append`L${this._x1 = +x},${this._y1 = +y}`; + } + quadraticCurveTo(x1, y1, x, y) { + this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`; + } + bezierCurveTo(x1, y1, x2, y2, x, y) { + this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`; + } + arcTo(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + + // Is the radius negative? Error. + if (r < 0) throw new Error(`negative radius: ${r}`); + + let x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._append`M${this._x1 = x1},${this._y1 = y1}`; + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon$4)); + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$4) || !r) { + this._append`L${this._x1 = x1},${this._y1 = y1}`; + } + + // Otherwise, draw an arc! + else { + let x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon$4) { + this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`; + } + + this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`; + } + } + arc(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r, ccw = !!ccw; + + // Is the radius negative? Error. + if (r < 0) throw new Error(`negative radius: ${r}`); + + let dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._append`M${x0},${y0}`; + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon$4 || Math.abs(this._y1 - y0) > epsilon$4) { + this._append`L${x0},${y0}`; + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau$3 + tau$3; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`; + } + + // Is this arc non-empty? Draw an arc! + else if (da > epsilon$4) { + this._append`A${r},${r},0,${+(da >= pi$2)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`; + } + } + rect(x, y, w, h) { + this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`; + } + toString() { + return this._; + } +}; + +function path() { + return new Path$1; +} + +// Allow instanceof d3.path +path.prototype = Path$1.prototype; + +function pathRound(digits = 3) { + return new Path$1(+digits); +} + +var slice$2 = Array.prototype.slice; + +function constant$6(x) { + return function() { + return x; + }; +} + +function defaultSource$1(d) { + return d.source; +} + +function defaultTarget(d) { + return d.target; +} + +function defaultRadius$1(d) { + return d.radius; +} + +function defaultStartAngle(d) { + return d.startAngle; +} + +function defaultEndAngle(d) { + return d.endAngle; +} + +function defaultPadAngle() { + return 0; +} + +function defaultArrowheadRadius() { + return 10; +} + +function ribbon(headRadius) { + var source = defaultSource$1, + target = defaultTarget, + sourceRadius = defaultRadius$1, + targetRadius = defaultRadius$1, + startAngle = defaultStartAngle, + endAngle = defaultEndAngle, + padAngle = defaultPadAngle, + context = null; + + function ribbon() { + var buffer, + s = source.apply(this, arguments), + t = target.apply(this, arguments), + ap = padAngle.apply(this, arguments) / 2, + argv = slice$2.call(arguments), + sr = +sourceRadius.apply(this, (argv[0] = s, argv)), + sa0 = startAngle.apply(this, argv) - halfPi$2, + sa1 = endAngle.apply(this, argv) - halfPi$2, + tr = +targetRadius.apply(this, (argv[0] = t, argv)), + ta0 = startAngle.apply(this, argv) - halfPi$2, + ta1 = endAngle.apply(this, argv) - halfPi$2; + + if (!context) context = buffer = path(); + + if (ap > epsilon$5) { + if (abs$2(sa1 - sa0) > ap * 2 + epsilon$5) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap); + else sa0 = sa1 = (sa0 + sa1) / 2; + if (abs$2(ta1 - ta0) > ap * 2 + epsilon$5) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap); + else ta0 = ta1 = (ta0 + ta1) / 2; + } + + context.moveTo(sr * cos$2(sa0), sr * sin$2(sa0)); + context.arc(0, 0, sr, sa0, sa1); + if (sa0 !== ta0 || sa1 !== ta1) { + if (headRadius) { + var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2; + context.quadraticCurveTo(0, 0, tr2 * cos$2(ta0), tr2 * sin$2(ta0)); + context.lineTo(tr * cos$2(ta2), tr * sin$2(ta2)); + context.lineTo(tr2 * cos$2(ta1), tr2 * sin$2(ta1)); + } else { + context.quadraticCurveTo(0, 0, tr * cos$2(ta0), tr * sin$2(ta0)); + context.arc(0, 0, tr, ta0, ta1); + } + } + context.quadraticCurveTo(0, 0, sr * cos$2(sa0), sr * sin$2(sa0)); + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + if (headRadius) ribbon.headRadius = function(_) { + return arguments.length ? (headRadius = typeof _ === "function" ? _ : constant$6(+_), ribbon) : headRadius; + }; + + ribbon.radius = function(_) { + return arguments.length ? (sourceRadius = targetRadius = typeof _ === "function" ? _ : constant$6(+_), ribbon) : sourceRadius; + }; + + ribbon.sourceRadius = function(_) { + return arguments.length ? (sourceRadius = typeof _ === "function" ? _ : constant$6(+_), ribbon) : sourceRadius; + }; + + ribbon.targetRadius = function(_) { + return arguments.length ? (targetRadius = typeof _ === "function" ? _ : constant$6(+_), ribbon) : targetRadius; + }; + + ribbon.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$6(+_), ribbon) : startAngle; + }; + + ribbon.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$6(+_), ribbon) : endAngle; + }; + + ribbon.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$6(+_), ribbon) : padAngle; + }; + + ribbon.source = function(_) { + return arguments.length ? (source = _, ribbon) : source; + }; + + ribbon.target = function(_) { + return arguments.length ? (target = _, ribbon) : target; + }; + + ribbon.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; + }; + + return ribbon; +} + +function ribbon$1() { + return ribbon(); +} + +function ribbonArrow() { + return ribbon(defaultArrowheadRadius); +} + +var array$2 = Array.prototype; + +var slice$1 = array$2.slice; + +function ascending$1(a, b) { + return a - b; +} + +function area$3(ring) { + var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; + while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; + return area; +} + +var constant$5 = x => () => x; + +function contains$2(ring, hole) { + var i = -1, n = hole.length, c; + while (++i < n) if (c = ringContains(ring, hole[i])) return c; + return 0; +} + +function ringContains(ring, point) { + var x = point[0], y = point[1], contains = -1; + for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { + var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; + if (segmentContains(pi, pj, point)) return 0; + if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; + } + return contains; +} + +function segmentContains(a, b, c) { + var i; return collinear$1(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); +} + +function collinear$1(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); +} + +function within(p, q, r) { + return p <= q && q <= r || r <= q && q <= p; +} + +function noop$2() {} + +var cases = [ + [], + [[[1.0, 1.5], [0.5, 1.0]]], + [[[1.5, 1.0], [1.0, 1.5]]], + [[[1.5, 1.0], [0.5, 1.0]]], + [[[1.0, 0.5], [1.5, 1.0]]], + [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], + [[[1.0, 0.5], [1.0, 1.5]]], + [[[1.0, 0.5], [0.5, 1.0]]], + [[[0.5, 1.0], [1.0, 0.5]]], + [[[1.0, 1.5], [1.0, 0.5]]], + [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], + [[[1.5, 1.0], [1.0, 0.5]]], + [[[0.5, 1.0], [1.5, 1.0]]], + [[[1.0, 1.5], [1.5, 1.0]]], + [[[0.5, 1.0], [1.0, 1.5]]], + [] +]; + +function Contours() { + var dx = 1, + dy = 1, + threshold = thresholdSturges, + smooth = smoothLinear; + + function contours(values) { + var tz = threshold(values); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + const e = extent$1(values, finite); + tz = ticks(...nice$1(e[0], e[1], tz), tz); + while (tz[tz.length - 1] >= e[1]) tz.pop(); + while (tz[1] < e[0]) tz.shift(); + } else { + tz = tz.slice().sort(ascending$1); + } + + return tz.map(value => contour(values, value)); + } + + // Accumulate, smooth contour rings, assign holes to exterior rings. + // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js + function contour(values, value) { + const v = value == null ? NaN : +value; + if (isNaN(v)) throw new Error(`invalid value: ${value}`); + + var polygons = [], + holes = []; + + isorings(values, v, function(ring) { + smooth(ring, values, v); + if (area$3(ring) > 0) polygons.push([ring]); + else holes.push(ring); + }); + + holes.forEach(function(hole) { + for (var i = 0, n = polygons.length, polygon; i < n; ++i) { + if (contains$2((polygon = polygons[i])[0], hole) !== -1) { + polygon.push(hole); + return; + } + } + }); + + return { + type: "MultiPolygon", + value: value, + coordinates: polygons + }; + } + + // Marching squares with isolines stitched into rings. + // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js + function isorings(values, value, callback) { + var fragmentByStart = new Array, + fragmentByEnd = new Array, + x, y, t0, t1, t2, t3; + + // Special case for the first row (y = -1, t2 = t3 = 0). + x = y = -1; + t1 = above(values[0], value); + cases[t1 << 1].forEach(stitch); + while (++x < dx - 1) { + t0 = t1, t1 = above(values[x + 1], value); + cases[t0 | t1 << 1].forEach(stitch); + } + cases[t1 << 0].forEach(stitch); + + // General case for the intermediate rows. + while (++y < dy - 1) { + x = -1; + t1 = above(values[y * dx + dx], value); + t2 = above(values[y * dx], value); + cases[t1 << 1 | t2 << 2].forEach(stitch); + while (++x < dx - 1) { + t0 = t1, t1 = above(values[y * dx + dx + x + 1], value); + t3 = t2, t2 = above(values[y * dx + x + 1], value); + cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); + } + cases[t1 | t2 << 3].forEach(stitch); + } + + // Special case for the last row (y = dy - 1, t0 = t1 = 0). + x = -1; + t2 = values[y * dx] >= value; + cases[t2 << 2].forEach(stitch); + while (++x < dx - 1) { + t3 = t2, t2 = above(values[y * dx + x + 1], value); + cases[t2 << 2 | t3 << 3].forEach(stitch); + } + cases[t2 << 3].forEach(stitch); + + function stitch(line) { + var start = [line[0][0] + x, line[0][1] + y], + end = [line[1][0] + x, line[1][1] + y], + startIndex = index(start), + endIndex = index(end), + f, g; + if (f = fragmentByEnd[startIndex]) { + if (g = fragmentByStart[endIndex]) { + delete fragmentByEnd[f.end]; + delete fragmentByStart[g.start]; + if (f === g) { + f.ring.push(end); + callback(f.ring); + } else { + fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; + } + } else { + delete fragmentByEnd[f.end]; + f.ring.push(end); + fragmentByEnd[f.end = endIndex] = f; + } + } else if (f = fragmentByStart[endIndex]) { + if (g = fragmentByEnd[startIndex]) { + delete fragmentByStart[f.start]; + delete fragmentByEnd[g.end]; + if (f === g) { + f.ring.push(end); + callback(f.ring); + } else { + fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; + } + } else { + delete fragmentByStart[f.start]; + f.ring.unshift(start); + fragmentByStart[f.start = startIndex] = f; + } + } else { + fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; + } + } + } + + function index(point) { + return point[0] * 2 + point[1] * (dx + 1) * 4; + } + + function smoothLinear(ring, values, value) { + ring.forEach(function(point) { + var x = point[0], + y = point[1], + xt = x | 0, + yt = y | 0, + v1 = valid(values[yt * dx + xt]); + if (x > 0 && x < dx && xt === x) { + point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value); + } + if (y > 0 && y < dy && yt === y) { + point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value); + } + }); + } + + contours.contour = contour; + + contours.size = function(_) { + if (!arguments.length) return [dx, dy]; + var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]); + if (!(_0 >= 0 && _1 >= 0)) throw new Error("invalid size"); + return dx = _0, dy = _1, contours; + }; + + contours.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), contours) : threshold; + }; + + contours.smooth = function(_) { + return arguments.length ? (smooth = _ ? smoothLinear : noop$2, contours) : smooth === smoothLinear; + }; + + return contours; +} + +// When computing the extent, ignore infinite values (as well as invalid ones). +function finite(x) { + return isFinite(x) ? x : NaN; +} + +// Is the (possibly invalid) x greater than or equal to the (known valid) value? +// Treat any invalid value as below negative infinity. +function above(x, value) { + return x == null ? false : +x >= value; +} + +// During smoothing, treat any invalid value as negative infinity. +function valid(v) { + return v == null || isNaN(v = +v) ? -Infinity : v; +} + +function smooth1(x, v0, v1, value) { + const a = value - v0; + const b = v1 - v0; + const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b); + return isNaN(d) ? x : x + d - 0.5; +} + +function defaultX$1(d) { + return d[0]; +} + +function defaultY$1(d) { + return d[1]; +} + +function defaultWeight() { + return 1; +} + +function density() { + var x = defaultX$1, + y = defaultY$1, + weight = defaultWeight, + dx = 960, + dy = 500, + r = 20, // blur radius + k = 2, // log2(grid cell size) + o = r * 3, // grid offset, to pad for blur + n = (dx + o * 2) >> k, // grid width + m = (dy + o * 2) >> k, // grid height + threshold = constant$5(20); + + function grid(data) { + var values = new Float32Array(n * m), + pow2k = Math.pow(2, -k), + i = -1; + + for (const d of data) { + var xi = (x(d, ++i, data) + o) * pow2k, + yi = (y(d, i, data) + o) * pow2k, + wi = +weight(d, i, data); + if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) { + var x0 = Math.floor(xi), + y0 = Math.floor(yi), + xt = xi - x0 - 0.5, + yt = yi - y0 - 0.5; + values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi; + values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi; + values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi; + values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi; + } + } + + blur2({data: values, width: n, height: m}, r * pow2k); + return values; + } + + function density(data) { + var values = grid(data), + tz = threshold(values), + pow4k = Math.pow(2, 2 * k); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + tz = ticks(Number.MIN_VALUE, max$3(values) / pow4k, tz); + } + + return Contours() + .size([n, m]) + .thresholds(tz.map(d => d * pow4k)) + (values) + .map((c, i) => (c.value = +tz[i], transform(c))); + } + + density.contours = function(data) { + var values = grid(data), + contours = Contours().size([n, m]), + pow4k = Math.pow(2, 2 * k), + contour = value => { + value = +value; + var c = transform(contours.contour(values, value * pow4k)); + c.value = value; // preserve exact threshold value + return c; + }; + Object.defineProperty(contour, "max", {get: () => max$3(values) / pow4k}); + return contour; + }; + + function transform(geometry) { + geometry.coordinates.forEach(transformPolygon); + return geometry; + } + + function transformPolygon(coordinates) { + coordinates.forEach(transformRing); + } + + function transformRing(coordinates) { + coordinates.forEach(transformPoint); + } + + // TODO Optimize. + function transformPoint(coordinates) { + coordinates[0] = coordinates[0] * Math.pow(2, k) - o; + coordinates[1] = coordinates[1] * Math.pow(2, k) - o; + } + + function resize() { + o = r * 3; + n = (dx + o * 2) >> k; + m = (dy + o * 2) >> k; + return density; + } + + density.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$5(+_), density) : x; + }; + + density.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$5(+_), density) : y; + }; + + density.weight = function(_) { + return arguments.length ? (weight = typeof _ === "function" ? _ : constant$5(+_), density) : weight; + }; + + density.size = function(_) { + if (!arguments.length) return [dx, dy]; + var _0 = +_[0], _1 = +_[1]; + if (!(_0 >= 0 && _1 >= 0)) throw new Error("invalid size"); + return dx = _0, dy = _1, resize(); + }; + + density.cellSize = function(_) { + if (!arguments.length) return 1 << k; + if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); + return k = Math.floor(Math.log(_) / Math.LN2), resize(); + }; + + density.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), density) : threshold; + }; + + density.bandwidth = function(_) { + if (!arguments.length) return Math.sqrt(r * (r + 1)); + if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); + return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize(); + }; + + return density; +} + +const epsilon$3 = 1.1102230246251565e-16; +const splitter = 134217729; +const resulterrbound = (3 + 8 * epsilon$3) * epsilon$3; + +// fast_expansion_sum_zeroelim routine from oritinal code +function sum$1(elen, e, flen, f, h) { + let Q, Qnew, hh, bvirt; + let enow = e[0]; + let fnow = f[0]; + let eindex = 0; + let findex = 0; + if ((fnow > enow) === (fnow > -enow)) { + Q = enow; + enow = e[++eindex]; + } else { + Q = fnow; + fnow = f[++findex]; + } + let hindex = 0; + if (eindex < elen && findex < flen) { + if ((fnow > enow) === (fnow > -enow)) { + Qnew = enow + Q; + hh = Q - (Qnew - enow); + enow = e[++eindex]; + } else { + Qnew = fnow + Q; + hh = Q - (Qnew - fnow); + fnow = f[++findex]; + } + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + while (eindex < elen && findex < flen) { + if ((fnow > enow) === (fnow > -enow)) { + Qnew = Q + enow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (enow - bvirt); + enow = e[++eindex]; + } else { + Qnew = Q + fnow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (fnow - bvirt); + fnow = f[++findex]; + } + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + } + while (eindex < elen) { + Qnew = Q + enow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (enow - bvirt); + enow = e[++eindex]; + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + while (findex < flen) { + Qnew = Q + fnow; + bvirt = Qnew - Q; + hh = Q - (Qnew - bvirt) + (fnow - bvirt); + fnow = f[++findex]; + Q = Qnew; + if (hh !== 0) { + h[hindex++] = hh; + } + } + if (Q !== 0 || hindex === 0) { + h[hindex++] = Q; + } + return hindex; +} + +function estimate(elen, e) { + let Q = e[0]; + for (let i = 1; i < elen; i++) Q += e[i]; + return Q; +} + +function vec(n) { + return new Float64Array(n); +} + +const ccwerrboundA = (3 + 16 * epsilon$3) * epsilon$3; +const ccwerrboundB = (2 + 12 * epsilon$3) * epsilon$3; +const ccwerrboundC = (9 + 64 * epsilon$3) * epsilon$3 * epsilon$3; + +const B = vec(4); +const C1 = vec(8); +const C2 = vec(12); +const D = vec(16); +const u = vec(4); + +function orient2dadapt(ax, ay, bx, by, cx, cy, detsum) { + let acxtail, acytail, bcxtail, bcytail; + let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3; + + const acx = ax - cx; + const bcx = bx - cx; + const acy = ay - cy; + const bcy = by - cy; + + s1 = acx * bcy; + c = splitter * acx; + ahi = c - (c - acx); + alo = acx - ahi; + c = splitter * bcy; + bhi = c - (c - bcy); + blo = bcy - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acy * bcx; + c = splitter * acy; + ahi = c - (c - acy); + alo = acy - ahi; + c = splitter * bcx; + bhi = c - (c - bcx); + blo = bcx - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + B[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + B[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + B[2] = _j - (u3 - bvirt) + (_i - bvirt); + B[3] = u3; + + let det = estimate(4, B); + let errbound = ccwerrboundB * detsum; + if (det >= errbound || -det >= errbound) { + return det; + } + + bvirt = ax - acx; + acxtail = ax - (acx + bvirt) + (bvirt - cx); + bvirt = bx - bcx; + bcxtail = bx - (bcx + bvirt) + (bvirt - cx); + bvirt = ay - acy; + acytail = ay - (acy + bvirt) + (bvirt - cy); + bvirt = by - bcy; + bcytail = by - (bcy + bvirt) + (bvirt - cy); + + if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) { + return det; + } + + errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det); + det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail); + if (det >= errbound || -det >= errbound) return det; + + s1 = acxtail * bcy; + c = splitter * acxtail; + ahi = c - (c - acxtail); + alo = acxtail - ahi; + c = splitter * bcy; + bhi = c - (c - bcy); + blo = bcy - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acytail * bcx; + c = splitter * acytail; + ahi = c - (c - acytail); + alo = acytail - ahi; + c = splitter * bcx; + bhi = c - (c - bcx); + blo = bcx - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + const C1len = sum$1(4, B, 4, u, C1); + + s1 = acx * bcytail; + c = splitter * acx; + ahi = c - (c - acx); + alo = acx - ahi; + c = splitter * bcytail; + bhi = c - (c - bcytail); + blo = bcytail - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acy * bcxtail; + c = splitter * acy; + ahi = c - (c - acy); + alo = acy - ahi; + c = splitter * bcxtail; + bhi = c - (c - bcxtail); + blo = bcxtail - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + const C2len = sum$1(C1len, C1, 4, u, C2); + + s1 = acxtail * bcytail; + c = splitter * acxtail; + ahi = c - (c - acxtail); + alo = acxtail - ahi; + c = splitter * bcytail; + bhi = c - (c - bcytail); + blo = bcytail - bhi; + s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo); + t1 = acytail * bcxtail; + c = splitter * acytail; + ahi = c - (c - acytail); + alo = acytail - ahi; + c = splitter * bcxtail; + bhi = c - (c - bcxtail); + blo = bcxtail - bhi; + t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo); + _i = s0 - t0; + bvirt = s0 - _i; + u[0] = s0 - (_i + bvirt) + (bvirt - t0); + _j = s1 + _i; + bvirt = _j - s1; + _0 = s1 - (_j - bvirt) + (_i - bvirt); + _i = _0 - t1; + bvirt = _0 - _i; + u[1] = _0 - (_i + bvirt) + (bvirt - t1); + u3 = _j + _i; + bvirt = u3 - _j; + u[2] = _j - (u3 - bvirt) + (_i - bvirt); + u[3] = u3; + const Dlen = sum$1(C2len, C2, 4, u, D); + + return D[Dlen - 1]; +} + +function orient2d(ax, ay, bx, by, cx, cy) { + const detleft = (ay - cy) * (bx - cx); + const detright = (ax - cx) * (by - cy); + const det = detleft - detright; + + const detsum = Math.abs(detleft + detright); + if (Math.abs(det) >= ccwerrboundA * detsum) return det; + + return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum); +} + +const EPSILON = Math.pow(2, -52); +const EDGE_STACK = new Uint32Array(512); + +class Delaunator { + + static from(points, getX = defaultGetX, getY = defaultGetY) { + const n = points.length; + const coords = new Float64Array(n * 2); + + for (let i = 0; i < n; i++) { + const p = points[i]; + coords[2 * i] = getX(p); + coords[2 * i + 1] = getY(p); + } + + return new Delaunator(coords); + } + + constructor(coords) { + const n = coords.length >> 1; + if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.'); + + this.coords = coords; + + // arrays that will store the triangulation graph + const maxTriangles = Math.max(2 * n - 5, 0); + this._triangles = new Uint32Array(maxTriangles * 3); + this._halfedges = new Int32Array(maxTriangles * 3); + + // temporary arrays for tracking the edges of the advancing convex hull + this._hashSize = Math.ceil(Math.sqrt(n)); + this._hullPrev = new Uint32Array(n); // edge to prev edge + this._hullNext = new Uint32Array(n); // edge to next edge + this._hullTri = new Uint32Array(n); // edge to adjacent triangle + this._hullHash = new Int32Array(this._hashSize); // angular edge hash + + // temporary arrays for sorting points + this._ids = new Uint32Array(n); + this._dists = new Float64Array(n); + + this.update(); + } + + update() { + const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this; + const n = coords.length >> 1; + + // populate an array of point indices; calculate input data bbox + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + + for (let i = 0; i < n; i++) { + const x = coords[2 * i]; + const y = coords[2 * i + 1]; + if (x < minX) minX = x; + if (y < minY) minY = y; + if (x > maxX) maxX = x; + if (y > maxY) maxY = y; + this._ids[i] = i; + } + const cx = (minX + maxX) / 2; + const cy = (minY + maxY) / 2; + + let i0, i1, i2; + + // pick a seed point close to the center + for (let i = 0, minDist = Infinity; i < n; i++) { + const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]); + if (d < minDist) { + i0 = i; + minDist = d; + } + } + const i0x = coords[2 * i0]; + const i0y = coords[2 * i0 + 1]; + + // find the point closest to the seed + for (let i = 0, minDist = Infinity; i < n; i++) { + if (i === i0) continue; + const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]); + if (d < minDist && d > 0) { + i1 = i; + minDist = d; + } + } + let i1x = coords[2 * i1]; + let i1y = coords[2 * i1 + 1]; + + let minRadius = Infinity; + + // find the third point which forms the smallest circumcircle with the first two + for (let i = 0; i < n; i++) { + if (i === i0 || i === i1) continue; + const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]); + if (r < minRadius) { + i2 = i; + minRadius = r; + } + } + let i2x = coords[2 * i2]; + let i2y = coords[2 * i2 + 1]; + + if (minRadius === Infinity) { + // order collinear points by dx (or dy if all x are identical) + // and return the list as a hull + for (let i = 0; i < n; i++) { + this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]); + } + quicksort(this._ids, this._dists, 0, n - 1); + const hull = new Uint32Array(n); + let j = 0; + for (let i = 0, d0 = -Infinity; i < n; i++) { + const id = this._ids[i]; + const d = this._dists[id]; + if (d > d0) { + hull[j++] = id; + d0 = d; + } + } + this.hull = hull.subarray(0, j); + this.triangles = new Uint32Array(0); + this.halfedges = new Uint32Array(0); + return; + } + + // swap the order of the seed points for counter-clockwise orientation + if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) { + const i = i1; + const x = i1x; + const y = i1y; + i1 = i2; + i1x = i2x; + i1y = i2y; + i2 = i; + i2x = x; + i2y = y; + } + + const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y); + this._cx = center.x; + this._cy = center.y; + + for (let i = 0; i < n; i++) { + this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y); + } + + // sort the points by distance from the seed triangle circumcenter + quicksort(this._ids, this._dists, 0, n - 1); + + // set up the seed triangle as the starting hull + this._hullStart = i0; + let hullSize = 3; + + hullNext[i0] = hullPrev[i2] = i1; + hullNext[i1] = hullPrev[i0] = i2; + hullNext[i2] = hullPrev[i1] = i0; + + hullTri[i0] = 0; + hullTri[i1] = 1; + hullTri[i2] = 2; + + hullHash.fill(-1); + hullHash[this._hashKey(i0x, i0y)] = i0; + hullHash[this._hashKey(i1x, i1y)] = i1; + hullHash[this._hashKey(i2x, i2y)] = i2; + + this.trianglesLen = 0; + this._addTriangle(i0, i1, i2, -1, -1, -1); + + for (let k = 0, xp, yp; k < this._ids.length; k++) { + const i = this._ids[k]; + const x = coords[2 * i]; + const y = coords[2 * i + 1]; + + // skip near-duplicate points + if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue; + xp = x; + yp = y; + + // skip seed triangle points + if (i === i0 || i === i1 || i === i2) continue; + + // find a visible edge on the convex hull using edge hash + let start = 0; + for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) { + start = hullHash[(key + j) % this._hashSize]; + if (start !== -1 && start !== hullNext[start]) break; + } + + start = hullPrev[start]; + let e = start, q; + while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) { + e = q; + if (e === start) { + e = -1; + break; + } + } + if (e === -1) continue; // likely a near-duplicate point; skip it + + // add the first triangle from the point + let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]); + + // recursively flip triangles from the point until they satisfy the Delaunay condition + hullTri[i] = this._legalize(t + 2); + hullTri[e] = t; // keep track of boundary triangles on the hull + hullSize++; + + // walk forward through the hull, adding more triangles and flipping recursively + let n = hullNext[e]; + while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) { + t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]); + hullTri[i] = this._legalize(t + 2); + hullNext[n] = n; // mark as removed + hullSize--; + n = q; + } + + // walk backward from the other side, adding more triangles and flipping + if (e === start) { + while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) { + t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]); + this._legalize(t + 2); + hullTri[q] = t; + hullNext[e] = e; // mark as removed + hullSize--; + e = q; + } + } + + // update the hull indices + this._hullStart = hullPrev[i] = e; + hullNext[e] = hullPrev[n] = i; + hullNext[i] = n; + + // save the two new edges in the hash table + hullHash[this._hashKey(x, y)] = i; + hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e; + } + + this.hull = new Uint32Array(hullSize); + for (let i = 0, e = this._hullStart; i < hullSize; i++) { + this.hull[i] = e; + e = hullNext[e]; + } + + // trim typed triangle mesh arrays + this.triangles = this._triangles.subarray(0, this.trianglesLen); + this.halfedges = this._halfedges.subarray(0, this.trianglesLen); + } + + _hashKey(x, y) { + return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize; + } + + _legalize(a) { + const {_triangles: triangles, _halfedges: halfedges, coords} = this; + + let i = 0; + let ar = 0; + + // recursion eliminated with a fixed-size stack + while (true) { + const b = halfedges[a]; + + /* if the pair of triangles doesn't satisfy the Delaunay condition + * (p1 is inside the circumcircle of [p0, pl, pr]), flip them, + * then do the same check/flip recursively for the new pair of triangles + * + * pl pl + * /||\ / \ + * al/ || \bl al/ \a + * / || \ / \ + * / a||b \ flip /___ar___\ + * p0\ || /p1 => p0\---bl---/p1 + * \ || / \ / + * ar\ || /br b\ /br + * \||/ \ / + * pr pr + */ + const a0 = a - a % 3; + ar = a0 + (a + 2) % 3; + + if (b === -1) { // convex hull edge + if (i === 0) break; + a = EDGE_STACK[--i]; + continue; + } + + const b0 = b - b % 3; + const al = a0 + (a + 1) % 3; + const bl = b0 + (b + 2) % 3; + + const p0 = triangles[ar]; + const pr = triangles[a]; + const pl = triangles[al]; + const p1 = triangles[bl]; + + const illegal = inCircle( + coords[2 * p0], coords[2 * p0 + 1], + coords[2 * pr], coords[2 * pr + 1], + coords[2 * pl], coords[2 * pl + 1], + coords[2 * p1], coords[2 * p1 + 1]); + + if (illegal) { + triangles[a] = p1; + triangles[b] = p0; + + const hbl = halfedges[bl]; + + // edge swapped on the other side of the hull (rare); fix the halfedge reference + if (hbl === -1) { + let e = this._hullStart; + do { + if (this._hullTri[e] === bl) { + this._hullTri[e] = a; + break; + } + e = this._hullPrev[e]; + } while (e !== this._hullStart); + } + this._link(a, hbl); + this._link(b, halfedges[ar]); + this._link(ar, bl); + + const br = b0 + (b + 1) % 3; + + // don't worry about hitting the cap: it can only happen on extremely degenerate input + if (i < EDGE_STACK.length) { + EDGE_STACK[i++] = br; + } + } else { + if (i === 0) break; + a = EDGE_STACK[--i]; + } + } + + return ar; + } + + _link(a, b) { + this._halfedges[a] = b; + if (b !== -1) this._halfedges[b] = a; + } + + // add a new triangle given vertex indices and adjacent half-edge ids + _addTriangle(i0, i1, i2, a, b, c) { + const t = this.trianglesLen; + + this._triangles[t] = i0; + this._triangles[t + 1] = i1; + this._triangles[t + 2] = i2; + + this._link(t, a); + this._link(t + 1, b); + this._link(t + 2, c); + + this.trianglesLen += 3; + + return t; + } +} + +// monotonically increases with real angle, but doesn't need expensive trigonometry +function pseudoAngle(dx, dy) { + const p = dx / (Math.abs(dx) + Math.abs(dy)); + return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1] +} + +function dist(ax, ay, bx, by) { + const dx = ax - bx; + const dy = ay - by; + return dx * dx + dy * dy; +} + +function inCircle(ax, ay, bx, by, cx, cy, px, py) { + const dx = ax - px; + const dy = ay - py; + const ex = bx - px; + const ey = by - py; + const fx = cx - px; + const fy = cy - py; + + const ap = dx * dx + dy * dy; + const bp = ex * ex + ey * ey; + const cp = fx * fx + fy * fy; + + return dx * (ey * cp - bp * fy) - + dy * (ex * cp - bp * fx) + + ap * (ex * fy - ey * fx) < 0; +} + +function circumradius(ax, ay, bx, by, cx, cy) { + const dx = bx - ax; + const dy = by - ay; + const ex = cx - ax; + const ey = cy - ay; + + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + const d = 0.5 / (dx * ey - dy * ex); + + const x = (ey * bl - dy * cl) * d; + const y = (dx * cl - ex * bl) * d; + + return x * x + y * y; +} + +function circumcenter(ax, ay, bx, by, cx, cy) { + const dx = bx - ax; + const dy = by - ay; + const ex = cx - ax; + const ey = cy - ay; + + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + const d = 0.5 / (dx * ey - dy * ex); + + const x = ax + (ey * bl - dy * cl) * d; + const y = ay + (dx * cl - ex * bl) * d; + + return {x, y}; +} + +function quicksort(ids, dists, left, right) { + if (right - left <= 20) { + for (let i = left + 1; i <= right; i++) { + const temp = ids[i]; + const tempDist = dists[temp]; + let j = i - 1; + while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--]; + ids[j + 1] = temp; + } + } else { + const median = (left + right) >> 1; + let i = left + 1; + let j = right; + swap(ids, median, i); + if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right); + if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right); + if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i); + + const temp = ids[i]; + const tempDist = dists[temp]; + while (true) { + do i++; while (dists[ids[i]] < tempDist); + do j--; while (dists[ids[j]] > tempDist); + if (j < i) break; + swap(ids, i, j); + } + ids[left + 1] = ids[j]; + ids[j] = temp; + + if (right - i + 1 >= j - left) { + quicksort(ids, dists, i, right); + quicksort(ids, dists, left, j - 1); + } else { + quicksort(ids, dists, left, j - 1); + quicksort(ids, dists, i, right); + } + } +} + +function swap(arr, i, j) { + const tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; +} + +function defaultGetX(p) { + return p[0]; +} +function defaultGetY(p) { + return p[1]; +} + +const epsilon$2 = 1e-6; + +class Path { + constructor() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; + } + moveTo(x, y) { + this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`; + } + closePath() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } + } + lineTo(x, y) { + this._ += `L${this._x1 = +x},${this._y1 = +y}`; + } + arc(x, y, r) { + x = +x, y = +y, r = +r; + const x0 = x + r; + const y0 = y; + if (r < 0) throw new Error("negative radius"); + if (this._x1 === null) this._ += `M${x0},${y0}`; + else if (Math.abs(this._x1 - x0) > epsilon$2 || Math.abs(this._y1 - y0) > epsilon$2) this._ += "L" + x0 + "," + y0; + if (!r) return; + this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`; + } + rect(x, y, w, h) { + this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`; + } + value() { + return this._ || null; + } +} + +class Polygon { + constructor() { + this._ = []; + } + moveTo(x, y) { + this._.push([x, y]); + } + closePath() { + this._.push(this._[0].slice()); + } + lineTo(x, y) { + this._.push([x, y]); + } + value() { + return this._.length ? this._ : null; + } +} + +class Voronoi { + constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) { + if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error("invalid bounds"); + this.delaunay = delaunay; + this._circumcenters = new Float64Array(delaunay.points.length * 2); + this.vectors = new Float64Array(delaunay.points.length * 2); + this.xmax = xmax, this.xmin = xmin; + this.ymax = ymax, this.ymin = ymin; + this._init(); + } + update() { + this.delaunay.update(); + this._init(); + return this; + } + _init() { + const {delaunay: {points, hull, triangles}, vectors} = this; + let bx, by; // lazily computed barycenter of the hull + + // Compute circumcenters. + const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2); + for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) { + const t1 = triangles[i] * 2; + const t2 = triangles[i + 1] * 2; + const t3 = triangles[i + 2] * 2; + const x1 = points[t1]; + const y1 = points[t1 + 1]; + const x2 = points[t2]; + const y2 = points[t2 + 1]; + const x3 = points[t3]; + const y3 = points[t3 + 1]; + + const dx = x2 - x1; + const dy = y2 - y1; + const ex = x3 - x1; + const ey = y3 - y1; + const ab = (dx * ey - dy * ex) * 2; + + if (Math.abs(ab) < 1e-9) { + // For a degenerate triangle, the circumcenter is at the infinity, in a + // direction orthogonal to the halfedge and away from the “center” of + // the diagram , defined as the hull’s barycenter. + if (bx === undefined) { + bx = by = 0; + for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1]; + bx /= hull.length, by /= hull.length; + } + const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex); + x = (x1 + x3) / 2 - a * ey; + y = (y1 + y3) / 2 + a * ex; + } else { + const d = 1 / ab; + const bl = dx * dx + dy * dy; + const cl = ex * ex + ey * ey; + x = x1 + (ey * bl - dy * cl) * d; + y = y1 + (dx * cl - ex * bl) * d; + } + circumcenters[j] = x; + circumcenters[j + 1] = y; + } + + // Compute exterior cell rays. + let h = hull[hull.length - 1]; + let p0, p1 = h * 4; + let x0, x1 = points[2 * h]; + let y0, y1 = points[2 * h + 1]; + vectors.fill(0); + for (let i = 0; i < hull.length; ++i) { + h = hull[i]; + p0 = p1, x0 = x1, y0 = y1; + p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1]; + vectors[p0 + 2] = vectors[p1] = y0 - y1; + vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0; + } + } + render(context) { + const buffer = context == null ? context = new Path : undefined; + const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this; + if (hull.length <= 1) return null; + for (let i = 0, n = halfedges.length; i < n; ++i) { + const j = halfedges[i]; + if (j < i) continue; + const ti = Math.floor(i / 3) * 2; + const tj = Math.floor(j / 3) * 2; + const xi = circumcenters[ti]; + const yi = circumcenters[ti + 1]; + const xj = circumcenters[tj]; + const yj = circumcenters[tj + 1]; + this._renderSegment(xi, yi, xj, yj, context); + } + let h0, h1 = hull[hull.length - 1]; + for (let i = 0; i < hull.length; ++i) { + h0 = h1, h1 = hull[i]; + const t = Math.floor(inedges[h1] / 3) * 2; + const x = circumcenters[t]; + const y = circumcenters[t + 1]; + const v = h0 * 4; + const p = this._project(x, y, vectors[v + 2], vectors[v + 3]); + if (p) this._renderSegment(x, y, p[0], p[1], context); + } + return buffer && buffer.value(); + } + renderBounds(context) { + const buffer = context == null ? context = new Path : undefined; + context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin); + return buffer && buffer.value(); + } + renderCell(i, context) { + const buffer = context == null ? context = new Path : undefined; + const points = this._clip(i); + if (points === null || !points.length) return; + context.moveTo(points[0], points[1]); + let n = points.length; + while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2; + for (let i = 2; i < n; i += 2) { + if (points[i] !== points[i-2] || points[i+1] !== points[i-1]) + context.lineTo(points[i], points[i + 1]); + } + context.closePath(); + return buffer && buffer.value(); + } + *cellPolygons() { + const {delaunay: {points}} = this; + for (let i = 0, n = points.length / 2; i < n; ++i) { + const cell = this.cellPolygon(i); + if (cell) cell.index = i, yield cell; + } + } + cellPolygon(i) { + const polygon = new Polygon; + this.renderCell(i, polygon); + return polygon.value(); + } + _renderSegment(x0, y0, x1, y1, context) { + let S; + const c0 = this._regioncode(x0, y0); + const c1 = this._regioncode(x1, y1); + if (c0 === 0 && c1 === 0) { + context.moveTo(x0, y0); + context.lineTo(x1, y1); + } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) { + context.moveTo(S[0], S[1]); + context.lineTo(S[2], S[3]); + } + } + contains(i, x, y) { + if ((x = +x, x !== x) || (y = +y, y !== y)) return false; + return this.delaunay._step(i, x, y) === i; + } + *neighbors(i) { + const ci = this._clip(i); + if (ci) for (const j of this.delaunay.neighbors(i)) { + const cj = this._clip(j); + // find the common edge + if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) { + for (let aj = 0, lj = cj.length; aj < lj; aj += 2) { + if (ci[ai] === cj[aj] + && ci[ai + 1] === cj[aj + 1] + && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj] + && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) { + yield j; + break loop; + } + } + } + } + } + _cell(i) { + const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this; + const e0 = inedges[i]; + if (e0 === -1) return null; // coincident point + const points = []; + let e = e0; + do { + const t = Math.floor(e / 3); + points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]); + e = e % 3 === 2 ? e - 2 : e + 1; + if (triangles[e] !== i) break; // bad triangulation + e = halfedges[e]; + } while (e !== e0 && e !== -1); + return points; + } + _clip(i) { + // degenerate case (1 valid point: return the box) + if (i === 0 && this.delaunay.hull.length === 1) { + return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin]; + } + const points = this._cell(i); + if (points === null) return null; + const {vectors: V} = this; + const v = i * 4; + return this._simplify(V[v] || V[v + 1] + ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3]) + : this._clipFinite(i, points)); + } + _clipFinite(i, points) { + const n = points.length; + let P = null; + let x0, y0, x1 = points[n - 2], y1 = points[n - 1]; + let c0, c1 = this._regioncode(x1, y1); + let e0, e1 = 0; + for (let j = 0; j < n; j += 2) { + x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1]; + c0 = c1, c1 = this._regioncode(x1, y1); + if (c0 === 0 && c1 === 0) { + e0 = e1, e1 = 0; + if (P) P.push(x1, y1); + else P = [x1, y1]; + } else { + let S, sx0, sy0, sx1, sy1; + if (c0 === 0) { + if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue; + [sx0, sy0, sx1, sy1] = S; + } else { + if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue; + [sx1, sy1, sx0, sy0] = S; + e0 = e1, e1 = this._edgecode(sx0, sy0); + if (e0 && e1) this._edge(i, e0, e1, P, P.length); + if (P) P.push(sx0, sy0); + else P = [sx0, sy0]; + } + e0 = e1, e1 = this._edgecode(sx1, sy1); + if (e0 && e1) this._edge(i, e0, e1, P, P.length); + if (P) P.push(sx1, sy1); + else P = [sx1, sy1]; + } + } + if (P) { + e0 = e1, e1 = this._edgecode(P[0], P[1]); + if (e0 && e1) this._edge(i, e0, e1, P, P.length); + } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) { + return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin]; + } + return P; + } + _clipSegment(x0, y0, x1, y1, c0, c1) { + // for more robustness, always consider the segment in the same order + const flip = c0 < c1; + if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0]; + while (true) { + if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1]; + if (c0 & c1) return null; + let x, y, c = c0 || c1; + if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax; + else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin; + else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax; + else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin; + if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0); + else x1 = x, y1 = y, c1 = this._regioncode(x1, y1); + } + } + _clipInfinite(i, points, vx0, vy0, vxn, vyn) { + let P = Array.from(points), p; + if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]); + if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]); + if (P = this._clipFinite(i, P)) { + for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) { + c0 = c1, c1 = this._edgecode(P[j], P[j + 1]); + if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length; + } + } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) { + P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax]; + } + return P; + } + _edge(i, e0, e1, P, j) { + while (e0 !== e1) { + let x, y; + switch (e0) { + case 0b0101: e0 = 0b0100; continue; // top-left + case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top + case 0b0110: e0 = 0b0010; continue; // top-right + case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right + case 0b1010: e0 = 0b1000; continue; // bottom-right + case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom + case 0b1001: e0 = 0b0001; continue; // bottom-left + case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left + } + // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are + // undefined, the conditional statement will be executed. + if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) { + P.splice(j, 0, x, y), j += 2; + } + } + return j; + } + _project(x0, y0, vx, vy) { + let t = Infinity, c, x, y; + if (vy < 0) { // top + if (y0 <= this.ymin) return null; + if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx; + } else if (vy > 0) { // bottom + if (y0 >= this.ymax) return null; + if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx; + } + if (vx > 0) { // right + if (x0 >= this.xmax) return null; + if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy; + } else if (vx < 0) { // left + if (x0 <= this.xmin) return null; + if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy; + } + return [x, y]; + } + _edgecode(x, y) { + return (x === this.xmin ? 0b0001 + : x === this.xmax ? 0b0010 : 0b0000) + | (y === this.ymin ? 0b0100 + : y === this.ymax ? 0b1000 : 0b0000); + } + _regioncode(x, y) { + return (x < this.xmin ? 0b0001 + : x > this.xmax ? 0b0010 : 0b0000) + | (y < this.ymin ? 0b0100 + : y > this.ymax ? 0b1000 : 0b0000); + } + _simplify(P) { + if (P && P.length > 4) { + for (let i = 0; i < P.length; i+= 2) { + const j = (i + 2) % P.length, k = (i + 4) % P.length; + if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) { + P.splice(j, 2), i -= 2; + } + } + if (!P.length) P = null; + } + return P; + } +} + +const tau$2 = 2 * Math.PI, pow$2 = Math.pow; + +function pointX(p) { + return p[0]; +} + +function pointY(p) { + return p[1]; +} + +// A triangulation is collinear if all its triangles have a non-null area +function collinear(d) { + const {triangles, coords} = d; + for (let i = 0; i < triangles.length; i += 3) { + const a = 2 * triangles[i], + b = 2 * triangles[i + 1], + c = 2 * triangles[i + 2], + cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1]) + - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]); + if (cross > 1e-10) return false; + } + return true; +} + +function jitter(x, y, r) { + return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r]; +} + +class Delaunay { + static from(points, fx = pointX, fy = pointY, that) { + return new Delaunay("length" in points + ? flatArray(points, fx, fy, that) + : Float64Array.from(flatIterable(points, fx, fy, that))); + } + constructor(points) { + this._delaunator = new Delaunator(points); + this.inedges = new Int32Array(points.length / 2); + this._hullIndex = new Int32Array(points.length / 2); + this.points = this._delaunator.coords; + this._init(); + } + update() { + this._delaunator.update(); + this._init(); + return this; + } + _init() { + const d = this._delaunator, points = this.points; + + // check for collinear + if (d.hull && d.hull.length > 2 && collinear(d)) { + this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i) + .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors + const e = this.collinear[0], f = this.collinear[this.collinear.length - 1], + bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ], + r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]); + for (let i = 0, n = points.length / 2; i < n; ++i) { + const p = jitter(points[2 * i], points[2 * i + 1], r); + points[2 * i] = p[0]; + points[2 * i + 1] = p[1]; + } + this._delaunator = new Delaunator(points); + } else { + delete this.collinear; + } + + const halfedges = this.halfedges = this._delaunator.halfedges; + const hull = this.hull = this._delaunator.hull; + const triangles = this.triangles = this._delaunator.triangles; + const inedges = this.inedges.fill(-1); + const hullIndex = this._hullIndex.fill(-1); + + // Compute an index from each point to an (arbitrary) incoming halfedge + // Used to give the first neighbor of each point; for this reason, + // on the hull we give priority to exterior halfedges + for (let e = 0, n = halfedges.length; e < n; ++e) { + const p = triangles[e % 3 === 2 ? e - 2 : e + 1]; + if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e; + } + for (let i = 0, n = hull.length; i < n; ++i) { + hullIndex[hull[i]] = i; + } + + // degenerate case: 1 or 2 (distinct) points + if (hull.length <= 2 && hull.length > 0) { + this.triangles = new Int32Array(3).fill(-1); + this.halfedges = new Int32Array(3).fill(-1); + this.triangles[0] = hull[0]; + inedges[hull[0]] = 1; + if (hull.length === 2) { + inedges[hull[1]] = 0; + this.triangles[1] = hull[1]; + this.triangles[2] = hull[1]; + } + } + } + voronoi(bounds) { + return new Voronoi(this, bounds); + } + *neighbors(i) { + const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this; + + // degenerate case with several collinear points + if (collinear) { + const l = collinear.indexOf(i); + if (l > 0) yield collinear[l - 1]; + if (l < collinear.length - 1) yield collinear[l + 1]; + return; + } + + const e0 = inedges[i]; + if (e0 === -1) return; // coincident point + let e = e0, p0 = -1; + do { + yield p0 = triangles[e]; + e = e % 3 === 2 ? e - 2 : e + 1; + if (triangles[e] !== i) return; // bad triangulation + e = halfedges[e]; + if (e === -1) { + const p = hull[(_hullIndex[i] + 1) % hull.length]; + if (p !== p0) yield p; + return; + } + } while (e !== e0); + } + find(x, y, i = 0) { + if ((x = +x, x !== x) || (y = +y, y !== y)) return -1; + const i0 = i; + let c; + while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c; + return c; + } + _step(i, x, y) { + const {inedges, hull, _hullIndex, halfedges, triangles, points} = this; + if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1); + let c = i; + let dc = pow$2(x - points[i * 2], 2) + pow$2(y - points[i * 2 + 1], 2); + const e0 = inedges[i]; + let e = e0; + do { + let t = triangles[e]; + const dt = pow$2(x - points[t * 2], 2) + pow$2(y - points[t * 2 + 1], 2); + if (dt < dc) dc = dt, c = t; + e = e % 3 === 2 ? e - 2 : e + 1; + if (triangles[e] !== i) break; // bad triangulation + e = halfedges[e]; + if (e === -1) { + e = hull[(_hullIndex[i] + 1) % hull.length]; + if (e !== t) { + if (pow$2(x - points[e * 2], 2) + pow$2(y - points[e * 2 + 1], 2) < dc) return e; + } + break; + } + } while (e !== e0); + return c; + } + render(context) { + const buffer = context == null ? context = new Path : undefined; + const {points, halfedges, triangles} = this; + for (let i = 0, n = halfedges.length; i < n; ++i) { + const j = halfedges[i]; + if (j < i) continue; + const ti = triangles[i] * 2; + const tj = triangles[j] * 2; + context.moveTo(points[ti], points[ti + 1]); + context.lineTo(points[tj], points[tj + 1]); + } + this.renderHull(context); + return buffer && buffer.value(); + } + renderPoints(context, r) { + if (r === undefined && (!context || typeof context.moveTo !== "function")) r = context, context = null; + r = r == undefined ? 2 : +r; + const buffer = context == null ? context = new Path : undefined; + const {points} = this; + for (let i = 0, n = points.length; i < n; i += 2) { + const x = points[i], y = points[i + 1]; + context.moveTo(x + r, y); + context.arc(x, y, r, 0, tau$2); + } + return buffer && buffer.value(); + } + renderHull(context) { + const buffer = context == null ? context = new Path : undefined; + const {hull, points} = this; + const h = hull[0] * 2, n = hull.length; + context.moveTo(points[h], points[h + 1]); + for (let i = 1; i < n; ++i) { + const h = 2 * hull[i]; + context.lineTo(points[h], points[h + 1]); + } + context.closePath(); + return buffer && buffer.value(); + } + hullPolygon() { + const polygon = new Polygon; + this.renderHull(polygon); + return polygon.value(); + } + renderTriangle(i, context) { + const buffer = context == null ? context = new Path : undefined; + const {points, triangles} = this; + const t0 = triangles[i *= 3] * 2; + const t1 = triangles[i + 1] * 2; + const t2 = triangles[i + 2] * 2; + context.moveTo(points[t0], points[t0 + 1]); + context.lineTo(points[t1], points[t1 + 1]); + context.lineTo(points[t2], points[t2 + 1]); + context.closePath(); + return buffer && buffer.value(); + } + *trianglePolygons() { + const {triangles} = this; + for (let i = 0, n = triangles.length / 3; i < n; ++i) { + yield this.trianglePolygon(i); + } + } + trianglePolygon(i) { + const polygon = new Polygon; + this.renderTriangle(i, polygon); + return polygon.value(); + } +} + +function flatArray(points, fx, fy, that) { + const n = points.length; + const array = new Float64Array(n * 2); + for (let i = 0; i < n; ++i) { + const p = points[i]; + array[i * 2] = fx.call(that, p, i, points); + array[i * 2 + 1] = fy.call(that, p, i, points); + } + return array; +} + +function* flatIterable(points, fx, fy, that) { + let i = 0; + for (const p of points) { + yield fx.call(that, p, i, points); + yield fy.call(that, p, i, points); + ++i; + } +} + +var EOL = {}, + EOF = {}, + QUOTE = 34, + NEWLINE = 10, + RETURN = 13; + +function objectConverter(columns) { + return new Function("d", "return {" + columns.map(function(name, i) { + return JSON.stringify(name) + ": d[" + i + "] || \"\""; + }).join(",") + "}"); +} + +function customConverter(columns, f) { + var object = objectConverter(columns); + return function(row, i) { + return f(object(row), i, columns); + }; +} + +// Compute unique columns in order of discovery. +function inferColumns(rows) { + var columnSet = Object.create(null), + columns = []; + + rows.forEach(function(row) { + for (var column in row) { + if (!(column in columnSet)) { + columns.push(columnSet[column] = column); + } + } + }); + + return columns; +} + +function pad$1(value, width) { + var s = value + "", length = s.length; + return length < width ? new Array(width - length + 1).join(0) + s : s; +} + +function formatYear$1(year) { + return year < 0 ? "-" + pad$1(-year, 6) + : year > 9999 ? "+" + pad$1(year, 6) + : pad$1(year, 4); +} + +function formatDate(date) { + var hours = date.getUTCHours(), + minutes = date.getUTCMinutes(), + seconds = date.getUTCSeconds(), + milliseconds = date.getUTCMilliseconds(); + return isNaN(date) ? "Invalid Date" + : formatYear$1(date.getUTCFullYear()) + "-" + pad$1(date.getUTCMonth() + 1, 2) + "-" + pad$1(date.getUTCDate(), 2) + + (milliseconds ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + ":" + pad$1(seconds, 2) + "." + pad$1(milliseconds, 3) + "Z" + : seconds ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + ":" + pad$1(seconds, 2) + "Z" + : minutes || hours ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + "Z" + : ""); +} + +function dsvFormat(delimiter) { + var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), + DELIMITER = delimiter.charCodeAt(0); + + function parse(text, f) { + var convert, columns, rows = parseRows(text, function(row, i) { + if (convert) return convert(row, i - 1); + columns = row, convert = f ? customConverter(row, f) : objectConverter(row); + }); + rows.columns = columns || []; + return rows; + } + + function parseRows(text, f) { + var rows = [], // output rows + N = text.length, + I = 0, // current character index + n = 0, // current line number + t, // current token + eof = N <= 0, // current token followed by EOF? + eol = false; // current token followed by EOL? + + // Strip the trailing newline. + if (text.charCodeAt(N - 1) === NEWLINE) --N; + if (text.charCodeAt(N - 1) === RETURN) --N; + + function token() { + if (eof) return EOF; + if (eol) return eol = false, EOL; + + // Unescape quotes. + var i, j = I, c; + if (text.charCodeAt(j) === QUOTE) { + while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); + if ((i = I) >= N) eof = true; + else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + return text.slice(j + 1, i - 1).replace(/""/g, "\""); + } + + // Find next delimiter or newline. + while (I < N) { + if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + else if (c !== DELIMITER) continue; + return text.slice(j, i); + } + + // Return last token before EOF. + return eof = true, text.slice(j, N); + } + + while ((t = token()) !== EOF) { + var row = []; + while (t !== EOL && t !== EOF) row.push(t), t = token(); + if (f && (row = f(row, n++)) == null) continue; + rows.push(row); + } + + return rows; + } + + function preformatBody(rows, columns) { + return rows.map(function(row) { + return columns.map(function(column) { + return formatValue(row[column]); + }).join(delimiter); + }); + } + + function format(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n"); + } + + function formatBody(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return preformatBody(rows, columns).join("\n"); + } + + function formatRows(rows) { + return rows.map(formatRow).join("\n"); + } + + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + + function formatValue(value) { + return value == null ? "" + : value instanceof Date ? formatDate(value) + : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\"" + : value; + } + + return { + parse: parse, + parseRows: parseRows, + format: format, + formatBody: formatBody, + formatRows: formatRows, + formatRow: formatRow, + formatValue: formatValue + }; +} + +var csv$1 = dsvFormat(","); + +var csvParse = csv$1.parse; +var csvParseRows = csv$1.parseRows; +var csvFormat = csv$1.format; +var csvFormatBody = csv$1.formatBody; +var csvFormatRows = csv$1.formatRows; +var csvFormatRow = csv$1.formatRow; +var csvFormatValue = csv$1.formatValue; + +var tsv$1 = dsvFormat("\t"); + +var tsvParse = tsv$1.parse; +var tsvParseRows = tsv$1.parseRows; +var tsvFormat = tsv$1.format; +var tsvFormatBody = tsv$1.formatBody; +var tsvFormatRows = tsv$1.formatRows; +var tsvFormatRow = tsv$1.formatRow; +var tsvFormatValue = tsv$1.formatValue; + +function autoType(object) { + for (var key in object) { + var value = object[key].trim(), number, m; + if (!value) value = null; + else if (value === "true") value = true; + else if (value === "false") value = false; + else if (value === "NaN") value = NaN; + else if (!isNaN(number = +value)) value = number; + else if (m = value.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)) { + if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, "/").replace(/T/, " "); + value = new Date(value); + } + else continue; + object[key] = value; + } + return object; +} + +// https://github.com/d3/d3-dsv/issues/45 +const fixtz = new Date("2019-01-01T00:00").getHours() || new Date("2019-07-01T00:00").getHours(); + +function responseBlob(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.blob(); +} + +function blob(input, init) { + return fetch(input, init).then(responseBlob); +} + +function responseArrayBuffer(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.arrayBuffer(); +} + +function buffer(input, init) { + return fetch(input, init).then(responseArrayBuffer); +} + +function responseText(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + return response.text(); +} + +function text(input, init) { + return fetch(input, init).then(responseText); +} + +function dsvParse(parse) { + return function(input, init, row) { + if (arguments.length === 2 && typeof init === "function") row = init, init = undefined; + return text(input, init).then(function(response) { + return parse(response, row); + }); + }; +} + +function dsv(delimiter, input, init, row) { + if (arguments.length === 3 && typeof init === "function") row = init, init = undefined; + var format = dsvFormat(delimiter); + return text(input, init).then(function(response) { + return format.parse(response, row); + }); +} + +var csv = dsvParse(csvParse); +var tsv = dsvParse(tsvParse); + +function image(input, init) { + return new Promise(function(resolve, reject) { + var image = new Image; + for (var key in init) image[key] = init[key]; + image.onerror = reject; + image.onload = function() { resolve(image); }; + image.src = input; + }); +} + +function responseJson(response) { + if (!response.ok) throw new Error(response.status + " " + response.statusText); + if (response.status === 204 || response.status === 205) return; + return response.json(); +} + +function json(input, init) { + return fetch(input, init).then(responseJson); +} + +function parser(type) { + return (input, init) => text(input, init) + .then(text => (new DOMParser).parseFromString(text, type)); +} + +var xml = parser("application/xml"); + +var html = parser("text/html"); + +var svg = parser("image/svg+xml"); + +function center(x, y) { + var nodes, strength = 1; + + if (x == null) x = 0; + if (y == null) y = 0; + + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0; + + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x, sy += node.y; + } + + for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) { + node = nodes[i], node.x -= sx, node.y -= sy; + } + } + + force.initialize = function(_) { + nodes = _; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + return force; +} + +function tree_add(d) { + const x = +this._x.call(null, d), + y = +this._y.call(null, d); + return add(this.cover(x, y), x, y, d); +} + +function add(tree, x, y, d) { + if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + x1 = tree._x1, + y1 = tree._y1, + xm, + ym, + xp, + yp, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; +} + +function addAll(data) { + var d, i, n = data.length, + x, + y, + xz = new Array(n), + yz = new Array(n), + x0 = Infinity, + y0 = Infinity, + x1 = -Infinity, + y1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + } + + // If there were no (valid) points, abort. + if (x0 > x1 || y0 > y1) return this; + + // Expand the tree to cover the new points. + this.cover(x0, y0).cover(x1, y1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add(this, xz[i], yz[i], data[i]); + } + + return this; +} + +function tree_cover(x, y) { + if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points + + var x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1; + + // If the quadtree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing quadrant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + } + + // Otherwise, double repeatedly to cover. + else { + var z = x1 - x0 || 1, + node = this._root, + parent, + i; + + while (x0 > x || x >= x1 || y0 > y || y >= y1) { + i = (y < y0) << 1 | (x < x0); + parent = new Array(4), parent[i] = node, node = parent, z *= 2; + switch (i) { + case 0: x1 = x0 + z, y1 = y0 + z; break; + case 1: x0 = x1 - z, y1 = y0 + z; break; + case 2: x1 = x0 + z, y0 = y1 - z; break; + case 3: x0 = x1 - z, y0 = y1 - z; break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + return this; +} + +function tree_data() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; +} + +function tree_extent(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; +} + +function Quad(node, x0, y0, x1, y1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; +} + +function tree_find(x, y, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + x1, + y1, + x2, + y2, + x3 = this._x1, + y3 = this._y1, + quads = [], + node = this._root, + q, + i; + + if (node) quads.push(new Quad(node, x0, y0, x3, y3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius; + x3 = x + radius, y3 = y + radius; + radius *= radius; + } + + while (q = quads.pop()) { + + // Stop searching if this quadrant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0) continue; + + // Bisect the current quadrant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2; + + quads.push( + new Quad(node[3], xm, ym, x2, y2), + new Quad(node[2], x1, ym, xm, y2), + new Quad(node[1], xm, y1, x2, ym), + new Quad(node[0], x1, y1, xm, ym) + ); + + // Visit the closest quadrant first. + if (i = (y >= ym) << 1 | (x >= xm)) { + q = quads[quads.length - 1]; + quads[quads.length - 1] = quads[quads.length - 1 - i]; + quads[quads.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + d2 = dx * dx + dy * dy; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d; + x3 = x + d, y3 = y + d; + data = node.data; + } + } + } + + return data; +} + +function tree_remove(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1, + x, + y, + xm, + ym, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (!(parent = node, node = node[i = bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3]) + && node === (parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; +} + +function removeAll(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; +} + +function tree_root() { + return this._root; +} + +function tree_size() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; +} + +function tree_visit(callback) { + var quads = [], q, node = this._root, child, x0, y0, x1, y1; + if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + } + } + return this; +} + +function tree_visitAfter(callback) { + var quads = [], next = [], q; + if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.x1, q.y1); + } + return this; +} + +function defaultX(d) { + return d[0]; +} + +function tree_x(_) { + return arguments.length ? (this._x = _, this) : this._x; +} + +function defaultY(d) { + return d[1]; +} + +function tree_y(_) { + return arguments.length ? (this._y = _, this) : this._y; +} + +function quadtree(nodes, x, y) { + var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); +} + +function Quadtree(x, y, x0, y0, x1, y1) { + this._x = x; + this._y = y; + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + this._root = undefined; +} + +function leaf_copy(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; +} + +var treeProto = quadtree.prototype = Quadtree.prototype; + +treeProto.copy = function() { + var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy(node), copy; + + nodes = [{source: node, target: copy._root = new Array(4)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 4; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); + else node.target[i] = leaf_copy(child); + } + } + } + + return copy; +}; + +treeProto.add = tree_add; +treeProto.addAll = addAll; +treeProto.cover = tree_cover; +treeProto.data = tree_data; +treeProto.extent = tree_extent; +treeProto.find = tree_find; +treeProto.remove = tree_remove; +treeProto.removeAll = removeAll; +treeProto.root = tree_root; +treeProto.size = tree_size; +treeProto.visit = tree_visit; +treeProto.visitAfter = tree_visitAfter; +treeProto.x = tree_x; +treeProto.y = tree_y; + +function constant$4(x) { + return function() { + return x; + }; +} + +function jiggle(random) { + return (random() - 0.5) * 1e-6; +} + +function x$3(d) { + return d.x + d.vx; +} + +function y$3(d) { + return d.y + d.vy; +} + +function collide(radius) { + var nodes, + radii, + random, + strength = 1, + iterations = 1; + + if (typeof radius !== "function") radius = constant$4(radius == null ? 1 : +radius); + + function force() { + var i, n = nodes.length, + tree, + node, + xi, + yi, + ri, + ri2; + + for (var k = 0; k < iterations; ++k) { + tree = quadtree(nodes, x$3, y$3).visitAfter(prepare); + for (i = 0; i < n; ++i) { + node = nodes[i]; + ri = radii[node.index], ri2 = ri * ri; + xi = node.x + node.vx; + yi = node.y + node.vy; + tree.visit(apply); + } + } + + function apply(quad, x0, y0, x1, y1) { + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > node.index) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = jiggle(random), l += x * x; + if (y === 0) y = jiggle(random), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; + } + } + return; + } + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; + } + } + + function prepare(quad) { + if (quad.data) return quad.r = radii[quad.data.index]; + for (var i = quad.r = 0; i < 4; ++i) { + if (quad[i] && quad[i].r > quad.r) { + quad.r = quad[i].r; + } + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + radii = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); + } + + force.initialize = function(_nodes, _random) { + nodes = _nodes; + random = _random; + initialize(); + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : radius; + }; + + return force; +} + +function index$3(d) { + return d.index; +} + +function find(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("node not found: " + nodeId); + return node; +} + +function link$2(links) { + var id = index$3, + strength = defaultStrength, + strengths, + distance = constant$4(30), + distances, + nodes, + count, + bias, + random, + iterations = 1; + + if (links == null) links = []; + + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } + + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || jiggle(random); + y = target.y + target.vy - source.y - source.vy || jiggle(random); + l = Math.sqrt(x * x + y * y); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l; + target.vx -= x * (b = bias[i]); + target.vy -= y * b; + source.vx += x * (b = 1 - b); + source.vy += y * b; + } + } + } + + function initialize() { + if (!nodes) return; + + var i, + n = nodes.length, + m = links.length, + nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])), + link; + + for (i = 0, count = new Array(n); i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find(nodeById, link.source); + if (typeof link.target !== "object") link.target = find(nodeById, link.target); + count[link.source.index] = (count[link.source.index] || 0) + 1; + count[link.target.index] = (count[link.target.index] || 0) + 1; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); + } + + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); + } + + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); + } + } + + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); + } + } + + force.initialize = function(_nodes, _random) { + nodes = _nodes; + random = _random; + initialize(); + }; + + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; + + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$4(+_), initializeStrength(), force) : strength; + }; + + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : constant$4(+_), initializeDistance(), force) : distance; + }; + + return force; +} + +// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use +const a$2 = 1664525; +const c$4 = 1013904223; +const m$1 = 4294967296; // 2^32 + +function lcg$2() { + let s = 1; + return () => (s = (a$2 * s + c$4) % m$1) / m$1; +} + +function x$2(d) { + return d.x; +} + +function y$2(d) { + return d.y; +} + +var initialRadius = 10, + initialAngle = Math.PI * (3 - Math.sqrt(5)); + +function simulation(nodes) { + var simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = new Map(), + stepper = timer(step), + event = dispatch("tick", "end"), + random = lcg$2(); + + if (nodes == null) nodes = []; + + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } + + function tick(iterations) { + var i, n = nodes.length, node; + + if (iterations === undefined) iterations = 1; + + for (var k = 0; k < iterations; ++k) { + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.forEach(function(force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; + } + } + + return simulation; + } + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (node.fx != null) node.x = node.fx; + if (node.fy != null) node.y = node.fy; + if (isNaN(node.x) || isNaN(node.y)) { + var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle; + node.x = radius * Math.cos(angle); + node.y = radius * Math.sin(angle); + } + if (isNaN(node.vx) || isNaN(node.vy)) { + node.vx = node.vy = 0; + } + } + } + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes, random); + return force; + } + + initializeNodes(); + + return simulation = { + tick: tick, + + restart: function() { + return stepper.restart(step), simulation; + }, + + stop: function() { + return stepper.stop(), simulation; + }, + + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; + }, + + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, + + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, + + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, + + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, + + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, + + randomSource: function(_) { + return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random; + }, + + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, + + find: function(x, y, radius) { + var i = 0, + n = nodes.length, + dx, + dy, + d2, + node, + closest; + + if (radius == null) radius = Infinity; + else radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - node.y; + d2 = dx * dx + dy * dy; + if (d2 < radius) closest = node, radius = d2; + } + + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } + }; +} + +function manyBody() { + var nodes, + node, + random, + alpha, + strength = constant$4(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; + + function force(_) { + var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate); + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + strengths = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); + } + + function accumulate(quad) { + var strength = 0, q, c, weight = 0, x, y, i; + + // For internal nodes, accumulate forces from child quadrants. + if (quad.length) { + for (x = y = i = 0; i < 4; ++i) { + if ((q = quad[i]) && (c = Math.abs(q.value))) { + strength += q.value, weight += c, x += c * q.x, y += c * q.y; + } + } + quad.x = x / weight; + quad.y = y / weight; + } + + // For leaf nodes, accumulate forces from coincident quadrants. + else { + q = quad; + q.x = q.data.x; + q.y = q.data.y; + do strength += strengths[q.data.index]; + while (q = q.next); + } + + quad.value = strength; + } + + function apply(quad, x1, _, x2) { + if (!quad.value) return true; + + var x = quad.x - node.x, + y = quad.y - node.y, + w = x2 - x1, + l = x * x + y * y; + + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x === 0) x = jiggle(random), l += x * x; + if (y === 0) y = jiggle(random), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x * quad.value * alpha / l; + node.vy += y * quad.value * alpha / l; + } + return true; + } + + // Otherwise, process points directly. + else if (quad.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (quad.data !== node || quad.next) { + if (x === 0) x = jiggle(random), l += x * x; + if (y === 0) y = jiggle(random), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (quad.data !== node) { + w = strengths[quad.data.index] * alpha / l; + node.vx += x * w; + node.vy += y * w; + } while (quad = quad.next); + } + + force.initialize = function(_nodes, _random) { + nodes = _nodes; + random = _random; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : strength; + }; + + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; + + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; + + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; +} + +function radial$1(radius, x, y) { + var nodes, + strength = constant$4(0.1), + strengths, + radiuses; + + if (typeof radius !== "function") radius = constant$4(+radius); + if (x == null) x = 0; + if (y == null) y = 0; + + function force(alpha) { + for (var i = 0, n = nodes.length; i < n; ++i) { + var node = nodes[i], + dx = node.x - x || 1e-6, + dy = node.y - y || 1e-6, + r = Math.sqrt(dx * dx + dy * dy), + k = (radiuses[i] - r) * strengths[i] * alpha / r; + node.vx += dx * k; + node.vy += dy * k; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + radiuses = new Array(n); + for (i = 0; i < n; ++i) { + radiuses[i] = +radius(nodes[i], i, nodes); + strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _, initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : radius; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + return force; +} + +function x$1(x) { + var strength = constant$4(0.1), + nodes, + strengths, + xz; + + if (typeof x !== "function") x = constant$4(x == null ? 0 : +x); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + xz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : strength; + }; + + force.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : x; + }; + + return force; +} + +function y$1(y) { + var strength = constant$4(0.1), + nodes, + strengths, + yz; + + if (typeof y !== "function") y = constant$4(y == null ? 0 : +y); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + yz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : strength; + }; + + force.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$4(+_), initialize(), force) : y; + }; + + return force; +} + +function formatDecimal(x) { + return Math.abs(x = Math.round(x)) >= 1e21 + ? x.toLocaleString("en").replace(/,/g, "") + : x.toString(10); +} + +// Computes the decimal coefficient and exponent of the specified number x with +// significant digits p, where x is positive and p is in [1, 21] or undefined. +// For example, formatDecimalParts(1.23) returns ["123", 0]. +function formatDecimalParts(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); + + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; +} + +function exponent(x) { + return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN; +} + +function formatGroup(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } + + return t.reverse().join(thousands); + }; +} + +function formatNumerals(numerals) { + return function(value) { + return value.replace(/[0-9]/g, function(i) { + return numerals[+i]; + }); + }; +} + +// [[fill]align][sign][symbol][0][width][,][.precision][~][type] +var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; + +function formatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + var match; + return new FormatSpecifier({ + fill: match[1], + align: match[2], + sign: match[3], + symbol: match[4], + zero: match[5], + width: match[6], + comma: match[7], + precision: match[8] && match[8].slice(1), + trim: match[9], + type: match[10] + }); +} + +formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof + +function FormatSpecifier(specifier) { + this.fill = specifier.fill === undefined ? " " : specifier.fill + ""; + this.align = specifier.align === undefined ? ">" : specifier.align + ""; + this.sign = specifier.sign === undefined ? "-" : specifier.sign + ""; + this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + ""; + this.zero = !!specifier.zero; + this.width = specifier.width === undefined ? undefined : +specifier.width; + this.comma = !!specifier.comma; + this.precision = specifier.precision === undefined ? undefined : +specifier.precision; + this.trim = !!specifier.trim; + this.type = specifier.type === undefined ? "" : specifier.type + ""; +} + +FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width === undefined ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) + + (this.trim ? "~" : "") + + this.type; +}; + +// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. +function formatTrim(s) { + out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (s[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break; + } + } + return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; +} + +var prefixExponent; + +function formatPrefixAuto(x, p) { + var d = formatDecimalParts(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y! +} + +function formatRounded(x, p) { + var d = formatDecimalParts(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); +} + +var formatTypes = { + "%": (x, p) => (x * 100).toFixed(p), + "b": (x) => Math.round(x).toString(2), + "c": (x) => x + "", + "d": formatDecimal, + "e": (x, p) => x.toExponential(p), + "f": (x, p) => x.toFixed(p), + "g": (x, p) => x.toPrecision(p), + "o": (x) => Math.round(x).toString(8), + "p": (x, p) => formatRounded(x * 100, p), + "r": formatRounded, + "s": formatPrefixAuto, + "X": (x) => Math.round(x).toString(16).toUpperCase(), + "x": (x) => Math.round(x).toString(16) +}; + +function identity$6(x) { + return x; +} + +var map = Array.prototype.map, + prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; + +function formatLocale$1(locale) { + var group = locale.grouping === undefined || locale.thousands === undefined ? identity$6 : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""), + currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "", + currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "", + decimal = locale.decimal === undefined ? "." : locale.decimal + "", + numerals = locale.numerals === undefined ? identity$6 : formatNumerals(map.call(locale.numerals, String)), + percent = locale.percent === undefined ? "%" : locale.percent + "", + minus = locale.minus === undefined ? "−" : locale.minus + "", + nan = locale.nan === undefined ? "NaN" : locale.nan + ""; + + function newFormat(specifier) { + specifier = formatSpecifier(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + trim = specifier.trim, + type = specifier.type; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // The "" type, and any invalid type, is an alias for ".12~g". + else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g"; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = formatTypes[type], + maybeSuffix = /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision === undefined ? 6 + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Determine the sign. -0 is not less than 0, but 1 / -0 is! + var valueNegative = value < 0 || 1 / value < 0; + + // Perform the initial formatting. + value = isNaN(value) ? nan : formatType(Math.abs(value), precision); + + // Trim insignificant zeros. + if (trim) value = formatTrim(value); + + // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign. + if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value” part that can be + // grouped, and fractional or exponential “suffix” part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } + + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); + + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; + + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": value = valuePrefix + value + valueSuffix + padding; break; + case "=": value = valuePrefix + padding + value + valueSuffix; break; + case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; + default: value = padding + valuePrefix + value + valueSuffix; break; + } + + return numerals(value); + } + + format.toString = function() { + return specifier + ""; + }; + + return format; + } + + function formatPrefix(specifier, value) { + var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } + + return { + format: newFormat, + formatPrefix: formatPrefix + }; +} + +var locale$1; +exports.format = void 0; +exports.formatPrefix = void 0; + +defaultLocale$1({ + thousands: ",", + grouping: [3], + currency: ["$", ""] +}); + +function defaultLocale$1(definition) { + locale$1 = formatLocale$1(definition); + exports.format = locale$1.format; + exports.formatPrefix = locale$1.formatPrefix; + return locale$1; +} + +function precisionFixed(step) { + return Math.max(0, -exponent(Math.abs(step))); +} + +function precisionPrefix(step, value) { + return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); +} + +function precisionRound(step, max) { + step = Math.abs(step), max = Math.abs(max) - step; + return Math.max(0, exponent(max) - exponent(step)) + 1; +} + +var epsilon$1 = 1e-6; +var epsilon2 = 1e-12; +var pi$1 = Math.PI; +var halfPi$1 = pi$1 / 2; +var quarterPi = pi$1 / 4; +var tau$1 = pi$1 * 2; + +var degrees = 180 / pi$1; +var radians = pi$1 / 180; + +var abs$1 = Math.abs; +var atan = Math.atan; +var atan2$1 = Math.atan2; +var cos$1 = Math.cos; +var ceil = Math.ceil; +var exp = Math.exp; +var hypot = Math.hypot; +var log$1 = Math.log; +var pow$1 = Math.pow; +var sin$1 = Math.sin; +var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; +var sqrt$2 = Math.sqrt; +var tan = Math.tan; + +function acos$1(x) { + return x > 1 ? 0 : x < -1 ? pi$1 : Math.acos(x); +} + +function asin$1(x) { + return x > 1 ? halfPi$1 : x < -1 ? -halfPi$1 : Math.asin(x); +} + +function haversin(x) { + return (x = sin$1(x / 2)) * x; +} + +function noop$1() {} + +function streamGeometry(geometry, stream) { + if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { + streamGeometryType[geometry.type](geometry, stream); + } +} + +var streamObjectType = { + Feature: function(object, stream) { + streamGeometry(object.geometry, stream); + }, + FeatureCollection: function(object, stream) { + var features = object.features, i = -1, n = features.length; + while (++i < n) streamGeometry(features[i].geometry, stream); + } +}; + +var streamGeometryType = { + Sphere: function(object, stream) { + stream.sphere(); + }, + Point: function(object, stream) { + object = object.coordinates; + stream.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); + }, + LineString: function(object, stream) { + streamLine(object.coordinates, stream, 0); + }, + MultiLineString: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamLine(coordinates[i], stream, 0); + }, + Polygon: function(object, stream) { + streamPolygon(object.coordinates, stream); + }, + MultiPolygon: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamPolygon(coordinates[i], stream); + }, + GeometryCollection: function(object, stream) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) streamGeometry(geometries[i], stream); + } +}; + +function streamLine(coordinates, stream, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + stream.lineStart(); + while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); + stream.lineEnd(); +} + +function streamPolygon(coordinates, stream) { + var i = -1, n = coordinates.length; + stream.polygonStart(); + while (++i < n) streamLine(coordinates[i], stream, 1); + stream.polygonEnd(); +} + +function geoStream(object, stream) { + if (object && streamObjectType.hasOwnProperty(object.type)) { + streamObjectType[object.type](object, stream); + } else { + streamGeometry(object, stream); + } +} + +var areaRingSum$1 = new Adder(); + +// hello? + +var areaSum$1 = new Adder(), + lambda00$2, + phi00$2, + lambda0$2, + cosPhi0$1, + sinPhi0$1; + +var areaStream$1 = { + point: noop$1, + lineStart: noop$1, + lineEnd: noop$1, + polygonStart: function() { + areaRingSum$1 = new Adder(); + areaStream$1.lineStart = areaRingStart$1; + areaStream$1.lineEnd = areaRingEnd$1; + }, + polygonEnd: function() { + var areaRing = +areaRingSum$1; + areaSum$1.add(areaRing < 0 ? tau$1 + areaRing : areaRing); + this.lineStart = this.lineEnd = this.point = noop$1; + }, + sphere: function() { + areaSum$1.add(tau$1); + } +}; + +function areaRingStart$1() { + areaStream$1.point = areaPointFirst$1; +} + +function areaRingEnd$1() { + areaPoint$1(lambda00$2, phi00$2); +} + +function areaPointFirst$1(lambda, phi) { + areaStream$1.point = areaPoint$1; + lambda00$2 = lambda, phi00$2 = phi; + lambda *= radians, phi *= radians; + lambda0$2 = lambda, cosPhi0$1 = cos$1(phi = phi / 2 + quarterPi), sinPhi0$1 = sin$1(phi); +} + +function areaPoint$1(lambda, phi) { + lambda *= radians, phi *= radians; + phi = phi / 2 + quarterPi; // half the angular distance from south pole + + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dLambda = lambda - lambda0$2, + sdLambda = dLambda >= 0 ? 1 : -1, + adLambda = sdLambda * dLambda, + cosPhi = cos$1(phi), + sinPhi = sin$1(phi), + k = sinPhi0$1 * sinPhi, + u = cosPhi0$1 * cosPhi + k * cos$1(adLambda), + v = k * sdLambda * sin$1(adLambda); + areaRingSum$1.add(atan2$1(v, u)); + + // Advance the previous points. + lambda0$2 = lambda, cosPhi0$1 = cosPhi, sinPhi0$1 = sinPhi; +} + +function area$2(object) { + areaSum$1 = new Adder(); + geoStream(object, areaStream$1); + return areaSum$1 * 2; +} + +function spherical(cartesian) { + return [atan2$1(cartesian[1], cartesian[0]), asin$1(cartesian[2])]; +} + +function cartesian(spherical) { + var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); + return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; +} + +function cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +function cartesianCross(a, b) { + return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; +} + +// TODO return a +function cartesianAddInPlace(a, b) { + a[0] += b[0], a[1] += b[1], a[2] += b[2]; +} + +function cartesianScale(vector, k) { + return [vector[0] * k, vector[1] * k, vector[2] * k]; +} + +// TODO return d +function cartesianNormalizeInPlace(d) { + var l = sqrt$2(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l, d[1] /= l, d[2] /= l; +} + +var lambda0$1, phi0, lambda1, phi1, // bounds + lambda2, // previous lambda-coordinate + lambda00$1, phi00$1, // first point + p0, // previous 3D point + deltaSum, + ranges, + range; + +var boundsStream$2 = { + point: boundsPoint$1, + lineStart: boundsLineStart, + lineEnd: boundsLineEnd, + polygonStart: function() { + boundsStream$2.point = boundsRingPoint; + boundsStream$2.lineStart = boundsRingStart; + boundsStream$2.lineEnd = boundsRingEnd; + deltaSum = new Adder(); + areaStream$1.polygonStart(); + }, + polygonEnd: function() { + areaStream$1.polygonEnd(); + boundsStream$2.point = boundsPoint$1; + boundsStream$2.lineStart = boundsLineStart; + boundsStream$2.lineEnd = boundsLineEnd; + if (areaRingSum$1 < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + else if (deltaSum > epsilon$1) phi1 = 90; + else if (deltaSum < -epsilon$1) phi0 = -90; + range[0] = lambda0$1, range[1] = lambda1; + }, + sphere: function() { + lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + } +}; + +function boundsPoint$1(lambda, phi) { + ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; +} + +function linePoint(lambda, phi) { + var p = cartesian([lambda * radians, phi * radians]); + if (p0) { + var normal = cartesianCross(p0, p), + equatorial = [normal[1], -normal[0], 0], + inflection = cartesianCross(equatorial, normal); + cartesianNormalizeInPlace(inflection); + inflection = spherical(inflection); + var delta = lambda - lambda2, + sign = delta > 0 ? 1 : -1, + lambdai = inflection[0] * degrees * sign, + phii, + antimeridian = abs$1(delta) > 180; + if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { + phii = inflection[1] * degrees; + if (phii > phi1) phi1 = phii; + } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { + phii = -inflection[1] * degrees; + if (phii < phi0) phi0 = phii; + } else { + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + if (antimeridian) { + if (lambda < lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } else { + if (lambda1 >= lambda0$1) { + if (lambda < lambda0$1) lambda0$1 = lambda; + if (lambda > lambda1) lambda1 = lambda; + } else { + if (lambda > lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } + } + } else { + ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); + } + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + p0 = p, lambda2 = lambda; +} + +function boundsLineStart() { + boundsStream$2.point = linePoint; +} + +function boundsLineEnd() { + range[0] = lambda0$1, range[1] = lambda1; + boundsStream$2.point = boundsPoint$1; + p0 = null; +} + +function boundsRingPoint(lambda, phi) { + if (p0) { + var delta = lambda - lambda2; + deltaSum.add(abs$1(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); + } else { + lambda00$1 = lambda, phi00$1 = phi; + } + areaStream$1.point(lambda, phi); + linePoint(lambda, phi); +} + +function boundsRingStart() { + areaStream$1.lineStart(); +} + +function boundsRingEnd() { + boundsRingPoint(lambda00$1, phi00$1); + areaStream$1.lineEnd(); + if (abs$1(deltaSum) > epsilon$1) lambda0$1 = -(lambda1 = 180); + range[0] = lambda0$1, range[1] = lambda1; + p0 = null; +} + +// Finds the left-right distance between two longitudes. +// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want +// the distance between ±180° to be 360°. +function angle(lambda0, lambda1) { + return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; +} + +function rangeCompare(a, b) { + return a[0] - b[0]; +} + +function rangeContains(range, x) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; +} + +function bounds(feature) { + var i, n, a, b, merged, deltaMax, delta; + + phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); + ranges = []; + geoStream(feature, boundsStream$2); + + // First, sort ranges by their minimum longitudes. + if (n = ranges.length) { + ranges.sort(rangeCompare); + + // Then, merge any ranges that overlap. + for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { + b = ranges[i]; + if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + + // Finally, find the largest gap between the merged ranges. + // The final bounding box will be the inverse of this gap. + for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { + b = merged[i]; + if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; + } + } + + ranges = range = null; + + return lambda0$1 === Infinity || phi0 === Infinity + ? [[NaN, NaN], [NaN, NaN]] + : [[lambda0$1, phi0], [lambda1, phi1]]; +} + +var W0, W1, + X0$1, Y0$1, Z0$1, + X1$1, Y1$1, Z1$1, + X2$1, Y2$1, Z2$1, + lambda00, phi00, // first point + x0$4, y0$4, z0; // previous point + +var centroidStream$1 = { + sphere: noop$1, + point: centroidPoint$1, + lineStart: centroidLineStart$1, + lineEnd: centroidLineEnd$1, + polygonStart: function() { + centroidStream$1.lineStart = centroidRingStart$1; + centroidStream$1.lineEnd = centroidRingEnd$1; + }, + polygonEnd: function() { + centroidStream$1.lineStart = centroidLineStart$1; + centroidStream$1.lineEnd = centroidLineEnd$1; + } +}; + +// Arithmetic mean of Cartesian vectors. +function centroidPoint$1(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); +} + +function centroidPointCartesian(x, y, z) { + ++W0; + X0$1 += (x - X0$1) / W0; + Y0$1 += (y - Y0$1) / W0; + Z0$1 += (z - Z0$1) / W0; +} + +function centroidLineStart$1() { + centroidStream$1.point = centroidLinePointFirst; +} + +function centroidLinePointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + x0$4 = cosPhi * cos$1(lambda); + y0$4 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidStream$1.point = centroidLinePoint; + centroidPointCartesian(x0$4, y0$4, z0); +} + +function centroidLinePoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + w = atan2$1(sqrt$2((w = y0$4 * z - z0 * y) * w + (w = z0 * x - x0$4 * z) * w + (w = x0$4 * y - y0$4 * x) * w), x0$4 * x + y0$4 * y + z0 * z); + W1 += w; + X1$1 += w * (x0$4 + (x0$4 = x)); + Y1$1 += w * (y0$4 + (y0$4 = y)); + Z1$1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0$4, y0$4, z0); +} + +function centroidLineEnd$1() { + centroidStream$1.point = centroidPoint$1; +} + +// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, +// J. Applied Mechanics 42, 239 (1975). +function centroidRingStart$1() { + centroidStream$1.point = centroidRingPointFirst; +} + +function centroidRingEnd$1() { + centroidRingPoint(lambda00, phi00); + centroidStream$1.point = centroidPoint$1; +} + +function centroidRingPointFirst(lambda, phi) { + lambda00 = lambda, phi00 = phi; + lambda *= radians, phi *= radians; + centroidStream$1.point = centroidRingPoint; + var cosPhi = cos$1(phi); + x0$4 = cosPhi * cos$1(lambda); + y0$4 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidPointCartesian(x0$4, y0$4, z0); +} + +function centroidRingPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + cx = y0$4 * z - z0 * y, + cy = z0 * x - x0$4 * z, + cz = x0$4 * y - y0$4 * x, + m = hypot(cx, cy, cz), + w = asin$1(m), // line weight = angle + v = m && -w / m; // area weight multiplier + X2$1.add(v * cx); + Y2$1.add(v * cy); + Z2$1.add(v * cz); + W1 += w; + X1$1 += w * (x0$4 + (x0$4 = x)); + Y1$1 += w * (y0$4 + (y0$4 = y)); + Z1$1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0$4, y0$4, z0); +} + +function centroid$1(object) { + W0 = W1 = + X0$1 = Y0$1 = Z0$1 = + X1$1 = Y1$1 = Z1$1 = 0; + X2$1 = new Adder(); + Y2$1 = new Adder(); + Z2$1 = new Adder(); + geoStream(object, centroidStream$1); + + var x = +X2$1, + y = +Y2$1, + z = +Z2$1, + m = hypot(x, y, z); + + // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. + if (m < epsilon2) { + x = X1$1, y = Y1$1, z = Z1$1; + // If the feature has zero length, fall back to arithmetic mean of point vectors. + if (W1 < epsilon$1) x = X0$1, y = Y0$1, z = Z0$1; + m = hypot(x, y, z); + // If the feature still has an undefined ccentroid, then return. + if (m < epsilon2) return [NaN, NaN]; + } + + return [atan2$1(y, x) * degrees, asin$1(z / m) * degrees]; +} + +function constant$3(x) { + return function() { + return x; + }; +} + +function compose(a, b) { + + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + + return compose; +} + +function rotationIdentity(lambda, phi) { + if (abs$1(lambda) > pi$1) lambda -= Math.round(lambda / tau$1) * tau$1; + return [lambda, phi]; +} + +rotationIdentity.invert = rotationIdentity; + +function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { + return (deltaLambda %= tau$1) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) + : rotationLambda(deltaLambda)) + : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) + : rotationIdentity); +} + +function forwardRotationLambda(deltaLambda) { + return function(lambda, phi) { + lambda += deltaLambda; + if (abs$1(lambda) > pi$1) lambda -= Math.round(lambda / tau$1) * tau$1; + return [lambda, phi]; + }; +} + +function rotationLambda(deltaLambda) { + var rotation = forwardRotationLambda(deltaLambda); + rotation.invert = forwardRotationLambda(-deltaLambda); + return rotation; +} + +function rotationPhiGamma(deltaPhi, deltaGamma) { + var cosDeltaPhi = cos$1(deltaPhi), + sinDeltaPhi = sin$1(deltaPhi), + cosDeltaGamma = cos$1(deltaGamma), + sinDeltaGamma = sin$1(deltaGamma); + + function rotation(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaPhi + x * sinDeltaPhi; + return [ + atan2$1(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), + asin$1(k * cosDeltaGamma + y * sinDeltaGamma) + ]; + } + + rotation.invert = function(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaGamma - y * sinDeltaGamma; + return [ + atan2$1(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), + asin$1(k * cosDeltaPhi - x * sinDeltaPhi) + ]; + }; + + return rotation; +} + +function rotation(rotate) { + rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); + + function forward(coordinates) { + coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates; + } + + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates; + }; + + return forward; +} + +// Generates a circle centered at [0°, 0°], with a given radius and precision. +function circleStream(stream, radius, delta, direction, t0, t1) { + if (!delta) return; + var cosRadius = cos$1(radius), + sinRadius = sin$1(radius), + step = direction * delta; + if (t0 == null) { + t0 = radius + direction * tau$1; + t1 = radius - step / 2; + } else { + t0 = circleRadius(cosRadius, t0); + t1 = circleRadius(cosRadius, t1); + if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$1; + } + for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { + point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); + stream.point(point[0], point[1]); + } +} + +// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. +function circleRadius(cosRadius, point) { + point = cartesian(point), point[0] -= cosRadius; + cartesianNormalizeInPlace(point); + var radius = acos$1(-point[1]); + return ((-point[2] < 0 ? -radius : radius) + tau$1 - epsilon$1) % tau$1; +} + +function circle$1() { + var center = constant$3([0, 0]), + radius = constant$3(90), + precision = constant$3(2), + ring, + rotate, + stream = {point: point}; + + function point(x, y) { + ring.push(x = rotate(x, y)); + x[0] *= degrees, x[1] *= degrees; + } + + function circle() { + var c = center.apply(this, arguments), + r = radius.apply(this, arguments) * radians, + p = precision.apply(this, arguments) * radians; + ring = []; + rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; + circleStream(stream, r, p, 1); + c = {type: "Polygon", coordinates: [ring]}; + ring = rotate = null; + return c; + } + + circle.center = function(_) { + return arguments.length ? (center = typeof _ === "function" ? _ : constant$3([+_[0], +_[1]]), circle) : center; + }; + + circle.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$3(+_), circle) : radius; + }; + + circle.precision = function(_) { + return arguments.length ? (precision = typeof _ === "function" ? _ : constant$3(+_), circle) : precision; + }; + + return circle; +} + +function clipBuffer() { + var lines = [], + line; + return { + point: function(x, y, m) { + line.push([x, y, m]); + }, + lineStart: function() { + lines.push(line = []); + }, + lineEnd: noop$1, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + }, + result: function() { + var result = lines; + lines = []; + line = null; + return result; + } + }; +} + +function pointEqual(a, b) { + return abs$1(a[0] - b[0]) < epsilon$1 && abs$1(a[1] - b[1]) < epsilon$1; +} + +function Intersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; // another intersection + this.e = entry; // is an entry? + this.v = false; // visited + this.n = this.p = null; // next & previous +} + +// A generalized polygon clipping algorithm: given a polygon that has been cut +// into its visible line segments, and rejoins the segments by interpolating +// along the clip edge. +function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { + var subject = [], + clip = [], + i, + n; + + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n], x; + + if (pointEqual(p0, p1)) { + if (!p0[2] && !p1[2]) { + stream.lineStart(); + for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); + stream.lineEnd(); + return; + } + // handle degenerate cases by moving the point + p1[0] += 2 * epsilon$1; + } + + subject.push(x = new Intersection(p0, segment, null, true)); + clip.push(x.o = new Intersection(p0, null, x, false)); + subject.push(x = new Intersection(p1, segment, null, false)); + clip.push(x.o = new Intersection(p1, null, x, true)); + }); + + if (!subject.length) return; + + clip.sort(compareIntersection); + link$1(subject); + link$1(clip); + + for (i = 0, n = clip.length; i < n; ++i) { + clip[i].e = startInside = !startInside; + } + + var start = subject[0], + points, + point; + + while (1) { + // Find first unvisited intersection. + var current = start, + isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + stream.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, stream); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, stream); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + stream.lineEnd(); + } +} + +function link$1(array) { + if (!(n = array.length)) return; + var n, + i = 0, + a = array[0], + b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; +} + +function longitude(point) { + return abs$1(point[0]) <= pi$1 ? point[0] : sign$1(point[0]) * ((abs$1(point[0]) + pi$1) % tau$1 - pi$1); +} + +function polygonContains(polygon, point) { + var lambda = longitude(point), + phi = point[1], + sinPhi = sin$1(phi), + normal = [sin$1(lambda), -cos$1(lambda), 0], + angle = 0, + winding = 0; + + var sum = new Adder(); + + if (sinPhi === 1) phi = halfPi$1 + epsilon$1; + else if (sinPhi === -1) phi = -halfPi$1 - epsilon$1; + + for (var i = 0, n = polygon.length; i < n; ++i) { + if (!(m = (ring = polygon[i]).length)) continue; + var ring, + m, + point0 = ring[m - 1], + lambda0 = longitude(point0), + phi0 = point0[1] / 2 + quarterPi, + sinPhi0 = sin$1(phi0), + cosPhi0 = cos$1(phi0); + + for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { + var point1 = ring[j], + lambda1 = longitude(point1), + phi1 = point1[1] / 2 + quarterPi, + sinPhi1 = sin$1(phi1), + cosPhi1 = cos$1(phi1), + delta = lambda1 - lambda0, + sign = delta >= 0 ? 1 : -1, + absDelta = sign * delta, + antimeridian = absDelta > pi$1, + k = sinPhi0 * sinPhi1; + + sum.add(atan2$1(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); + angle += antimeridian ? delta + sign * tau$1 : delta; + + // Are the longitudes either side of the point’s meridian (lambda), + // and are the latitudes smaller than the parallel (phi)? + if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { + var arc = cartesianCross(cartesian(point0), cartesian(point1)); + cartesianNormalizeInPlace(arc); + var intersection = cartesianCross(normal, arc); + cartesianNormalizeInPlace(intersection); + var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]); + if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { + winding += antimeridian ^ delta >= 0 ? 1 : -1; + } + } + } + } + + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a lambda + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (angle < -epsilon$1 || angle < epsilon$1 && sum < -epsilon2) ^ (winding & 1); +} + +function clip(pointVisible, clipLine, interpolate, start) { + return function(sink) { + var line = clipLine(sink), + ringBuffer = clipBuffer(), + ringSink = clipLine(ringBuffer), + polygonStarted = false, + polygon, + segments, + ring; + + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = merge(segments); + var startInside = polygonContains(polygon, start); + if (segments.length) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + clipRejoin(segments, compareIntersection, startInside, interpolate, sink); + } else if (startInside) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + } + if (polygonStarted) sink.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + sink.polygonStart(); + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + sink.polygonEnd(); + } + }; + + function point(lambda, phi) { + if (pointVisible(lambda, phi)) sink.point(lambda, phi); + } + + function pointLine(lambda, phi) { + line.point(lambda, phi); + } + + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + + function pointRing(lambda, phi) { + ring.push([lambda, phi]); + ringSink.point(lambda, phi); + } + + function ringStart() { + ringSink.lineStart(); + ring = []; + } + + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringSink.lineEnd(); + + var clean = ringSink.clean(), + ringSegments = ringBuffer.result(), + i, n = ringSegments.length, m, + segment, + point; + + ring.pop(); + polygon.push(ring); + ring = null; + + if (!n) return; + + // No intersections. + if (clean & 1) { + segment = ringSegments[0]; + if ((m = segment.length - 1) > 0) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); + sink.lineEnd(); + } + return; + } + + // Rejoin connected segments. + // TODO reuse ringBuffer.rejoin()? + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + + segments.push(ringSegments.filter(validSegment)); + } + + return clip; + }; +} + +function validSegment(segment) { + return segment.length > 1; +} + +// Intersections are sorted along the clip edge. For both antimeridian cutting +// and circle clipping, the same comparison is used. +function compareIntersection(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfPi$1 - epsilon$1 : halfPi$1 - a[1]) + - ((b = b.x)[0] < 0 ? b[1] - halfPi$1 - epsilon$1 : halfPi$1 - b[1]); +} + +var clipAntimeridian = clip( + function() { return true; }, + clipAntimeridianLine, + clipAntimeridianInterpolate, + [-pi$1, -halfPi$1] +); + +// Takes a line and cuts into visible segments. Return values: 0 - there were +// intersections or the line was empty; 1 - no intersections; 2 - there were +// intersections, and the first and last segments should be rejoined. +function clipAntimeridianLine(stream) { + var lambda0 = NaN, + phi0 = NaN, + sign0 = NaN, + clean; // no intersections + + return { + lineStart: function() { + stream.lineStart(); + clean = 1; + }, + point: function(lambda1, phi1) { + var sign1 = lambda1 > 0 ? pi$1 : -pi$1, + delta = abs$1(lambda1 - lambda0); + if (abs$1(delta - pi$1) < epsilon$1) { // line crosses a pole + stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$1 : -halfPi$1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + stream.point(lambda1, phi0); + clean = 0; + } else if (sign0 !== sign1 && delta >= pi$1) { // line crosses antimeridian + if (abs$1(lambda0 - sign0) < epsilon$1) lambda0 -= sign0 * epsilon$1; // handle degeneracies + if (abs$1(lambda1 - sign1) < epsilon$1) lambda1 -= sign1 * epsilon$1; + phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + clean = 0; + } + stream.point(lambda0 = lambda1, phi0 = phi1); + sign0 = sign1; + }, + lineEnd: function() { + stream.lineEnd(); + lambda0 = phi0 = NaN; + }, + clean: function() { + return 2 - clean; // if intersections, rejoin first and last segments + } + }; +} + +function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { + var cosPhi0, + cosPhi1, + sinLambda0Lambda1 = sin$1(lambda0 - lambda1); + return abs$1(sinLambda0Lambda1) > epsilon$1 + ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) + - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) + / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) + : (phi0 + phi1) / 2; +} + +function clipAntimeridianInterpolate(from, to, direction, stream) { + var phi; + if (from == null) { + phi = direction * halfPi$1; + stream.point(-pi$1, phi); + stream.point(0, phi); + stream.point(pi$1, phi); + stream.point(pi$1, 0); + stream.point(pi$1, -phi); + stream.point(0, -phi); + stream.point(-pi$1, -phi); + stream.point(-pi$1, 0); + stream.point(-pi$1, phi); + } else if (abs$1(from[0] - to[0]) > epsilon$1) { + var lambda = from[0] < to[0] ? pi$1 : -pi$1; + phi = direction * lambda / 2; + stream.point(-lambda, phi); + stream.point(0, phi); + stream.point(lambda, phi); + } else { + stream.point(to[0], to[1]); + } +} + +function clipCircle(radius) { + var cr = cos$1(radius), + delta = 2 * radians, + smallRadius = cr > 0, + notHemisphere = abs$1(cr) > epsilon$1; // TODO optimise for this common case + + function interpolate(from, to, direction, stream) { + circleStream(stream, radius, delta, direction, from, to); + } + + function visible(lambda, phi) { + return cos$1(lambda) * cos$1(phi) > cr; + } + + // Takes a line and cuts into visible segments. Return values used for polygon + // clipping: 0 - there were intersections or the line was empty; 1 - no + // intersections 2 - there were intersections, and the first and last segments + // should be rejoined. + function clipLine(stream) { + var point0, // previous point + c0, // code for previous point + v0, // visibility of previous point + v00, // visibility of first point + clean; // no intersections + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(lambda, phi) { + var point1 = [lambda, phi], + point2, + v = visible(lambda, phi), + c = smallRadius + ? v ? 0 : code(lambda, phi) + : v ? code(lambda + (lambda < 0 ? pi$1 : -pi$1), phi) : 0; + if (!point0 && (v00 = v0 = v)) stream.lineStart(); + if (v !== v0) { + point2 = intersect(point0, point1); + if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) + point1[2] = 1; + } + if (v !== v0) { + clean = 0; + if (v) { + // outside going in + stream.lineStart(); + point2 = intersect(point1, point0); + stream.point(point2[0], point2[1]); + } else { + // inside going out + point2 = intersect(point0, point1); + stream.point(point2[0], point2[1], 2); + stream.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + // If the codes for two points are different, or are both zero, + // and there this segment intersects with the small circle. + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + } else { + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + stream.lineStart(); + stream.point(t[0][0], t[0][1], 3); + } + } + } + if (v && (!point0 || !pointEqual(point0, point1))) { + stream.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) stream.lineEnd(); + point0 = null; + }, + // Rejoin first and last segments if there were intersections and the first + // and last points were visible. + clean: function() { + return clean | ((v00 && v0) << 1); + } + }; + } + + // Intersects the great circle between a and b with the clip circle. + function intersect(a, b, two) { + var pa = cartesian(a), + pb = cartesian(b); + + // We have two planes, n1.p = d1 and n2.p = d2. + // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). + var n1 = [1, 0, 0], // normal + n2 = cartesianCross(pa, pb), + n2n2 = cartesianDot(n2, n2), + n1n2 = n2[0], // cartesianDot(n1, n2), + determinant = n2n2 - n1n2 * n1n2; + + // Two polar points. + if (!determinant) return !two && a; + + var c1 = cr * n2n2 / determinant, + c2 = -cr * n1n2 / determinant, + n1xn2 = cartesianCross(n1, n2), + A = cartesianScale(n1, c1), + B = cartesianScale(n2, c2); + cartesianAddInPlace(A, B); + + // Solve |p(t)|^2 = 1. + var u = n1xn2, + w = cartesianDot(A, u), + uu = cartesianDot(u, u), + t2 = w * w - uu * (cartesianDot(A, A) - 1); + + if (t2 < 0) return; + + var t = sqrt$2(t2), + q = cartesianScale(u, (-w - t) / uu); + cartesianAddInPlace(q, A); + q = spherical(q); + + if (!two) return q; + + // Two intersection points. + var lambda0 = a[0], + lambda1 = b[0], + phi0 = a[1], + phi1 = b[1], + z; + + if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; + + var delta = lambda1 - lambda0, + polar = abs$1(delta - pi$1) < epsilon$1, + meridian = polar || delta < epsilon$1; + + if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; + + // Check that the first point is between a and b. + if (meridian + ? polar + ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$1 ? phi0 : phi1) + : phi0 <= q[1] && q[1] <= phi1 + : delta > pi$1 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { + var q1 = cartesianScale(u, (-w + t) / uu); + cartesianAddInPlace(q1, A); + return [q, spherical(q1)]; + } + } + + // Generates a 4-bit vector representing the location of a point relative to + // the small circle's bounding box. + function code(lambda, phi) { + var r = smallRadius ? radius : pi$1 - radius, + code = 0; + if (lambda < -r) code |= 1; // left + else if (lambda > r) code |= 2; // right + if (phi < -r) code |= 4; // below + else if (phi > r) code |= 8; // above + return code; + } + + return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$1, radius - pi$1]); +} + +function clipLine(a, b, x0, y0, x1, y1) { + var ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; + if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; + return true; +} + +var clipMax = 1e9, clipMin = -clipMax; + +// TODO Use d3-polygon’s polygonContains here for the ring check? +// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? + +function clipRectangle(x0, y0, x1, y1) { + + function visible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + + function interpolate(from, to, direction, stream) { + var a = 0, a1 = 0; + if (from == null + || (a = corner(from, direction)) !== (a1 = corner(to, direction)) + || comparePoint(from, to) < 0 ^ direction > 0) { + do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + while ((a = (a + direction + 4) % 4) !== a1); + } else { + stream.point(to[0], to[1]); + } + } + + function corner(p, direction) { + return abs$1(p[0] - x0) < epsilon$1 ? direction > 0 ? 0 : 3 + : abs$1(p[0] - x1) < epsilon$1 ? direction > 0 ? 2 : 1 + : abs$1(p[1] - y0) < epsilon$1 ? direction > 0 ? 1 : 0 + : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + } + + function compareIntersection(a, b) { + return comparePoint(a.x, b.x); + } + + function comparePoint(a, b) { + var ca = corner(a, 1), + cb = corner(b, 1); + return ca !== cb ? ca - cb + : ca === 0 ? b[1] - a[1] + : ca === 1 ? a[0] - b[0] + : ca === 2 ? a[1] - b[1] + : b[0] - a[0]; + } + + return function(stream) { + var activeStream = stream, + bufferStream = clipBuffer(), + segments, + polygon, + ring, + x__, y__, v__, // first point + x_, y_, v_, // previous point + first, + clean; + + var clipStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: polygonStart, + polygonEnd: polygonEnd + }; + + function point(x, y) { + if (visible(x, y)) activeStream.point(x, y); + } + + function polygonInside() { + var winding = 0; + + for (var i = 0, n = polygon.length; i < n; ++i) { + for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { + a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; + if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } + else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + } + } + + return winding; + } + + // Buffer geometry within a polygon and then clip it en masse. + function polygonStart() { + activeStream = bufferStream, segments = [], polygon = [], clean = true; + } + + function polygonEnd() { + var startInside = polygonInside(), + cleanInside = clean && startInside, + visible = (segments = merge(segments)).length; + if (cleanInside || visible) { + stream.polygonStart(); + if (cleanInside) { + stream.lineStart(); + interpolate(null, null, 1, stream); + stream.lineEnd(); + } + if (visible) { + clipRejoin(segments, compareIntersection, startInside, interpolate, stream); + } + stream.polygonEnd(); + } + activeStream = stream, segments = polygon = ring = null; + } + + function lineStart() { + clipStream.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + + // TODO rather than special-case polygons, simply handle them separately. + // Ideally, coincident intersection points should be jittered to avoid + // clipping issues. + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferStream.rejoin(); + segments.push(bufferStream.result()); + } + clipStream.point = point; + if (v_) activeStream.lineEnd(); + } + + function linePoint(x, y) { + var v = visible(x, y); + if (polygon) ring.push([x, y]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + } + } else { + if (v && v_) activeStream.point(x, y); + else { + var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], + b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; + if (clipLine(a, b, x0, y0, x1, y1)) { + if (!v_) { + activeStream.lineStart(); + activeStream.point(a[0], a[1]); + } + activeStream.point(b[0], b[1]); + if (!v) activeStream.lineEnd(); + clean = false; + } else if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + + return clipStream; + }; +} + +function extent() { + var x0 = 0, + y0 = 0, + x1 = 960, + y1 = 500, + cache, + cacheStream, + clip; + + return clip = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream); + }, + extent: function(_) { + return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; + } + }; +} + +var lengthSum$1, + lambda0, + sinPhi0, + cosPhi0; + +var lengthStream$1 = { + sphere: noop$1, + point: noop$1, + lineStart: lengthLineStart, + lineEnd: noop$1, + polygonStart: noop$1, + polygonEnd: noop$1 +}; + +function lengthLineStart() { + lengthStream$1.point = lengthPointFirst$1; + lengthStream$1.lineEnd = lengthLineEnd; +} + +function lengthLineEnd() { + lengthStream$1.point = lengthStream$1.lineEnd = noop$1; +} + +function lengthPointFirst$1(lambda, phi) { + lambda *= radians, phi *= radians; + lambda0 = lambda, sinPhi0 = sin$1(phi), cosPhi0 = cos$1(phi); + lengthStream$1.point = lengthPoint$1; +} + +function lengthPoint$1(lambda, phi) { + lambda *= radians, phi *= radians; + var sinPhi = sin$1(phi), + cosPhi = cos$1(phi), + delta = abs$1(lambda - lambda0), + cosDelta = cos$1(delta), + sinDelta = sin$1(delta), + x = cosPhi * sinDelta, + y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta, + z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta; + lengthSum$1.add(atan2$1(sqrt$2(x * x + y * y), z)); + lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi; +} + +function length$1(object) { + lengthSum$1 = new Adder(); + geoStream(object, lengthStream$1); + return +lengthSum$1; +} + +var coordinates = [null, null], + object = {type: "LineString", coordinates: coordinates}; + +function distance(a, b) { + coordinates[0] = a; + coordinates[1] = b; + return length$1(object); +} + +var containsObjectType = { + Feature: function(object, point) { + return containsGeometry(object.geometry, point); + }, + FeatureCollection: function(object, point) { + var features = object.features, i = -1, n = features.length; + while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; + return false; + } +}; + +var containsGeometryType = { + Sphere: function() { + return true; + }, + Point: function(object, point) { + return containsPoint(object.coordinates, point); + }, + MultiPoint: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPoint(coordinates[i], point)) return true; + return false; + }, + LineString: function(object, point) { + return containsLine(object.coordinates, point); + }, + MultiLineString: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsLine(coordinates[i], point)) return true; + return false; + }, + Polygon: function(object, point) { + return containsPolygon(object.coordinates, point); + }, + MultiPolygon: function(object, point) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) if (containsPolygon(coordinates[i], point)) return true; + return false; + }, + GeometryCollection: function(object, point) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) if (containsGeometry(geometries[i], point)) return true; + return false; + } +}; + +function containsGeometry(geometry, point) { + return geometry && containsGeometryType.hasOwnProperty(geometry.type) + ? containsGeometryType[geometry.type](geometry, point) + : false; +} + +function containsPoint(coordinates, point) { + return distance(coordinates, point) === 0; +} + +function containsLine(coordinates, point) { + var ao, bo, ab; + for (var i = 0, n = coordinates.length; i < n; i++) { + bo = distance(coordinates[i], point); + if (bo === 0) return true; + if (i > 0) { + ab = distance(coordinates[i], coordinates[i - 1]); + if ( + ab > 0 && + ao <= ab && + bo <= ab && + (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab + ) + return true; + } + ao = bo; + } + return false; +} + +function containsPolygon(coordinates, point) { + return !!polygonContains(coordinates.map(ringRadians), pointRadians(point)); +} + +function ringRadians(ring) { + return ring = ring.map(pointRadians), ring.pop(), ring; +} + +function pointRadians(point) { + return [point[0] * radians, point[1] * radians]; +} + +function contains$1(object, point) { + return (object && containsObjectType.hasOwnProperty(object.type) + ? containsObjectType[object.type] + : containsGeometry)(object, point); +} + +function graticuleX(y0, y1, dy) { + var y = range$2(y0, y1 - epsilon$1, dy).concat(y1); + return function(x) { return y.map(function(y) { return [x, y]; }); }; +} + +function graticuleY(x0, x1, dx) { + var x = range$2(x0, x1 - epsilon$1, dx).concat(x1); + return function(y) { return x.map(function(x) { return [x, y]; }); }; +} + +function graticule() { + var x1, x0, X1, X0, + y1, y0, Y1, Y0, + dx = 10, dy = dx, DX = 90, DY = 360, + x, y, X, Y, + precision = 2.5; + + function graticule() { + return {type: "MultiLineString", coordinates: lines()}; + } + + function lines() { + return range$2(ceil(X0 / DX) * DX, X1, DX).map(X) + .concat(range$2(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) + .concat(range$2(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$1(x % DX) > epsilon$1; }).map(x)) + .concat(range$2(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$1(y % DY) > epsilon$1; }).map(y)); + } + + graticule.lines = function() { + return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); + }; + + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ + X(X0).concat( + Y(Y1).slice(1), + X(X1).reverse().slice(1), + Y(Y0).reverse().slice(1)) + ] + }; + }; + + graticule.extent = function(_) { + if (!arguments.length) return graticule.extentMinor(); + return graticule.extentMajor(_).extentMinor(_); + }; + + graticule.extentMajor = function(_) { + if (!arguments.length) return [[X0, Y0], [X1, Y1]]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + + graticule.extentMinor = function(_) { + if (!arguments.length) return [[x0, y0], [x1, y1]]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + + graticule.step = function(_) { + if (!arguments.length) return graticule.stepMinor(); + return graticule.stepMajor(_).stepMinor(_); + }; + + graticule.stepMajor = function(_) { + if (!arguments.length) return [DX, DY]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + + graticule.stepMinor = function(_) { + if (!arguments.length) return [dx, dy]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = graticuleX(y0, y1, 90); + y = graticuleY(x0, x1, precision); + X = graticuleX(Y0, Y1, 90); + Y = graticuleY(X0, X1, precision); + return graticule; + }; + + return graticule + .extentMajor([[-180, -90 + epsilon$1], [180, 90 - epsilon$1]]) + .extentMinor([[-180, -80 - epsilon$1], [180, 80 + epsilon$1]]); +} + +function graticule10() { + return graticule()(); +} + +function interpolate(a, b) { + var x0 = a[0] * radians, + y0 = a[1] * radians, + x1 = b[0] * radians, + y1 = b[1] * radians, + cy0 = cos$1(y0), + sy0 = sin$1(y0), + cy1 = cos$1(y1), + sy1 = sin$1(y1), + kx0 = cy0 * cos$1(x0), + ky0 = cy0 * sin$1(x0), + kx1 = cy1 * cos$1(x1), + ky1 = cy1 * sin$1(x1), + d = 2 * asin$1(sqrt$2(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), + k = sin$1(d); + + var interpolate = d ? function(t) { + var B = sin$1(t *= d) / k, + A = sin$1(d - t) / k, + x = A * kx0 + B * kx1, + y = A * ky0 + B * ky1, + z = A * sy0 + B * sy1; + return [ + atan2$1(y, x) * degrees, + atan2$1(z, sqrt$2(x * x + y * y)) * degrees + ]; + } : function() { + return [x0 * degrees, y0 * degrees]; + }; + + interpolate.distance = d; + + return interpolate; +} + +var identity$5 = x => x; + +var areaSum = new Adder(), + areaRingSum = new Adder(), + x00$2, + y00$2, + x0$3, + y0$3; + +var areaStream = { + point: noop$1, + lineStart: noop$1, + lineEnd: noop$1, + polygonStart: function() { + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop$1; + areaSum.add(abs$1(areaRingSum)); + areaRingSum = new Adder(); + }, + result: function() { + var area = areaSum / 2; + areaSum = new Adder(); + return area; + } +}; + +function areaRingStart() { + areaStream.point = areaPointFirst; +} + +function areaPointFirst(x, y) { + areaStream.point = areaPoint; + x00$2 = x0$3 = x, y00$2 = y0$3 = y; +} + +function areaPoint(x, y) { + areaRingSum.add(y0$3 * x - x0$3 * y); + x0$3 = x, y0$3 = y; +} + +function areaRingEnd() { + areaPoint(x00$2, y00$2); +} + +var pathArea = areaStream; + +var x0$2 = Infinity, + y0$2 = x0$2, + x1 = -x0$2, + y1 = x1; + +var boundsStream = { + point: boundsPoint, + lineStart: noop$1, + lineEnd: noop$1, + polygonStart: noop$1, + polygonEnd: noop$1, + result: function() { + var bounds = [[x0$2, y0$2], [x1, y1]]; + x1 = y1 = -(y0$2 = x0$2 = Infinity); + return bounds; + } +}; + +function boundsPoint(x, y) { + if (x < x0$2) x0$2 = x; + if (x > x1) x1 = x; + if (y < y0$2) y0$2 = y; + if (y > y1) y1 = y; +} + +var boundsStream$1 = boundsStream; + +// TODO Enforce positive area for exterior, negative area for interior? + +var X0 = 0, + Y0 = 0, + Z0 = 0, + X1 = 0, + Y1 = 0, + Z1 = 0, + X2 = 0, + Y2 = 0, + Z2 = 0, + x00$1, + y00$1, + x0$1, + y0$1; + +var centroidStream = { + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.point = centroidPoint; + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + }, + result: function() { + var centroid = Z2 ? [X2 / Z2, Y2 / Z2] + : Z1 ? [X1 / Z1, Y1 / Z1] + : Z0 ? [X0 / Z0, Y0 / Z0] + : [NaN, NaN]; + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + return centroid; + } +}; + +function centroidPoint(x, y) { + X0 += x; + Y0 += y; + ++Z0; +} + +function centroidLineStart() { + centroidStream.point = centroidPointFirstLine; +} + +function centroidPointFirstLine(x, y) { + centroidStream.point = centroidPointLine; + centroidPoint(x0$1 = x, y0$1 = y); +} + +function centroidPointLine(x, y) { + var dx = x - x0$1, dy = y - y0$1, z = sqrt$2(dx * dx + dy * dy); + X1 += z * (x0$1 + x) / 2; + Y1 += z * (y0$1 + y) / 2; + Z1 += z; + centroidPoint(x0$1 = x, y0$1 = y); +} + +function centroidLineEnd() { + centroidStream.point = centroidPoint; +} + +function centroidRingStart() { + centroidStream.point = centroidPointFirstRing; +} + +function centroidRingEnd() { + centroidPointRing(x00$1, y00$1); +} + +function centroidPointFirstRing(x, y) { + centroidStream.point = centroidPointRing; + centroidPoint(x00$1 = x0$1 = x, y00$1 = y0$1 = y); +} + +function centroidPointRing(x, y) { + var dx = x - x0$1, + dy = y - y0$1, + z = sqrt$2(dx * dx + dy * dy); + + X1 += z * (x0$1 + x) / 2; + Y1 += z * (y0$1 + y) / 2; + Z1 += z; + + z = y0$1 * x - x0$1 * y; + X2 += z * (x0$1 + x); + Y2 += z * (y0$1 + y); + Z2 += z * 3; + centroidPoint(x0$1 = x, y0$1 = y); +} + +var pathCentroid = centroidStream; + +function PathContext(context) { + this._context = context; +} + +PathContext.prototype = { + _radius: 4.5, + pointRadius: function(_) { + return this._radius = _, this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._context.closePath(); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._context.moveTo(x, y); + this._point = 1; + break; + } + case 1: { + this._context.lineTo(x, y); + break; + } + default: { + this._context.moveTo(x + this._radius, y); + this._context.arc(x, y, this._radius, 0, tau$1); + break; + } + } + }, + result: noop$1 +}; + +var lengthSum = new Adder(), + lengthRing, + x00, + y00, + x0, + y0; + +var lengthStream = { + point: noop$1, + lineStart: function() { + lengthStream.point = lengthPointFirst; + }, + lineEnd: function() { + if (lengthRing) lengthPoint(x00, y00); + lengthStream.point = noop$1; + }, + polygonStart: function() { + lengthRing = true; + }, + polygonEnd: function() { + lengthRing = null; + }, + result: function() { + var length = +lengthSum; + lengthSum = new Adder(); + return length; + } +}; + +function lengthPointFirst(x, y) { + lengthStream.point = lengthPoint; + x00 = x0 = x, y00 = y0 = y; +} + +function lengthPoint(x, y) { + x0 -= x, y0 -= y; + lengthSum.add(sqrt$2(x0 * x0 + y0 * y0)); + x0 = x, y0 = y; +} + +var pathMeasure = lengthStream; + +// Simple caching for constant-radius points. +let cacheDigits, cacheAppend, cacheRadius, cacheCircle; + +class PathString { + constructor(digits) { + this._append = digits == null ? append : appendRound(digits); + this._radius = 4.5; + this._ = ""; + } + pointRadius(_) { + this._radius = +_; + return this; + } + polygonStart() { + this._line = 0; + } + polygonEnd() { + this._line = NaN; + } + lineStart() { + this._point = 0; + } + lineEnd() { + if (this._line === 0) this._ += "Z"; + this._point = NaN; + } + point(x, y) { + switch (this._point) { + case 0: { + this._append`M${x},${y}`; + this._point = 1; + break; + } + case 1: { + this._append`L${x},${y}`; + break; + } + default: { + this._append`M${x},${y}`; + if (this._radius !== cacheRadius || this._append !== cacheAppend) { + const r = this._radius; + const s = this._; + this._ = ""; // stash the old string so we can cache the circle path fragment + this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`; + cacheRadius = r; + cacheAppend = this._append; + cacheCircle = this._; + this._ = s; + } + this._ += cacheCircle; + break; + } + } + } + result() { + const result = this._; + this._ = ""; + return result.length ? result : null; + } +} + +function append(strings) { + let i = 1; + this._ += strings[0]; + for (const j = strings.length; i < j; ++i) { + this._ += arguments[i] + strings[i]; + } +} + +function appendRound(digits) { + const d = Math.floor(digits); + if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`); + if (d > 15) return append; + if (d !== cacheDigits) { + const k = 10 ** d; + cacheDigits = d; + cacheAppend = function append(strings) { + let i = 1; + this._ += strings[0]; + for (const j = strings.length; i < j; ++i) { + this._ += Math.round(arguments[i] * k) / k + strings[i]; + } + }; + } + return cacheAppend; +} + +function index$2(projection, context) { + let digits = 3, + pointRadius = 4.5, + projectionStream, + contextStream; + + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + geoStream(object, projectionStream(contextStream)); + } + return contextStream.result(); + } + + path.area = function(object) { + geoStream(object, projectionStream(pathArea)); + return pathArea.result(); + }; + + path.measure = function(object) { + geoStream(object, projectionStream(pathMeasure)); + return pathMeasure.result(); + }; + + path.bounds = function(object) { + geoStream(object, projectionStream(boundsStream$1)); + return boundsStream$1.result(); + }; + + path.centroid = function(object) { + geoStream(object, projectionStream(pathCentroid)); + return pathCentroid.result(); + }; + + path.projection = function(_) { + if (!arguments.length) return projection; + projectionStream = _ == null ? (projection = null, identity$5) : (projection = _).stream; + return path; + }; + + path.context = function(_) { + if (!arguments.length) return context; + contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return path; + }; + + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + + path.digits = function(_) { + if (!arguments.length) return digits; + if (_ == null) digits = null; + else { + const d = Math.floor(_); + if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`); + digits = d; + } + if (context === null) contextStream = new PathString(digits); + return path; + }; + + return path.projection(projection).digits(digits).context(context); +} + +function transform$1(methods) { + return { + stream: transformer$3(methods) + }; +} + +function transformer$3(methods) { + return function(stream) { + var s = new TransformStream; + for (var key in methods) s[key] = methods[key]; + s.stream = stream; + return s; + }; +} + +function TransformStream() {} + +TransformStream.prototype = { + constructor: TransformStream, + point: function(x, y) { this.stream.point(x, y); }, + sphere: function() { this.stream.sphere(); }, + lineStart: function() { this.stream.lineStart(); }, + lineEnd: function() { this.stream.lineEnd(); }, + polygonStart: function() { this.stream.polygonStart(); }, + polygonEnd: function() { this.stream.polygonEnd(); } +}; + +function fit(projection, fitBounds, object) { + var clip = projection.clipExtent && projection.clipExtent(); + projection.scale(150).translate([0, 0]); + if (clip != null) projection.clipExtent(null); + geoStream(object, projection.stream(boundsStream$1)); + fitBounds(boundsStream$1.result()); + if (clip != null) projection.clipExtent(clip); + return projection; +} + +function fitExtent(projection, extent, object) { + return fit(projection, function(b) { + var w = extent[1][0] - extent[0][0], + h = extent[1][1] - extent[0][1], + k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), + x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, + y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitSize(projection, size, object) { + return fitExtent(projection, [[0, 0], size], object); +} + +function fitWidth(projection, width, object) { + return fit(projection, function(b) { + var w = +width, + k = w / (b[1][0] - b[0][0]), + x = (w - k * (b[1][0] + b[0][0])) / 2, + y = -k * b[0][1]; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitHeight(projection, height, object) { + return fit(projection, function(b) { + var h = +height, + k = h / (b[1][1] - b[0][1]), + x = -k * b[0][0], + y = (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +var maxDepth = 16, // maximum depth of subdivision + cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) + +function resample(project, delta2) { + return +delta2 ? resample$1(project, delta2) : resampleNone(project); +} + +function resampleNone(project) { + return transformer$3({ + point: function(x, y) { + x = project(x, y); + this.stream.point(x[0], x[1]); + } + }); +} + +function resample$1(project, delta2) { + + function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, + dy = y1 - y0, + d2 = dx * dx + dy * dy; + if (d2 > 4 * delta2 && depth--) { + var a = a0 + a1, + b = b0 + b1, + c = c0 + c1, + m = sqrt$2(a * a + b * b + c * c), + phi2 = asin$1(c /= m), + lambda2 = abs$1(abs$1(c) - 1) < epsilon$1 || abs$1(lambda0 - lambda1) < epsilon$1 ? (lambda0 + lambda1) / 2 : atan2$1(b, a), + p = project(lambda2, phi2), + x2 = p[0], + y2 = p[1], + dx2 = x2 - x0, + dy2 = y2 - y0, + dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > delta2 // perpendicular projected distance + || abs$1((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end + || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); + } + } + } + return function(stream) { + var lambda00, x00, y00, a00, b00, c00, // first point + lambda0, x0, y0, a0, b0, c0; // previous point + + var resampleStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, + polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + }; + + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + + function lineStart() { + x0 = NaN; + resampleStream.point = linePoint; + stream.lineStart(); + } + + function linePoint(lambda, phi) { + var c = cartesian([lambda, phi]), p = project(lambda, phi); + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); + stream.point(x0, y0); + } + + function lineEnd() { + resampleStream.point = point; + stream.lineEnd(); + } + + function ringStart() { + lineStart(); + resampleStream.point = ringPoint; + resampleStream.lineEnd = ringEnd; + } + + function ringPoint(lambda, phi) { + linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resampleStream.point = linePoint; + } + + function ringEnd() { + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); + resampleStream.lineEnd = lineEnd; + lineEnd(); + } + + return resampleStream; + }; +} + +var transformRadians = transformer$3({ + point: function(x, y) { + this.stream.point(x * radians, y * radians); + } +}); + +function transformRotate(rotate) { + return transformer$3({ + point: function(x, y) { + var r = rotate(x, y); + return this.stream.point(r[0], r[1]); + } + }); +} + +function scaleTranslate(k, dx, dy, sx, sy) { + function transform(x, y) { + x *= sx; y *= sy; + return [dx + k * x, dy - k * y]; + } + transform.invert = function(x, y) { + return [(x - dx) / k * sx, (dy - y) / k * sy]; + }; + return transform; +} + +function scaleTranslateRotate(k, dx, dy, sx, sy, alpha) { + if (!alpha) return scaleTranslate(k, dx, dy, sx, sy); + var cosAlpha = cos$1(alpha), + sinAlpha = sin$1(alpha), + a = cosAlpha * k, + b = sinAlpha * k, + ai = cosAlpha / k, + bi = sinAlpha / k, + ci = (sinAlpha * dy - cosAlpha * dx) / k, + fi = (sinAlpha * dx + cosAlpha * dy) / k; + function transform(x, y) { + x *= sx; y *= sy; + return [a * x - b * y + dx, dy - b * x - a * y]; + } + transform.invert = function(x, y) { + return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)]; + }; + return transform; +} + +function projection(project) { + return projectionMutator(function() { return project; })(); +} + +function projectionMutator(projectAt) { + var project, + k = 150, // scale + x = 480, y = 250, // translate + lambda = 0, phi = 0, // center + deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate + alpha = 0, // post-rotate angle + sx = 1, // reflectX + sy = 1, // reflectX + theta = null, preclip = clipAntimeridian, // pre-clip angle + x0 = null, y0, x1, y1, postclip = identity$5, // post-clip extent + delta2 = 0.5, // precision + projectResample, + projectTransform, + projectRotateTransform, + cache, + cacheStream; + + function projection(point) { + return projectRotateTransform(point[0] * radians, point[1] * radians); + } + + function invert(point) { + point = projectRotateTransform.invert(point[0], point[1]); + return point && [point[0] * degrees, point[1] * degrees]; + } + + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); + }; + + projection.preclip = function(_) { + return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; + }; + + projection.postclip = function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }; + + projection.clipAngle = function(_) { + return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees; + }; + + projection.clipExtent = function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$5) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + projection.scale = function(_) { + return arguments.length ? (k = +_, recenter()) : k; + }; + + projection.translate = function(_) { + return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; + }; + + projection.center = function(_) { + return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees]; + }; + + projection.rotate = function(_) { + return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees]; + }; + + projection.angle = function(_) { + return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees; + }; + + projection.reflectX = function(_) { + return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0; + }; + + projection.reflectY = function(_) { + return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0; + }; + + projection.precision = function(_) { + return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$2(delta2); + }; + + projection.fitExtent = function(extent, object) { + return fitExtent(projection, extent, object); + }; + + projection.fitSize = function(size, object) { + return fitSize(projection, size, object); + }; + + projection.fitWidth = function(width, object) { + return fitWidth(projection, width, object); + }; + + projection.fitHeight = function(height, object) { + return fitHeight(projection, height, object); + }; + + function recenter() { + var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)), + transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha); + rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma); + projectTransform = compose(project, transform); + projectRotateTransform = compose(rotate, projectTransform); + projectResample = resample(projectTransform, delta2); + return reset(); + } + + function reset() { + cache = cacheStream = null; + return projection; + } + + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return recenter(); + }; +} + +function conicProjection(projectAt) { + var phi0 = 0, + phi1 = pi$1 / 3, + m = projectionMutator(projectAt), + p = m(phi0, phi1); + + p.parallels = function(_) { + return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees]; + }; + + return p; +} + +function cylindricalEqualAreaRaw(phi0) { + var cosPhi0 = cos$1(phi0); + + function forward(lambda, phi) { + return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; + } + + forward.invert = function(x, y) { + return [x / cosPhi0, asin$1(y * cosPhi0)]; + }; + + return forward; +} + +function conicEqualAreaRaw(y0, y1) { + var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; + + // Are the parallels symmetrical around the Equator? + if (abs$1(n) < epsilon$1) return cylindricalEqualAreaRaw(y0); + + var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$2(c) / n; + + function project(x, y) { + var r = sqrt$2(c - 2 * n * sin$1(y)) / n; + return [r * sin$1(x *= n), r0 - r * cos$1(x)]; + } + + project.invert = function(x, y) { + var r0y = r0 - y, + l = atan2$1(x, abs$1(r0y)) * sign$1(r0y); + if (r0y * n < 0) + l -= pi$1 * sign$1(x) * sign$1(r0y); + return [l / n, asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; + }; + + return project; +} + +function conicEqualArea() { + return conicProjection(conicEqualAreaRaw) + .scale(155.424) + .center([0, 33.6442]); +} + +function albers() { + return conicEqualArea() + .parallels([29.5, 45.5]) + .scale(1070) + .translate([480, 250]) + .rotate([96, 0]) + .center([-0.6, 38.7]); +} + +// The projections must have mutually exclusive clip regions on the sphere, +// as this will avoid emitting interleaving lines and polygons. +function multiplex(streams) { + var n = streams.length; + return { + point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, + sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, + lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, + lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, + polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, + polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } + }; +} + +// A composite projection for the United States, configured by default for +// 960×500. The projection also works quite well at 960×600 if you change the +// scale to 1285 and adjust the translate accordingly. The set of standard +// parallels for each region comes from USGS, which is published here: +// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +function albersUsa() { + var cache, + cacheStream, + lower48 = albers(), lower48Point, + alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 + hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 + point, pointStream = {point: function(x, y) { point = [x, y]; }}; + + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + return point = null, + (lower48Point.point(x, y), point) + || (alaskaPoint.point(x, y), point) + || (hawaiiPoint.point(x, y), point); + } + + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), + t = lower48.translate(), + x = (coordinates[0] - t[0]) / k, + y = (coordinates[1] - t[1]) / k; + return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska + : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii + : lower48).invert(coordinates); + }; + + albersUsa.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + }; + + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_), alaska.precision(_), hawaii.precision(_); + return reset(); + }; + + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + + lower48Point = lower48 + .translate(_) + .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) + .stream(pointStream); + + alaskaPoint = alaska + .translate([x - 0.307 * k, y + 0.201 * k]) + .clipExtent([[x - 0.425 * k + epsilon$1, y + 0.120 * k + epsilon$1], [x - 0.214 * k - epsilon$1, y + 0.234 * k - epsilon$1]]) + .stream(pointStream); + + hawaiiPoint = hawaii + .translate([x - 0.205 * k, y + 0.212 * k]) + .clipExtent([[x - 0.214 * k + epsilon$1, y + 0.166 * k + epsilon$1], [x - 0.115 * k - epsilon$1, y + 0.234 * k - epsilon$1]]) + .stream(pointStream); + + return reset(); + }; + + albersUsa.fitExtent = function(extent, object) { + return fitExtent(albersUsa, extent, object); + }; + + albersUsa.fitSize = function(size, object) { + return fitSize(albersUsa, size, object); + }; + + albersUsa.fitWidth = function(width, object) { + return fitWidth(albersUsa, width, object); + }; + + albersUsa.fitHeight = function(height, object) { + return fitHeight(albersUsa, height, object); + }; + + function reset() { + cache = cacheStream = null; + return albersUsa; + } + + return albersUsa.scale(1070); +} + +function azimuthalRaw(scale) { + return function(x, y) { + var cx = cos$1(x), + cy = cos$1(y), + k = scale(cx * cy); + if (k === Infinity) return [2, 0]; + return [ + k * cy * sin$1(x), + k * sin$1(y) + ]; + } +} + +function azimuthalInvert(angle) { + return function(x, y) { + var z = sqrt$2(x * x + y * y), + c = angle(z), + sc = sin$1(c), + cc = cos$1(c); + return [ + atan2$1(x * sc, z * cc), + asin$1(z && y * sc / z) + ]; + } +} + +var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { + return sqrt$2(2 / (1 + cxcy)); +}); + +azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { + return 2 * asin$1(z / 2); +}); + +function azimuthalEqualArea() { + return projection(azimuthalEqualAreaRaw) + .scale(124.75) + .clipAngle(180 - 1e-3); +} + +var azimuthalEquidistantRaw = azimuthalRaw(function(c) { + return (c = acos$1(c)) && c / sin$1(c); +}); + +azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { + return z; +}); + +function azimuthalEquidistant() { + return projection(azimuthalEquidistantRaw) + .scale(79.4188) + .clipAngle(180 - 1e-3); +} + +function mercatorRaw(lambda, phi) { + return [lambda, log$1(tan((halfPi$1 + phi) / 2))]; +} + +mercatorRaw.invert = function(x, y) { + return [x, 2 * atan(exp(y)) - halfPi$1]; +}; + +function mercator() { + return mercatorProjection(mercatorRaw) + .scale(961 / tau$1); +} + +function mercatorProjection(project) { + var m = projection(project), + center = m.center, + scale = m.scale, + translate = m.translate, + clipExtent = m.clipExtent, + x0 = null, y0, x1, y1; // clip extent + + m.scale = function(_) { + return arguments.length ? (scale(_), reclip()) : scale(); + }; + + m.translate = function(_) { + return arguments.length ? (translate(_), reclip()) : translate(); + }; + + m.center = function(_) { + return arguments.length ? (center(_), reclip()) : center(); + }; + + m.clipExtent = function(_) { + return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + function reclip() { + var k = pi$1 * scale(), + t = m(rotation(m.rotate()).invert([0, 0])); + return clipExtent(x0 == null + ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw + ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] + : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); + } + + return reclip(); +} + +function tany(y) { + return tan((halfPi$1 + y) / 2); +} + +function conicConformalRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)), + f = cy0 * pow$1(tany(y0), n) / n; + + if (!n) return mercatorRaw; + + function project(x, y) { + if (f > 0) { if (y < -halfPi$1 + epsilon$1) y = -halfPi$1 + epsilon$1; } + else { if (y > halfPi$1 - epsilon$1) y = halfPi$1 - epsilon$1; } + var r = f / pow$1(tany(y), n); + return [r * sin$1(n * x), f - r * cos$1(n * x)]; + } + + project.invert = function(x, y) { + var fy = f - y, r = sign$1(n) * sqrt$2(x * x + fy * fy), + l = atan2$1(x, abs$1(fy)) * sign$1(fy); + if (fy * n < 0) + l -= pi$1 * sign$1(x) * sign$1(fy); + return [l / n, 2 * atan(pow$1(f / r, 1 / n)) - halfPi$1]; + }; + + return project; +} + +function conicConformal() { + return conicProjection(conicConformalRaw) + .scale(109.5) + .parallels([30, 30]); +} + +function equirectangularRaw(lambda, phi) { + return [lambda, phi]; +} + +equirectangularRaw.invert = equirectangularRaw; + +function equirectangular() { + return projection(equirectangularRaw) + .scale(152.63); +} + +function conicEquidistantRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), + g = cy0 / n + y0; + + if (abs$1(n) < epsilon$1) return equirectangularRaw; + + function project(x, y) { + var gy = g - y, nx = n * x; + return [gy * sin$1(nx), g - gy * cos$1(nx)]; + } + + project.invert = function(x, y) { + var gy = g - y, + l = atan2$1(x, abs$1(gy)) * sign$1(gy); + if (gy * n < 0) + l -= pi$1 * sign$1(x) * sign$1(gy); + return [l / n, g - sign$1(n) * sqrt$2(x * x + gy * gy)]; + }; + + return project; +} + +function conicEquidistant() { + return conicProjection(conicEquidistantRaw) + .scale(131.154) + .center([0, 13.9389]); +} + +var A1 = 1.340264, + A2 = -0.081106, + A3 = 0.000893, + A4 = 0.003796, + M = sqrt$2(3) / 2, + iterations = 12; + +function equalEarthRaw(lambda, phi) { + var l = asin$1(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2; + return [ + lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), + l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) + ]; +} + +equalEarthRaw.invert = function(x, y) { + var l = y, l2 = l * l, l6 = l2 * l2 * l2; + for (var i = 0, delta, fy, fpy; i < iterations; ++i) { + fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; + fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); + l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; + if (abs$1(delta) < epsilon2) break; + } + return [ + M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l), + asin$1(sin$1(l) / M) + ]; +}; + +function equalEarth() { + return projection(equalEarthRaw) + .scale(177.158); +} + +function gnomonicRaw(x, y) { + var cy = cos$1(y), k = cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; +} + +gnomonicRaw.invert = azimuthalInvert(atan); + +function gnomonic() { + return projection(gnomonicRaw) + .scale(144.049) + .clipAngle(60); +} + +function identity$4() { + var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect + alpha = 0, ca, sa, // angle + x0 = null, y0, x1, y1, // clip extent + kx = 1, ky = 1, + transform = transformer$3({ + point: function(x, y) { + var p = projection([x, y]); + this.stream.point(p[0], p[1]); + } + }), + postclip = identity$5, + cache, + cacheStream; + + function reset() { + kx = k * sx; + ky = k * sy; + cache = cacheStream = null; + return projection; + } + + function projection (p) { + var x = p[0] * kx, y = p[1] * ky; + if (alpha) { + var t = y * ca - x * sa; + x = x * ca + y * sa; + y = t; + } + return [x + tx, y + ty]; + } + projection.invert = function(p) { + var x = p[0] - tx, y = p[1] - ty; + if (alpha) { + var t = y * ca + x * sa; + x = x * ca - y * sa; + y = t; + } + return [x / kx, y / ky]; + }; + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); + }; + projection.postclip = function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }; + projection.clipExtent = function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$5) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + projection.scale = function(_) { + return arguments.length ? (k = +_, reset()) : k; + }; + projection.translate = function(_) { + return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty]; + }; + projection.angle = function(_) { + return arguments.length ? (alpha = _ % 360 * radians, sa = sin$1(alpha), ca = cos$1(alpha), reset()) : alpha * degrees; + }; + projection.reflectX = function(_) { + return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0; + }; + projection.reflectY = function(_) { + return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0; + }; + projection.fitExtent = function(extent, object) { + return fitExtent(projection, extent, object); + }; + projection.fitSize = function(size, object) { + return fitSize(projection, size, object); + }; + projection.fitWidth = function(width, object) { + return fitWidth(projection, width, object); + }; + projection.fitHeight = function(height, object) { + return fitHeight(projection, height, object); + }; + + return projection; +} + +function naturalEarth1Raw(lambda, phi) { + var phi2 = phi * phi, phi4 = phi2 * phi2; + return [ + lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), + phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) + ]; +} + +naturalEarth1Raw.invert = function(x, y) { + var phi = y, i = 25, delta; + do { + var phi2 = phi * phi, phi4 = phi2 * phi2; + phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / + (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); + } while (abs$1(delta) > epsilon$1 && --i > 0); + return [ + x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), + phi + ]; +}; + +function naturalEarth1() { + return projection(naturalEarth1Raw) + .scale(175.295); +} + +function orthographicRaw(x, y) { + return [cos$1(y) * sin$1(x), sin$1(y)]; +} + +orthographicRaw.invert = azimuthalInvert(asin$1); + +function orthographic() { + return projection(orthographicRaw) + .scale(249.5) + .clipAngle(90 + epsilon$1); +} + +function stereographicRaw(x, y) { + var cy = cos$1(y), k = 1 + cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; +} + +stereographicRaw.invert = azimuthalInvert(function(z) { + return 2 * atan(z); +}); + +function stereographic() { + return projection(stereographicRaw) + .scale(250) + .clipAngle(142); +} + +function transverseMercatorRaw(lambda, phi) { + return [log$1(tan((halfPi$1 + phi) / 2)), -lambda]; +} + +transverseMercatorRaw.invert = function(x, y) { + return [-y, 2 * atan(exp(x)) - halfPi$1]; +}; + +function transverseMercator() { + var m = mercatorProjection(transverseMercatorRaw), + center = m.center, + rotate = m.rotate; + + m.center = function(_) { + return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); + }; + + m.rotate = function(_) { + return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + }; + + return rotate([0, 0, 90]) + .scale(159.155); +} + +function defaultSeparation$1(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +function meanX(children) { + return children.reduce(meanXReduce, 0) / children.length; +} + +function meanXReduce(x, c) { + return x + c.x; +} + +function maxY(children) { + return 1 + children.reduce(maxYReduce, 0); +} + +function maxYReduce(y, c) { + return Math.max(y, c.y); +} + +function leafLeft(node) { + var children; + while (children = node.children) node = children[0]; + return node; +} + +function leafRight(node) { + var children; + while (children = node.children) node = children[children.length - 1]; + return node; +} + +function cluster() { + var separation = defaultSeparation$1, + dx = 1, + dy = 1, + nodeSize = false; + + function cluster(root) { + var previousNode, + x = 0; + + // First walk, computing the initial x & y values. + root.eachAfter(function(node) { + var children = node.children; + if (children) { + node.x = meanX(children); + node.y = maxY(children); + } else { + node.x = previousNode ? x += separation(node, previousNode) : 0; + node.y = 0; + previousNode = node; + } + }); + + var left = leafLeft(root), + right = leafRight(root), + x0 = left.x - separation(left, right) / 2, + x1 = right.x + separation(right, left) / 2; + + // Second walk, normalizing x & y to the desired size. + return root.eachAfter(nodeSize ? function(node) { + node.x = (node.x - root.x) * dx; + node.y = (root.y - node.y) * dy; + } : function(node) { + node.x = (node.x - x0) / (x1 - x0) * dx; + node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; + }); + } + + cluster.separation = function(x) { + return arguments.length ? (separation = x, cluster) : separation; + }; + + cluster.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); + }; + + cluster.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); + }; + + return cluster; +} + +function count(node) { + var sum = 0, + children = node.children, + i = children && children.length; + if (!i) sum = 1; + else while (--i >= 0) sum += children[i].value; + node.value = sum; +} + +function node_count() { + return this.eachAfter(count); +} + +function node_each(callback, that) { + let index = -1; + for (const node of this) { + callback.call(that, node, ++index, this); + } + return this; +} + +function node_eachBefore(callback, that) { + var node = this, nodes = [node], children, i, index = -1; + while (node = nodes.pop()) { + callback.call(that, node, ++index, this); + if (children = node.children) { + for (i = children.length - 1; i >= 0; --i) { + nodes.push(children[i]); + } + } + } + return this; +} + +function node_eachAfter(callback, that) { + var node = this, nodes = [node], next = [], children, i, n, index = -1; + while (node = nodes.pop()) { + next.push(node); + if (children = node.children) { + for (i = 0, n = children.length; i < n; ++i) { + nodes.push(children[i]); + } + } + } + while (node = next.pop()) { + callback.call(that, node, ++index, this); + } + return this; +} + +function node_find(callback, that) { + let index = -1; + for (const node of this) { + if (callback.call(that, node, ++index, this)) { + return node; + } + } +} + +function node_sum(value) { + return this.eachAfter(function(node) { + var sum = +value(node.data) || 0, + children = node.children, + i = children && children.length; + while (--i >= 0) sum += children[i].value; + node.value = sum; + }); +} + +function node_sort(compare) { + return this.eachBefore(function(node) { + if (node.children) { + node.children.sort(compare); + } + }); +} + +function node_path(end) { + var start = this, + ancestor = leastCommonAncestor(start, end), + nodes = [start]; + while (start !== ancestor) { + start = start.parent; + nodes.push(start); + } + var k = nodes.length; + while (end !== ancestor) { + nodes.splice(k, 0, end); + end = end.parent; + } + return nodes; +} + +function leastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = a.ancestors(), + bNodes = b.ancestors(), + c = null; + a = aNodes.pop(); + b = bNodes.pop(); + while (a === b) { + c = a; + a = aNodes.pop(); + b = bNodes.pop(); + } + return c; +} + +function node_ancestors() { + var node = this, nodes = [node]; + while (node = node.parent) { + nodes.push(node); + } + return nodes; +} + +function node_descendants() { + return Array.from(this); +} + +function node_leaves() { + var leaves = []; + this.eachBefore(function(node) { + if (!node.children) { + leaves.push(node); + } + }); + return leaves; +} + +function node_links() { + var root = this, links = []; + root.each(function(node) { + if (node !== root) { // Don’t include the root’s parent, if any. + links.push({source: node.parent, target: node}); + } + }); + return links; +} + +function* node_iterator() { + var node = this, current, next = [node], children, i, n; + do { + current = next.reverse(), next = []; + while (node = current.pop()) { + yield node; + if (children = node.children) { + for (i = 0, n = children.length; i < n; ++i) { + next.push(children[i]); + } + } + } + } while (next.length); +} + +function hierarchy(data, children) { + if (data instanceof Map) { + data = [undefined, data]; + if (children === undefined) children = mapChildren; + } else if (children === undefined) { + children = objectChildren; + } + + var root = new Node$1(data), + node, + nodes = [root], + child, + childs, + i, + n; + + while (node = nodes.pop()) { + if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) { + node.children = childs; + for (i = n - 1; i >= 0; --i) { + nodes.push(child = childs[i] = new Node$1(childs[i])); + child.parent = node; + child.depth = node.depth + 1; + } + } + } + + return root.eachBefore(computeHeight); +} + +function node_copy() { + return hierarchy(this).eachBefore(copyData); +} + +function objectChildren(d) { + return d.children; +} + +function mapChildren(d) { + return Array.isArray(d) ? d[1] : null; +} + +function copyData(node) { + if (node.data.value !== undefined) node.value = node.data.value; + node.data = node.data.data; +} + +function computeHeight(node) { + var height = 0; + do node.height = height; + while ((node = node.parent) && (node.height < ++height)); +} + +function Node$1(data) { + this.data = data; + this.depth = + this.height = 0; + this.parent = null; +} + +Node$1.prototype = hierarchy.prototype = { + constructor: Node$1, + count: node_count, + each: node_each, + eachAfter: node_eachAfter, + eachBefore: node_eachBefore, + find: node_find, + sum: node_sum, + sort: node_sort, + path: node_path, + ancestors: node_ancestors, + descendants: node_descendants, + leaves: node_leaves, + links: node_links, + copy: node_copy, + [Symbol.iterator]: node_iterator +}; + +function optional(f) { + return f == null ? null : required(f); +} + +function required(f) { + if (typeof f !== "function") throw new Error; + return f; +} + +function constantZero() { + return 0; +} + +function constant$2(x) { + return function() { + return x; + }; +} + +// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use +const a$1 = 1664525; +const c$3 = 1013904223; +const m = 4294967296; // 2^32 + +function lcg$1() { + let s = 1; + return () => (s = (a$1 * s + c$3) % m) / m; +} + +function array$1(x) { + return typeof x === "object" && "length" in x + ? x // Array, TypedArray, NodeList, array-like + : Array.from(x); // Map, Set, iterable, string, or anything else +} + +function shuffle(array, random) { + let m = array.length, + t, + i; + + while (m) { + i = random() * m-- | 0; + t = array[m]; + array[m] = array[i]; + array[i] = t; + } + + return array; +} + +function enclose(circles) { + return packEncloseRandom(circles, lcg$1()); +} + +function packEncloseRandom(circles, random) { + var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e; + + while (i < n) { + p = circles[i]; + if (e && enclosesWeak(e, p)) ++i; + else e = encloseBasis(B = extendBasis(B, p)), i = 0; + } + + return e; +} + +function extendBasis(B, p) { + var i, j; + + if (enclosesWeakAll(p, B)) return [p]; + + // If we get here then B must have at least one element. + for (i = 0; i < B.length; ++i) { + if (enclosesNot(p, B[i]) + && enclosesWeakAll(encloseBasis2(B[i], p), B)) { + return [B[i], p]; + } + } + + // If we get here then B must have at least two elements. + for (i = 0; i < B.length - 1; ++i) { + for (j = i + 1; j < B.length; ++j) { + if (enclosesNot(encloseBasis2(B[i], B[j]), p) + && enclosesNot(encloseBasis2(B[i], p), B[j]) + && enclosesNot(encloseBasis2(B[j], p), B[i]) + && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { + return [B[i], B[j], p]; + } + } + } + + // If we get here then something is very wrong. + throw new Error; +} + +function enclosesNot(a, b) { + var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; + return dr < 0 || dr * dr < dx * dx + dy * dy; +} + +function enclosesWeak(a, b) { + var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; +} + +function enclosesWeakAll(a, B) { + for (var i = 0; i < B.length; ++i) { + if (!enclosesWeak(a, B[i])) { + return false; + } + } + return true; +} + +function encloseBasis(B) { + switch (B.length) { + case 1: return encloseBasis1(B[0]); + case 2: return encloseBasis2(B[0], B[1]); + case 3: return encloseBasis3(B[0], B[1], B[2]); + } +} + +function encloseBasis1(a) { + return { + x: a.x, + y: a.y, + r: a.r + }; +} + +function encloseBasis2(a, b) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, + l = Math.sqrt(x21 * x21 + y21 * y21); + return { + x: (x1 + x2 + x21 / l * r21) / 2, + y: (y1 + y2 + y21 / l * r21) / 2, + r: (l + r1 + r2) / 2 + }; +} + +function encloseBasis3(a, b, c) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x3 = c.x, y3 = c.y, r3 = c.r, + a2 = x1 - x2, + a3 = x1 - x3, + b2 = y1 - y2, + b3 = y1 - y3, + c2 = r2 - r1, + c3 = r3 - r1, + d1 = x1 * x1 + y1 * y1 - r1 * r1, + d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, + d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, + ab = a3 * b2 - a2 * b3, + xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, + xb = (b3 * c2 - b2 * c3) / ab, + ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, + yb = (a2 * c3 - a3 * c2) / ab, + A = xb * xb + yb * yb - 1, + B = 2 * (r1 + xa * xb + ya * yb), + C = xa * xa + ya * ya - r1 * r1, + r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); + return { + x: x1 + xa + xb * r, + y: y1 + ya + yb * r, + r: r + }; +} + +function place(b, a, c) { + var dx = b.x - a.x, x, a2, + dy = b.y - a.y, y, b2, + d2 = dx * dx + dy * dy; + if (d2) { + a2 = a.r + c.r, a2 *= a2; + b2 = b.r + c.r, b2 *= b2; + if (a2 > b2) { + x = (d2 + b2 - a2) / (2 * d2); + y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); + c.x = b.x - x * dx - y * dy; + c.y = b.y - x * dy + y * dx; + } else { + x = (d2 + a2 - b2) / (2 * d2); + y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); + c.x = a.x + x * dx - y * dy; + c.y = a.y + x * dy + y * dx; + } + } else { + c.x = a.x + c.r; + c.y = a.y; + } +} + +function intersects(a, b) { + var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; +} + +function score(node) { + var a = node._, + b = node.next._, + ab = a.r + b.r, + dx = (a.x * b.r + b.x * a.r) / ab, + dy = (a.y * b.r + b.y * a.r) / ab; + return dx * dx + dy * dy; +} + +function Node(circle) { + this._ = circle; + this.next = null; + this.previous = null; +} + +function packSiblingsRandom(circles, random) { + if (!(n = (circles = array$1(circles)).length)) return 0; + + var a, b, c, n, aa, ca, i, j, k, sj, sk; + + // Place the first circle. + a = circles[0], a.x = 0, a.y = 0; + if (!(n > 1)) return a.r; + + // Place the second circle. + b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; + if (!(n > 2)) return a.r + b.r; + + // Place the third circle. + place(b, a, c = circles[2]); + + // Initialize the front-chain using the first three circles a, b and c. + a = new Node(a), b = new Node(b), c = new Node(c); + a.next = c.previous = b; + b.next = a.previous = c; + c.next = b.previous = a; + + // Attempt to place each remaining circle… + pack: for (i = 3; i < n; ++i) { + place(a._, b._, c = circles[i]), c = new Node(c); + + // Find the closest intersecting circle on the front-chain, if any. + // “Closeness” is determined by linear distance along the front-chain. + // “Ahead” or “behind” is likewise determined by linear distance. + j = b.next, k = a.previous, sj = b._.r, sk = a._.r; + do { + if (sj <= sk) { + if (intersects(j._, c._)) { + b = j, a.next = b, b.previous = a, --i; + continue pack; + } + sj += j._.r, j = j.next; + } else { + if (intersects(k._, c._)) { + a = k, a.next = b, b.previous = a, --i; + continue pack; + } + sk += k._.r, k = k.previous; + } + } while (j !== k.next); + + // Success! Insert the new circle c between a and b. + c.previous = a, c.next = b, a.next = b.previous = b = c; + + // Compute the new closest circle pair to the centroid. + aa = score(a); + while ((c = c.next) !== b) { + if ((ca = score(c)) < aa) { + a = c, aa = ca; + } + } + b = a.next; + } + + // Compute the enclosing circle of the front chain. + a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random); + + // Translate the circles to put the enclosing circle around the origin. + for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; + + return c.r; +} + +function siblings(circles) { + packSiblingsRandom(circles, lcg$1()); + return circles; +} + +function defaultRadius(d) { + return Math.sqrt(d.value); +} + +function index$1() { + var radius = null, + dx = 1, + dy = 1, + padding = constantZero; + + function pack(root) { + const random = lcg$1(); + root.x = dx / 2, root.y = dy / 2; + if (radius) { + root.eachBefore(radiusLeaf(radius)) + .eachAfter(packChildrenRandom(padding, 0.5, random)) + .eachBefore(translateChild(1)); + } else { + root.eachBefore(radiusLeaf(defaultRadius)) + .eachAfter(packChildrenRandom(constantZero, 1, random)) + .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random)) + .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); + } + return root; + } + + pack.radius = function(x) { + return arguments.length ? (radius = optional(x), pack) : radius; + }; + + pack.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; + }; + + pack.padding = function(x) { + return arguments.length ? (padding = typeof x === "function" ? x : constant$2(+x), pack) : padding; + }; + + return pack; +} + +function radiusLeaf(radius) { + return function(node) { + if (!node.children) { + node.r = Math.max(0, +radius(node) || 0); + } + }; +} + +function packChildrenRandom(padding, k, random) { + return function(node) { + if (children = node.children) { + var children, + i, + n = children.length, + r = padding(node) * k || 0, + e; + + if (r) for (i = 0; i < n; ++i) children[i].r += r; + e = packSiblingsRandom(children, random); + if (r) for (i = 0; i < n; ++i) children[i].r -= r; + node.r = e + r; + } + }; +} + +function translateChild(k) { + return function(node) { + var parent = node.parent; + node.r *= k; + if (parent) { + node.x = parent.x + k * node.x; + node.y = parent.y + k * node.y; + } + }; +} + +function roundNode(node) { + node.x0 = Math.round(node.x0); + node.y0 = Math.round(node.y0); + node.x1 = Math.round(node.x1); + node.y1 = Math.round(node.y1); +} + +function treemapDice(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (x1 - x0) / parent.value; + + while (++i < n) { + node = nodes[i], node.y0 = y0, node.y1 = y1; + node.x0 = x0, node.x1 = x0 += node.value * k; + } +} + +function partition() { + var dx = 1, + dy = 1, + padding = 0, + round = false; + + function partition(root) { + var n = root.height + 1; + root.x0 = + root.y0 = padding; + root.x1 = dx; + root.y1 = dy / n; + root.eachBefore(positionNode(dy, n)); + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(dy, n) { + return function(node) { + if (node.children) { + treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); + } + var x0 = node.x0, + y0 = node.y0, + x1 = node.x1 - padding, + y1 = node.y1 - padding; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + }; + } + + partition.round = function(x) { + return arguments.length ? (round = !!x, partition) : round; + }; + + partition.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; + }; + + partition.padding = function(x) { + return arguments.length ? (padding = +x, partition) : padding; + }; + + return partition; +} + +var preroot = {depth: -1}, + ambiguous = {}, + imputed = {}; + +function defaultId(d) { + return d.id; +} + +function defaultParentId(d) { + return d.parentId; +} + +function stratify() { + var id = defaultId, + parentId = defaultParentId, + path; + + function stratify(data) { + var nodes = Array.from(data), + currentId = id, + currentParentId = parentId, + n, + d, + i, + root, + parent, + node, + nodeId, + nodeKey, + nodeByKey = new Map; + + if (path != null) { + const I = nodes.map((d, i) => normalize$1(path(d, i, data))); + const P = I.map(parentof); + const S = new Set(I).add(""); + for (const i of P) { + if (!S.has(i)) { + S.add(i); + I.push(i); + P.push(parentof(i)); + nodes.push(imputed); + } + } + currentId = (_, i) => I[i]; + currentParentId = (_, i) => P[i]; + } + + for (i = 0, n = nodes.length; i < n; ++i) { + d = nodes[i], node = nodes[i] = new Node$1(d); + if ((nodeId = currentId(d, i, data)) != null && (nodeId += "")) { + nodeKey = node.id = nodeId; + nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node); + } + if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += "")) { + node.parent = nodeId; + } + } + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (nodeId = node.parent) { + parent = nodeByKey.get(nodeId); + if (!parent) throw new Error("missing: " + nodeId); + if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); + if (parent.children) parent.children.push(node); + else parent.children = [node]; + node.parent = parent; + } else { + if (root) throw new Error("multiple roots"); + root = node; + } + } + + if (!root) throw new Error("no root"); + + // When imputing internal nodes, only introduce roots if needed. + // Then replace the imputed marker data with null. + if (path != null) { + while (root.data === imputed && root.children.length === 1) { + root = root.children[0], --n; + } + for (let i = nodes.length - 1; i >= 0; --i) { + node = nodes[i]; + if (node.data !== imputed) break; + node.data = null; + } + } + + root.parent = preroot; + root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); + root.parent = null; + if (n > 0) throw new Error("cycle"); + + return root; + } + + stratify.id = function(x) { + return arguments.length ? (id = optional(x), stratify) : id; + }; + + stratify.parentId = function(x) { + return arguments.length ? (parentId = optional(x), stratify) : parentId; + }; + + stratify.path = function(x) { + return arguments.length ? (path = optional(x), stratify) : path; + }; + + return stratify; +} + +// To normalize a path, we coerce to a string, strip the trailing slash if any +// (as long as the trailing slash is not immediately preceded by another slash), +// and add leading slash if missing. +function normalize$1(path) { + path = `${path}`; + let i = path.length; + if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1); + return path[0] === "/" ? path : `/${path}`; +} + +// Walk backwards to find the first slash that is not the leading slash, e.g.: +// "/foo/bar" ⇥ "/foo", "/foo" ⇥ "/", "/" ↦ "". (The root is special-cased +// because the id of the root must be a truthy value.) +function parentof(path) { + let i = path.length; + if (i < 2) return ""; + while (--i > 1) if (slash(path, i)) break; + return path.slice(0, i); +} + +// Slashes can be escaped; to determine whether a slash is a path delimiter, we +// count the number of preceding backslashes escaping the forward slash: an odd +// number indicates an escaped forward slash. +function slash(path, i) { + if (path[i] === "/") { + let k = 0; + while (i > 0 && path[--i] === "\\") ++k; + if ((k & 1) === 0) return true; + } + return false; +} + +function defaultSeparation(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +// function radialSeparation(a, b) { +// return (a.parent === b.parent ? 1 : 2) / a.depth; +// } + +// This function is used to traverse the left contour of a subtree (or +// subforest). It returns the successor of v on this contour. This successor is +// either given by the leftmost child of v or by the thread of v. The function +// returns null if and only if v is on the highest level of its subtree. +function nextLeft(v) { + var children = v.children; + return children ? children[0] : v.t; +} + +// This function works analogously to nextLeft. +function nextRight(v) { + var children = v.children; + return children ? children[children.length - 1] : v.t; +} + +// Shifts the current subtree rooted at w+. This is done by increasing +// prelim(w+) and mod(w+) by shift. +function moveSubtree(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; +} + +// All other shifts, applied to the smaller subtrees between w- and w+, are +// performed by this function. To prepare the shifts, we have to adjust +// change(w+), shift(w+), and change(w-). +function executeShifts(v) { + var shift = 0, + change = 0, + children = v.children, + i = children.length, + w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); + } +} + +// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, +// returns the specified (default) ancestor. +function nextAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; +} + +function TreeNode(node, i) { + this._ = node; + this.parent = null; + this.children = null; + this.A = null; // default ancestor + this.a = this; // ancestor + this.z = 0; // prelim + this.m = 0; // mod + this.c = 0; // change + this.s = 0; // shift + this.t = null; // thread + this.i = i; // number +} + +TreeNode.prototype = Object.create(Node$1.prototype); + +function treeRoot(root) { + var tree = new TreeNode(root, 0), + node, + nodes = [tree], + child, + children, + i, + n; + + while (node = nodes.pop()) { + if (children = node._.children) { + node.children = new Array(n = children.length); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new TreeNode(children[i], i)); + child.parent = node; + } + } + } + + (tree.parent = new TreeNode(null, 0)).children = [tree]; + return tree; +} + +// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm +function tree() { + var separation = defaultSeparation, + dx = 1, + dy = 1, + nodeSize = null; + + function tree(root) { + var t = treeRoot(root); + + // Compute the layout using Buchheim et al.’s algorithm. + t.eachAfter(firstWalk), t.parent.m = -t.z; + t.eachBefore(secondWalk); + + // If a fixed node size is specified, scale x and y. + if (nodeSize) root.eachBefore(sizeNode); + + // If a fixed tree size is specified, scale x and y based on the extent. + // Compute the left-most, right-most, and depth-most nodes for extents. + else { + var left = root, + right = root, + bottom = root; + root.eachBefore(function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var s = left === right ? 1 : separation(left, right) / 2, + tx = s - left.x, + kx = dx / (right.x + s + tx), + ky = dy / (bottom.depth || 1); + root.eachBefore(function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); + } + + return root; + } + + // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is + // applied recursively to the children of v, as well as the function + // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the + // node v is placed to the midpoint of its outermost children. + function firstWalk(v) { + var children = v.children, + siblings = v.parent.children, + w = v.i ? siblings[v.i - 1] : null; + if (children) { + executeShifts(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + + // Computes all real x-coordinates by summing up the modifiers recursively. + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + + // The core of the algorithm. Here, a new subtree is combined with the + // previous subtrees. Threads are used to traverse the inside and outside + // contours of the left and right subtree up to the highest common level. The + // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the + // superscript o means outside and i means inside, the subscript - means left + // subtree and + means right subtree. For summing up the modifiers along the + // contour, we use respective variables si+, si-, so-, and so+. Whenever two + // nodes of the inside contours conflict, we compute the left one of the + // greatest uncommon ancestors using the function ANCESTOR and call MOVE + // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. + // Finally, we add a new thread (if necessary). + function apportion(v, w, ancestor) { + if (w) { + var vip = v, + vop = v, + vim = w, + vom = vip.parent.children[0], + sip = vip.m, + sop = vop.m, + sim = vim.m, + som = vom.m, + shift; + while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { + vom = nextLeft(vom); + vop = nextRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + moveSubtree(nextAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !nextRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !nextLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } + } + return ancestor; + } + + function sizeNode(node) { + node.x *= dx; + node.y = node.depth * dy; + } + + tree.separation = function(x) { + return arguments.length ? (separation = x, tree) : separation; + }; + + tree.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); + }; + + tree.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); + }; + + return tree; +} + +function treemapSlice(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (y1 - y0) / parent.value; + + while (++i < n) { + node = nodes[i], node.x0 = x0, node.x1 = x1; + node.y0 = y0, node.y1 = y0 += node.value * k; + } +} + +var phi = (1 + Math.sqrt(5)) / 2; + +function squarifyRatio(ratio, parent, x0, y0, x1, y1) { + var rows = [], + nodes = parent.children, + row, + nodeValue, + i0 = 0, + i1 = 0, + n = nodes.length, + dx, dy, + value = parent.value, + sumValue, + minValue, + maxValue, + newRatio, + minRatio, + alpha, + beta; + + while (i0 < n) { + dx = x1 - x0, dy = y1 - y0; + + // Find the next non-empty node. + do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); + minValue = maxValue = sumValue; + alpha = Math.max(dy / dx, dx / dy) / (value * ratio); + beta = sumValue * sumValue * alpha; + minRatio = Math.max(maxValue / beta, beta / minValue); + + // Keep adding nodes while the aspect ratio maintains or improves. + for (; i1 < n; ++i1) { + sumValue += nodeValue = nodes[i1].value; + if (nodeValue < minValue) minValue = nodeValue; + if (nodeValue > maxValue) maxValue = nodeValue; + beta = sumValue * sumValue * alpha; + newRatio = Math.max(maxValue / beta, beta / minValue); + if (newRatio > minRatio) { sumValue -= nodeValue; break; } + minRatio = newRatio; + } + + // Position and record the row orientation. + rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); + if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); + else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); + value -= sumValue, i0 = i1; + } + + return rows; +} + +var squarify = (function custom(ratio) { + + function squarify(parent, x0, y0, x1, y1) { + squarifyRatio(ratio, parent, x0, y0, x1, y1); + } + + squarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return squarify; +})(phi); + +function index() { + var tile = squarify, + round = false, + dx = 1, + dy = 1, + paddingStack = [0], + paddingInner = constantZero, + paddingTop = constantZero, + paddingRight = constantZero, + paddingBottom = constantZero, + paddingLeft = constantZero; + + function treemap(root) { + root.x0 = + root.y0 = 0; + root.x1 = dx; + root.y1 = dy; + root.eachBefore(positionNode); + paddingStack = [0]; + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(node) { + var p = paddingStack[node.depth], + x0 = node.x0 + p, + y0 = node.y0 + p, + x1 = node.x1 - p, + y1 = node.y1 - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + if (node.children) { + p = paddingStack[node.depth + 1] = paddingInner(node) / 2; + x0 += paddingLeft(node) - p; + y0 += paddingTop(node) - p; + x1 -= paddingRight(node) - p; + y1 -= paddingBottom(node) - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + tile(node, x0, y0, x1, y1); + } + } + + treemap.round = function(x) { + return arguments.length ? (round = !!x, treemap) : round; + }; + + treemap.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; + }; + + treemap.tile = function(x) { + return arguments.length ? (tile = required(x), treemap) : tile; + }; + + treemap.padding = function(x) { + return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); + }; + + treemap.paddingInner = function(x) { + return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$2(+x), treemap) : paddingInner; + }; + + treemap.paddingOuter = function(x) { + return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); + }; + + treemap.paddingTop = function(x) { + return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$2(+x), treemap) : paddingTop; + }; + + treemap.paddingRight = function(x) { + return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$2(+x), treemap) : paddingRight; + }; + + treemap.paddingBottom = function(x) { + return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$2(+x), treemap) : paddingBottom; + }; + + treemap.paddingLeft = function(x) { + return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$2(+x), treemap) : paddingLeft; + }; + + return treemap; +} + +function binary(parent, x0, y0, x1, y1) { + var nodes = parent.children, + i, n = nodes.length, + sum, sums = new Array(n + 1); + + for (sums[0] = sum = i = 0; i < n; ++i) { + sums[i + 1] = sum += nodes[i].value; + } + + partition(0, n, parent.value, x0, y0, x1, y1); + + function partition(i, j, value, x0, y0, x1, y1) { + if (i >= j - 1) { + var node = nodes[i]; + node.x0 = x0, node.y0 = y0; + node.x1 = x1, node.y1 = y1; + return; + } + + var valueOffset = sums[i], + valueTarget = (value / 2) + valueOffset, + k = i + 1, + hi = j - 1; + + while (k < hi) { + var mid = k + hi >>> 1; + if (sums[mid] < valueTarget) k = mid + 1; + else hi = mid; + } + + if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; + + var valueLeft = sums[k] - valueOffset, + valueRight = value - valueLeft; + + if ((x1 - x0) > (y1 - y0)) { + var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1; + partition(i, k, valueLeft, x0, y0, xk, y1); + partition(k, j, valueRight, xk, y0, x1, y1); + } else { + var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1; + partition(i, k, valueLeft, x0, y0, x1, yk); + partition(k, j, valueRight, x0, yk, x1, y1); + } + } +} + +function sliceDice(parent, x0, y0, x1, y1) { + (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); +} + +var resquarify = (function custom(ratio) { + + function resquarify(parent, x0, y0, x1, y1) { + if ((rows = parent._squarify) && (rows.ratio === ratio)) { + var rows, + row, + nodes, + i, + j = -1, + n, + m = rows.length, + value = parent.value; + + while (++j < m) { + row = rows[j], nodes = row.children; + for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; + if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1); + else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1); + value -= row.value; + } + } else { + parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); + rows.ratio = ratio; + } + } + + resquarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return resquarify; +})(phi); + +function area$1(polygon) { + var i = -1, + n = polygon.length, + a, + b = polygon[n - 1], + area = 0; + + while (++i < n) { + a = b; + b = polygon[i]; + area += a[1] * b[0] - a[0] * b[1]; + } + + return area / 2; +} + +function centroid(polygon) { + var i = -1, + n = polygon.length, + x = 0, + y = 0, + a, + b = polygon[n - 1], + c, + k = 0; + + while (++i < n) { + a = b; + b = polygon[i]; + k += c = a[0] * b[1] - b[0] * a[1]; + x += (a[0] + b[0]) * c; + y += (a[1] + b[1]) * c; + } + + return k *= 3, [x / k, y / k]; +} + +// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of +// the 3D cross product in a quadrant I Cartesian coordinate system (+x is +// right, +y is up). Returns a positive value if ABC is counter-clockwise, +// negative if clockwise, and zero if the points are collinear. +function cross$1(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); +} + +function lexicographicOrder(a, b) { + return a[0] - b[0] || a[1] - b[1]; +} + +// Computes the upper convex hull per the monotone chain algorithm. +// Assumes points.length >= 3, is sorted by x, unique in y. +// Returns an array of indices into points in left-to-right order. +function computeUpperHullIndexes(points) { + const n = points.length, + indexes = [0, 1]; + let size = 2, i; + + for (i = 2; i < n; ++i) { + while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; + indexes[size++] = i; + } + + return indexes.slice(0, size); // remove popped points +} + +function hull(points) { + if ((n = points.length) < 3) return null; + + var i, + n, + sortedPoints = new Array(n), + flippedPoints = new Array(n); + + for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; + sortedPoints.sort(lexicographicOrder); + for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; + + var upperIndexes = computeUpperHullIndexes(sortedPoints), + lowerIndexes = computeUpperHullIndexes(flippedPoints); + + // Construct the hull polygon, removing possible duplicate endpoints. + var skipLeft = lowerIndexes[0] === upperIndexes[0], + skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], + hull = []; + + // Add upper hull in right-to-l order. + // Then add lower hull in left-to-right order. + for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); + for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); + + return hull; +} + +function contains(polygon, point) { + var n = polygon.length, + p = polygon[n - 1], + x = point[0], y = point[1], + x0 = p[0], y0 = p[1], + x1, y1, + inside = false; + + for (var i = 0; i < n; ++i) { + p = polygon[i], x1 = p[0], y1 = p[1]; + if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; + x0 = x1, y0 = y1; + } + + return inside; +} + +function length(polygon) { + var i = -1, + n = polygon.length, + b = polygon[n - 1], + xa, + ya, + xb = b[0], + yb = b[1], + perimeter = 0; + + while (++i < n) { + xa = xb; + ya = yb; + b = polygon[i]; + xb = b[0]; + yb = b[1]; + xa -= xb; + ya -= yb; + perimeter += Math.hypot(xa, ya); + } + + return perimeter; +} + +var defaultSource = Math.random; + +var uniform = (function sourceRandomUniform(source) { + function randomUniform(min, max) { + min = min == null ? 0 : +min; + max = max == null ? 1 : +max; + if (arguments.length === 1) max = min, min = 0; + else max -= min; + return function() { + return source() * max + min; + }; + } + + randomUniform.source = sourceRandomUniform; + + return randomUniform; +})(defaultSource); + +var int = (function sourceRandomInt(source) { + function randomInt(min, max) { + if (arguments.length < 2) max = min, min = 0; + min = Math.floor(min); + max = Math.floor(max) - min; + return function() { + return Math.floor(source() * max + min); + }; + } + + randomInt.source = sourceRandomInt; + + return randomInt; +})(defaultSource); + +var normal = (function sourceRandomNormal(source) { + function randomNormal(mu, sigma) { + var x, r; + mu = mu == null ? 0 : +mu; + sigma = sigma == null ? 1 : +sigma; + return function() { + var y; + + // If available, use the second previously-generated uniform random. + if (x != null) y = x, x = null; + + // Otherwise, generate a new x and y. + else do { + x = source() * 2 - 1; + y = source() * 2 - 1; + r = x * x + y * y; + } while (!r || r > 1); + + return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); + }; + } + + randomNormal.source = sourceRandomNormal; + + return randomNormal; +})(defaultSource); + +var logNormal = (function sourceRandomLogNormal(source) { + var N = normal.source(source); + + function randomLogNormal() { + var randomNormal = N.apply(this, arguments); + return function() { + return Math.exp(randomNormal()); + }; + } + + randomLogNormal.source = sourceRandomLogNormal; + + return randomLogNormal; +})(defaultSource); + +var irwinHall = (function sourceRandomIrwinHall(source) { + function randomIrwinHall(n) { + if ((n = +n) <= 0) return () => 0; + return function() { + for (var sum = 0, i = n; i > 1; --i) sum += source(); + return sum + i * source(); + }; + } + + randomIrwinHall.source = sourceRandomIrwinHall; + + return randomIrwinHall; +})(defaultSource); + +var bates = (function sourceRandomBates(source) { + var I = irwinHall.source(source); + + function randomBates(n) { + // use limiting distribution at n === 0 + if ((n = +n) === 0) return source; + var randomIrwinHall = I(n); + return function() { + return randomIrwinHall() / n; + }; + } + + randomBates.source = sourceRandomBates; + + return randomBates; +})(defaultSource); + +var exponential = (function sourceRandomExponential(source) { + function randomExponential(lambda) { + return function() { + return -Math.log1p(-source()) / lambda; + }; + } + + randomExponential.source = sourceRandomExponential; + + return randomExponential; +})(defaultSource); + +var pareto = (function sourceRandomPareto(source) { + function randomPareto(alpha) { + if ((alpha = +alpha) < 0) throw new RangeError("invalid alpha"); + alpha = 1 / -alpha; + return function() { + return Math.pow(1 - source(), alpha); + }; + } + + randomPareto.source = sourceRandomPareto; + + return randomPareto; +})(defaultSource); + +var bernoulli = (function sourceRandomBernoulli(source) { + function randomBernoulli(p) { + if ((p = +p) < 0 || p > 1) throw new RangeError("invalid p"); + return function() { + return Math.floor(source() + p); + }; + } + + randomBernoulli.source = sourceRandomBernoulli; + + return randomBernoulli; +})(defaultSource); + +var geometric = (function sourceRandomGeometric(source) { + function randomGeometric(p) { + if ((p = +p) < 0 || p > 1) throw new RangeError("invalid p"); + if (p === 0) return () => Infinity; + if (p === 1) return () => 1; + p = Math.log1p(-p); + return function() { + return 1 + Math.floor(Math.log1p(-source()) / p); + }; + } + + randomGeometric.source = sourceRandomGeometric; + + return randomGeometric; +})(defaultSource); + +var gamma = (function sourceRandomGamma(source) { + var randomNormal = normal.source(source)(); + + function randomGamma(k, theta) { + if ((k = +k) < 0) throw new RangeError("invalid k"); + // degenerate distribution if k === 0 + if (k === 0) return () => 0; + theta = theta == null ? 1 : +theta; + // exponential distribution if k === 1 + if (k === 1) return () => -Math.log1p(-source()) * theta; + + var d = (k < 1 ? k + 1 : k) - 1 / 3, + c = 1 / (3 * Math.sqrt(d)), + multiplier = k < 1 ? () => Math.pow(source(), 1 / k) : () => 1; + return function() { + do { + do { + var x = randomNormal(), + v = 1 + c * x; + } while (v <= 0); + v *= v * v; + var u = 1 - source(); + } while (u >= 1 - 0.0331 * x * x * x * x && Math.log(u) >= 0.5 * x * x + d * (1 - v + Math.log(v))); + return d * v * multiplier() * theta; + }; + } + + randomGamma.source = sourceRandomGamma; + + return randomGamma; +})(defaultSource); + +var beta = (function sourceRandomBeta(source) { + var G = gamma.source(source); + + function randomBeta(alpha, beta) { + var X = G(alpha), + Y = G(beta); + return function() { + var x = X(); + return x === 0 ? 0 : x / (x + Y()); + }; + } + + randomBeta.source = sourceRandomBeta; + + return randomBeta; +})(defaultSource); + +var binomial = (function sourceRandomBinomial(source) { + var G = geometric.source(source), + B = beta.source(source); + + function randomBinomial(n, p) { + n = +n; + if ((p = +p) >= 1) return () => n; + if (p <= 0) return () => 0; + return function() { + var acc = 0, nn = n, pp = p; + while (nn * pp > 16 && nn * (1 - pp) > 16) { + var i = Math.floor((nn + 1) * pp), + y = B(i, nn - i + 1)(); + if (y <= pp) { + acc += i; + nn -= i; + pp = (pp - y) / (1 - y); + } else { + nn = i - 1; + pp /= y; + } + } + var sign = pp < 0.5, + pFinal = sign ? pp : 1 - pp, + g = G(pFinal); + for (var s = g(), k = 0; s <= nn; ++k) s += g(); + return acc + (sign ? k : nn - k); + }; + } + + randomBinomial.source = sourceRandomBinomial; + + return randomBinomial; +})(defaultSource); + +var weibull = (function sourceRandomWeibull(source) { + function randomWeibull(k, a, b) { + var outerFunc; + if ((k = +k) === 0) { + outerFunc = x => -Math.log(x); + } else { + k = 1 / k; + outerFunc = x => Math.pow(x, k); + } + a = a == null ? 0 : +a; + b = b == null ? 1 : +b; + return function() { + return a + b * outerFunc(-Math.log1p(-source())); + }; + } + + randomWeibull.source = sourceRandomWeibull; + + return randomWeibull; +})(defaultSource); + +var cauchy = (function sourceRandomCauchy(source) { + function randomCauchy(a, b) { + a = a == null ? 0 : +a; + b = b == null ? 1 : +b; + return function() { + return a + b * Math.tan(Math.PI * source()); + }; + } + + randomCauchy.source = sourceRandomCauchy; + + return randomCauchy; +})(defaultSource); + +var logistic = (function sourceRandomLogistic(source) { + function randomLogistic(a, b) { + a = a == null ? 0 : +a; + b = b == null ? 1 : +b; + return function() { + var u = source(); + return a + b * Math.log(u / (1 - u)); + }; + } + + randomLogistic.source = sourceRandomLogistic; + + return randomLogistic; +})(defaultSource); + +var poisson = (function sourceRandomPoisson(source) { + var G = gamma.source(source), + B = binomial.source(source); + + function randomPoisson(lambda) { + return function() { + var acc = 0, l = lambda; + while (l > 16) { + var n = Math.floor(0.875 * l), + t = G(n)(); + if (t > l) return acc + B(n - 1, l / t)(); + acc += n; + l -= t; + } + for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source()); + return acc + k; + }; + } + + randomPoisson.source = sourceRandomPoisson; + + return randomPoisson; +})(defaultSource); + +// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use +const mul = 0x19660D; +const inc = 0x3C6EF35F; +const eps = 1 / 0x100000000; + +function lcg(seed = Math.random()) { + let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0; + return () => (state = mul * state + inc | 0, eps * (state >>> 0)); +} + +function initRange(domain, range) { + switch (arguments.length) { + case 0: break; + case 1: this.range(domain); break; + default: this.range(range).domain(domain); break; + } + return this; +} + +function initInterpolator(domain, interpolator) { + switch (arguments.length) { + case 0: break; + case 1: { + if (typeof domain === "function") this.interpolator(domain); + else this.range(domain); + break; + } + default: { + this.domain(domain); + if (typeof interpolator === "function") this.interpolator(interpolator); + else this.range(interpolator); + break; + } + } + return this; +} + +const implicit = Symbol("implicit"); + +function ordinal() { + var index = new InternMap(), + domain = [], + range = [], + unknown = implicit; + + function scale(d) { + let i = index.get(d); + if (i === undefined) { + if (unknown !== implicit) return unknown; + index.set(d, i = domain.push(d) - 1); + } + return range[i % range.length]; + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = new InternMap(); + for (const value of _) { + if (index.has(value)) continue; + index.set(value, domain.push(value) - 1); + } + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal(domain, range).unknown(unknown); + }; + + initRange.apply(scale, arguments); + + return scale; +} + +function band() { + var scale = ordinal().unknown(undefined), + domain = scale.domain, + ordinalRange = scale.range, + r0 = 0, + r1 = 1, + step, + bandwidth, + round = false, + paddingInner = 0, + paddingOuter = 0, + align = 0.5; + + delete scale.unknown; + + function rescale() { + var n = domain().length, + reverse = r1 < r0, + start = reverse ? r1 : r0, + stop = reverse ? r0 : r1; + step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); + if (round) step = Math.floor(step); + start += (stop - start - step * (n - paddingInner)) * align; + bandwidth = step * (1 - paddingInner); + if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); + var values = range$2(n).map(function(i) { return start + step * i; }); + return ordinalRange(reverse ? values.reverse() : values); + } + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.range = function(_) { + return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1]; + }; + + scale.rangeRound = function(_) { + return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale(); + }; + + scale.bandwidth = function() { + return bandwidth; + }; + + scale.step = function() { + return step; + }; + + scale.round = function(_) { + return arguments.length ? (round = !!_, rescale()) : round; + }; + + scale.padding = function(_) { + return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner; + }; + + scale.paddingInner = function(_) { + return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner; + }; + + scale.paddingOuter = function(_) { + return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter; + }; + + scale.align = function(_) { + return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; + }; + + scale.copy = function() { + return band(domain(), [r0, r1]) + .round(round) + .paddingInner(paddingInner) + .paddingOuter(paddingOuter) + .align(align); + }; + + return initRange.apply(rescale(), arguments); +} + +function pointish(scale) { + var copy = scale.copy; + + scale.padding = scale.paddingOuter; + delete scale.paddingInner; + delete scale.paddingOuter; + + scale.copy = function() { + return pointish(copy()); + }; + + return scale; +} + +function point$4() { + return pointish(band.apply(null, arguments).paddingInner(1)); +} + +function constants(x) { + return function() { + return x; + }; +} + +function number$1(x) { + return +x; +} + +var unit = [0, 1]; + +function identity$3(x) { + return x; +} + +function normalize(a, b) { + return (b -= (a = +a)) + ? function(x) { return (x - a) / b; } + : constants(isNaN(b) ? NaN : 0.5); +} + +function clamper(a, b) { + var t; + if (a > b) t = a, a = b, b = t; + return function(x) { return Math.max(a, Math.min(b, x)); }; +} + +// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. +// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. +function bimap(domain, range, interpolate) { + var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; + if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); + else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); + return function(x) { return r0(d0(x)); }; +} + +function polymap(domain, range, interpolate) { + var j = Math.min(domain.length, range.length) - 1, + d = new Array(j), + r = new Array(j), + i = -1; + + // Reverse descending domains. + if (domain[j] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + + while (++i < j) { + d[i] = normalize(domain[i], domain[i + 1]); + r[i] = interpolate(range[i], range[i + 1]); + } + + return function(x) { + var i = bisect(domain, x, 1, j) - 1; + return r[i](d[i](x)); + }; +} + +function copy$1(source, target) { + return target + .domain(source.domain()) + .range(source.range()) + .interpolate(source.interpolate()) + .clamp(source.clamp()) + .unknown(source.unknown()); +} + +function transformer$2() { + var domain = unit, + range = unit, + interpolate = interpolate$2, + transform, + untransform, + unknown, + clamp = identity$3, + piecewise, + output, + input; + + function rescale() { + var n = Math.min(domain.length, range.length); + if (clamp !== identity$3) clamp = clamper(domain[0], domain[n - 1]); + piecewise = n > 2 ? polymap : bimap; + output = input = null; + return scale; + } + + function scale(x) { + return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x))); + } + + scale.invert = function(y) { + return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y))); + }; + + scale.domain = function(_) { + return arguments.length ? (domain = Array.from(_, number$1), rescale()) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); + }; + + scale.rangeRound = function(_) { + return range = Array.from(_), interpolate = interpolateRound, rescale(); + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = _ ? true : identity$3, rescale()) : clamp !== identity$3; + }; + + scale.interpolate = function(_) { + return arguments.length ? (interpolate = _, rescale()) : interpolate; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t, u) { + transform = t, untransform = u; + return rescale(); + }; +} + +function continuous() { + return transformer$2()(identity$3, identity$3); +} + +function tickFormat(start, stop, count, specifier) { + var step = tickStep(start, stop, count), + precision; + specifier = formatSpecifier(specifier == null ? ",f" : specifier); + switch (specifier.type) { + case "s": { + var value = Math.max(Math.abs(start), Math.abs(stop)); + if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; + return exports.formatPrefix(specifier, value); + } + case "": + case "e": + case "g": + case "p": + case "r": { + if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); + break; + } + case "f": + case "%": { + if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; + break; + } + } + return exports.format(specifier); +} + +function linearish(scale) { + var domain = scale.domain; + + scale.ticks = function(count) { + var d = domain(); + return ticks(d[0], d[d.length - 1], count == null ? 10 : count); + }; + + scale.tickFormat = function(count, specifier) { + var d = domain(); + return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); + }; + + scale.nice = function(count) { + if (count == null) count = 10; + + var d = domain(); + var i0 = 0; + var i1 = d.length - 1; + var start = d[i0]; + var stop = d[i1]; + var prestep; + var step; + var maxIter = 10; + + if (stop < start) { + step = start, start = stop, stop = step; + step = i0, i0 = i1, i1 = step; + } + + while (maxIter-- > 0) { + step = tickIncrement(start, stop, count); + if (step === prestep) { + d[i0] = start; + d[i1] = stop; + return domain(d); + } else if (step > 0) { + start = Math.floor(start / step) * step; + stop = Math.ceil(stop / step) * step; + } else if (step < 0) { + start = Math.ceil(start * step) / step; + stop = Math.floor(stop * step) / step; + } else { + break; + } + prestep = step; + } + + return scale; + }; + + return scale; +} + +function linear() { + var scale = continuous(); + + scale.copy = function() { + return copy$1(scale, linear()); + }; + + initRange.apply(scale, arguments); + + return linearish(scale); +} + +function identity$2(domain) { + var unknown; + + function scale(x) { + return x == null || isNaN(x = +x) ? unknown : x; + } + + scale.invert = scale; + + scale.domain = scale.range = function(_) { + return arguments.length ? (domain = Array.from(_, number$1), scale) : domain.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return identity$2(domain).unknown(unknown); + }; + + domain = arguments.length ? Array.from(domain, number$1) : [0, 1]; + + return linearish(scale); +} + +function nice(domain, interval) { + domain = domain.slice(); + + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + t; + + if (x1 < x0) { + t = i0, i0 = i1, i1 = t; + t = x0, x0 = x1, x1 = t; + } + + domain[i0] = interval.floor(x0); + domain[i1] = interval.ceil(x1); + return domain; +} + +function transformLog(x) { + return Math.log(x); +} + +function transformExp(x) { + return Math.exp(x); +} + +function transformLogn(x) { + return -Math.log(-x); +} + +function transformExpn(x) { + return -Math.exp(-x); +} + +function pow10(x) { + return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; +} + +function powp(base) { + return base === 10 ? pow10 + : base === Math.E ? Math.exp + : x => Math.pow(base, x); +} + +function logp(base) { + return base === Math.E ? Math.log + : base === 10 && Math.log10 + || base === 2 && Math.log2 + || (base = Math.log(base), x => Math.log(x) / base); +} + +function reflect(f) { + return (x, k) => -f(-x, k); +} + +function loggish(transform) { + const scale = transform(transformLog, transformExp); + const domain = scale.domain; + let base = 10; + let logs; + let pows; + + function rescale() { + logs = logp(base), pows = powp(base); + if (domain()[0] < 0) { + logs = reflect(logs), pows = reflect(pows); + transform(transformLogn, transformExpn); + } else { + transform(transformLog, transformExp); + } + return scale; + } + + scale.base = function(_) { + return arguments.length ? (base = +_, rescale()) : base; + }; + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.ticks = count => { + const d = domain(); + let u = d[0]; + let v = d[d.length - 1]; + const r = v < u; + + if (r) ([u, v] = [v, u]); + + let i = logs(u); + let j = logs(v); + let k; + let t; + const n = count == null ? 10 : +count; + let z = []; + + if (!(base % 1) && j - i < n) { + i = Math.floor(i), j = Math.ceil(j); + if (u > 0) for (; i <= j; ++i) { + for (k = 1; k < base; ++k) { + t = i < 0 ? k / pows(-i) : k * pows(i); + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } else for (; i <= j; ++i) { + for (k = base - 1; k >= 1; --k) { + t = i > 0 ? k / pows(-i) : k * pows(i); + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } + if (z.length * 2 < n) z = ticks(u, v, n); + } else { + z = ticks(i, j, Math.min(j - i, n)).map(pows); + } + return r ? z.reverse() : z; + }; + + scale.tickFormat = (count, specifier) => { + if (count == null) count = 10; + if (specifier == null) specifier = base === 10 ? "s" : ","; + if (typeof specifier !== "function") { + if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true; + specifier = exports.format(specifier); + } + if (count === Infinity) return specifier; + const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? + return d => { + let i = d / pows(Math.round(logs(d))); + if (i * base < base - 0.5) i *= base; + return i <= k ? specifier(d) : ""; + }; + }; + + scale.nice = () => { + return domain(nice(domain(), { + floor: x => pows(Math.floor(logs(x))), + ceil: x => pows(Math.ceil(logs(x))) + })); + }; + + return scale; +} + +function log() { + const scale = loggish(transformer$2()).domain([1, 10]); + scale.copy = () => copy$1(scale, log()).base(scale.base()); + initRange.apply(scale, arguments); + return scale; +} + +function transformSymlog(c) { + return function(x) { + return Math.sign(x) * Math.log1p(Math.abs(x / c)); + }; +} + +function transformSymexp(c) { + return function(x) { + return Math.sign(x) * Math.expm1(Math.abs(x)) * c; + }; +} + +function symlogish(transform) { + var c = 1, scale = transform(transformSymlog(c), transformSymexp(c)); + + scale.constant = function(_) { + return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c; + }; + + return linearish(scale); +} + +function symlog() { + var scale = symlogish(transformer$2()); + + scale.copy = function() { + return copy$1(scale, symlog()).constant(scale.constant()); + }; + + return initRange.apply(scale, arguments); +} + +function transformPow(exponent) { + return function(x) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); + }; +} + +function transformSqrt(x) { + return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); +} + +function transformSquare(x) { + return x < 0 ? -x * x : x * x; +} + +function powish(transform) { + var scale = transform(identity$3, identity$3), + exponent = 1; + + function rescale() { + return exponent === 1 ? transform(identity$3, identity$3) + : exponent === 0.5 ? transform(transformSqrt, transformSquare) + : transform(transformPow(exponent), transformPow(1 / exponent)); + } + + scale.exponent = function(_) { + return arguments.length ? (exponent = +_, rescale()) : exponent; + }; + + return linearish(scale); +} + +function pow() { + var scale = powish(transformer$2()); + + scale.copy = function() { + return copy$1(scale, pow()).exponent(scale.exponent()); + }; + + initRange.apply(scale, arguments); + + return scale; +} + +function sqrt$1() { + return pow.apply(null, arguments).exponent(0.5); +} + +function square$1(x) { + return Math.sign(x) * x * x; +} + +function unsquare(x) { + return Math.sign(x) * Math.sqrt(Math.abs(x)); +} + +function radial() { + var squared = continuous(), + range = [0, 1], + round = false, + unknown; + + function scale(x) { + var y = unsquare(squared(x)); + return isNaN(y) ? unknown : round ? Math.round(y) : y; + } + + scale.invert = function(y) { + return squared.invert(square$1(y)); + }; + + scale.domain = function(_) { + return arguments.length ? (squared.domain(_), scale) : squared.domain(); + }; + + scale.range = function(_) { + return arguments.length ? (squared.range((range = Array.from(_, number$1)).map(square$1)), scale) : range.slice(); + }; + + scale.rangeRound = function(_) { + return scale.range(_).round(true); + }; + + scale.round = function(_) { + return arguments.length ? (round = !!_, scale) : round; + }; + + scale.clamp = function(_) { + return arguments.length ? (squared.clamp(_), scale) : squared.clamp(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return radial(squared.domain(), range) + .round(round) + .clamp(squared.clamp()) + .unknown(unknown); + }; + + initRange.apply(scale, arguments); + + return linearish(scale); +} + +function quantile() { + var domain = [], + range = [], + thresholds = [], + unknown; + + function rescale() { + var i = 0, n = Math.max(1, range.length); + thresholds = new Array(n - 1); + while (++i < n) thresholds[i - 1] = quantileSorted(domain, i / n); + return scale; + } + + function scale(x) { + return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)]; + } + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] : [ + i > 0 ? thresholds[i - 1] : domain[0], + i < thresholds.length ? thresholds[i] : domain[domain.length - 1] + ]; + }; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(ascending$3); + return rescale(); + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.quantiles = function() { + return thresholds.slice(); + }; + + scale.copy = function() { + return quantile() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return initRange.apply(scale, arguments); +} + +function quantize() { + var x0 = 0, + x1 = 1, + n = 1, + domain = [0.5], + range = [0, 1], + unknown; + + function scale(x) { + return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown; + } + + function rescale() { + var i = -1; + domain = new Array(n); + while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); + return scale; + } + + scale.domain = function(_) { + return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1]; + }; + + scale.range = function(_) { + return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] + : i < 1 ? [x0, domain[0]] + : i >= n ? [domain[n - 1], x1] + : [domain[i - 1], domain[i]]; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : scale; + }; + + scale.thresholds = function() { + return domain.slice(); + }; + + scale.copy = function() { + return quantize() + .domain([x0, x1]) + .range(range) + .unknown(unknown); + }; + + return initRange.apply(linearish(scale), arguments); +} + +function threshold() { + var domain = [0.5], + range = [0, 1], + unknown, + n = 1; + + function scale(x) { + return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown; + } + + scale.domain = function(_) { + return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return [domain[i - 1], domain[i]]; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return threshold() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return initRange.apply(scale, arguments); +} + +const t0 = new Date, t1 = new Date; + +function timeInterval(floori, offseti, count, field) { + + function interval(date) { + return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date; + } + + interval.floor = (date) => { + return floori(date = new Date(+date)), date; + }; + + interval.ceil = (date) => { + return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; + }; + + interval.round = (date) => { + const d0 = interval(date), d1 = interval.ceil(date); + return date - d0 < d1 - date ? d0 : d1; + }; + + interval.offset = (date, step) => { + return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; + }; + + interval.range = (start, stop, step) => { + const range = []; + start = interval.ceil(start); + step = step == null ? 1 : Math.floor(step); + if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date + let previous; + do range.push(previous = new Date(+start)), offseti(start, step), floori(start); + while (previous < start && start < stop); + return range; + }; + + interval.filter = (test) => { + return timeInterval((date) => { + if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); + }, (date, step) => { + if (date >= date) { + if (step < 0) while (++step <= 0) { + while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty + } else while (--step >= 0) { + while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty + } + } + }); + }; + + if (count) { + interval.count = (start, end) => { + t0.setTime(+start), t1.setTime(+end); + floori(t0), floori(t1); + return Math.floor(count(t0, t1)); + }; + + interval.every = (step) => { + step = Math.floor(step); + return !isFinite(step) || !(step > 0) ? null + : !(step > 1) ? interval + : interval.filter(field + ? (d) => field(d) % step === 0 + : (d) => interval.count(0, d) % step === 0); + }; + } + + return interval; +} + +const millisecond = timeInterval(() => { + // noop +}, (date, step) => { + date.setTime(+date + step); +}, (start, end) => { + return end - start; +}); + +// An optimized implementation for this simple case. +millisecond.every = (k) => { + k = Math.floor(k); + if (!isFinite(k) || !(k > 0)) return null; + if (!(k > 1)) return millisecond; + return timeInterval((date) => { + date.setTime(Math.floor(date / k) * k); + }, (date, step) => { + date.setTime(+date + step * k); + }, (start, end) => { + return (end - start) / k; + }); +}; + +const milliseconds = millisecond.range; + +const durationSecond = 1000; +const durationMinute = durationSecond * 60; +const durationHour = durationMinute * 60; +const durationDay = durationHour * 24; +const durationWeek = durationDay * 7; +const durationMonth = durationDay * 30; +const durationYear = durationDay * 365; + +const second = timeInterval((date) => { + date.setTime(date - date.getMilliseconds()); +}, (date, step) => { + date.setTime(+date + step * durationSecond); +}, (start, end) => { + return (end - start) / durationSecond; +}, (date) => { + return date.getUTCSeconds(); +}); + +const seconds = second.range; + +const timeMinute = timeInterval((date) => { + date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond); +}, (date, step) => { + date.setTime(+date + step * durationMinute); +}, (start, end) => { + return (end - start) / durationMinute; +}, (date) => { + return date.getMinutes(); +}); + +const timeMinutes = timeMinute.range; + +const utcMinute = timeInterval((date) => { + date.setUTCSeconds(0, 0); +}, (date, step) => { + date.setTime(+date + step * durationMinute); +}, (start, end) => { + return (end - start) / durationMinute; +}, (date) => { + return date.getUTCMinutes(); +}); + +const utcMinutes = utcMinute.range; + +const timeHour = timeInterval((date) => { + date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute); +}, (date, step) => { + date.setTime(+date + step * durationHour); +}, (start, end) => { + return (end - start) / durationHour; +}, (date) => { + return date.getHours(); +}); + +const timeHours = timeHour.range; + +const utcHour = timeInterval((date) => { + date.setUTCMinutes(0, 0, 0); +}, (date, step) => { + date.setTime(+date + step * durationHour); +}, (start, end) => { + return (end - start) / durationHour; +}, (date) => { + return date.getUTCHours(); +}); + +const utcHours = utcHour.range; + +const timeDay = timeInterval( + date => date.setHours(0, 0, 0, 0), + (date, step) => date.setDate(date.getDate() + step), + (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay, + date => date.getDate() - 1 +); + +const timeDays = timeDay.range; + +const utcDay = timeInterval((date) => { + date.setUTCHours(0, 0, 0, 0); +}, (date, step) => { + date.setUTCDate(date.getUTCDate() + step); +}, (start, end) => { + return (end - start) / durationDay; +}, (date) => { + return date.getUTCDate() - 1; +}); + +const utcDays = utcDay.range; + +const unixDay = timeInterval((date) => { + date.setUTCHours(0, 0, 0, 0); +}, (date, step) => { + date.setUTCDate(date.getUTCDate() + step); +}, (start, end) => { + return (end - start) / durationDay; +}, (date) => { + return Math.floor(date / durationDay); +}); + +const unixDays = unixDay.range; + +function timeWeekday(i) { + return timeInterval((date) => { + date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); + date.setHours(0, 0, 0, 0); + }, (date, step) => { + date.setDate(date.getDate() + step * 7); + }, (start, end) => { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; + }); +} + +const timeSunday = timeWeekday(0); +const timeMonday = timeWeekday(1); +const timeTuesday = timeWeekday(2); +const timeWednesday = timeWeekday(3); +const timeThursday = timeWeekday(4); +const timeFriday = timeWeekday(5); +const timeSaturday = timeWeekday(6); + +const timeSundays = timeSunday.range; +const timeMondays = timeMonday.range; +const timeTuesdays = timeTuesday.range; +const timeWednesdays = timeWednesday.range; +const timeThursdays = timeThursday.range; +const timeFridays = timeFriday.range; +const timeSaturdays = timeSaturday.range; + +function utcWeekday(i) { + return timeInterval((date) => { + date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); + date.setUTCHours(0, 0, 0, 0); + }, (date, step) => { + date.setUTCDate(date.getUTCDate() + step * 7); + }, (start, end) => { + return (end - start) / durationWeek; + }); +} + +const utcSunday = utcWeekday(0); +const utcMonday = utcWeekday(1); +const utcTuesday = utcWeekday(2); +const utcWednesday = utcWeekday(3); +const utcThursday = utcWeekday(4); +const utcFriday = utcWeekday(5); +const utcSaturday = utcWeekday(6); + +const utcSundays = utcSunday.range; +const utcMondays = utcMonday.range; +const utcTuesdays = utcTuesday.range; +const utcWednesdays = utcWednesday.range; +const utcThursdays = utcThursday.range; +const utcFridays = utcFriday.range; +const utcSaturdays = utcSaturday.range; + +const timeMonth = timeInterval((date) => { + date.setDate(1); + date.setHours(0, 0, 0, 0); +}, (date, step) => { + date.setMonth(date.getMonth() + step); +}, (start, end) => { + return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; +}, (date) => { + return date.getMonth(); +}); + +const timeMonths = timeMonth.range; + +const utcMonth = timeInterval((date) => { + date.setUTCDate(1); + date.setUTCHours(0, 0, 0, 0); +}, (date, step) => { + date.setUTCMonth(date.getUTCMonth() + step); +}, (start, end) => { + return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; +}, (date) => { + return date.getUTCMonth(); +}); + +const utcMonths = utcMonth.range; + +const timeYear = timeInterval((date) => { + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); +}, (date, step) => { + date.setFullYear(date.getFullYear() + step); +}, (start, end) => { + return end.getFullYear() - start.getFullYear(); +}, (date) => { + return date.getFullYear(); +}); + +// An optimized implementation for this simple case. +timeYear.every = (k) => { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => { + date.setFullYear(Math.floor(date.getFullYear() / k) * k); + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, (date, step) => { + date.setFullYear(date.getFullYear() + step * k); + }); +}; + +const timeYears = timeYear.range; + +const utcYear = timeInterval((date) => { + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); +}, (date, step) => { + date.setUTCFullYear(date.getUTCFullYear() + step); +}, (start, end) => { + return end.getUTCFullYear() - start.getUTCFullYear(); +}, (date) => { + return date.getUTCFullYear(); +}); + +// An optimized implementation for this simple case. +utcYear.every = (k) => { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => { + date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, (date, step) => { + date.setUTCFullYear(date.getUTCFullYear() + step * k); + }); +}; + +const utcYears = utcYear.range; + +function ticker(year, month, week, day, hour, minute) { + + const tickIntervals = [ + [second, 1, durationSecond], + [second, 5, 5 * durationSecond], + [second, 15, 15 * durationSecond], + [second, 30, 30 * durationSecond], + [minute, 1, durationMinute], + [minute, 5, 5 * durationMinute], + [minute, 15, 15 * durationMinute], + [minute, 30, 30 * durationMinute], + [ hour, 1, durationHour ], + [ hour, 3, 3 * durationHour ], + [ hour, 6, 6 * durationHour ], + [ hour, 12, 12 * durationHour ], + [ day, 1, durationDay ], + [ day, 2, 2 * durationDay ], + [ week, 1, durationWeek ], + [ month, 1, durationMonth ], + [ month, 3, 3 * durationMonth ], + [ year, 1, durationYear ] + ]; + + function ticks(start, stop, count) { + const reverse = stop < start; + if (reverse) [start, stop] = [stop, start]; + const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count); + const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop + return reverse ? ticks.reverse() : ticks; + } + + function tickInterval(start, stop, count) { + const target = Math.abs(stop - start) / count; + const i = bisector(([,, step]) => step).right(tickIntervals, target); + if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count)); + if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1)); + const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; + return t.every(step); + } + + return [ticks, tickInterval]; +} + +const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute); +const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute); + +function localDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); + date.setFullYear(d.y); + return date; + } + return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); +} + +function utcDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); + date.setUTCFullYear(d.y); + return date; + } + return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); +} + +function newDate(y, m, d) { + return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0}; +} + +function formatLocale(locale) { + var locale_dateTime = locale.dateTime, + locale_date = locale.date, + locale_time = locale.time, + locale_periods = locale.periods, + locale_weekdays = locale.days, + locale_shortWeekdays = locale.shortDays, + locale_months = locale.months, + locale_shortMonths = locale.shortMonths; + + var periodRe = formatRe(locale_periods), + periodLookup = formatLookup(locale_periods), + weekdayRe = formatRe(locale_weekdays), + weekdayLookup = formatLookup(locale_weekdays), + shortWeekdayRe = formatRe(locale_shortWeekdays), + shortWeekdayLookup = formatLookup(locale_shortWeekdays), + monthRe = formatRe(locale_months), + monthLookup = formatLookup(locale_months), + shortMonthRe = formatRe(locale_shortMonths), + shortMonthLookup = formatLookup(locale_shortMonths); + + var formats = { + "a": formatShortWeekday, + "A": formatWeekday, + "b": formatShortMonth, + "B": formatMonth, + "c": null, + "d": formatDayOfMonth, + "e": formatDayOfMonth, + "f": formatMicroseconds, + "g": formatYearISO, + "G": formatFullYearISO, + "H": formatHour24, + "I": formatHour12, + "j": formatDayOfYear, + "L": formatMilliseconds, + "m": formatMonthNumber, + "M": formatMinutes, + "p": formatPeriod, + "q": formatQuarter, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatSeconds, + "u": formatWeekdayNumberMonday, + "U": formatWeekNumberSunday, + "V": formatWeekNumberISO, + "w": formatWeekdayNumberSunday, + "W": formatWeekNumberMonday, + "x": null, + "X": null, + "y": formatYear, + "Y": formatFullYear, + "Z": formatZone, + "%": formatLiteralPercent + }; + + var utcFormats = { + "a": formatUTCShortWeekday, + "A": formatUTCWeekday, + "b": formatUTCShortMonth, + "B": formatUTCMonth, + "c": null, + "d": formatUTCDayOfMonth, + "e": formatUTCDayOfMonth, + "f": formatUTCMicroseconds, + "g": formatUTCYearISO, + "G": formatUTCFullYearISO, + "H": formatUTCHour24, + "I": formatUTCHour12, + "j": formatUTCDayOfYear, + "L": formatUTCMilliseconds, + "m": formatUTCMonthNumber, + "M": formatUTCMinutes, + "p": formatUTCPeriod, + "q": formatUTCQuarter, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatUTCSeconds, + "u": formatUTCWeekdayNumberMonday, + "U": formatUTCWeekNumberSunday, + "V": formatUTCWeekNumberISO, + "w": formatUTCWeekdayNumberSunday, + "W": formatUTCWeekNumberMonday, + "x": null, + "X": null, + "y": formatUTCYear, + "Y": formatUTCFullYear, + "Z": formatUTCZone, + "%": formatLiteralPercent + }; + + var parses = { + "a": parseShortWeekday, + "A": parseWeekday, + "b": parseShortMonth, + "B": parseMonth, + "c": parseLocaleDateTime, + "d": parseDayOfMonth, + "e": parseDayOfMonth, + "f": parseMicroseconds, + "g": parseYear, + "G": parseFullYear, + "H": parseHour24, + "I": parseHour24, + "j": parseDayOfYear, + "L": parseMilliseconds, + "m": parseMonthNumber, + "M": parseMinutes, + "p": parsePeriod, + "q": parseQuarter, + "Q": parseUnixTimestamp, + "s": parseUnixTimestampSeconds, + "S": parseSeconds, + "u": parseWeekdayNumberMonday, + "U": parseWeekNumberSunday, + "V": parseWeekNumberISO, + "w": parseWeekdayNumberSunday, + "W": parseWeekNumberMonday, + "x": parseLocaleDate, + "X": parseLocaleTime, + "y": parseYear, + "Y": parseFullYear, + "Z": parseZone, + "%": parseLiteralPercent + }; + + // These recursive directive definitions must be deferred. + formats.x = newFormat(locale_date, formats); + formats.X = newFormat(locale_time, formats); + formats.c = newFormat(locale_dateTime, formats); + utcFormats.x = newFormat(locale_date, utcFormats); + utcFormats.X = newFormat(locale_time, utcFormats); + utcFormats.c = newFormat(locale_dateTime, utcFormats); + + function newFormat(specifier, formats) { + return function(date) { + var string = [], + i = -1, + j = 0, + n = specifier.length, + c, + pad, + format; + + if (!(date instanceof Date)) date = new Date(+date); + + while (++i < n) { + if (specifier.charCodeAt(i) === 37) { + string.push(specifier.slice(j, i)); + if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); + else pad = c === "e" ? " " : "0"; + if (format = formats[c]) c = format(date, pad); + string.push(c); + j = i + 1; + } + } + + string.push(specifier.slice(j, i)); + return string.join(""); + }; + } + + function newParse(specifier, Z) { + return function(string) { + var d = newDate(1900, undefined, 1), + i = parseSpecifier(d, specifier, string += "", 0), + week, day; + if (i != string.length) return null; + + // If a UNIX timestamp is specified, return it. + if ("Q" in d) return new Date(d.Q); + if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); + + // If this is utcParse, never use the local timezone. + if (Z && !("Z" in d)) d.Z = 0; + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + // If the month was not specified, inherit from the quarter. + if (d.m === undefined) d.m = "q" in d ? d.q : 0; + + // Convert day-of-week and week-of-year to day-of-year. + if ("V" in d) { + if (d.V < 1 || d.V > 53) return null; + if (!("w" in d)) d.w = 1; + if ("Z" in d) { + week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay(); + week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week); + week = utcDay.offset(week, (d.V - 1) * 7); + d.y = week.getUTCFullYear(); + d.m = week.getUTCMonth(); + d.d = week.getUTCDate() + (d.w + 6) % 7; + } else { + week = localDate(newDate(d.y, 0, 1)), day = week.getDay(); + week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week); + week = timeDay.offset(week, (d.V - 1) * 7); + d.y = week.getFullYear(); + d.m = week.getMonth(); + d.d = week.getDate() + (d.w + 6) % 7; + } + } else if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; + day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay(); + d.m = 0; + d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; + } + + // If a time zone is specified, all fields are interpreted as UTC and then + // offset according to the specified time zone. + if ("Z" in d) { + d.H += d.Z / 100 | 0; + d.M += d.Z % 100; + return utcDate(d); + } + + // Otherwise, all fields are in local time. + return localDate(d); + }; + } + + function parseSpecifier(d, specifier, string, j) { + var i = 0, + n = specifier.length, + m = string.length, + c, + parse; + + while (i < n) { + if (j >= m) return -1; + c = specifier.charCodeAt(i++); + if (c === 37) { + c = specifier.charAt(i++); + parse = parses[c in pads ? specifier.charAt(i++) : c]; + if (!parse || ((j = parse(d, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + + return j; + } + + function parsePeriod(d, string, i) { + var n = periodRe.exec(string.slice(i)); + return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + + function parseShortWeekday(d, string, i) { + var n = shortWeekdayRe.exec(string.slice(i)); + return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + + function parseWeekday(d, string, i) { + var n = weekdayRe.exec(string.slice(i)); + return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + + function parseShortMonth(d, string, i) { + var n = shortMonthRe.exec(string.slice(i)); + return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + + function parseMonth(d, string, i) { + var n = monthRe.exec(string.slice(i)); + return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1; + } + + function parseLocaleDateTime(d, string, i) { + return parseSpecifier(d, locale_dateTime, string, i); + } + + function parseLocaleDate(d, string, i) { + return parseSpecifier(d, locale_date, string, i); + } + + function parseLocaleTime(d, string, i) { + return parseSpecifier(d, locale_time, string, i); + } + + function formatShortWeekday(d) { + return locale_shortWeekdays[d.getDay()]; + } + + function formatWeekday(d) { + return locale_weekdays[d.getDay()]; + } + + function formatShortMonth(d) { + return locale_shortMonths[d.getMonth()]; + } + + function formatMonth(d) { + return locale_months[d.getMonth()]; + } + + function formatPeriod(d) { + return locale_periods[+(d.getHours() >= 12)]; + } + + function formatQuarter(d) { + return 1 + ~~(d.getMonth() / 3); + } + + function formatUTCShortWeekday(d) { + return locale_shortWeekdays[d.getUTCDay()]; + } + + function formatUTCWeekday(d) { + return locale_weekdays[d.getUTCDay()]; + } + + function formatUTCShortMonth(d) { + return locale_shortMonths[d.getUTCMonth()]; + } + + function formatUTCMonth(d) { + return locale_months[d.getUTCMonth()]; + } + + function formatUTCPeriod(d) { + return locale_periods[+(d.getUTCHours() >= 12)]; + } + + function formatUTCQuarter(d) { + return 1 + ~~(d.getUTCMonth() / 3); + } + + return { + format: function(specifier) { + var f = newFormat(specifier += "", formats); + f.toString = function() { return specifier; }; + return f; + }, + parse: function(specifier) { + var p = newParse(specifier += "", false); + p.toString = function() { return specifier; }; + return p; + }, + utcFormat: function(specifier) { + var f = newFormat(specifier += "", utcFormats); + f.toString = function() { return specifier; }; + return f; + }, + utcParse: function(specifier) { + var p = newParse(specifier += "", true); + p.toString = function() { return specifier; }; + return p; + } + }; +} + +var pads = {"-": "", "_": " ", "0": "0"}, + numberRe = /^\s*\d+/, // note: ignores next directive + percentRe = /^%/, + requoteRe = /[\\^$*+?|[\]().{}]/g; + +function pad(value, fill, width) { + var sign = value < 0 ? "-" : "", + string = (sign ? -value : value) + "", + length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); +} + +function requote(s) { + return s.replace(requoteRe, "\\$&"); +} + +function formatRe(names) { + return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); +} + +function formatLookup(names) { + return new Map(names.map((name, i) => [name.toLowerCase(), i])); +} + +function parseWeekdayNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.w = +n[0], i + n[0].length) : -1; +} + +function parseWeekdayNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.u = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.U = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberISO(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.V = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.W = +n[0], i + n[0].length) : -1; +} + +function parseFullYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 4)); + return n ? (d.y = +n[0], i + n[0].length) : -1; +} + +function parseYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; +} + +function parseZone(d, string, i) { + var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); + return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; +} + +function parseQuarter(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1; +} + +function parseMonthNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.m = n[0] - 1, i + n[0].length) : -1; +} + +function parseDayOfMonth(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.d = +n[0], i + n[0].length) : -1; +} + +function parseDayOfYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; +} + +function parseHour24(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.H = +n[0], i + n[0].length) : -1; +} + +function parseMinutes(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.M = +n[0], i + n[0].length) : -1; +} + +function parseSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.S = +n[0], i + n[0].length) : -1; +} + +function parseMilliseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.L = +n[0], i + n[0].length) : -1; +} + +function parseMicroseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 6)); + return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; +} + +function parseLiteralPercent(d, string, i) { + var n = percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; +} + +function parseUnixTimestamp(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = +n[0], i + n[0].length) : -1; +} + +function parseUnixTimestampSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.s = +n[0], i + n[0].length) : -1; +} + +function formatDayOfMonth(d, p) { + return pad(d.getDate(), p, 2); +} + +function formatHour24(d, p) { + return pad(d.getHours(), p, 2); +} + +function formatHour12(d, p) { + return pad(d.getHours() % 12 || 12, p, 2); +} + +function formatDayOfYear(d, p) { + return pad(1 + timeDay.count(timeYear(d), d), p, 3); +} + +function formatMilliseconds(d, p) { + return pad(d.getMilliseconds(), p, 3); +} + +function formatMicroseconds(d, p) { + return formatMilliseconds(d, p) + "000"; +} + +function formatMonthNumber(d, p) { + return pad(d.getMonth() + 1, p, 2); +} + +function formatMinutes(d, p) { + return pad(d.getMinutes(), p, 2); +} + +function formatSeconds(d, p) { + return pad(d.getSeconds(), p, 2); +} + +function formatWeekdayNumberMonday(d) { + var day = d.getDay(); + return day === 0 ? 7 : day; +} + +function formatWeekNumberSunday(d, p) { + return pad(timeSunday.count(timeYear(d) - 1, d), p, 2); +} + +function dISO(d) { + var day = d.getDay(); + return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d); +} + +function formatWeekNumberISO(d, p) { + d = dISO(d); + return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2); +} + +function formatWeekdayNumberSunday(d) { + return d.getDay(); +} + +function formatWeekNumberMonday(d, p) { + return pad(timeMonday.count(timeYear(d) - 1, d), p, 2); +} + +function formatYear(d, p) { + return pad(d.getFullYear() % 100, p, 2); +} + +function formatYearISO(d, p) { + d = dISO(d); + return pad(d.getFullYear() % 100, p, 2); +} + +function formatFullYear(d, p) { + return pad(d.getFullYear() % 10000, p, 4); +} + +function formatFullYearISO(d, p) { + var day = d.getDay(); + d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d); + return pad(d.getFullYear() % 10000, p, 4); +} + +function formatZone(d) { + var z = d.getTimezoneOffset(); + return (z > 0 ? "-" : (z *= -1, "+")) + + pad(z / 60 | 0, "0", 2) + + pad(z % 60, "0", 2); +} + +function formatUTCDayOfMonth(d, p) { + return pad(d.getUTCDate(), p, 2); +} + +function formatUTCHour24(d, p) { + return pad(d.getUTCHours(), p, 2); +} + +function formatUTCHour12(d, p) { + return pad(d.getUTCHours() % 12 || 12, p, 2); +} + +function formatUTCDayOfYear(d, p) { + return pad(1 + utcDay.count(utcYear(d), d), p, 3); +} + +function formatUTCMilliseconds(d, p) { + return pad(d.getUTCMilliseconds(), p, 3); +} + +function formatUTCMicroseconds(d, p) { + return formatUTCMilliseconds(d, p) + "000"; +} + +function formatUTCMonthNumber(d, p) { + return pad(d.getUTCMonth() + 1, p, 2); +} + +function formatUTCMinutes(d, p) { + return pad(d.getUTCMinutes(), p, 2); +} + +function formatUTCSeconds(d, p) { + return pad(d.getUTCSeconds(), p, 2); +} + +function formatUTCWeekdayNumberMonday(d) { + var dow = d.getUTCDay(); + return dow === 0 ? 7 : dow; +} + +function formatUTCWeekNumberSunday(d, p) { + return pad(utcSunday.count(utcYear(d) - 1, d), p, 2); +} + +function UTCdISO(d) { + var day = d.getUTCDay(); + return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d); +} + +function formatUTCWeekNumberISO(d, p) { + d = UTCdISO(d); + return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); +} + +function formatUTCWeekdayNumberSunday(d) { + return d.getUTCDay(); +} + +function formatUTCWeekNumberMonday(d, p) { + return pad(utcMonday.count(utcYear(d) - 1, d), p, 2); +} + +function formatUTCYear(d, p) { + return pad(d.getUTCFullYear() % 100, p, 2); +} + +function formatUTCYearISO(d, p) { + d = UTCdISO(d); + return pad(d.getUTCFullYear() % 100, p, 2); +} + +function formatUTCFullYear(d, p) { + return pad(d.getUTCFullYear() % 10000, p, 4); +} + +function formatUTCFullYearISO(d, p) { + var day = d.getUTCDay(); + d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d); + return pad(d.getUTCFullYear() % 10000, p, 4); +} + +function formatUTCZone() { + return "+0000"; +} + +function formatLiteralPercent() { + return "%"; +} + +function formatUnixTimestamp(d) { + return +d; +} + +function formatUnixTimestampSeconds(d) { + return Math.floor(+d / 1000); +} + +var locale; +exports.timeFormat = void 0; +exports.timeParse = void 0; +exports.utcFormat = void 0; +exports.utcParse = void 0; + +defaultLocale({ + dateTime: "%x, %X", + date: "%-m/%-d/%Y", + time: "%-I:%M:%S %p", + periods: ["AM", "PM"], + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +}); + +function defaultLocale(definition) { + locale = formatLocale(definition); + exports.timeFormat = locale.format; + exports.timeParse = locale.parse; + exports.utcFormat = locale.utcFormat; + exports.utcParse = locale.utcParse; + return locale; +} + +var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; + +function formatIsoNative(date) { + return date.toISOString(); +} + +var formatIso = Date.prototype.toISOString + ? formatIsoNative + : exports.utcFormat(isoSpecifier); + +var formatIso$1 = formatIso; + +function parseIsoNative(string) { + var date = new Date(string); + return isNaN(date) ? null : date; +} + +var parseIso = +new Date("2000-01-01T00:00:00.000Z") + ? parseIsoNative + : exports.utcParse(isoSpecifier); + +var parseIso$1 = parseIso; + +function date(t) { + return new Date(t); +} + +function number(t) { + return t instanceof Date ? +t : +new Date(+t); +} + +function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) { + var scale = continuous(), + invert = scale.invert, + domain = scale.domain; + + var formatMillisecond = format(".%L"), + formatSecond = format(":%S"), + formatMinute = format("%I:%M"), + formatHour = format("%I %p"), + formatDay = format("%a %d"), + formatWeek = format("%b %d"), + formatMonth = format("%B"), + formatYear = format("%Y"); + + function tickFormat(date) { + return (second(date) < date ? formatMillisecond + : minute(date) < date ? formatSecond + : hour(date) < date ? formatMinute + : day(date) < date ? formatHour + : month(date) < date ? (week(date) < date ? formatDay : formatWeek) + : year(date) < date ? formatMonth + : formatYear)(date); + } + + scale.invert = function(y) { + return new Date(invert(y)); + }; + + scale.domain = function(_) { + return arguments.length ? domain(Array.from(_, number)) : domain().map(date); + }; + + scale.ticks = function(interval) { + var d = domain(); + return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval); + }; + + scale.tickFormat = function(count, specifier) { + return specifier == null ? tickFormat : format(specifier); + }; + + scale.nice = function(interval) { + var d = domain(); + if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval); + return interval ? domain(nice(d, interval)) : scale; + }; + + scale.copy = function() { + return copy$1(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format)); + }; + + return scale; +} + +function time() { + return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute, second, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); +} + +function utcTime() { + return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments); +} + +function transformer$1() { + var x0 = 0, + x1 = 1, + t0, + t1, + k10, + transform, + interpolator = identity$3, + clamp = false, + unknown; + + function scale(x) { + return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x)); + } + + scale.domain = function(_) { + return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + function range(interpolate) { + return function(_) { + var r0, r1; + return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)]; + }; + } + + scale.range = range(interpolate$2); + + scale.rangeRound = range(interpolateRound); + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t) { + transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0); + return scale; + }; +} + +function copy(source, target) { + return target + .domain(source.domain()) + .interpolator(source.interpolator()) + .clamp(source.clamp()) + .unknown(source.unknown()); +} + +function sequential() { + var scale = linearish(transformer$1()(identity$3)); + + scale.copy = function() { + return copy(scale, sequential()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialLog() { + var scale = loggish(transformer$1()).domain([1, 10]); + + scale.copy = function() { + return copy(scale, sequentialLog()).base(scale.base()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialSymlog() { + var scale = symlogish(transformer$1()); + + scale.copy = function() { + return copy(scale, sequentialSymlog()).constant(scale.constant()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialPow() { + var scale = powish(transformer$1()); + + scale.copy = function() { + return copy(scale, sequentialPow()).exponent(scale.exponent()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialSqrt() { + return sequentialPow.apply(null, arguments).exponent(0.5); +} + +function sequentialQuantile() { + var domain = [], + interpolator = identity$3; + + function scale(x) { + if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1)); + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(ascending$3); + return scale; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.range = function() { + return domain.map((d, i) => interpolator(i / (domain.length - 1))); + }; + + scale.quantiles = function(n) { + return Array.from({length: n + 1}, (_, i) => quantile$1(domain, i / n)); + }; + + scale.copy = function() { + return sequentialQuantile(interpolator).domain(domain); + }; + + return initInterpolator.apply(scale, arguments); +} + +function transformer() { + var x0 = 0, + x1 = 0.5, + x2 = 1, + s = 1, + t0, + t1, + t2, + k10, + k21, + interpolator = identity$3, + transform, + clamp = false, + unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x)); + } + + scale.domain = function(_) { + return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + function range(interpolate) { + return function(_) { + var r0, r1, r2; + return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)]; + }; + } + + scale.range = range(interpolate$2); + + scale.rangeRound = range(interpolateRound); + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t) { + transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1; + return scale; + }; +} + +function diverging$1() { + var scale = linearish(transformer()(identity$3)); + + scale.copy = function() { + return copy(scale, diverging$1()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingLog() { + var scale = loggish(transformer()).domain([0.1, 1, 10]); + + scale.copy = function() { + return copy(scale, divergingLog()).base(scale.base()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingSymlog() { + var scale = symlogish(transformer()); + + scale.copy = function() { + return copy(scale, divergingSymlog()).constant(scale.constant()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingPow() { + var scale = powish(transformer()); + + scale.copy = function() { + return copy(scale, divergingPow()).exponent(scale.exponent()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingSqrt() { + return divergingPow.apply(null, arguments).exponent(0.5); +} + +function colors(specifier) { + var n = specifier.length / 6 | 0, colors = new Array(n), i = 0; + while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); + return colors; +} + +var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + +var Accent = colors("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666"); + +var Dark2 = colors("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666"); + +var observable10 = colors("4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0"); + +var Paired = colors("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928"); + +var Pastel1 = colors("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2"); + +var Pastel2 = colors("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc"); + +var Set1 = colors("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999"); + +var Set2 = colors("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3"); + +var Set3 = colors("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"); + +var Tableau10 = colors("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab"); + +var ramp$1 = scheme => rgbBasis(scheme[scheme.length - 1]); + +var scheme$q = new Array(3).concat( + "d8b365f5f5f55ab4ac", + "a6611adfc27d80cdc1018571", + "a6611adfc27df5f5f580cdc1018571", + "8c510ad8b365f6e8c3c7eae55ab4ac01665e", + "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", + "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", + "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", + "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", + "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30" +).map(colors); + +var BrBG = ramp$1(scheme$q); + +var scheme$p = new Array(3).concat( + "af8dc3f7f7f77fbf7b", + "7b3294c2a5cfa6dba0008837", + "7b3294c2a5cff7f7f7a6dba0008837", + "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", + "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", + "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", + "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", + "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", + "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b" +).map(colors); + +var PRGn = ramp$1(scheme$p); + +var scheme$o = new Array(3).concat( + "e9a3c9f7f7f7a1d76a", + "d01c8bf1b6dab8e1864dac26", + "d01c8bf1b6daf7f7f7b8e1864dac26", + "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", + "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", + "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", + "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", + "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", + "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419" +).map(colors); + +var PiYG = ramp$1(scheme$o); + +var scheme$n = new Array(3).concat( + "998ec3f7f7f7f1a340", + "5e3c99b2abd2fdb863e66101", + "5e3c99b2abd2f7f7f7fdb863e66101", + "542788998ec3d8daebfee0b6f1a340b35806", + "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", + "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", + "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", + "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", + "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08" +).map(colors); + +var PuOr = ramp$1(scheme$n); + +var scheme$m = new Array(3).concat( + "ef8a62f7f7f767a9cf", + "ca0020f4a58292c5de0571b0", + "ca0020f4a582f7f7f792c5de0571b0", + "b2182bef8a62fddbc7d1e5f067a9cf2166ac", + "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", + "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", + "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", + "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", + "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061" +).map(colors); + +var RdBu = ramp$1(scheme$m); + +var scheme$l = new Array(3).concat( + "ef8a62ffffff999999", + "ca0020f4a582bababa404040", + "ca0020f4a582ffffffbababa404040", + "b2182bef8a62fddbc7e0e0e09999994d4d4d", + "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", + "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", + "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", + "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", + "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a" +).map(colors); + +var RdGy = ramp$1(scheme$l); + +var scheme$k = new Array(3).concat( + "fc8d59ffffbf91bfdb", + "d7191cfdae61abd9e92c7bb6", + "d7191cfdae61ffffbfabd9e92c7bb6", + "d73027fc8d59fee090e0f3f891bfdb4575b4", + "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", + "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", + "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", + "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", + "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695" +).map(colors); + +var RdYlBu = ramp$1(scheme$k); + +var scheme$j = new Array(3).concat( + "fc8d59ffffbf91cf60", + "d7191cfdae61a6d96a1a9641", + "d7191cfdae61ffffbfa6d96a1a9641", + "d73027fc8d59fee08bd9ef8b91cf601a9850", + "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", + "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", + "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", + "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", + "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837" +).map(colors); + +var RdYlGn = ramp$1(scheme$j); + +var scheme$i = new Array(3).concat( + "fc8d59ffffbf99d594", + "d7191cfdae61abdda42b83ba", + "d7191cfdae61ffffbfabdda42b83ba", + "d53e4ffc8d59fee08be6f59899d5943288bd", + "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", + "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", + "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", + "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", + "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2" +).map(colors); + +var Spectral = ramp$1(scheme$i); + +var scheme$h = new Array(3).concat( + "e5f5f999d8c92ca25f", + "edf8fbb2e2e266c2a4238b45", + "edf8fbb2e2e266c2a42ca25f006d2c", + "edf8fbccece699d8c966c2a42ca25f006d2c", + "edf8fbccece699d8c966c2a441ae76238b45005824", + "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", + "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b" +).map(colors); + +var BuGn = ramp$1(scheme$h); + +var scheme$g = new Array(3).concat( + "e0ecf49ebcda8856a7", + "edf8fbb3cde38c96c688419d", + "edf8fbb3cde38c96c68856a7810f7c", + "edf8fbbfd3e69ebcda8c96c68856a7810f7c", + "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", + "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", + "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b" +).map(colors); + +var BuPu = ramp$1(scheme$g); + +var scheme$f = new Array(3).concat( + "e0f3dba8ddb543a2ca", + "f0f9e8bae4bc7bccc42b8cbe", + "f0f9e8bae4bc7bccc443a2ca0868ac", + "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", + "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", + "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", + "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081" +).map(colors); + +var GnBu = ramp$1(scheme$f); + +var scheme$e = new Array(3).concat( + "fee8c8fdbb84e34a33", + "fef0d9fdcc8afc8d59d7301f", + "fef0d9fdcc8afc8d59e34a33b30000", + "fef0d9fdd49efdbb84fc8d59e34a33b30000", + "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", + "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", + "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000" +).map(colors); + +var OrRd = ramp$1(scheme$e); + +var scheme$d = new Array(3).concat( + "ece2f0a6bddb1c9099", + "f6eff7bdc9e167a9cf02818a", + "f6eff7bdc9e167a9cf1c9099016c59", + "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", + "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", + "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", + "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636" +).map(colors); + +var PuBuGn = ramp$1(scheme$d); + +var scheme$c = new Array(3).concat( + "ece7f2a6bddb2b8cbe", + "f1eef6bdc9e174a9cf0570b0", + "f1eef6bdc9e174a9cf2b8cbe045a8d", + "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", + "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", + "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", + "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858" +).map(colors); + +var PuBu = ramp$1(scheme$c); + +var scheme$b = new Array(3).concat( + "e7e1efc994c7dd1c77", + "f1eef6d7b5d8df65b0ce1256", + "f1eef6d7b5d8df65b0dd1c77980043", + "f1eef6d4b9dac994c7df65b0dd1c77980043", + "f1eef6d4b9dac994c7df65b0e7298ace125691003f", + "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", + "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f" +).map(colors); + +var PuRd = ramp$1(scheme$b); + +var scheme$a = new Array(3).concat( + "fde0ddfa9fb5c51b8a", + "feebe2fbb4b9f768a1ae017e", + "feebe2fbb4b9f768a1c51b8a7a0177", + "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", + "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", + "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", + "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a" +).map(colors); + +var RdPu = ramp$1(scheme$a); + +var scheme$9 = new Array(3).concat( + "edf8b17fcdbb2c7fb8", + "ffffcca1dab441b6c4225ea8", + "ffffcca1dab441b6c42c7fb8253494", + "ffffccc7e9b47fcdbb41b6c42c7fb8253494", + "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", + "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", + "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58" +).map(colors); + +var YlGnBu = ramp$1(scheme$9); + +var scheme$8 = new Array(3).concat( + "f7fcb9addd8e31a354", + "ffffccc2e69978c679238443", + "ffffccc2e69978c67931a354006837", + "ffffccd9f0a3addd8e78c67931a354006837", + "ffffccd9f0a3addd8e78c67941ab5d238443005a32", + "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", + "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529" +).map(colors); + +var YlGn = ramp$1(scheme$8); + +var scheme$7 = new Array(3).concat( + "fff7bcfec44fd95f0e", + "ffffd4fed98efe9929cc4c02", + "ffffd4fed98efe9929d95f0e993404", + "ffffd4fee391fec44ffe9929d95f0e993404", + "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", + "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", + "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506" +).map(colors); + +var YlOrBr = ramp$1(scheme$7); + +var scheme$6 = new Array(3).concat( + "ffeda0feb24cf03b20", + "ffffb2fecc5cfd8d3ce31a1c", + "ffffb2fecc5cfd8d3cf03b20bd0026", + "ffffb2fed976feb24cfd8d3cf03b20bd0026", + "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", + "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", + "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026" +).map(colors); + +var YlOrRd = ramp$1(scheme$6); + +var scheme$5 = new Array(3).concat( + "deebf79ecae13182bd", + "eff3ffbdd7e76baed62171b5", + "eff3ffbdd7e76baed63182bd08519c", + "eff3ffc6dbef9ecae16baed63182bd08519c", + "eff3ffc6dbef9ecae16baed64292c62171b5084594", + "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", + "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b" +).map(colors); + +var Blues = ramp$1(scheme$5); + +var scheme$4 = new Array(3).concat( + "e5f5e0a1d99b31a354", + "edf8e9bae4b374c476238b45", + "edf8e9bae4b374c47631a354006d2c", + "edf8e9c7e9c0a1d99b74c47631a354006d2c", + "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", + "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", + "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b" +).map(colors); + +var Greens = ramp$1(scheme$4); + +var scheme$3 = new Array(3).concat( + "f0f0f0bdbdbd636363", + "f7f7f7cccccc969696525252", + "f7f7f7cccccc969696636363252525", + "f7f7f7d9d9d9bdbdbd969696636363252525", + "f7f7f7d9d9d9bdbdbd969696737373525252252525", + "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", + "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000" +).map(colors); + +var Greys = ramp$1(scheme$3); + +var scheme$2 = new Array(3).concat( + "efedf5bcbddc756bb1", + "f2f0f7cbc9e29e9ac86a51a3", + "f2f0f7cbc9e29e9ac8756bb154278f", + "f2f0f7dadaebbcbddc9e9ac8756bb154278f", + "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", + "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", + "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d" +).map(colors); + +var Purples = ramp$1(scheme$2); + +var scheme$1 = new Array(3).concat( + "fee0d2fc9272de2d26", + "fee5d9fcae91fb6a4acb181d", + "fee5d9fcae91fb6a4ade2d26a50f15", + "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", + "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", + "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", + "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d" +).map(colors); + +var Reds = ramp$1(scheme$1); + +var scheme = new Array(3).concat( + "fee6cefdae6be6550d", + "feeddefdbe85fd8d3cd94701", + "feeddefdbe85fd8d3ce6550da63603", + "feeddefdd0a2fdae6bfd8d3ce6550da63603", + "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", + "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", + "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704" +).map(colors); + +var Oranges = ramp$1(scheme); + +function cividis(t) { + t = Math.max(0, Math.min(1, t)); + return "rgb(" + + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + ", " + + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + ", " + + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67))))))) + + ")"; +} + +var cubehelix = cubehelixLong(cubehelix$3(300, 0.5, 0.0), cubehelix$3(-240, 0.5, 1.0)); + +var warm = cubehelixLong(cubehelix$3(-100, 0.75, 0.35), cubehelix$3(80, 1.50, 0.8)); + +var cool = cubehelixLong(cubehelix$3(260, 0.75, 0.35), cubehelix$3(80, 1.50, 0.8)); + +var c$2 = cubehelix$3(); + +function rainbow(t) { + if (t < 0 || t > 1) t -= Math.floor(t); + var ts = Math.abs(t - 0.5); + c$2.h = 360 * t - 100; + c$2.s = 1.5 - 1.5 * ts; + c$2.l = 0.8 - 0.9 * ts; + return c$2 + ""; +} + +var c$1 = rgb(), + pi_1_3 = Math.PI / 3, + pi_2_3 = Math.PI * 2 / 3; + +function sinebow(t) { + var x; + t = (0.5 - t) * Math.PI; + c$1.r = 255 * (x = Math.sin(t)) * x; + c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x; + c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x; + return c$1 + ""; +} + +function turbo(t) { + t = Math.max(0, Math.min(1, t)); + return "rgb(" + + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + ", " + + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + ", " + + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66))))))) + + ")"; +} + +function ramp(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; +} + +var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")); + +var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); + +var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); + +var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); + +function constant$1(x) { + return function constant() { + return x; + }; +} + +const abs = Math.abs; +const atan2 = Math.atan2; +const cos = Math.cos; +const max = Math.max; +const min = Math.min; +const sin = Math.sin; +const sqrt = Math.sqrt; + +const epsilon = 1e-12; +const pi = Math.PI; +const halfPi = pi / 2; +const tau = 2 * pi; + +function acos(x) { + return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); +} + +function asin(x) { + return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); +} + +function withPath(shape) { + let digits = 3; + + shape.digits = function(_) { + if (!arguments.length) return digits; + if (_ == null) { + digits = null; + } else { + const d = Math.floor(_); + if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`); + digits = d; + } + return shape; + }; + + return () => new Path$1(digits); +} + +function arcInnerRadius(d) { + return d.innerRadius; +} + +function arcOuterRadius(d) { + return d.outerRadius; +} + +function arcStartAngle(d) { + return d.startAngle; +} + +function arcEndAngle(d) { + return d.endAngle; +} + +function arcPadAngle(d) { + return d && d.padAngle; // Note: optional! +} + +function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { + var x10 = x1 - x0, y10 = y1 - y0, + x32 = x3 - x2, y32 = y3 - y2, + t = y32 * x10 - x32 * y10; + if (t * t < epsilon) return; + t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; + return [x0 + t * x10, y0 + t * y10]; +} + +// Compute perpendicular offset line of length rc. +// http://mathworld.wolfram.com/Circle-LineIntersection.html +function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { + var x01 = x0 - x1, + y01 = y0 - y1, + lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01), + ox = lo * y01, + oy = -lo * x01, + x11 = x0 + ox, + y11 = y0 + oy, + x10 = x1 + ox, + y10 = y1 + oy, + x00 = (x11 + x10) / 2, + y00 = (y11 + y10) / 2, + dx = x10 - x11, + dy = y10 - y11, + d2 = dx * dx + dy * dy, + r = r1 - rc, + D = x11 * y10 - x10 * y11, + d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)), + cx0 = (D * dy - dx * d) / d2, + cy0 = (-D * dx - dy * d) / d2, + cx1 = (D * dy + dx * d) / d2, + cy1 = (-D * dx + dy * d) / d2, + dx0 = cx0 - x00, + dy0 = cy0 - y00, + dx1 = cx1 - x00, + dy1 = cy1 - y00; + + // Pick the closer of the two intersection points. + // TODO Is there a faster way to determine which intersection to use? + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; + + return { + cx: cx0, + cy: cy0, + x01: -ox, + y01: -oy, + x11: cx0 * (r1 / r - 1), + y11: cy0 * (r1 / r - 1) + }; +} + +function arc() { + var innerRadius = arcInnerRadius, + outerRadius = arcOuterRadius, + cornerRadius = constant$1(0), + padRadius = null, + startAngle = arcStartAngle, + endAngle = arcEndAngle, + padAngle = arcPadAngle, + context = null, + path = withPath(arc); + + function arc() { + var buffer, + r, + r0 = +innerRadius.apply(this, arguments), + r1 = +outerRadius.apply(this, arguments), + a0 = startAngle.apply(this, arguments) - halfPi, + a1 = endAngle.apply(this, arguments) - halfPi, + da = abs(a1 - a0), + cw = a1 > a0; + + if (!context) context = buffer = path(); + + // Ensure that the outer radius is always larger than the inner radius. + if (r1 < r0) r = r1, r1 = r0, r0 = r; + + // Is it a point? + if (!(r1 > epsilon)) context.moveTo(0, 0); + + // Or is it a circle or annulus? + else if (da > tau - epsilon) { + context.moveTo(r1 * cos(a0), r1 * sin(a0)); + context.arc(0, 0, r1, a0, a1, !cw); + if (r0 > epsilon) { + context.moveTo(r0 * cos(a1), r0 * sin(a1)); + context.arc(0, 0, r0, a1, a0, cw); + } + } + + // Or is it a circular or annular sector? + else { + var a01 = a0, + a11 = a1, + a00 = a0, + a10 = a1, + da0 = da, + da1 = da, + ap = padAngle.apply(this, arguments) / 2, + rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)), + rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), + rc0 = rc, + rc1 = rc, + t0, + t1; + + // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. + if (rp > epsilon) { + var p0 = asin(rp / r0 * sin(ap)), + p1 = asin(rp / r1 * sin(ap)); + if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; + else da0 = 0, a00 = a10 = (a0 + a1) / 2; + if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; + else da1 = 0, a01 = a11 = (a0 + a1) / 2; + } + + var x01 = r1 * cos(a01), + y01 = r1 * sin(a01), + x10 = r0 * cos(a10), + y10 = r0 * sin(a10); + + // Apply rounded corners? + if (rc > epsilon) { + var x11 = r1 * cos(a11), + y11 = r1 * sin(a11), + x00 = r0 * cos(a00), + y00 = r0 * sin(a00), + oc; + + // Restrict the corner radius according to the sector angle. If this + // intersection fails, it’s probably because the arc is too small, so + // disable the corner radius entirely. + if (da < pi) { + if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) { + var ax = x01 - oc[0], + ay = y01 - oc[1], + bx = x11 - oc[0], + by = y11 - oc[1], + kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2), + lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]); + rc0 = min(rc, (r0 - lc) / (kc - 1)); + rc1 = min(rc, (r1 - lc) / (kc + 1)); + } else { + rc0 = rc1 = 0; + } + } + } + + // Is the sector collapsed to a line? + if (!(da1 > epsilon)) context.moveTo(x01, y01); + + // Does the sector’s outer ring have rounded corners? + else if (rc1 > epsilon) { + t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); + t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); + + context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw); + context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw); + context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw); + } + } + + // Or is the outer ring just a circular arc? + else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); + + // Is there no inner ring, and it’s a circular sector? + // Or perhaps it’s an annular sector collapsed due to padding? + if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10); + + // Does the sector’s inner ring (or point) have rounded corners? + else if (rc0 > epsilon) { + t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); + t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); + + context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw); + context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw); + context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw); + } + } + + // Or is the inner ring just a circular arc? + else context.arc(0, 0, r0, a10, a00, cw); + } + + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + arc.centroid = function() { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, + a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2; + return [cos(a) * r, sin(a) * r]; + }; + + arc.innerRadius = function(_) { + return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : innerRadius; + }; + + arc.outerRadius = function(_) { + return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : outerRadius; + }; + + arc.cornerRadius = function(_) { + return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : cornerRadius; + }; + + arc.padRadius = function(_) { + return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), arc) : padRadius; + }; + + arc.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : startAngle; + }; + + arc.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : endAngle; + }; + + arc.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : padAngle; + }; + + arc.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), arc) : context; + }; + + return arc; +} + +var slice = Array.prototype.slice; + +function array(x) { + return typeof x === "object" && "length" in x + ? x // Array, TypedArray, NodeList, array-like + : Array.from(x); // Map, Set, iterable, string, or anything else +} + +function Linear(context) { + this._context = context; +} + +Linear.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // falls through + default: this._context.lineTo(x, y); break; + } + } +}; + +function curveLinear(context) { + return new Linear(context); +} + +function x(p) { + return p[0]; +} + +function y(p) { + return p[1]; +} + +function line(x$1, y$1) { + var defined = constant$1(true), + context = null, + curve = curveLinear, + output = null, + path = withPath(line); + + x$1 = typeof x$1 === "function" ? x$1 : (x$1 === undefined) ? x : constant$1(x$1); + y$1 = typeof y$1 === "function" ? y$1 : (y$1 === undefined) ? y : constant$1(y$1); + + function line(data) { + var i, + n = (data = array(data)).length, + d, + defined0 = false, + buffer; + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) output.lineStart(); + else output.lineEnd(); + } + if (defined0) output.point(+x$1(d, i, data), +y$1(d, i, data)); + } + + if (buffer) return output = null, buffer + "" || null; + } + + line.x = function(_) { + return arguments.length ? (x$1 = typeof _ === "function" ? _ : constant$1(+_), line) : x$1; + }; + + line.y = function(_) { + return arguments.length ? (y$1 = typeof _ === "function" ? _ : constant$1(+_), line) : y$1; + }; + + line.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$1(!!_), line) : defined; + }; + + line.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; + }; + + line.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; + }; + + return line; +} + +function area(x0, y0, y1) { + var x1 = null, + defined = constant$1(true), + context = null, + curve = curveLinear, + output = null, + path = withPath(area); + + x0 = typeof x0 === "function" ? x0 : (x0 === undefined) ? x : constant$1(+x0); + y0 = typeof y0 === "function" ? y0 : (y0 === undefined) ? constant$1(0) : constant$1(+y0); + y1 = typeof y1 === "function" ? y1 : (y1 === undefined) ? y : constant$1(+y1); + + function area(data) { + var i, + j, + k, + n = (data = array(data)).length, + d, + defined0 = false, + buffer, + x0z = new Array(n), + y0z = new Array(n); + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) { + j = i; + output.areaStart(); + output.lineStart(); + } else { + output.lineEnd(); + output.lineStart(); + for (k = i - 1; k >= j; --k) { + output.point(x0z[k], y0z[k]); + } + output.lineEnd(); + output.areaEnd(); + } + } + if (defined0) { + x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); + output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); + } + } + + if (buffer) return output = null, buffer + "" || null; + } + + function arealine() { + return line().defined(defined).curve(curve).context(context); + } + + area.x = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$1(+_), x1 = null, area) : x0; + }; + + area.x0 = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$1(+_), area) : x0; + }; + + area.x1 = function(_) { + return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), area) : x1; + }; + + area.y = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$1(+_), y1 = null, area) : y0; + }; + + area.y0 = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$1(+_), area) : y0; + }; + + area.y1 = function(_) { + return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), area) : y1; + }; + + area.lineX0 = + area.lineY0 = function() { + return arealine().x(x0).y(y0); + }; + + area.lineY1 = function() { + return arealine().x(x0).y(y1); + }; + + area.lineX1 = function() { + return arealine().x(x1).y(y0); + }; + + area.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$1(!!_), area) : defined; + }; + + area.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; + }; + + area.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; + }; + + return area; +} + +function descending$1(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; +} + +function identity$1(d) { + return d; +} + +function pie() { + var value = identity$1, + sortValues = descending$1, + sort = null, + startAngle = constant$1(0), + endAngle = constant$1(tau), + padAngle = constant$1(0); + + function pie(data) { + var i, + n = (data = array(data)).length, + j, + k, + sum = 0, + index = new Array(n), + arcs = new Array(n), + a0 = +startAngle.apply(this, arguments), + da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)), + a1, + p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), + pa = p * (da < 0 ? -1 : 1), + v; + + for (i = 0; i < n; ++i) { + if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { + sum += v; + } + } + + // Optionally sort the arcs by previously-computed values or by data. + if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); + else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); + + // Compute the arcs! They are stored in the original data's order. + for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { + j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { + data: data[j], + index: i, + value: v, + startAngle: a0, + endAngle: a1, + padAngle: p + }; + } + + return arcs; + } + + pie.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(+_), pie) : value; + }; + + pie.sortValues = function(_) { + return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; + }; + + pie.sort = function(_) { + return arguments.length ? (sort = _, sortValues = null, pie) : sort; + }; + + pie.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$1(+_), pie) : startAngle; + }; + + pie.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$1(+_), pie) : endAngle; + }; + + pie.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$1(+_), pie) : padAngle; + }; + + return pie; +} + +var curveRadialLinear = curveRadial(curveLinear); + +function Radial(curve) { + this._curve = curve; +} + +Radial.prototype = { + areaStart: function() { + this._curve.areaStart(); + }, + areaEnd: function() { + this._curve.areaEnd(); + }, + lineStart: function() { + this._curve.lineStart(); + }, + lineEnd: function() { + this._curve.lineEnd(); + }, + point: function(a, r) { + this._curve.point(r * Math.sin(a), r * -Math.cos(a)); + } +}; + +function curveRadial(curve) { + + function radial(context) { + return new Radial(curve(context)); + } + + radial._curve = curve; + + return radial; +} + +function lineRadial(l) { + var c = l.curve; + + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + + l.curve = function(_) { + return arguments.length ? c(curveRadial(_)) : c()._curve; + }; + + return l; +} + +function lineRadial$1() { + return lineRadial(line().curve(curveRadialLinear)); +} + +function areaRadial() { + var a = area().curve(curveRadialLinear), + c = a.curve, + x0 = a.lineX0, + x1 = a.lineX1, + y0 = a.lineY0, + y1 = a.lineY1; + + a.angle = a.x, delete a.x; + a.startAngle = a.x0, delete a.x0; + a.endAngle = a.x1, delete a.x1; + a.radius = a.y, delete a.y; + a.innerRadius = a.y0, delete a.y0; + a.outerRadius = a.y1, delete a.y1; + a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0; + a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1; + a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0; + a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1; + + a.curve = function(_) { + return arguments.length ? c(curveRadial(_)) : c()._curve; + }; + + return a; +} + +function pointRadial(x, y) { + return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; +} + +class Bump { + constructor(context, x) { + this._context = context; + this._x = x; + } + areaStart() { + this._line = 0; + } + areaEnd() { + this._line = NaN; + } + lineStart() { + this._point = 0; + } + lineEnd() { + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + } + point(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: { + this._point = 1; + if (this._line) this._context.lineTo(x, y); + else this._context.moveTo(x, y); + break; + } + case 1: this._point = 2; // falls through + default: { + if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y); + else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y); + break; + } + } + this._x0 = x, this._y0 = y; + } +} + +class BumpRadial { + constructor(context) { + this._context = context; + } + lineStart() { + this._point = 0; + } + lineEnd() {} + point(x, y) { + x = +x, y = +y; + if (this._point === 0) { + this._point = 1; + } else { + const p0 = pointRadial(this._x0, this._y0); + const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2); + const p2 = pointRadial(x, this._y0); + const p3 = pointRadial(x, y); + this._context.moveTo(...p0); + this._context.bezierCurveTo(...p1, ...p2, ...p3); + } + this._x0 = x, this._y0 = y; + } +} + +function bumpX(context) { + return new Bump(context, true); +} + +function bumpY(context) { + return new Bump(context, false); +} + +function bumpRadial(context) { + return new BumpRadial(context); +} + +function linkSource(d) { + return d.source; +} + +function linkTarget(d) { + return d.target; +} + +function link(curve) { + let source = linkSource, + target = linkTarget, + x$1 = x, + y$1 = y, + context = null, + output = null, + path = withPath(link); + + function link() { + let buffer; + const argv = slice.call(arguments); + const s = source.apply(this, argv); + const t = target.apply(this, argv); + if (context == null) output = curve(buffer = path()); + output.lineStart(); + argv[0] = s, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv)); + argv[0] = t, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv)); + output.lineEnd(); + if (buffer) return output = null, buffer + "" || null; + } + + link.source = function(_) { + return arguments.length ? (source = _, link) : source; + }; + + link.target = function(_) { + return arguments.length ? (target = _, link) : target; + }; + + link.x = function(_) { + return arguments.length ? (x$1 = typeof _ === "function" ? _ : constant$1(+_), link) : x$1; + }; + + link.y = function(_) { + return arguments.length ? (y$1 = typeof _ === "function" ? _ : constant$1(+_), link) : y$1; + }; + + link.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context; + }; + + return link; +} + +function linkHorizontal() { + return link(bumpX); +} + +function linkVertical() { + return link(bumpY); +} + +function linkRadial() { + const l = link(bumpRadial); + l.angle = l.x, delete l.x; + l.radius = l.y, delete l.y; + return l; +} + +const sqrt3$2 = sqrt(3); + +var asterisk = { + draw(context, size) { + const r = sqrt(size + min(size / 28, 0.75)) * 0.59436; + const t = r / 2; + const u = t * sqrt3$2; + context.moveTo(0, r); + context.lineTo(0, -r); + context.moveTo(-u, -t); + context.lineTo(u, t); + context.moveTo(-u, t); + context.lineTo(u, -t); + } +}; + +var circle = { + draw(context, size) { + const r = sqrt(size / pi); + context.moveTo(r, 0); + context.arc(0, 0, r, 0, tau); + } +}; + +var cross = { + draw(context, size) { + const r = sqrt(size / 5) / 2; + context.moveTo(-3 * r, -r); + context.lineTo(-r, -r); + context.lineTo(-r, -3 * r); + context.lineTo(r, -3 * r); + context.lineTo(r, -r); + context.lineTo(3 * r, -r); + context.lineTo(3 * r, r); + context.lineTo(r, r); + context.lineTo(r, 3 * r); + context.lineTo(-r, 3 * r); + context.lineTo(-r, r); + context.lineTo(-3 * r, r); + context.closePath(); + } +}; + +const tan30 = sqrt(1 / 3); +const tan30_2 = tan30 * 2; + +var diamond = { + draw(context, size) { + const y = sqrt(size / tan30_2); + const x = y * tan30; + context.moveTo(0, -y); + context.lineTo(x, 0); + context.lineTo(0, y); + context.lineTo(-x, 0); + context.closePath(); + } +}; + +var diamond2 = { + draw(context, size) { + const r = sqrt(size) * 0.62625; + context.moveTo(0, -r); + context.lineTo(r, 0); + context.lineTo(0, r); + context.lineTo(-r, 0); + context.closePath(); + } +}; + +var plus = { + draw(context, size) { + const r = sqrt(size - min(size / 7, 2)) * 0.87559; + context.moveTo(-r, 0); + context.lineTo(r, 0); + context.moveTo(0, r); + context.lineTo(0, -r); + } +}; + +var square = { + draw(context, size) { + const w = sqrt(size); + const x = -w / 2; + context.rect(x, x, w, w); + } +}; + +var square2 = { + draw(context, size) { + const r = sqrt(size) * 0.4431; + context.moveTo(r, r); + context.lineTo(r, -r); + context.lineTo(-r, -r); + context.lineTo(-r, r); + context.closePath(); + } +}; + +const ka = 0.89081309152928522810; +const kr = sin(pi / 10) / sin(7 * pi / 10); +const kx = sin(tau / 10) * kr; +const ky = -cos(tau / 10) * kr; + +var star = { + draw(context, size) { + const r = sqrt(size * ka); + const x = kx * r; + const y = ky * r; + context.moveTo(0, -r); + context.lineTo(x, y); + for (let i = 1; i < 5; ++i) { + const a = tau * i / 5; + const c = cos(a); + const s = sin(a); + context.lineTo(s * r, -c * r); + context.lineTo(c * x - s * y, s * x + c * y); + } + context.closePath(); + } +}; + +const sqrt3$1 = sqrt(3); + +var triangle = { + draw(context, size) { + const y = -sqrt(size / (sqrt3$1 * 3)); + context.moveTo(0, y * 2); + context.lineTo(-sqrt3$1 * y, -y); + context.lineTo(sqrt3$1 * y, -y); + context.closePath(); + } +}; + +const sqrt3 = sqrt(3); + +var triangle2 = { + draw(context, size) { + const s = sqrt(size) * 0.6824; + const t = s / 2; + const u = (s * sqrt3) / 2; // cos(Math.PI / 6) + context.moveTo(0, -s); + context.lineTo(u, t); + context.lineTo(-u, t); + context.closePath(); + } +}; + +const c = -0.5; +const s = sqrt(3) / 2; +const k = 1 / sqrt(12); +const a = (k / 2 + 1) * 3; + +var wye = { + draw(context, size) { + const r = sqrt(size / a); + const x0 = r / 2, y0 = r * k; + const x1 = x0, y1 = r * k + r; + const x2 = -x1, y2 = y1; + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.lineTo(c * x0 - s * y0, s * x0 + c * y0); + context.lineTo(c * x1 - s * y1, s * x1 + c * y1); + context.lineTo(c * x2 - s * y2, s * x2 + c * y2); + context.lineTo(c * x0 + s * y0, c * y0 - s * x0); + context.lineTo(c * x1 + s * y1, c * y1 - s * x1); + context.lineTo(c * x2 + s * y2, c * y2 - s * x2); + context.closePath(); + } +}; + +var times = { + draw(context, size) { + const r = sqrt(size - min(size / 6, 1.7)) * 0.6189; + context.moveTo(-r, -r); + context.lineTo(r, r); + context.moveTo(-r, r); + context.lineTo(r, -r); + } +}; + +// These symbols are designed to be filled. +const symbolsFill = [ + circle, + cross, + diamond, + square, + star, + triangle, + wye +]; + +// These symbols are designed to be stroked (with a width of 1.5px and round caps). +const symbolsStroke = [ + circle, + plus, + times, + triangle2, + asterisk, + square2, + diamond2 +]; + +function Symbol$1(type, size) { + let context = null, + path = withPath(symbol); + + type = typeof type === "function" ? type : constant$1(type || circle); + size = typeof size === "function" ? size : constant$1(size === undefined ? 64 : +size); + + function symbol() { + let buffer; + if (!context) context = buffer = path(); + type.apply(this, arguments).draw(context, +size.apply(this, arguments)); + if (buffer) return context = null, buffer + "" || null; + } + + symbol.type = function(_) { + return arguments.length ? (type = typeof _ === "function" ? _ : constant$1(_), symbol) : type; + }; + + symbol.size = function(_) { + return arguments.length ? (size = typeof _ === "function" ? _ : constant$1(+_), symbol) : size; + }; + + symbol.context = function(_) { + return arguments.length ? (context = _ == null ? null : _, symbol) : context; + }; + + return symbol; +} + +function noop() {} + +function point$3(that, x, y) { + that._context.bezierCurveTo( + (2 * that._x0 + that._x1) / 3, + (2 * that._y0 + that._y1) / 3, + (that._x0 + 2 * that._x1) / 3, + (that._y0 + 2 * that._y1) / 3, + (that._x0 + 4 * that._x1 + x) / 6, + (that._y0 + 4 * that._y1 + y) / 6 + ); +} + +function Basis(context) { + this._context = context; +} + +Basis.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 3: point$3(this, this._x1, this._y1); // falls through + case 2: this._context.lineTo(this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through + default: point$3(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +function basis(context) { + return new Basis(context); +} + +function BasisClosed(context) { + this._context = context; +} + +BasisClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x2, this._y2); + this._context.closePath(); + break; + } + case 2: { + this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); + this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x2, this._y2); + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x2 = x, this._y2 = y; break; + case 1: this._point = 2; this._x3 = x, this._y3 = y; break; + case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; + default: point$3(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +function basisClosed(context) { + return new BasisClosed(context); +} + +function BasisOpen(context) { + this._context = context; +} + +BasisOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; + case 3: this._point = 4; // falls through + default: point$3(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +function basisOpen(context) { + return new BasisOpen(context); +} + +function Bundle(context, beta) { + this._basis = new Basis(context); + this._beta = beta; +} + +Bundle.prototype = { + lineStart: function() { + this._x = []; + this._y = []; + this._basis.lineStart(); + }, + lineEnd: function() { + var x = this._x, + y = this._y, + j = x.length - 1; + + if (j > 0) { + var x0 = x[0], + y0 = y[0], + dx = x[j] - x0, + dy = y[j] - y0, + i = -1, + t; + + while (++i <= j) { + t = i / j; + this._basis.point( + this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), + this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) + ); + } + } + + this._x = this._y = null; + this._basis.lineEnd(); + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +var bundle = (function custom(beta) { + + function bundle(context) { + return beta === 1 ? new Basis(context) : new Bundle(context, beta); + } + + bundle.beta = function(beta) { + return custom(+beta); + }; + + return bundle; +})(0.85); + +function point$2(that, x, y) { + that._context.bezierCurveTo( + that._x1 + that._k * (that._x2 - that._x0), + that._y1 + that._k * (that._y2 - that._y0), + that._x2 + that._k * (that._x1 - x), + that._y2 + that._k * (that._y1 - y), + that._x2, + that._y2 + ); +} + +function Cardinal(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +Cardinal.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: point$2(this, this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; this._x1 = x, this._y1 = y; break; + case 2: this._point = 3; // falls through + default: point$2(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var cardinal = (function custom(tension) { + + function cardinal(context) { + return new Cardinal(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function CardinalClosed(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$2(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var cardinalClosed = (function custom(tension) { + + function cardinal(context) { + return new CardinalClosed(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function CardinalOpen(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // falls through + default: point$2(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var cardinalOpen = (function custom(tension) { + + function cardinal(context) { + return new CardinalOpen(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function point$1(that, x, y) { + var x1 = that._x1, + y1 = that._y1, + x2 = that._x2, + y2 = that._y2; + + if (that._l01_a > epsilon) { + var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, + n = 3 * that._l01_a * (that._l01_a + that._l12_a); + x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; + y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; + } + + if (that._l23_a > epsilon) { + var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, + m = 3 * that._l23_a * (that._l23_a + that._l12_a); + x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; + y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; + } + + that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); +} + +function CatmullRom(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRom.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: this.point(this._x2, this._y2); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; // falls through + default: point$1(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var catmullRom = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function CatmullRomClosed(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$1(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var catmullRomClosed = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function CatmullRomOpen(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // falls through + default: point$1(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var catmullRomOpen = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function LinearClosed(context) { + this._context = context; +} + +LinearClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._point) this._context.closePath(); + }, + point: function(x, y) { + x = +x, y = +y; + if (this._point) this._context.lineTo(x, y); + else this._point = 1, this._context.moveTo(x, y); + } +}; + +function linearClosed(context) { + return new LinearClosed(context); +} + +function sign(x) { + return x < 0 ? -1 : 1; +} + +// Calculate the slopes of the tangents (Hermite-type interpolation) based on +// the following paper: Steffen, M. 1990. A Simple Method for Monotonic +// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. +// NOV(II), P. 443, 1990. +function slope3(that, x2, y2) { + var h0 = that._x1 - that._x0, + h1 = x2 - that._x1, + s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), + s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), + p = (s0 * h1 + s1 * h0) / (h0 + h1); + return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; +} + +// Calculate a one-sided slope. +function slope2(that, t) { + var h = that._x1 - that._x0; + return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; +} + +// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations +// "you can express cubic Hermite interpolation in terms of cubic Bézier curves +// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". +function point(that, t0, t1) { + var x0 = that._x0, + y0 = that._y0, + x1 = that._x1, + y1 = that._y1, + dx = (x1 - x0) / 3; + that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); +} + +function MonotoneX(context) { + this._context = context; +} + +MonotoneX.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = + this._t0 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x1, this._y1); break; + case 3: point(this, this._t0, slope2(this, this._t0)); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + var t1 = NaN; + + x = +x, y = +y; + if (x === this._x1 && y === this._y1) return; // Ignore coincident points. + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break; + default: point(this, this._t0, t1 = slope3(this, x, y)); break; + } + + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + this._t0 = t1; + } +}; + +function MonotoneY(context) { + this._context = new ReflectContext(context); +} + +(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { + MonotoneX.prototype.point.call(this, y, x); +}; + +function ReflectContext(context) { + this._context = context; +} + +ReflectContext.prototype = { + moveTo: function(x, y) { this._context.moveTo(y, x); }, + closePath: function() { this._context.closePath(); }, + lineTo: function(x, y) { this._context.lineTo(y, x); }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } +}; + +function monotoneX(context) { + return new MonotoneX(context); +} + +function monotoneY(context) { + return new MonotoneY(context); +} + +function Natural(context) { + this._context = context; +} + +Natural.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = []; + this._y = []; + }, + lineEnd: function() { + var x = this._x, + y = this._y, + n = x.length; + + if (n) { + this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); + if (n === 2) { + this._context.lineTo(x[1], y[1]); + } else { + var px = controlPoints(x), + py = controlPoints(y); + for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { + this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); + } + } + } + + if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); + this._line = 1 - this._line; + this._x = this._y = null; + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +// See https://www.particleincell.com/2012/bezier-splines/ for derivation. +function controlPoints(x) { + var i, + n = x.length - 1, + m, + a = new Array(n), + b = new Array(n), + r = new Array(n); + a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; + for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; + a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; + for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; + a[n - 1] = r[n - 1] / b[n - 1]; + for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; + b[n - 1] = (x[n] + a[n - 1]) / 2; + for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; + return [a, b]; +} + +function natural(context) { + return new Natural(context); +} + +function Step(context, t) { + this._context = context; + this._t = t; +} + +Step.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = this._y = NaN; + this._point = 0; + }, + lineEnd: function() { + if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // falls through + default: { + if (this._t <= 0) { + this._context.lineTo(this._x, y); + this._context.lineTo(x, y); + } else { + var x1 = this._x * (1 - this._t) + x * this._t; + this._context.lineTo(x1, this._y); + this._context.lineTo(x1, y); + } + break; + } + } + this._x = x, this._y = y; + } +}; + +function step(context) { + return new Step(context, 0.5); +} + +function stepBefore(context) { + return new Step(context, 0); +} + +function stepAfter(context) { + return new Step(context, 1); +} + +function none$1(series, order) { + if (!((n = series.length) > 1)) return; + for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { + s0 = s1, s1 = series[order[i]]; + for (j = 0; j < m; ++j) { + s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; + } + } +} + +function none(series) { + var n = series.length, o = new Array(n); + while (--n >= 0) o[n] = n; + return o; +} + +function stackValue(d, key) { + return d[key]; +} + +function stackSeries(key) { + const series = []; + series.key = key; + return series; +} + +function stack() { + var keys = constant$1([]), + order = none, + offset = none$1, + value = stackValue; + + function stack(data) { + var sz = Array.from(keys.apply(this, arguments), stackSeries), + i, n = sz.length, j = -1, + oz; + + for (const d of data) { + for (i = 0, ++j; i < n; ++i) { + (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d; + } + } + + for (i = 0, oz = array(order(sz)); i < n; ++i) { + sz[oz[i]].index = i; + } + + offset(sz, oz); + return sz; + } + + stack.keys = function(_) { + return arguments.length ? (keys = typeof _ === "function" ? _ : constant$1(Array.from(_)), stack) : keys; + }; + + stack.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(+_), stack) : value; + }; + + stack.order = function(_) { + return arguments.length ? (order = _ == null ? none : typeof _ === "function" ? _ : constant$1(Array.from(_)), stack) : order; + }; + + stack.offset = function(_) { + return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset; + }; + + return stack; +} + +function expand(series, order) { + if (!((n = series.length) > 0)) return; + for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { + for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; + if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; + } + none$1(series, order); +} + +function diverging(series, order) { + if (!((n = series.length) > 0)) return; + for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { + for (yp = yn = 0, i = 0; i < n; ++i) { + if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) { + d[0] = yp, d[1] = yp += dy; + } else if (dy < 0) { + d[1] = yn, d[0] = yn += dy; + } else { + d[0] = 0, d[1] = dy; + } + } + } +} + +function silhouette(series, order) { + if (!((n = series.length) > 0)) return; + for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { + for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; + s0[j][1] += s0[j][0] = -y / 2; + } + none$1(series, order); +} + +function wiggle(series, order) { + if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; + for (var y = 0, j = 1, s0, m, n; j < m; ++j) { + for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { + var si = series[order[i]], + sij0 = si[j][1] || 0, + sij1 = si[j - 1][1] || 0, + s3 = (sij0 - sij1) / 2; + for (var k = 0; k < i; ++k) { + var sk = series[order[k]], + skj0 = sk[j][1] || 0, + skj1 = sk[j - 1][1] || 0; + s3 += skj0 - skj1; + } + s1 += sij0, s2 += s3 * sij0; + } + s0[j - 1][1] += s0[j - 1][0] = y; + if (s1) y -= s2 / s1; + } + s0[j - 1][1] += s0[j - 1][0] = y; + none$1(series, order); +} + +function appearance(series) { + var peaks = series.map(peak); + return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; }); +} + +function peak(series) { + var i = -1, j = 0, n = series.length, vi, vj = -Infinity; + while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i; + return j; +} + +function ascending(series) { + var sums = series.map(sum); + return none(series).sort(function(a, b) { return sums[a] - sums[b]; }); +} + +function sum(series) { + var s = 0, i = -1, n = series.length, v; + while (++i < n) if (v = +series[i][1]) s += v; + return s; +} + +function descending(series) { + return ascending(series).reverse(); +} + +function insideOut(series) { + var n = series.length, + i, + j, + sums = series.map(sum), + order = appearance(series), + top = 0, + bottom = 0, + tops = [], + bottoms = []; + + for (i = 0; i < n; ++i) { + j = order[i]; + if (top < bottom) { + top += sums[j]; + tops.push(j); + } else { + bottom += sums[j]; + bottoms.push(j); + } + } + + return bottoms.reverse().concat(tops); +} + +function reverse(series) { + return none(series).reverse(); +} + +var constant = x => () => x; + +function ZoomEvent(type, { + sourceEvent, + target, + transform, + dispatch +}) { + Object.defineProperties(this, { + type: {value: type, enumerable: true, configurable: true}, + sourceEvent: {value: sourceEvent, enumerable: true, configurable: true}, + target: {value: target, enumerable: true, configurable: true}, + transform: {value: transform, enumerable: true, configurable: true}, + _: {value: dispatch} + }); +} + +function Transform(k, x, y) { + this.k = k; + this.x = x; + this.y = y; +} + +Transform.prototype = { + constructor: Transform, + scale: function(k) { + return k === 1 ? this : new Transform(this.k * k, this.x, this.y); + }, + translate: function(x, y) { + return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); + }, + apply: function(point) { + return [point[0] * this.k + this.x, point[1] * this.k + this.y]; + }, + applyX: function(x) { + return x * this.k + this.x; + }, + applyY: function(y) { + return y * this.k + this.y; + }, + invert: function(location) { + return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; + }, + invertX: function(x) { + return (x - this.x) / this.k; + }, + invertY: function(y) { + return (y - this.y) / this.k; + }, + rescaleX: function(x) { + return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); + }, + rescaleY: function(y) { + return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); + }, + toString: function() { + return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; + } +}; + +var identity = new Transform(1, 0, 0); + +transform.prototype = Transform.prototype; + +function transform(node) { + while (!node.__zoom) if (!(node = node.parentNode)) return identity; + return node.__zoom; +} + +function nopropagation(event) { + event.stopImmediatePropagation(); +} + +function noevent(event) { + event.preventDefault(); + event.stopImmediatePropagation(); +} + +// Ignore right-click, since that should open the context menu. +// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event +function defaultFilter(event) { + return (!event.ctrlKey || event.type === 'wheel') && !event.button; +} + +function defaultExtent() { + var e = this; + if (e instanceof SVGElement) { + e = e.ownerSVGElement || e; + if (e.hasAttribute("viewBox")) { + e = e.viewBox.baseVal; + return [[e.x, e.y], [e.x + e.width, e.y + e.height]]; + } + return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]]; + } + return [[0, 0], [e.clientWidth, e.clientHeight]]; +} + +function defaultTransform() { + return this.__zoom || identity; +} + +function defaultWheelDelta(event) { + return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1); +} + +function defaultTouchable() { + return navigator.maxTouchPoints || ("ontouchstart" in this); +} + +function defaultConstrain(transform, extent, translateExtent) { + var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0], + dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0], + dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1], + dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1]; + return transform.translate( + dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), + dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) + ); +} + +function zoom() { + var filter = defaultFilter, + extent = defaultExtent, + constrain = defaultConstrain, + wheelDelta = defaultWheelDelta, + touchable = defaultTouchable, + scaleExtent = [0, Infinity], + translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]], + duration = 250, + interpolate = interpolateZoom, + listeners = dispatch("start", "zoom", "end"), + touchstarting, + touchfirst, + touchending, + touchDelay = 500, + wheelDelay = 150, + clickDistance2 = 0, + tapDistance = 10; + + function zoom(selection) { + selection + .property("__zoom", defaultTransform) + .on("wheel.zoom", wheeled, {passive: false}) + .on("mousedown.zoom", mousedowned) + .on("dblclick.zoom", dblclicked) + .filter(touchable) + .on("touchstart.zoom", touchstarted) + .on("touchmove.zoom", touchmoved) + .on("touchend.zoom touchcancel.zoom", touchended) + .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); + } + + zoom.transform = function(collection, transform, point, event) { + var selection = collection.selection ? collection.selection() : collection; + selection.property("__zoom", defaultTransform); + if (collection !== selection) { + schedule(collection, transform, point, event); + } else { + selection.interrupt().each(function() { + gesture(this, arguments) + .event(event) + .start() + .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) + .end(); + }); + } + }; + + zoom.scaleBy = function(selection, k, p, event) { + zoom.scaleTo(selection, function() { + var k0 = this.__zoom.k, + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return k0 * k1; + }, p, event); + }; + + zoom.scaleTo = function(selection, k, p, event) { + zoom.transform(selection, function() { + var e = extent.apply(this, arguments), + t0 = this.__zoom, + p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p, + p1 = t0.invert(p0), + k1 = typeof k === "function" ? k.apply(this, arguments) : k; + return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent); + }, p, event); + }; + + zoom.translateBy = function(selection, x, y, event) { + zoom.transform(selection, function() { + return constrain(this.__zoom.translate( + typeof x === "function" ? x.apply(this, arguments) : x, + typeof y === "function" ? y.apply(this, arguments) : y + ), extent.apply(this, arguments), translateExtent); + }, null, event); + }; + + zoom.translateTo = function(selection, x, y, p, event) { + zoom.transform(selection, function() { + var e = extent.apply(this, arguments), + t = this.__zoom, + p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p; + return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate( + typeof x === "function" ? -x.apply(this, arguments) : -x, + typeof y === "function" ? -y.apply(this, arguments) : -y + ), e, translateExtent); + }, p, event); + }; + + function scale(transform, k) { + k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k)); + return k === transform.k ? transform : new Transform(k, transform.x, transform.y); + } + + function translate(transform, p0, p1) { + var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; + return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y); + } + + function centroid(extent) { + return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; + } + + function schedule(transition, transform, point, event) { + transition + .on("start.zoom", function() { gesture(this, arguments).event(event).start(); }) + .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).event(event).end(); }) + .tween("zoom", function() { + var that = this, + args = arguments, + g = gesture(that, args).event(event), + e = extent.apply(that, args), + p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point, + w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), + a = that.__zoom, + b = typeof transform === "function" ? transform.apply(that, args) : transform, + i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); + return function(t) { + if (t === 1) t = b; // Avoid rounding error on end. + else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); } + g.zoom(null, t); + }; + }); + } + + function gesture(that, args, clean) { + return (!clean && that.__zooming) || new Gesture(that, args); + } + + function Gesture(that, args) { + this.that = that; + this.args = args; + this.active = 0; + this.sourceEvent = null; + this.extent = extent.apply(that, args); + this.taps = 0; + } + + Gesture.prototype = { + event: function(event) { + if (event) this.sourceEvent = event; + return this; + }, + start: function() { + if (++this.active === 1) { + this.that.__zooming = this; + this.emit("start"); + } + return this; + }, + zoom: function(key, transform) { + if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); + if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); + if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); + this.that.__zoom = transform; + this.emit("zoom"); + return this; + }, + end: function() { + if (--this.active === 0) { + delete this.that.__zooming; + this.emit("end"); + } + return this; + }, + emit: function(type) { + var d = select(this.that).datum(); + listeners.call( + type, + this.that, + new ZoomEvent(type, { + sourceEvent: this.sourceEvent, + target: zoom, + type, + transform: this.that.__zoom, + dispatch: listeners + }), + d + ); + } + }; + + function wheeled(event, ...args) { + if (!filter.apply(this, arguments)) return; + var g = gesture(this, args).event(event), + t = this.__zoom, + k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))), + p = pointer(event); + + // If the mouse is in the same location as before, reuse it. + // If there were recent wheel events, reset the wheel idle timeout. + if (g.wheel) { + if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { + g.mouse[1] = t.invert(g.mouse[0] = p); + } + clearTimeout(g.wheel); + } + + // If this wheel event won’t trigger a transform change, ignore it. + else if (t.k === k) return; + + // Otherwise, capture the mouse point and location at the start. + else { + g.mouse = [p, t.invert(p)]; + interrupt(this); + g.start(); + } + + noevent(event); + g.wheel = setTimeout(wheelidled, wheelDelay); + g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent)); + + function wheelidled() { + g.wheel = null; + g.end(); + } + } + + function mousedowned(event, ...args) { + if (touchending || !filter.apply(this, arguments)) return; + var currentTarget = event.currentTarget, + g = gesture(this, args, true).event(event), + v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), + p = pointer(event, currentTarget), + x0 = event.clientX, + y0 = event.clientY; + + dragDisable(event.view); + nopropagation(event); + g.mouse = [p, this.__zoom.invert(p)]; + interrupt(this); + g.start(); + + function mousemoved(event) { + noevent(event); + if (!g.moved) { + var dx = event.clientX - x0, dy = event.clientY - y0; + g.moved = dx * dx + dy * dy > clickDistance2; + } + g.event(event) + .zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent)); + } + + function mouseupped(event) { + v.on("mousemove.zoom mouseup.zoom", null); + yesdrag(event.view, g.moved); + noevent(event); + g.event(event).end(); + } + } + + function dblclicked(event, ...args) { + if (!filter.apply(this, arguments)) return; + var t0 = this.__zoom, + p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this), + p1 = t0.invert(p0), + k1 = t0.k * (event.shiftKey ? 0.5 : 2), + t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent); + + noevent(event); + if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event); + else select(this).call(zoom.transform, t1, p0, event); + } + + function touchstarted(event, ...args) { + if (!filter.apply(this, arguments)) return; + var touches = event.touches, + n = touches.length, + g = gesture(this, args, event.changedTouches.length === n).event(event), + started, i, t, p; + + nopropagation(event); + for (i = 0; i < n; ++i) { + t = touches[i], p = pointer(t, this); + p = [p, this.__zoom.invert(p), t.identifier]; + if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting; + else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0; + } + + if (touchstarting) touchstarting = clearTimeout(touchstarting); + + if (started) { + if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); + interrupt(this); + g.start(); + } + } + + function touchmoved(event, ...args) { + if (!this.__zooming) return; + var g = gesture(this, args).event(event), + touches = event.changedTouches, + n = touches.length, i, t, p, l; + + noevent(event); + for (i = 0; i < n; ++i) { + t = touches[i], p = pointer(t, this); + if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; + else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; + } + t = g.that.__zoom; + if (g.touch1) { + var p0 = g.touch0[0], l0 = g.touch0[1], + p1 = g.touch1[0], l1 = g.touch1[1], + dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, + dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; + t = scale(t, Math.sqrt(dp / dl)); + p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; + l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; + } + else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; + else return; + + g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent)); + } + + function touchended(event, ...args) { + if (!this.__zooming) return; + var g = gesture(this, args).event(event), + touches = event.changedTouches, + n = touches.length, i, t; + + nopropagation(event); + if (touchending) clearTimeout(touchending); + touchending = setTimeout(function() { touchending = null; }, touchDelay); + for (i = 0; i < n; ++i) { + t = touches[i]; + if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; + else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; + } + if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; + if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); + else { + g.end(); + // If this was a dbltap, reroute to the (optional) dblclick.zoom handler. + if (g.taps === 2) { + t = pointer(t, this); + if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) { + var p = select(this).on("dblclick.zoom"); + if (p) p.apply(this, arguments); + } + } + } + } + + zoom.wheelDelta = function(_) { + return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant(+_), zoom) : wheelDelta; + }; + + zoom.filter = function(_) { + return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), zoom) : filter; + }; + + zoom.touchable = function(_) { + return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), zoom) : touchable; + }; + + zoom.extent = function(_) { + return arguments.length ? (extent = typeof _ === "function" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; + }; + + zoom.scaleExtent = function(_) { + return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]]; + }; + + zoom.translateExtent = function(_) { + return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]]; + }; + + zoom.constrain = function(_) { + return arguments.length ? (constrain = _, zoom) : constrain; + }; + + zoom.duration = function(_) { + return arguments.length ? (duration = +_, zoom) : duration; + }; + + zoom.interpolate = function(_) { + return arguments.length ? (interpolate = _, zoom) : interpolate; + }; + + zoom.on = function() { + var value = listeners.on.apply(listeners, arguments); + return value === listeners ? zoom : value; + }; + + zoom.clickDistance = function(_) { + return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); + }; + + zoom.tapDistance = function(_) { + return arguments.length ? (tapDistance = +_, zoom) : tapDistance; + }; + + return zoom; +} + +exports.Adder = Adder; +exports.Delaunay = Delaunay; +exports.FormatSpecifier = FormatSpecifier; +exports.InternMap = InternMap; +exports.InternSet = InternSet; +exports.Node = Node$1; +exports.Path = Path$1; +exports.Voronoi = Voronoi; +exports.ZoomTransform = Transform; +exports.active = active; +exports.arc = arc; +exports.area = area; +exports.areaRadial = areaRadial; +exports.ascending = ascending$3; +exports.autoType = autoType; +exports.axisBottom = axisBottom; +exports.axisLeft = axisLeft; +exports.axisRight = axisRight; +exports.axisTop = axisTop; +exports.bin = bin; +exports.bisect = bisect; +exports.bisectCenter = bisectCenter; +exports.bisectLeft = bisectLeft; +exports.bisectRight = bisectRight; +exports.bisector = bisector; +exports.blob = blob; +exports.blur = blur; +exports.blur2 = blur2; +exports.blurImage = blurImage; +exports.brush = brush; +exports.brushSelection = brushSelection; +exports.brushX = brushX; +exports.brushY = brushY; +exports.buffer = buffer; +exports.chord = chord; +exports.chordDirected = chordDirected; +exports.chordTranspose = chordTranspose; +exports.cluster = cluster; +exports.color = color; +exports.contourDensity = density; +exports.contours = Contours; +exports.count = count$1; +exports.create = create$1; +exports.creator = creator; +exports.cross = cross$2; +exports.csv = csv; +exports.csvFormat = csvFormat; +exports.csvFormatBody = csvFormatBody; +exports.csvFormatRow = csvFormatRow; +exports.csvFormatRows = csvFormatRows; +exports.csvFormatValue = csvFormatValue; +exports.csvParse = csvParse; +exports.csvParseRows = csvParseRows; +exports.cubehelix = cubehelix$3; +exports.cumsum = cumsum; +exports.curveBasis = basis; +exports.curveBasisClosed = basisClosed; +exports.curveBasisOpen = basisOpen; +exports.curveBumpX = bumpX; +exports.curveBumpY = bumpY; +exports.curveBundle = bundle; +exports.curveCardinal = cardinal; +exports.curveCardinalClosed = cardinalClosed; +exports.curveCardinalOpen = cardinalOpen; +exports.curveCatmullRom = catmullRom; +exports.curveCatmullRomClosed = catmullRomClosed; +exports.curveCatmullRomOpen = catmullRomOpen; +exports.curveLinear = curveLinear; +exports.curveLinearClosed = linearClosed; +exports.curveMonotoneX = monotoneX; +exports.curveMonotoneY = monotoneY; +exports.curveNatural = natural; +exports.curveStep = step; +exports.curveStepAfter = stepAfter; +exports.curveStepBefore = stepBefore; +exports.descending = descending$2; +exports.deviation = deviation; +exports.difference = difference; +exports.disjoint = disjoint; +exports.dispatch = dispatch; +exports.drag = drag; +exports.dragDisable = dragDisable; +exports.dragEnable = yesdrag; +exports.dsv = dsv; +exports.dsvFormat = dsvFormat; +exports.easeBack = backInOut; +exports.easeBackIn = backIn; +exports.easeBackInOut = backInOut; +exports.easeBackOut = backOut; +exports.easeBounce = bounceOut; +exports.easeBounceIn = bounceIn; +exports.easeBounceInOut = bounceInOut; +exports.easeBounceOut = bounceOut; +exports.easeCircle = circleInOut; +exports.easeCircleIn = circleIn; +exports.easeCircleInOut = circleInOut; +exports.easeCircleOut = circleOut; +exports.easeCubic = cubicInOut; +exports.easeCubicIn = cubicIn; +exports.easeCubicInOut = cubicInOut; +exports.easeCubicOut = cubicOut; +exports.easeElastic = elasticOut; +exports.easeElasticIn = elasticIn; +exports.easeElasticInOut = elasticInOut; +exports.easeElasticOut = elasticOut; +exports.easeExp = expInOut; +exports.easeExpIn = expIn; +exports.easeExpInOut = expInOut; +exports.easeExpOut = expOut; +exports.easeLinear = linear$1; +exports.easePoly = polyInOut; +exports.easePolyIn = polyIn; +exports.easePolyInOut = polyInOut; +exports.easePolyOut = polyOut; +exports.easeQuad = quadInOut; +exports.easeQuadIn = quadIn; +exports.easeQuadInOut = quadInOut; +exports.easeQuadOut = quadOut; +exports.easeSin = sinInOut; +exports.easeSinIn = sinIn; +exports.easeSinInOut = sinInOut; +exports.easeSinOut = sinOut; +exports.every = every; +exports.extent = extent$1; +exports.fcumsum = fcumsum; +exports.filter = filter$1; +exports.flatGroup = flatGroup; +exports.flatRollup = flatRollup; +exports.forceCenter = center; +exports.forceCollide = collide; +exports.forceLink = link$2; +exports.forceManyBody = manyBody; +exports.forceRadial = radial$1; +exports.forceSimulation = simulation; +exports.forceX = x$1; +exports.forceY = y$1; +exports.formatDefaultLocale = defaultLocale$1; +exports.formatLocale = formatLocale$1; +exports.formatSpecifier = formatSpecifier; +exports.fsum = fsum; +exports.geoAlbers = albers; +exports.geoAlbersUsa = albersUsa; +exports.geoArea = area$2; +exports.geoAzimuthalEqualArea = azimuthalEqualArea; +exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw; +exports.geoAzimuthalEquidistant = azimuthalEquidistant; +exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw; +exports.geoBounds = bounds; +exports.geoCentroid = centroid$1; +exports.geoCircle = circle$1; +exports.geoClipAntimeridian = clipAntimeridian; +exports.geoClipCircle = clipCircle; +exports.geoClipExtent = extent; +exports.geoClipRectangle = clipRectangle; +exports.geoConicConformal = conicConformal; +exports.geoConicConformalRaw = conicConformalRaw; +exports.geoConicEqualArea = conicEqualArea; +exports.geoConicEqualAreaRaw = conicEqualAreaRaw; +exports.geoConicEquidistant = conicEquidistant; +exports.geoConicEquidistantRaw = conicEquidistantRaw; +exports.geoContains = contains$1; +exports.geoDistance = distance; +exports.geoEqualEarth = equalEarth; +exports.geoEqualEarthRaw = equalEarthRaw; +exports.geoEquirectangular = equirectangular; +exports.geoEquirectangularRaw = equirectangularRaw; +exports.geoGnomonic = gnomonic; +exports.geoGnomonicRaw = gnomonicRaw; +exports.geoGraticule = graticule; +exports.geoGraticule10 = graticule10; +exports.geoIdentity = identity$4; +exports.geoInterpolate = interpolate; +exports.geoLength = length$1; +exports.geoMercator = mercator; +exports.geoMercatorRaw = mercatorRaw; +exports.geoNaturalEarth1 = naturalEarth1; +exports.geoNaturalEarth1Raw = naturalEarth1Raw; +exports.geoOrthographic = orthographic; +exports.geoOrthographicRaw = orthographicRaw; +exports.geoPath = index$2; +exports.geoProjection = projection; +exports.geoProjectionMutator = projectionMutator; +exports.geoRotation = rotation; +exports.geoStereographic = stereographic; +exports.geoStereographicRaw = stereographicRaw; +exports.geoStream = geoStream; +exports.geoTransform = transform$1; +exports.geoTransverseMercator = transverseMercator; +exports.geoTransverseMercatorRaw = transverseMercatorRaw; +exports.gray = gray; +exports.greatest = greatest; +exports.greatestIndex = greatestIndex; +exports.group = group; +exports.groupSort = groupSort; +exports.groups = groups; +exports.hcl = hcl$2; +exports.hierarchy = hierarchy; +exports.histogram = bin; +exports.hsl = hsl$2; +exports.html = html; +exports.image = image; +exports.index = index$4; +exports.indexes = indexes; +exports.interpolate = interpolate$2; +exports.interpolateArray = array$3; +exports.interpolateBasis = basis$2; +exports.interpolateBasisClosed = basisClosed$1; +exports.interpolateBlues = Blues; +exports.interpolateBrBG = BrBG; +exports.interpolateBuGn = BuGn; +exports.interpolateBuPu = BuPu; +exports.interpolateCividis = cividis; +exports.interpolateCool = cool; +exports.interpolateCubehelix = cubehelix$2; +exports.interpolateCubehelixDefault = cubehelix; +exports.interpolateCubehelixLong = cubehelixLong; +exports.interpolateDate = date$1; +exports.interpolateDiscrete = discrete; +exports.interpolateGnBu = GnBu; +exports.interpolateGreens = Greens; +exports.interpolateGreys = Greys; +exports.interpolateHcl = hcl$1; +exports.interpolateHclLong = hclLong; +exports.interpolateHsl = hsl$1; +exports.interpolateHslLong = hslLong; +exports.interpolateHue = hue; +exports.interpolateInferno = inferno; +exports.interpolateLab = lab; +exports.interpolateMagma = magma; +exports.interpolateNumber = interpolateNumber; +exports.interpolateNumberArray = numberArray; +exports.interpolateObject = object$1; +exports.interpolateOrRd = OrRd; +exports.interpolateOranges = Oranges; +exports.interpolatePRGn = PRGn; +exports.interpolatePiYG = PiYG; +exports.interpolatePlasma = plasma; +exports.interpolatePuBu = PuBu; +exports.interpolatePuBuGn = PuBuGn; +exports.interpolatePuOr = PuOr; +exports.interpolatePuRd = PuRd; +exports.interpolatePurples = Purples; +exports.interpolateRainbow = rainbow; +exports.interpolateRdBu = RdBu; +exports.interpolateRdGy = RdGy; +exports.interpolateRdPu = RdPu; +exports.interpolateRdYlBu = RdYlBu; +exports.interpolateRdYlGn = RdYlGn; +exports.interpolateReds = Reds; +exports.interpolateRgb = interpolateRgb; +exports.interpolateRgbBasis = rgbBasis; +exports.interpolateRgbBasisClosed = rgbBasisClosed; +exports.interpolateRound = interpolateRound; +exports.interpolateSinebow = sinebow; +exports.interpolateSpectral = Spectral; +exports.interpolateString = interpolateString; +exports.interpolateTransformCss = interpolateTransformCss; +exports.interpolateTransformSvg = interpolateTransformSvg; +exports.interpolateTurbo = turbo; +exports.interpolateViridis = viridis; +exports.interpolateWarm = warm; +exports.interpolateYlGn = YlGn; +exports.interpolateYlGnBu = YlGnBu; +exports.interpolateYlOrBr = YlOrBr; +exports.interpolateYlOrRd = YlOrRd; +exports.interpolateZoom = interpolateZoom; +exports.interrupt = interrupt; +exports.intersection = intersection; +exports.interval = interval; +exports.isoFormat = formatIso$1; +exports.isoParse = parseIso$1; +exports.json = json; +exports.lab = lab$1; +exports.lch = lch; +exports.least = least; +exports.leastIndex = leastIndex; +exports.line = line; +exports.lineRadial = lineRadial$1; +exports.link = link; +exports.linkHorizontal = linkHorizontal; +exports.linkRadial = linkRadial; +exports.linkVertical = linkVertical; +exports.local = local$1; +exports.map = map$1; +exports.matcher = matcher; +exports.max = max$3; +exports.maxIndex = maxIndex; +exports.mean = mean; +exports.median = median; +exports.medianIndex = medianIndex; +exports.merge = merge; +exports.min = min$2; +exports.minIndex = minIndex; +exports.mode = mode; +exports.namespace = namespace; +exports.namespaces = namespaces; +exports.nice = nice$1; +exports.now = now; +exports.pack = index$1; +exports.packEnclose = enclose; +exports.packSiblings = siblings; +exports.pairs = pairs; +exports.partition = partition; +exports.path = path; +exports.pathRound = pathRound; +exports.permute = permute; +exports.pie = pie; +exports.piecewise = piecewise; +exports.pointRadial = pointRadial; +exports.pointer = pointer; +exports.pointers = pointers; +exports.polygonArea = area$1; +exports.polygonCentroid = centroid; +exports.polygonContains = contains; +exports.polygonHull = hull; +exports.polygonLength = length; +exports.precisionFixed = precisionFixed; +exports.precisionPrefix = precisionPrefix; +exports.precisionRound = precisionRound; +exports.quadtree = quadtree; +exports.quantile = quantile$1; +exports.quantileIndex = quantileIndex; +exports.quantileSorted = quantileSorted; +exports.quantize = quantize$1; +exports.quickselect = quickselect; +exports.radialArea = areaRadial; +exports.radialLine = lineRadial$1; +exports.randomBates = bates; +exports.randomBernoulli = bernoulli; +exports.randomBeta = beta; +exports.randomBinomial = binomial; +exports.randomCauchy = cauchy; +exports.randomExponential = exponential; +exports.randomGamma = gamma; +exports.randomGeometric = geometric; +exports.randomInt = int; +exports.randomIrwinHall = irwinHall; +exports.randomLcg = lcg; +exports.randomLogNormal = logNormal; +exports.randomLogistic = logistic; +exports.randomNormal = normal; +exports.randomPareto = pareto; +exports.randomPoisson = poisson; +exports.randomUniform = uniform; +exports.randomWeibull = weibull; +exports.range = range$2; +exports.rank = rank; +exports.reduce = reduce; +exports.reverse = reverse$1; +exports.rgb = rgb; +exports.ribbon = ribbon$1; +exports.ribbonArrow = ribbonArrow; +exports.rollup = rollup; +exports.rollups = rollups; +exports.scaleBand = band; +exports.scaleDiverging = diverging$1; +exports.scaleDivergingLog = divergingLog; +exports.scaleDivergingPow = divergingPow; +exports.scaleDivergingSqrt = divergingSqrt; +exports.scaleDivergingSymlog = divergingSymlog; +exports.scaleIdentity = identity$2; +exports.scaleImplicit = implicit; +exports.scaleLinear = linear; +exports.scaleLog = log; +exports.scaleOrdinal = ordinal; +exports.scalePoint = point$4; +exports.scalePow = pow; +exports.scaleQuantile = quantile; +exports.scaleQuantize = quantize; +exports.scaleRadial = radial; +exports.scaleSequential = sequential; +exports.scaleSequentialLog = sequentialLog; +exports.scaleSequentialPow = sequentialPow; +exports.scaleSequentialQuantile = sequentialQuantile; +exports.scaleSequentialSqrt = sequentialSqrt; +exports.scaleSequentialSymlog = sequentialSymlog; +exports.scaleSqrt = sqrt$1; +exports.scaleSymlog = symlog; +exports.scaleThreshold = threshold; +exports.scaleTime = time; +exports.scaleUtc = utcTime; +exports.scan = scan; +exports.schemeAccent = Accent; +exports.schemeBlues = scheme$5; +exports.schemeBrBG = scheme$q; +exports.schemeBuGn = scheme$h; +exports.schemeBuPu = scheme$g; +exports.schemeCategory10 = category10; +exports.schemeDark2 = Dark2; +exports.schemeGnBu = scheme$f; +exports.schemeGreens = scheme$4; +exports.schemeGreys = scheme$3; +exports.schemeObservable10 = observable10; +exports.schemeOrRd = scheme$e; +exports.schemeOranges = scheme; +exports.schemePRGn = scheme$p; +exports.schemePaired = Paired; +exports.schemePastel1 = Pastel1; +exports.schemePastel2 = Pastel2; +exports.schemePiYG = scheme$o; +exports.schemePuBu = scheme$c; +exports.schemePuBuGn = scheme$d; +exports.schemePuOr = scheme$n; +exports.schemePuRd = scheme$b; +exports.schemePurples = scheme$2; +exports.schemeRdBu = scheme$m; +exports.schemeRdGy = scheme$l; +exports.schemeRdPu = scheme$a; +exports.schemeRdYlBu = scheme$k; +exports.schemeRdYlGn = scheme$j; +exports.schemeReds = scheme$1; +exports.schemeSet1 = Set1; +exports.schemeSet2 = Set2; +exports.schemeSet3 = Set3; +exports.schemeSpectral = scheme$i; +exports.schemeTableau10 = Tableau10; +exports.schemeYlGn = scheme$8; +exports.schemeYlGnBu = scheme$9; +exports.schemeYlOrBr = scheme$7; +exports.schemeYlOrRd = scheme$6; +exports.select = select; +exports.selectAll = selectAll; +exports.selection = selection; +exports.selector = selector; +exports.selectorAll = selectorAll; +exports.shuffle = shuffle$1; +exports.shuffler = shuffler; +exports.some = some; +exports.sort = sort; +exports.stack = stack; +exports.stackOffsetDiverging = diverging; +exports.stackOffsetExpand = expand; +exports.stackOffsetNone = none$1; +exports.stackOffsetSilhouette = silhouette; +exports.stackOffsetWiggle = wiggle; +exports.stackOrderAppearance = appearance; +exports.stackOrderAscending = ascending; +exports.stackOrderDescending = descending; +exports.stackOrderInsideOut = insideOut; +exports.stackOrderNone = none; +exports.stackOrderReverse = reverse; +exports.stratify = stratify; +exports.style = styleValue; +exports.subset = subset; +exports.sum = sum$2; +exports.superset = superset; +exports.svg = svg; +exports.symbol = Symbol$1; +exports.symbolAsterisk = asterisk; +exports.symbolCircle = circle; +exports.symbolCross = cross; +exports.symbolDiamond = diamond; +exports.symbolDiamond2 = diamond2; +exports.symbolPlus = plus; +exports.symbolSquare = square; +exports.symbolSquare2 = square2; +exports.symbolStar = star; +exports.symbolTimes = times; +exports.symbolTriangle = triangle; +exports.symbolTriangle2 = triangle2; +exports.symbolWye = wye; +exports.symbolX = times; +exports.symbols = symbolsFill; +exports.symbolsFill = symbolsFill; +exports.symbolsStroke = symbolsStroke; +exports.text = text; +exports.thresholdFreedmanDiaconis = thresholdFreedmanDiaconis; +exports.thresholdScott = thresholdScott; +exports.thresholdSturges = thresholdSturges; +exports.tickFormat = tickFormat; +exports.tickIncrement = tickIncrement; +exports.tickStep = tickStep; +exports.ticks = ticks; +exports.timeDay = timeDay; +exports.timeDays = timeDays; +exports.timeFormatDefaultLocale = defaultLocale; +exports.timeFormatLocale = formatLocale; +exports.timeFriday = timeFriday; +exports.timeFridays = timeFridays; +exports.timeHour = timeHour; +exports.timeHours = timeHours; +exports.timeInterval = timeInterval; +exports.timeMillisecond = millisecond; +exports.timeMilliseconds = milliseconds; +exports.timeMinute = timeMinute; +exports.timeMinutes = timeMinutes; +exports.timeMonday = timeMonday; +exports.timeMondays = timeMondays; +exports.timeMonth = timeMonth; +exports.timeMonths = timeMonths; +exports.timeSaturday = timeSaturday; +exports.timeSaturdays = timeSaturdays; +exports.timeSecond = second; +exports.timeSeconds = seconds; +exports.timeSunday = timeSunday; +exports.timeSundays = timeSundays; +exports.timeThursday = timeThursday; +exports.timeThursdays = timeThursdays; +exports.timeTickInterval = timeTickInterval; +exports.timeTicks = timeTicks; +exports.timeTuesday = timeTuesday; +exports.timeTuesdays = timeTuesdays; +exports.timeWednesday = timeWednesday; +exports.timeWednesdays = timeWednesdays; +exports.timeWeek = timeSunday; +exports.timeWeeks = timeSundays; +exports.timeYear = timeYear; +exports.timeYears = timeYears; +exports.timeout = timeout; +exports.timer = timer; +exports.timerFlush = timerFlush; +exports.transition = transition; +exports.transpose = transpose; +exports.tree = tree; +exports.treemap = index; +exports.treemapBinary = binary; +exports.treemapDice = treemapDice; +exports.treemapResquarify = resquarify; +exports.treemapSlice = treemapSlice; +exports.treemapSliceDice = sliceDice; +exports.treemapSquarify = squarify; +exports.tsv = tsv; +exports.tsvFormat = tsvFormat; +exports.tsvFormatBody = tsvFormatBody; +exports.tsvFormatRow = tsvFormatRow; +exports.tsvFormatRows = tsvFormatRows; +exports.tsvFormatValue = tsvFormatValue; +exports.tsvParse = tsvParse; +exports.tsvParseRows = tsvParseRows; +exports.union = union; +exports.unixDay = unixDay; +exports.unixDays = unixDays; +exports.utcDay = utcDay; +exports.utcDays = utcDays; +exports.utcFriday = utcFriday; +exports.utcFridays = utcFridays; +exports.utcHour = utcHour; +exports.utcHours = utcHours; +exports.utcMillisecond = millisecond; +exports.utcMilliseconds = milliseconds; +exports.utcMinute = utcMinute; +exports.utcMinutes = utcMinutes; +exports.utcMonday = utcMonday; +exports.utcMondays = utcMondays; +exports.utcMonth = utcMonth; +exports.utcMonths = utcMonths; +exports.utcSaturday = utcSaturday; +exports.utcSaturdays = utcSaturdays; +exports.utcSecond = second; +exports.utcSeconds = seconds; +exports.utcSunday = utcSunday; +exports.utcSundays = utcSundays; +exports.utcThursday = utcThursday; +exports.utcThursdays = utcThursdays; +exports.utcTickInterval = utcTickInterval; +exports.utcTicks = utcTicks; +exports.utcTuesday = utcTuesday; +exports.utcTuesdays = utcTuesdays; +exports.utcWednesday = utcWednesday; +exports.utcWednesdays = utcWednesdays; +exports.utcWeek = utcSunday; +exports.utcWeeks = utcSundays; +exports.utcYear = utcYear; +exports.utcYears = utcYears; +exports.variance = variance; +exports.version = version; +exports.window = defaultView; +exports.xml = xml; +exports.zip = zip; +exports.zoom = zoom; +exports.zoomIdentity = identity; +exports.zoomTransform = transform; + +})); + +;(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b ? 1 : a >= b ? 0 : NaN; + } + + function bisector(compare) { + if (compare.length === 1) compare = ascendingComparator(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; + } + + function ascendingComparator(f) { + return function(d, x) { + return ascending(f(d), x); + }; + } + + var ascendingBisect = bisector(ascending); + var bisectRight = ascendingBisect.right; + var bisectLeft = ascendingBisect.left; + + function descending(a, b) { + return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; + } + + function number(x) { + return x === null ? NaN : +x; + } + + function variance(array, f) { + var n = array.length, + m = 0, + a, + d, + s = 0, + i = -1, + j = 0; + + if (f == null) { + while (++i < n) { + if (!isNaN(a = number(array[i]))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } + + else { + while (++i < n) { + if (!isNaN(a = number(f(array[i], i, array)))) { + d = a - m; + m += d / ++j; + s += d * (a - m); + } + } + } + + if (j > 1) return s / (j - 1); + } + + function deviation(array, f) { + var v = variance(array, f); + return v ? Math.sqrt(v) : v; + } + + function extent(array, f) { + var i = -1, + n = array.length, + a, + b, + c; + + if (f == null) { + while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; } + while (++i < n) if ((b = array[i]) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + + else { + while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; } + while (++i < n) if ((b = f(array[i], i, array)) != null) { + if (a > b) a = b; + if (c < b) c = b; + } + } + + return [a, c]; + } + + var array = Array.prototype; + + var slice = array.slice; + var map = array.map; + + function constant(x) { + return function() { + return x; + }; + } + + function identity(x) { + return x; + } + + function range(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; + } + + var e10 = Math.sqrt(50); + var e5 = Math.sqrt(10); + var e2 = Math.sqrt(2); + function ticks(start, stop, count) { + var step = tickStep(start, stop, count); + return range( + Math.ceil(start / step) * step, + Math.floor(stop / step) * step + step / 2, // inclusive + step + ); + } + + function tickStep(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10) step1 *= 10; + else if (error >= e5) step1 *= 5; + else if (error >= e2) step1 *= 2; + return stop < start ? -step1 : step1; + } + + function sturges(values) { + return Math.ceil(Math.log(values.length) / Math.LN2) + 1; + } + + function histogram() { + var value = identity, + domain = extent, + threshold = sturges; + + function histogram(data) { + var i, + n = data.length, + x, + values = new Array(n); + + for (i = 0; i < n; ++i) { + values[i] = value(data[i], i, data); + } + + var xz = domain(values), + x0 = xz[0], + x1 = xz[1], + tz = threshold(values, x0, x1); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) tz = ticks(x0, x1, tz); + + // Remove any thresholds outside the domain. + var m = tz.length; + while (tz[0] <= x0) tz.shift(), --m; + while (tz[m - 1] >= x1) tz.pop(), --m; + + var bins = new Array(m + 1), + bin; + + // Initialize bins. + for (i = 0; i <= m; ++i) { + bin = bins[i] = []; + bin.x0 = i > 0 ? tz[i - 1] : x0; + bin.x1 = i < m ? tz[i] : x1; + } + + // Assign data to bins by value, ignoring any outside the domain. + for (i = 0; i < n; ++i) { + x = values[i]; + if (x0 <= x && x <= x1) { + bins[bisectRight(tz, x, 0, m)].push(data[i]); + } + } + + return bins; + } + + histogram.value = function(_) { + return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value; + }; + + histogram.domain = function(_) { + return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain; + }; + + histogram.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold; + }; + + return histogram; + } + + function quantile(array, p, f) { + if (f == null) f = number; + if (!(n = array.length)) return; + if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array); + if (p >= 1) return +f(array[n - 1], n - 1, array); + var n, + h = (n - 1) * p, + i = Math.floor(h), + a = +f(array[i], i, array), + b = +f(array[i + 1], i + 1, array); + return a + (b - a) * (h - i); + } + + function freedmanDiaconis(values, min, max) { + values = map.call(values, number).sort(ascending); + return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3))); + } + + function scott(values, min, max) { + return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); + } + + function max(array, f) { + var i = -1, + n = array.length, + a, + b; + + if (f == null) { + while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = array[i]) != null && b > a) a = b; + } + + else { + while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b; + } + + return a; + } + + function mean(array, f) { + var s = 0, + n = array.length, + a, + i = -1, + j = n; + + if (f == null) { + while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j; + } + + else { + while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j; + } + + if (j) return s / j; + } + + function median(array, f) { + var numbers = [], + n = array.length, + a, + i = -1; + + if (f == null) { + while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a); + } + + else { + while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a); + } + + return quantile(numbers.sort(ascending), 0.5); + } + + function merge(arrays) { + var n = arrays.length, + m, + i = -1, + j = 0, + merged, + array; + + while (++i < n) j += arrays[i].length; + merged = new Array(j); + + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + + return merged; + } + + function min(array, f) { + var i = -1, + n = array.length, + a, + b; + + if (f == null) { + while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = array[i]) != null && a > b) a = b; + } + + else { + while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; } + while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b; + } + + return a; + } + + function pairs(array) { + var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); + while (i < n) pairs[i] = [p, p = array[++i]]; + return pairs; + } + + function permute(array, indexes) { + var i = indexes.length, permutes = new Array(i); + while (i--) permutes[i] = array[indexes[i]]; + return permutes; + } + + function scan(array, compare) { + if (!(n = array.length)) return; + var i = 0, + n, + j = 0, + xi, + xj = array[j]; + + if (!compare) compare = ascending; + + while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i; + + if (compare(xj, xj) === 0) return j; + } + + function shuffle(array, i0, i1) { + var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), + t, + i; + + while (m) { + i = Math.random() * m-- | 0; + t = array[m + i0]; + array[m + i0] = array[i + i0]; + array[i + i0] = t; + } + + return array; + } + + function sum(array, f) { + var s = 0, + n = array.length, + a, + i = -1; + + if (f == null) { + while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent. + } + + else { + while (++i < n) if (a = +f(array[i], i, array)) s += a; + } + + return s; + } + + function transpose(matrix) { + if (!(n = matrix.length)) return []; + for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { + for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { + row[j] = matrix[j][i]; + } + } + return transpose; + } + + function length(d) { + return d.length; + } + + function zip() { + return transpose(arguments); + } + + exports.bisect = bisectRight; + exports.bisectRight = bisectRight; + exports.bisectLeft = bisectLeft; + exports.ascending = ascending; + exports.bisector = bisector; + exports.descending = descending; + exports.deviation = deviation; + exports.extent = extent; + exports.histogram = histogram; + exports.thresholdFreedmanDiaconis = freedmanDiaconis; + exports.thresholdScott = scott; + exports.thresholdSturges = sturges; + exports.max = max; + exports.mean = mean; + exports.median = median; + exports.merge = merge; + exports.min = min; + exports.pairs = pairs; + exports.permute = permute; + exports.quantile = quantile; + exports.range = range; + exports.scan = scan; + exports.shuffle = shuffle; + exports.sum = sum; + exports.ticks = ticks; + exports.tickStep = tickStep; + exports.transpose = transpose; + exports.variance = variance; + exports.zip = zip; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +},{}],2:[function(require,module,exports){ +// https://d3js.org/d3-collection/ Version 1.0.2. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, (function (exports) { 'use strict'; + +var prefix = "$"; + +function Map() {} + +Map.prototype = map.prototype = { + constructor: Map, + has: function(key) { + return (prefix + key) in this; + }, + get: function(key) { + return this[prefix + key]; + }, + set: function(key, value) { + this[prefix + key] = value; + return this; + }, + remove: function(key) { + var property = prefix + key; + return property in this && delete this[property]; + }, + clear: function() { + for (var property in this) if (property[0] === prefix) delete this[property]; + }, + keys: function() { + var keys = []; + for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); + return keys; + }, + values: function() { + var values = []; + for (var property in this) if (property[0] === prefix) values.push(this[property]); + return values; + }, + entries: function() { + var entries = []; + for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); + return entries; + }, + size: function() { + var size = 0; + for (var property in this) if (property[0] === prefix) ++size; + return size; + }, + empty: function() { + for (var property in this) if (property[0] === prefix) return false; + return true; + }, + each: function(f) { + for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); + } +}; + +function map(object, f) { + var map = new Map; + + // Copy constructor. + if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); + + // Index array by numeric index or specified key function. + else if (Array.isArray(object)) { + var i = -1, + n = object.length, + o; + + if (f == null) while (++i < n) map.set(i, object[i]); + else while (++i < n) map.set(f(o = object[i], i, object), o); + } + + // Convert object to map. + else if (object) for (var key in object) map.set(key, object[key]); + + return map; +} + +var nest = function() { + var keys = [], + sortKeys = [], + sortValues, + rollup, + nest; + + function apply(array, depth, createResult, setResult) { + if (depth >= keys.length) return rollup != null + ? rollup(array) : (sortValues != null + ? array.sort(sortValues) + : array); + + var i = -1, + n = array.length, + key = keys[depth++], + keyValue, + value, + valuesByKey = map(), + values, + result = createResult(); + + while (++i < n) { + if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { + values.push(value); + } else { + valuesByKey.set(keyValue, [value]); + } + } + + valuesByKey.each(function(values, key) { + setResult(result, key, apply(values, depth, createResult, setResult)); + }); + + return result; + } + + function entries(map$$1, depth) { + if (++depth > keys.length) return map$$1; + var array, sortKey = sortKeys[depth - 1]; + if (rollup != null && depth >= keys.length) array = map$$1.entries(); + else array = [], map$$1.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); + return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; + } + + return nest = { + object: function(array) { return apply(array, 0, createObject, setObject); }, + map: function(array) { return apply(array, 0, createMap, setMap); }, + entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, + key: function(d) { keys.push(d); return nest; }, + sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, + sortValues: function(order) { sortValues = order; return nest; }, + rollup: function(f) { rollup = f; return nest; } + }; +}; + +function createObject() { + return {}; +} + +function setObject(object, key, value) { + object[key] = value; +} + +function createMap() { + return map(); +} + +function setMap(map$$1, key, value) { + map$$1.set(key, value); +} + +function Set() {} + +var proto = map.prototype; + +Set.prototype = set.prototype = { + constructor: Set, + has: proto.has, + add: function(value) { + value += ""; + this[prefix + value] = value; + return this; + }, + remove: proto.remove, + clear: proto.clear, + values: proto.keys, + size: proto.size, + empty: proto.empty, + each: proto.each +}; + +function set(object, f) { + var set = new Set; + + // Copy constructor. + if (object instanceof Set) object.each(function(value) { set.add(value); }); + + // Otherwise, assume it’s an array. + else if (object) { + var i = -1, n = object.length; + if (f == null) while (++i < n) set.add(object[i]); + else while (++i < n) set.add(f(object[i], i, object)); + } + + return set; +} + +var keys = function(map) { + var keys = []; + for (var key in map) keys.push(key); + return keys; +}; + +var values = function(map) { + var values = []; + for (var key in map) values.push(map[key]); + return values; +}; + +var entries = function(map) { + var entries = []; + for (var key in map) entries.push({key: key, value: map[key]}); + return entries; +}; + +exports.nest = nest; +exports.set = set; +exports.map = map; +exports.keys = keys; +exports.values = values; +exports.entries = entries; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],3:[function(require,module,exports){ +// https://d3js.org/d3-color/ Version 1.0.2. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, (function (exports) { 'use strict'; + +var define = function(constructor, factory, prototype) { + constructor.prototype = factory.prototype = prototype; + prototype.constructor = constructor; +}; + +function extend(parent, definition) { + var prototype = Object.create(parent.prototype); + for (var key in definition) prototype[key] = definition[key]; + return prototype; +} + +function Color() {} + +var darker = 0.7; +var brighter = 1 / darker; + +var reI = "\\s*([+-]?\\d+)\\s*"; +var reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*"; +var reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*"; +var reHex3 = /^#([0-9a-f]{3})$/; +var reHex6 = /^#([0-9a-f]{6})$/; +var reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"); +var reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"); +var reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"); +var reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"); +var reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"); +var reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); + +var named = { + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkgrey: 0xa9a9a9, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + grey: 0x808080, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 +}; + +define(Color, color, { + displayable: function() { + return this.rgb().displayable(); + }, + toString: function() { + return this.rgb() + ""; + } +}); + +function color(format) { + var m; + format = (format + "").trim().toLowerCase(); + return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 + : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 + : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) + : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) + : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) + : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) + : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) + : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) + : named.hasOwnProperty(format) ? rgbn(named[format]) + : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) + : null; +} + +function rgbn(n) { + return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); +} + +function rgba(r, g, b, a) { + if (a <= 0) r = g = b = NaN; + return new Rgb(r, g, b, a); +} + +function rgbConvert(o) { + if (!(o instanceof Color)) o = color(o); + if (!o) return new Rgb; + o = o.rgb(); + return new Rgb(o.r, o.g, o.b, o.opacity); +} + +function rgb(r, g, b, opacity) { + return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); +} + +function Rgb(r, g, b, opacity) { + this.r = +r; + this.g = +g; + this.b = +b; + this.opacity = +opacity; +} + +define(Rgb, rgb, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + rgb: function() { + return this; + }, + displayable: function() { + return (0 <= this.r && this.r <= 255) + && (0 <= this.g && this.g <= 255) + && (0 <= this.b && this.b <= 255) + && (0 <= this.opacity && this.opacity <= 1); + }, + toString: function() { + var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); + return (a === 1 ? "rgb(" : "rgba(") + + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + + (a === 1 ? ")" : ", " + a + ")"); + } +})); + +function hsla(h, s, l, a) { + if (a <= 0) h = s = l = NaN; + else if (l <= 0 || l >= 1) h = s = NaN; + else if (s <= 0) h = NaN; + return new Hsl(h, s, l, a); +} + +function hslConvert(o) { + if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Color)) o = color(o); + if (!o) return new Hsl; + if (o instanceof Hsl) return o; + o = o.rgb(); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + h = NaN, + s = max - min, + l = (max + min) / 2; + if (s) { + if (r === max) h = (g - b) / s + (g < b) * 6; + else if (g === max) h = (b - r) / s + 2; + else h = (r - g) / s + 4; + s /= l < 0.5 ? max + min : 2 - max - min; + h *= 60; + } else { + s = l > 0 && l < 1 ? 0 : h; + } + return new Hsl(h, s, l, o.opacity); +} + +function hsl(h, s, l, opacity) { + return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); +} + +function Hsl(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Hsl, hsl, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = this.h % 360 + (this.h < 0) * 360, + s = isNaN(h) || isNaN(this.s) ? 0 : this.s, + l = this.l, + m2 = l + (l < 0.5 ? l : 1 - l) * s, + m1 = 2 * l - m2; + return new Rgb( + hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), + hsl2rgb(h, m1, m2), + hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), + this.opacity + ); + }, + displayable: function() { + return (0 <= this.s && this.s <= 1 || isNaN(this.s)) + && (0 <= this.l && this.l <= 1) + && (0 <= this.opacity && this.opacity <= 1); + } +})); + +/* From FvD 13.37, CSS Color Module Level 3 */ +function hsl2rgb(h, m1, m2) { + return (h < 60 ? m1 + (m2 - m1) * h / 60 + : h < 180 ? m2 + : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 + : m1) * 255; +} + +var deg2rad = Math.PI / 180; +var rad2deg = 180 / Math.PI; + +var Kn = 18; +var Xn = 0.950470; +var Yn = 1; +var Zn = 1.088830; +var t0 = 4 / 29; +var t1 = 6 / 29; +var t2 = 3 * t1 * t1; +var t3 = t1 * t1 * t1; + +function labConvert(o) { + if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); + if (o instanceof Hcl) { + var h = o.h * deg2rad; + return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); + } + if (!(o instanceof Rgb)) o = rgbConvert(o); + var b = rgb2xyz(o.r), + a = rgb2xyz(o.g), + l = rgb2xyz(o.b), + x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), + y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn), + z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn); + return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); +} + +function lab(l, a, b, opacity) { + return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); +} + +function Lab(l, a, b, opacity) { + this.l = +l; + this.a = +a; + this.b = +b; + this.opacity = +opacity; +} + +define(Lab, lab, extend(Color, { + brighter: function(k) { + return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + darker: function(k) { + return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + rgb: function() { + var y = (this.l + 16) / 116, + x = isNaN(this.a) ? y : y + this.a / 500, + z = isNaN(this.b) ? y : y - this.b / 200; + y = Yn * lab2xyz(y); + x = Xn * lab2xyz(x); + z = Zn * lab2xyz(z); + return new Rgb( + xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB + xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), + xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z), + this.opacity + ); + } +})); + +function xyz2lab(t) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; +} + +function lab2xyz(t) { + return t > t1 ? t * t * t : t2 * (t - t0); +} + +function xyz2rgb(x) { + return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); +} + +function rgb2xyz(x) { + return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); +} + +function hclConvert(o) { + if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); + if (!(o instanceof Lab)) o = labConvert(o); + var h = Math.atan2(o.b, o.a) * rad2deg; + return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); +} + +function hcl(h, c, l, opacity) { + return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function Hcl(h, c, l, opacity) { + this.h = +h; + this.c = +c; + this.l = +l; + this.opacity = +opacity; +} + +define(Hcl, hcl, extend(Color, { + brighter: function(k) { + return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity); + }, + darker: function(k) { + return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity); + }, + rgb: function() { + return labConvert(this).rgb(); + } +})); + +var A = -0.14861; +var B = +1.78277; +var C = -0.29227; +var D = -0.90649; +var E = +1.97294; +var ED = E * D; +var EB = E * B; +var BC_DA = B * C - D * A; + +function cubehelixConvert(o) { + if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), + bl = b - l, + k = (E * (g - l) - C * bl) / D, + s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 + h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; + return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); +} + +function cubehelix(h, s, l, opacity) { + return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); +} + +function Cubehelix(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Cubehelix, cubehelix, extend(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, + l = +this.l, + a = isNaN(this.s) ? 0 : this.s * l * (1 - l), + cosh = Math.cos(h), + sinh = Math.sin(h); + return new Rgb( + 255 * (l + a * (A * cosh + B * sinh)), + 255 * (l + a * (C * cosh + D * sinh)), + 255 * (l + a * (E * cosh)), + this.opacity + ); + } +})); + +exports.color = color; +exports.rgb = rgb; +exports.hsl = hsl; +exports.lab = lab; +exports.hcl = hcl; +exports.cubehelix = cubehelix; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],4:[function(require,module,exports){ +// https://d3js.org/d3-dispatch/ Version 1.0.1. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, function (exports) { 'use strict'; + + var noop = {value: function() {}}; + + function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); + _[t] = []; + } + return new Dispatch(_); + } + + function Dispatch(_) { + this._ = _; + } + + function parseTypenames(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); + } + + Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames(typename + "", _), + t, + i = -1, + n = T.length; + + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + return; + } + + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + } + + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } + }; + + function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } + } + + function set(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; + } + + exports.dispatch = dispatch; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +},{}],5:[function(require,module,exports){ +// https://d3js.org/d3-format/ Version 1.0.2. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, function (exports) { 'use strict'; + + // Computes the decimal coefficient and exponent of the specified number x with + // significant digits p, where x is positive and p is in [1, 21] or undefined. + // For example, formatDecimal(1.23) returns ["123", 0]. + function formatDecimal(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); + + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; + } + + function exponent(x) { + return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; + } + + function formatGroup(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } + + return t.reverse().join(thousands); + }; + } + + function formatDefault(x, p) { + x = x.toPrecision(p); + + out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (x[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + case "e": break out; + default: if (i0 > 0) i0 = 0; break; + } + } + + return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x; + } + + var prefixExponent; + + function formatPrefixAuto(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! + } + + function formatRounded(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); + } + + var formatTypes = { + "": formatDefault, + "%": function(x, p) { return (x * 100).toFixed(p); }, + "b": function(x) { return Math.round(x).toString(2); }, + "c": function(x) { return x + ""; }, + "d": function(x) { return Math.round(x).toString(10); }, + "e": function(x, p) { return x.toExponential(p); }, + "f": function(x, p) { return x.toFixed(p); }, + "g": function(x, p) { return x.toPrecision(p); }, + "o": function(x) { return Math.round(x).toString(8); }, + "p": function(x, p) { return formatRounded(x * 100, p); }, + "r": formatRounded, + "s": formatPrefixAuto, + "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, + "x": function(x) { return Math.round(x).toString(16); } + }; + + // [[fill]align][sign][symbol][0][width][,][.precision][type] + var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i; + + function formatSpecifier(specifier) { + return new FormatSpecifier(specifier); + } + + function FormatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + + var match, + fill = match[1] || " ", + align = match[2] || ">", + sign = match[3] || "-", + symbol = match[4] || "", + zero = !!match[5], + width = match[6] && +match[6], + comma = !!match[7], + precision = match[8] && +match[8].slice(1), + type = match[9] || ""; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // Map invalid types to the default format. + else if (!formatTypes[type]) type = ""; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + this.fill = fill; + this.align = align; + this.sign = sign; + this.symbol = symbol; + this.zero = zero; + this.width = width; + this.comma = comma; + this.precision = precision; + this.type = type; + } + + FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width == null ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) + + this.type; + }; + + var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; + + function identity(x) { + return x; + } + + function formatLocale(locale) { + var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity, + currency = locale.currency, + decimal = locale.decimal; + + function newFormat(specifier) { + specifier = formatSpecifier(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + type = specifier.type; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = formatTypes[type], + maybeSuffix = !type || /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision == null ? (type ? 6 : 12) + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Convert negative to positive, and compute the prefix. + // Note that -0 is not less than 0, but 1 / -0 is! + var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true); + + // Perform the initial formatting. + value = formatType(value, precision); + + // If the original value was negative, it may be rounded to zero during + // formatting; treat this as (positive) zero. + if (valueNegative) { + i = -1, n = value.length; + valueNegative = false; + while (++i < n) { + if (c = value.charCodeAt(i), (48 < c && c < 58) + || (type === "x" && 96 < c && c < 103) + || (type === "X" && 64 < c && c < 71)) { + valueNegative = true; + break; + } + } + } + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value” part that can be + // grouped, and fractional or exponential “suffix” part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } + + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); + + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; + + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": return valuePrefix + value + valueSuffix + padding; + case "=": return valuePrefix + padding + value + valueSuffix; + case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); + } + return padding + valuePrefix + value + valueSuffix; + } + + format.toString = function() { + return specifier + ""; + }; + + return format; + } + + function formatPrefix(specifier, value) { + var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } + + return { + format: newFormat, + formatPrefix: formatPrefix + }; + } + + var locale; + defaultLocale({ + decimal: ".", + thousands: ",", + grouping: [3], + currency: ["$", ""] + }); + + function defaultLocale(definition) { + locale = formatLocale(definition); + exports.format = locale.format; + exports.formatPrefix = locale.formatPrefix; + return locale; + } + + function precisionFixed(step) { + return Math.max(0, -exponent(Math.abs(step))); + } + + function precisionPrefix(step, value) { + return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); + } + + function precisionRound(step, max) { + step = Math.abs(step), max = Math.abs(max) - step; + return Math.max(0, exponent(max) - exponent(step)) + 1; + } + + exports.formatDefaultLocale = defaultLocale; + exports.formatLocale = formatLocale; + exports.formatSpecifier = formatSpecifier; + exports.precisionFixed = precisionFixed; + exports.precisionPrefix = precisionPrefix; + exports.precisionRound = precisionRound; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +},{}],6:[function(require,module,exports){ +// https://d3js.org/d3-interpolate/ Version 1.1.2. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-color')) : + typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) : + (factory((global.d3 = global.d3 || {}),global.d3)); +}(this, (function (exports,d3Color) { 'use strict'; + +function basis(t1, v0, v1, v2, v3) { + var t2 = t1 * t1, t3 = t2 * t1; + return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + + (4 - 6 * t2 + 3 * t3) * v1 + + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + + t3 * v3) / 6; +} + +var basis$1 = function(values) { + var n = values.length - 1; + return function(t) { + var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), + v1 = values[i], + v2 = values[i + 1], + v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, + v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; +}; + +var basisClosed = function(values) { + var n = values.length; + return function(t) { + var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), + v0 = values[(i + n - 1) % n], + v1 = values[i % n], + v2 = values[(i + 1) % n], + v3 = values[(i + 2) % n]; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; +}; + +var constant = function(x) { + return function() { + return x; + }; +}; + +function linear(a, d) { + return function(t) { + return a + t * d; + }; +} + +function exponential(a, b, y) { + return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { + return Math.pow(a + t * b, y); + }; +} + +function hue(a, b) { + var d = b - a; + return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a); +} + +function gamma(y) { + return (y = +y) === 1 ? nogamma : function(a, b) { + return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a); + }; +} + +function nogamma(a, b) { + var d = b - a; + return d ? linear(a, d) : constant(isNaN(a) ? b : a); +} + +var rgb$1 = (function rgbGamma(y) { + var color$$1 = gamma(y); + + function rgb$$1(start, end) { + var r = color$$1((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r), + g = color$$1(start.g, end.g), + b = color$$1(start.b, end.b), + opacity = color$$1(start.opacity, end.opacity); + return function(t) { + start.r = r(t); + start.g = g(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } + + rgb$$1.gamma = rgbGamma; + + return rgb$$1; +})(1); + +function rgbSpline(spline) { + return function(colors) { + var n = colors.length, + r = new Array(n), + g = new Array(n), + b = new Array(n), + i, color$$1; + for (i = 0; i < n; ++i) { + color$$1 = d3Color.rgb(colors[i]); + r[i] = color$$1.r || 0; + g[i] = color$$1.g || 0; + b[i] = color$$1.b || 0; + } + r = spline(r); + g = spline(g); + b = spline(b); + color$$1.opacity = 1; + return function(t) { + color$$1.r = r(t); + color$$1.g = g(t); + color$$1.b = b(t); + return color$$1 + ""; + }; + }; +} + +var rgbBasis = rgbSpline(basis$1); +var rgbBasisClosed = rgbSpline(basisClosed); + +var array = function(a, b) { + var nb = b ? b.length : 0, + na = a ? Math.min(nb, a.length) : 0, + x = new Array(nb), + c = new Array(nb), + i; + + for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]); + for (; i < nb; ++i) c[i] = b[i]; + + return function(t) { + for (i = 0; i < na; ++i) c[i] = x[i](t); + return c; + }; +}; + +var date = function(a, b) { + var d = new Date; + return a = +a, b -= a, function(t) { + return d.setTime(a + b * t), d; + }; +}; + +var number = function(a, b) { + return a = +a, b -= a, function(t) { + return a + b * t; + }; +}; + +var object = function(a, b) { + var i = {}, + c = {}, + k; + + if (a === null || typeof a !== "object") a = {}; + if (b === null || typeof b !== "object") b = {}; + + for (k in b) { + if (k in a) { + i[k] = value(a[k], b[k]); + } else { + c[k] = b[k]; + } + } + + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +}; + +var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g; +var reB = new RegExp(reA.source, "g"); + +function zero(b) { + return function() { + return b; + }; +} + +function one(b) { + return function(t) { + return b(t) + ""; + }; +} + +var string = function(a, b) { + var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = reA.exec(a)) + && (bm = reB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: number(am, bm)}); + } + bi = reB.lastIndex; + } + + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 ? (q[0] + ? one(q[0].x) + : zero(b)) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); +}; + +var value = function(a, b) { + var t = typeof b, c; + return b == null || t === "boolean" ? constant(b) + : (t === "number" ? number + : t === "string" ? ((c = d3Color.color(b)) ? (b = c, rgb$1) : string) + : b instanceof d3Color.color ? rgb$1 + : b instanceof Date ? date + : Array.isArray(b) ? array + : isNaN(b) ? object + : number)(a, b); +}; + +var round = function(a, b) { + return a = +a, b -= a, function(t) { + return Math.round(a + b * t); + }; +}; + +var degrees = 180 / Math.PI; + +var identity = { + translateX: 0, + translateY: 0, + rotate: 0, + skewX: 0, + scaleX: 1, + scaleY: 1 +}; + +var decompose = function(a, b, c, d, e, f) { + var scaleX, scaleY, skewX; + if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; + if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; + if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; + if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; + return { + translateX: e, + translateY: f, + rotate: Math.atan2(b, a) * degrees, + skewX: Math.atan(skewX) * degrees, + scaleX: scaleX, + scaleY: scaleY + }; +}; + +var cssNode; +var cssRoot; +var cssView; +var svgNode; + +function parseCss(value) { + if (value === "none") return identity; + if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; + cssNode.style.transform = value; + value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); + cssRoot.removeChild(cssNode); + value = value.slice(7, -1).split(","); + return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); +} + +function parseSvg(value) { + if (value == null) return identity; + if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); + svgNode.setAttribute("transform", value); + if (!(value = svgNode.transform.baseVal.consolidate())) return identity; + value = value.matrix; + return decompose(value.a, value.b, value.c, value.d, value.e, value.f); +} + +function interpolateTransform(parse, pxComma, pxParen, degParen) { + + function pop(s) { + return s.length ? s.pop() + " " : ""; + } + + function translate(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push("translate(", null, pxComma, null, pxParen); + q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)}); + } else if (xb || yb) { + s.push("translate(" + xb + pxComma + yb + pxParen); + } + } + + function rotate(a, b, s, q) { + if (a !== b) { + if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path + q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: number(a, b)}); + } else if (b) { + s.push(pop(s) + "rotate(" + b + degParen); + } + } + + function skewX(a, b, s, q) { + if (a !== b) { + q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: number(a, b)}); + } else if (b) { + s.push(pop(s) + "skewX(" + b + degParen); + } + } + + function scale(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push(pop(s) + "scale(", null, ",", null, ")"); + q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)}); + } else if (xb !== 1 || yb !== 1) { + s.push(pop(s) + "scale(" + xb + "," + yb + ")"); + } + } + + return function(a, b) { + var s = [], // string constants and placeholders + q = []; // number interpolators + a = parse(a), b = parse(b); + translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); + rotate(a.rotate, b.rotate, s, q); + skewX(a.skewX, b.skewX, s, q); + scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); + a = b = null; // gc + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; +} + +var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); +var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); + +var rho = Math.SQRT2; +var rho2 = 2; +var rho4 = 4; +var epsilon2 = 1e-12; + +function cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; +} + +function sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; +} + +function tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); +} + +// p0 = [ux0, uy0, w0] +// p1 = [ux1, uy1, w1] +var zoom = function(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2], + dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + i, + S; + + // Special case for u0 ≅ u1. + if (d2 < epsilon2) { + S = Math.log(w1 / w0) / rho; + i = function(t) { + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(rho * t * S) + ]; + }; + } + + // General case. + else { + var d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), + b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); + S = (r1 - r0) / rho; + i = function(t) { + var s = t * S, + coshr0 = cosh(r0), + u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / cosh(rho * s + r0) + ]; + }; + } + + i.duration = S * 1000; + + return i; +}; + +function hsl$1(hue$$1) { + return function(start, end) { + var h = hue$$1((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hsl$2 = hsl$1(hue); +var hslLong = hsl$1(nogamma); + +function lab$1(start, end) { + var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l), + a = nogamma(start.a, end.a), + b = nogamma(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.l = l(t); + start.a = a(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; +} + +function hcl$1(hue$$1) { + return function(start, end) { + var h = hue$$1((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h), + c = nogamma(start.c, end.c), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.c = c(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hcl$2 = hcl$1(hue); +var hclLong = hcl$1(nogamma); + +function cubehelix$1(hue$$1) { + return (function cubehelixGamma(y) { + y = +y; + + function cubehelix$$1(start, end) { + var h = hue$$1((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(Math.pow(t, y)); + start.opacity = opacity(t); + return start + ""; + }; + } + + cubehelix$$1.gamma = cubehelixGamma; + + return cubehelix$$1; + })(1); +} + +var cubehelix$2 = cubehelix$1(hue); +var cubehelixLong = cubehelix$1(nogamma); + +var quantize = function(interpolator, n) { + var samples = new Array(n); + for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); + return samples; +}; + +exports.interpolate = value; +exports.interpolateArray = array; +exports.interpolateBasis = basis$1; +exports.interpolateBasisClosed = basisClosed; +exports.interpolateDate = date; +exports.interpolateNumber = number; +exports.interpolateObject = object; +exports.interpolateRound = round; +exports.interpolateString = string; +exports.interpolateTransformCss = interpolateTransformCss; +exports.interpolateTransformSvg = interpolateTransformSvg; +exports.interpolateZoom = zoom; +exports.interpolateRgb = rgb$1; +exports.interpolateRgbBasis = rgbBasis; +exports.interpolateRgbBasisClosed = rgbBasisClosed; +exports.interpolateHsl = hsl$2; +exports.interpolateHslLong = hslLong; +exports.interpolateLab = lab$1; +exports.interpolateHcl = hcl$2; +exports.interpolateHclLong = hclLong; +exports.interpolateCubehelix = cubehelix$2; +exports.interpolateCubehelixLong = cubehelixLong; +exports.quantize = quantize; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{"d3-color":3}],7:[function(require,module,exports){ +// https://d3js.org/d3-scale/ Version 1.0.3. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-collection'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format'), require('d3-color')) : + typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) : + (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3)); +}(this, function (exports,d3Array,d3Collection,d3Interpolate,d3Format,d3Time,d3TimeFormat,d3Color) { 'use strict'; + + var array = Array.prototype; + + var map$1 = array.map; + var slice = array.slice; + + var implicit = {name: "implicit"}; + + function ordinal(range) { + var index = d3Collection.map(), + domain = [], + unknown = implicit; + + range = range == null ? [] : slice.call(range); + + function scale(d) { + var key = d + "", i = index.get(key); + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + return range[(i - 1) % range.length]; + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = d3Collection.map(); + var i = -1, n = _.length, d, key; + while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = slice.call(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return scale; + } + + function band() { + var scale = ordinal().unknown(undefined), + domain = scale.domain, + ordinalRange = scale.range, + range = [0, 1], + step, + bandwidth, + round = false, + paddingInner = 0, + paddingOuter = 0, + align = 0.5; + + delete scale.unknown; + + function rescale() { + var n = domain().length, + reverse = range[1] < range[0], + start = range[reverse - 0], + stop = range[1 - reverse]; + step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); + if (round) step = Math.floor(step); + start += (stop - start - step * (n - paddingInner)) * align; + bandwidth = step * (1 - paddingInner); + if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); + var values = d3Array.range(n).map(function(i) { return start + step * i; }); + return ordinalRange(reverse ? values.reverse() : values); + } + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.range = function(_) { + return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice(); + }; + + scale.rangeRound = function(_) { + return range = [+_[0], +_[1]], round = true, rescale(); + }; + + scale.bandwidth = function() { + return bandwidth; + }; + + scale.step = function() { + return step; + }; + + scale.round = function(_) { + return arguments.length ? (round = !!_, rescale()) : round; + }; + + scale.padding = function(_) { + return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; + }; + + scale.paddingInner = function(_) { + return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; + }; + + scale.paddingOuter = function(_) { + return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter; + }; + + scale.align = function(_) { + return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; + }; + + scale.copy = function() { + return band() + .domain(domain()) + .range(range) + .round(round) + .paddingInner(paddingInner) + .paddingOuter(paddingOuter) + .align(align); + }; + + return rescale(); + } + + function pointish(scale) { + var copy = scale.copy; + + scale.padding = scale.paddingOuter; + delete scale.paddingInner; + delete scale.paddingOuter; + + scale.copy = function() { + return pointish(copy()); + }; + + return scale; + } + + function point() { + return pointish(band().paddingInner(1)); + } + + function constant(x) { + return function() { + return x; + }; + } + + function number(x) { + return +x; + } + + var unit = [0, 1]; + + function deinterpolate(a, b) { + return (b -= (a = +a)) + ? function(x) { return (x - a) / b; } + : constant(b); + } + + function deinterpolateClamp(deinterpolate) { + return function(a, b) { + var d = deinterpolate(a = +a, b = +b); + return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); }; + }; + } + + function reinterpolateClamp(reinterpolate) { + return function(a, b) { + var r = reinterpolate(a = +a, b = +b); + return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); }; + }; + } + + function bimap(domain, range, deinterpolate, reinterpolate) { + var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; + if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0); + else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1); + return function(x) { return r0(d0(x)); }; + } + + function polymap(domain, range, deinterpolate, reinterpolate) { + var j = Math.min(domain.length, range.length) - 1, + d = new Array(j), + r = new Array(j), + i = -1; + + // Reverse descending domains. + if (domain[j] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + + while (++i < j) { + d[i] = deinterpolate(domain[i], domain[i + 1]); + r[i] = reinterpolate(range[i], range[i + 1]); + } + + return function(x) { + var i = d3Array.bisect(domain, x, 1, j) - 1; + return r[i](d[i](x)); + }; + } + + function copy(source, target) { + return target + .domain(source.domain()) + .range(source.range()) + .interpolate(source.interpolate()) + .clamp(source.clamp()); + } + + // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. + // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b]. + function continuous(deinterpolate$$, reinterpolate) { + var domain = unit, + range = unit, + interpolate = d3Interpolate.interpolate, + clamp = false, + piecewise, + output, + input; + + function rescale() { + piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; + output = input = null; + return scale; + } + + function scale(x) { + return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate)))(+x); + } + + scale.invert = function(y) { + return (input || (input = piecewise(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y); + }; + + scale.domain = function(_) { + return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = slice.call(_), rescale()) : range.slice(); + }; + + scale.rangeRound = function(_) { + return range = slice.call(_), interpolate = d3Interpolate.interpolateRound, rescale(); + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, rescale()) : clamp; + }; + + scale.interpolate = function(_) { + return arguments.length ? (interpolate = _, rescale()) : interpolate; + }; + + return rescale(); + } + + function tickFormat(domain, count, specifier) { + var start = domain[0], + stop = domain[domain.length - 1], + step = d3Array.tickStep(start, stop, count == null ? 10 : count), + precision; + specifier = d3Format.formatSpecifier(specifier == null ? ",f" : specifier); + switch (specifier.type) { + case "s": { + var value = Math.max(Math.abs(start), Math.abs(stop)); + if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision; + return d3Format.formatPrefix(specifier, value); + } + case "": + case "e": + case "g": + case "p": + case "r": { + if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); + break; + } + case "f": + case "%": { + if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; + break; + } + } + return d3Format.format(specifier); + } + + function linearish(scale) { + var domain = scale.domain; + + scale.ticks = function(count) { + var d = domain(); + return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count); + }; + + scale.tickFormat = function(count, specifier) { + return tickFormat(domain(), count, specifier); + }; + + scale.nice = function(count) { + var d = domain(), + i = d.length - 1, + n = count == null ? 10 : count, + start = d[0], + stop = d[i], + step = d3Array.tickStep(start, stop, n); + + if (step) { + step = d3Array.tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n); + d[0] = Math.floor(start / step) * step; + d[i] = Math.ceil(stop / step) * step; + domain(d); + } + + return scale; + }; + + return scale; + } + + function linear() { + var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber); + + scale.copy = function() { + return copy(scale, linear()); + }; + + return linearish(scale); + } + + function identity() { + var domain = [0, 1]; + + function scale(x) { + return +x; + } + + scale.invert = scale; + + scale.domain = scale.range = function(_) { + return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice(); + }; + + scale.copy = function() { + return identity().domain(domain); + }; + + return linearish(scale); + } + + function nice(domain, interval) { + domain = domain.slice(); + + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + t; + + if (x1 < x0) { + t = i0, i0 = i1, i1 = t; + t = x0, x0 = x1, x1 = t; + } + + domain[i0] = interval.floor(x0); + domain[i1] = interval.ceil(x1); + return domain; + } + + function deinterpolate$1(a, b) { + return (b = Math.log(b / a)) + ? function(x) { return Math.log(x / a) / b; } + : constant(b); + } + + function reinterpolate(a, b) { + return a < 0 + ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); } + : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); }; + } + + function pow10(x) { + return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; + } + + function powp(base) { + return base === 10 ? pow10 + : base === Math.E ? Math.exp + : function(x) { return Math.pow(base, x); }; + } + + function logp(base) { + return base === Math.E ? Math.log + : base === 10 && Math.log10 + || base === 2 && Math.log2 + || (base = Math.log(base), function(x) { return Math.log(x) / base; }); + } + + function reflect(f) { + return function(x) { + return -f(-x); + }; + } + + function log() { + var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]), + domain = scale.domain, + base = 10, + logs = logp(10), + pows = powp(10); + + function rescale() { + logs = logp(base), pows = powp(base); + if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows); + return scale; + } + + scale.base = function(_) { + return arguments.length ? (base = +_, rescale()) : base; + }; + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.ticks = function(count) { + var d = domain(), + u = d[0], + v = d[d.length - 1], + r; + + if (r = v < u) i = u, u = v, v = i; + + var i = logs(u), + j = logs(v), + p, + k, + t, + n = count == null ? 10 : +count, + z = []; + + if (!(base % 1) && j - i < n) { + i = Math.round(i) - 1, j = Math.round(j) + 1; + if (u > 0) for (; i < j; ++i) { + for (k = 1, p = pows(i); k < base; ++k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } else for (; i < j; ++i) { + for (k = base - 1, p = pows(i); k >= 1; --k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } + } else { + z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows); + } + + return r ? z.reverse() : z; + }; + + scale.tickFormat = function(count, specifier) { + if (specifier == null) specifier = base === 10 ? ".0e" : ","; + if (typeof specifier !== "function") specifier = d3Format.format(specifier); + if (count === Infinity) return specifier; + if (count == null) count = 10; + var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? + return function(d) { + var i = d / pows(Math.round(logs(d))); + if (i * base < base - 0.5) i *= base; + return i <= k ? specifier(d) : ""; + }; + }; + + scale.nice = function() { + return domain(nice(domain(), { + floor: function(x) { return pows(Math.floor(logs(x))); }, + ceil: function(x) { return pows(Math.ceil(logs(x))); } + })); + }; + + scale.copy = function() { + return copy(scale, log().base(base)); + }; + + return scale; + } + + function raise(x, exponent) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); + } + + function pow() { + var exponent = 1, + scale = continuous(deinterpolate, reinterpolate), + domain = scale.domain; + + function deinterpolate(a, b) { + return (b = raise(b, exponent) - (a = raise(a, exponent))) + ? function(x) { return (raise(x, exponent) - a) / b; } + : constant(b); + } + + function reinterpolate(a, b) { + b = raise(b, exponent) - (a = raise(a, exponent)); + return function(t) { return raise(a + b * t, 1 / exponent); }; + } + + scale.exponent = function(_) { + return arguments.length ? (exponent = +_, domain(domain())) : exponent; + }; + + scale.copy = function() { + return copy(scale, pow().exponent(exponent)); + }; + + return linearish(scale); + } + + function sqrt() { + return pow().exponent(0.5); + } + + function quantile$1() { + var domain = [], + range = [], + thresholds = []; + + function rescale() { + var i = 0, n = Math.max(1, range.length); + thresholds = new Array(n - 1); + while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n); + return scale; + } + + function scale(x) { + if (!isNaN(x = +x)) return range[d3Array.bisect(thresholds, x)]; + } + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] : [ + i > 0 ? thresholds[i - 1] : domain[0], + i < thresholds.length ? thresholds[i] : domain[domain.length - 1] + ]; + }; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(d3Array.ascending); + return rescale(); + }; + + scale.range = function(_) { + return arguments.length ? (range = slice.call(_), rescale()) : range.slice(); + }; + + scale.quantiles = function() { + return thresholds.slice(); + }; + + scale.copy = function() { + return quantile$1() + .domain(domain) + .range(range); + }; + + return scale; + } + + function quantize() { + var x0 = 0, + x1 = 1, + n = 1, + domain = [0.5], + range = [0, 1]; + + function scale(x) { + if (x <= x) return range[d3Array.bisect(domain, x, 0, n)]; + } + + function rescale() { + var i = -1; + domain = new Array(n); + while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); + return scale; + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; + }; + + scale.range = function(_) { + return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] + : i < 1 ? [x0, domain[0]] + : i >= n ? [domain[n - 1], x1] + : [domain[i - 1], domain[i]]; + }; + + scale.copy = function() { + return quantize() + .domain([x0, x1]) + .range(range); + }; + + return linearish(scale); + } + + function threshold() { + var domain = [0.5], + range = [0, 1], + n = 1; + + function scale(x) { + if (x <= x) return range[d3Array.bisect(domain, x, 0, n)]; + } + + scale.domain = function(_) { + return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return [domain[i - 1], domain[i]]; + }; + + scale.copy = function() { + return threshold() + .domain(domain) + .range(range); + }; + + return scale; + } + + var durationSecond = 1000; + var durationMinute = durationSecond * 60; + var durationHour = durationMinute * 60; + var durationDay = durationHour * 24; + var durationWeek = durationDay * 7; + var durationMonth = durationDay * 30; + var durationYear = durationDay * 365; + function date(t) { + return new Date(t); + } + + function number$1(t) { + return t instanceof Date ? +t : +new Date(+t); + } + + function calendar(year, month, week, day, hour, minute, second, millisecond, format) { + var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber), + invert = scale.invert, + domain = scale.domain; + + var formatMillisecond = format(".%L"), + formatSecond = format(":%S"), + formatMinute = format("%I:%M"), + formatHour = format("%I %p"), + formatDay = format("%a %d"), + formatWeek = format("%b %d"), + formatMonth = format("%B"), + formatYear = format("%Y"); + + var tickIntervals = [ + [second, 1, durationSecond], + [second, 5, 5 * durationSecond], + [second, 15, 15 * durationSecond], + [second, 30, 30 * durationSecond], + [minute, 1, durationMinute], + [minute, 5, 5 * durationMinute], + [minute, 15, 15 * durationMinute], + [minute, 30, 30 * durationMinute], + [ hour, 1, durationHour ], + [ hour, 3, 3 * durationHour ], + [ hour, 6, 6 * durationHour ], + [ hour, 12, 12 * durationHour ], + [ day, 1, durationDay ], + [ day, 2, 2 * durationDay ], + [ week, 1, durationWeek ], + [ month, 1, durationMonth ], + [ month, 3, 3 * durationMonth ], + [ year, 1, durationYear ] + ]; + + function tickFormat(date) { + return (second(date) < date ? formatMillisecond + : minute(date) < date ? formatSecond + : hour(date) < date ? formatMinute + : day(date) < date ? formatHour + : month(date) < date ? (week(date) < date ? formatDay : formatWeek) + : year(date) < date ? formatMonth + : formatYear)(date); + } + + function tickInterval(interval, start, stop, step) { + if (interval == null) interval = 10; + + // If a desired tick count is specified, pick a reasonable tick interval + // based on the extent of the domain and a rough estimate of tick size. + // Otherwise, assume interval is already a time interval and use it. + if (typeof interval === "number") { + var target = Math.abs(stop - start) / interval, + i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target); + if (i === tickIntervals.length) { + step = d3Array.tickStep(start / durationYear, stop / durationYear, interval); + interval = year; + } else if (i) { + i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; + step = i[1]; + interval = i[0]; + } else { + step = d3Array.tickStep(start, stop, interval); + interval = millisecond; + } + } + + return step == null ? interval : interval.every(step); + } + + scale.invert = function(y) { + return new Date(invert(y)); + }; + + scale.domain = function(_) { + return arguments.length ? domain(map$1.call(_, number$1)) : domain().map(date); + }; + + scale.ticks = function(interval, step) { + var d = domain(), + t0 = d[0], + t1 = d[d.length - 1], + r = t1 < t0, + t; + if (r) t = t0, t0 = t1, t1 = t; + t = tickInterval(interval, t0, t1, step); + t = t ? t.range(t0, t1 + 1) : []; // inclusive stop + return r ? t.reverse() : t; + }; + + scale.tickFormat = function(count, specifier) { + return specifier == null ? tickFormat : format(specifier); + }; + + scale.nice = function(interval, step) { + var d = domain(); + return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) + ? domain(nice(d, interval)) + : scale; + }; + + scale.copy = function() { + return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); + }; + + return scale; + } + + function time() { + return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]); + } + + function utcTime() { + return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]); + } + + function colors(s) { + return s.match(/.{6}/g).map(function(x) { + return "#" + x; + }); + } + + var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + + var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"); + + var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"); + + var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"); + + var cubehelix$1 = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0)); + + var warm = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8)); + + var cool = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8)); + + var rainbow = d3Color.cubehelix(); + + function rainbow$1(t) { + if (t < 0 || t > 1) t -= Math.floor(t); + var ts = Math.abs(t - 0.5); + rainbow.h = 360 * t - 100; + rainbow.s = 1.5 - 1.5 * ts; + rainbow.l = 0.8 - 0.9 * ts; + return rainbow + ""; + } + + function ramp(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; + } + + var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")); + + var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); + + var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); + + var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); + + function sequential(interpolator) { + var x0 = 0, + x1 = 1, + clamp = false; + + function scale(x) { + var t = (x - x0) / (x1 - x0); + return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); + } + + scale.domain = function(_) { + return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.copy = function() { + return sequential(interpolator).domain([x0, x1]).clamp(clamp); + }; + + return linearish(scale); + } + + exports.scaleBand = band; + exports.scalePoint = point; + exports.scaleIdentity = identity; + exports.scaleLinear = linear; + exports.scaleLog = log; + exports.scaleOrdinal = ordinal; + exports.scaleImplicit = implicit; + exports.scalePow = pow; + exports.scaleSqrt = sqrt; + exports.scaleQuantile = quantile$1; + exports.scaleQuantize = quantize; + exports.scaleThreshold = threshold; + exports.scaleTime = time; + exports.scaleUtc = utcTime; + exports.schemeCategory10 = category10; + exports.schemeCategory20b = category20b; + exports.schemeCategory20c = category20c; + exports.schemeCategory20 = category20; + exports.interpolateCubehelixDefault = cubehelix$1; + exports.interpolateRainbow = rainbow$1; + exports.interpolateWarm = warm; + exports.interpolateCool = cool; + exports.interpolateViridis = viridis; + exports.interpolateMagma = magma; + exports.interpolateInferno = inferno; + exports.interpolatePlasma = plasma; + exports.scaleSequential = sequential; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +},{"d3-array":1,"d3-collection":2,"d3-color":3,"d3-format":5,"d3-interpolate":6,"d3-time":10,"d3-time-format":9}],8:[function(require,module,exports){ +// https://d3js.org/d3-selection/ Version 1.0.2. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, function (exports) { 'use strict'; + + var xhtml = "http://www.w3.org/1999/xhtml"; + + var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" + }; + + function namespace(name) { + var prefix = name += "", i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; + } + + function creatorInherit(name) { + return function() { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml + ? document.createElement(name) + : document.createElementNS(uri, name); + }; + } + + function creatorFixed(fullname) { + return function() { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; + } + + function creator(name) { + var fullname = namespace(name); + return (fullname.local + ? creatorFixed + : creatorInherit)(fullname); + } + + var nextId = 0; + + function local() { + return new Local; + } + + function Local() { + this._ = "@" + (++nextId).toString(36); + } + + Local.prototype = local.prototype = { + constructor: Local, + get: function(node) { + var id = this._; + while (!(id in node)) if (!(node = node.parentNode)) return; + return node[id]; + }, + set: function(node, value) { + return node[this._] = value; + }, + remove: function(node) { + return this._ in node && delete node[this._]; + }, + toString: function() { + return this._; + } + }; + + var matcher = function(selector) { + return function() { + return this.matches(selector); + }; + }; + + if (typeof document !== "undefined") { + var element = document.documentElement; + if (!element.matches) { + var vendorMatches = element.webkitMatchesSelector + || element.msMatchesSelector + || element.mozMatchesSelector + || element.oMatchesSelector; + matcher = function(selector) { + return function() { + return vendorMatches.call(this, selector); + }; + }; + } + } + + var matcher$1 = matcher; + + var filterEvents = {}; + + exports.event = null; + + if (typeof document !== "undefined") { + var element$1 = document.documentElement; + if (!("onmouseenter" in element$1)) { + filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; + } + } + + function filterContextListener(listener, index, group) { + listener = contextListener(listener, index, group); + return function(event) { + var related = event.relatedTarget; + if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { + listener.call(this, event); + } + }; + } + + function contextListener(listener, index, group) { + return function(event1) { + var event0 = exports.event; // Events can be reentrant (e.g., focus). + exports.event = event1; + try { + listener.call(this, this.__data__, index, group); + } finally { + exports.event = event0; + } + }; + } + + function parseTypenames(typenames) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return {type: t, name: name}; + }); + } + + function onRemove(typename) { + return function() { + var on = this.__on; + if (!on) return; + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + } else { + on[++i] = o; + } + } + if (++i) on.length = i; + else delete this.__on; + }; + } + + function onAdd(typename, value, capture) { + var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; + return function(d, i, group) { + var on = this.__on, o, listener = wrap(value, i, group); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.capture); + this.addEventListener(o.type, o.listener = listener, o.capture = capture); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, capture); + o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; + if (!on) this.__on = [o]; + else on.push(o); + }; + } + + function selection_on(typename, value, capture) { + var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; + + if (arguments.length < 2) { + var on = this.node().__on; + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + if (capture == null) capture = false; + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); + return this; + } + + function customEvent(event1, listener, that, args) { + var event0 = exports.event; + event1.sourceEvent = exports.event; + exports.event = event1; + try { + return listener.apply(that, args); + } finally { + exports.event = event0; + } + } + + function sourceEvent() { + var current = exports.event, source; + while (source = current.sourceEvent) current = source; + return current; + } + + function point(node, event) { + var svg = node.ownerSVGElement || node; + + if (svg.createSVGPoint) { + var point = svg.createSVGPoint(); + point.x = event.clientX, point.y = event.clientY; + point = point.matrixTransform(node.getScreenCTM().inverse()); + return [point.x, point.y]; + } + + var rect = node.getBoundingClientRect(); + return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; + } + + function mouse(node) { + var event = sourceEvent(); + if (event.changedTouches) event = event.changedTouches[0]; + return point(node, event); + } + + function none() {} + + function selector(selector) { + return selector == null ? none : function() { + return this.querySelector(selector); + }; + } + + function selection_select(select) { + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new Selection(subgroups, this._parents); + } + + function empty() { + return []; + } + + function selectorAll(selector) { + return selector == null ? empty : function() { + return this.querySelectorAll(selector); + }; + } + + function selection_selectAll(select) { + if (typeof select !== "function") select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new Selection(subgroups, parents); + } + + function selection_filter(match) { + if (typeof match !== "function") match = matcher$1(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Selection(subgroups, this._parents); + } + + function sparse(update) { + return new Array(update.length); + } + + function selection_enter() { + return new Selection(this._enter || this._groups.map(sparse), this._parents); + } + + function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; + } + + EnterNode.prototype = { + constructor: EnterNode, + appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, + insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, + querySelector: function(selector) { return this._parent.querySelector(selector); }, + querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } + }; + + function constant(x) { + return function() { + return x; + }; + } + + var keyPrefix = "$"; // Protect against keys like “__proto__”. + + function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; + + // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Put any non-null nodes that don’t fit into exit. + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } + } + + function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = {}, + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; + + // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); + if (keyValue in nodeByKeyValue) { + exit[i] = node; + } else { + nodeByKeyValue[keyValue] = node; + } + } + } + + // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + for (i = 0; i < dataLength; ++i) { + keyValue = keyPrefix + key.call(parent, data[i], i, data); + if (node = nodeByKeyValue[keyValue]) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue[keyValue] = null; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } + + // Add any remaining nodes that were not bound to data to exit. + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { + exit[i] = node; + } + } + } + + function selection_data(value, key) { + if (!value) { + data = new Array(this.size()), j = -1; + this.each(function(d) { data[++j] = d; }); + return data; + } + + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + + if (typeof value !== "function") value = constant(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = value.call(parent, parent && parent.__data__, j, parents), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); + + // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + previous._next = next || null; + } + } + } + + update = new Selection(update, parents); + update._enter = enter; + update._exit = exit; + return update; + } + + function selection_exit() { + return new Selection(this._exit || this._groups.map(sparse), this._parents); + } + + function selection_merge(selection) { + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Selection(merges, this._parents); + } + + function selection_order() { + + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; + } + + function selection_sort(compare) { + if (!compare) compare = ascending; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + sortgroup.sort(compareNode); + } + + return new Selection(sortgroups, this._parents).order(); + } + + function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } + + function selection_call() { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; + } + + function selection_nodes() { + var nodes = new Array(this.size()), i = -1; + this.each(function() { nodes[++i] = this; }); + return nodes; + } + + function selection_node() { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; + } + + function selection_size() { + var size = 0; + this.each(function() { ++size; }); + return size; + } + + function selection_empty() { + return !this.node(); + } + + function selection_each(callback) { + + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; + } + + function attrRemove(name) { + return function() { + this.removeAttribute(name); + }; + } + + function attrRemoveNS(fullname) { + return function() { + this.removeAttributeNS(fullname.space, fullname.local); + }; + } + + function attrConstant(name, value) { + return function() { + this.setAttribute(name, value); + }; + } + + function attrConstantNS(fullname, value) { + return function() { + this.setAttributeNS(fullname.space, fullname.local, value); + }; + } + + function attrFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name); + else this.setAttribute(name, v); + }; + } + + function attrFunctionNS(fullname, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local); + else this.setAttributeNS(fullname.space, fullname.local, v); + }; + } + + function selection_attr(name, value) { + var fullname = namespace(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local + ? node.getAttributeNS(fullname.space, fullname.local) + : node.getAttribute(fullname); + } + + return this.each((value == null + ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" + ? (fullname.local ? attrFunctionNS : attrFunction) + : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); + } + + function defaultView(node) { + return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node + || (node.document && node) // node is a Window + || node.defaultView; // node is a Document + } + + function styleRemove(name) { + return function() { + this.style.removeProperty(name); + }; + } + + function styleConstant(name, value, priority) { + return function() { + this.style.setProperty(name, value, priority); + }; + } + + function styleFunction(name, value, priority) { + return function() { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name); + else this.style.setProperty(name, v, priority); + }; + } + + function selection_style(name, value, priority) { + var node; + return arguments.length > 1 + ? this.each((value == null + ? styleRemove : typeof value === "function" + ? styleFunction + : styleConstant)(name, value, priority == null ? "" : priority)) + : defaultView(node = this.node()) + .getComputedStyle(node, null) + .getPropertyValue(name); + } + + function propertyRemove(name) { + return function() { + delete this[name]; + }; + } + + function propertyConstant(name, value) { + return function() { + this[name] = value; + }; + } + + function propertyFunction(name, value) { + return function() { + var v = value.apply(this, arguments); + if (v == null) delete this[name]; + else this[name] = v; + }; + } + + function selection_property(name, value) { + return arguments.length > 1 + ? this.each((value == null + ? propertyRemove : typeof value === "function" + ? propertyFunction + : propertyConstant)(name, value)) + : this.node()[name]; + } + + function classArray(string) { + return string.trim().split(/^|\s+/); + } + + function classList(node) { + return node.classList || new ClassList(node); + } + + function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); + } + + ClassList.prototype = { + add: function(name) { + var i = this._names.indexOf(name); + if (i < 0) { + this._names.push(name); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function(name) { + var i = this._names.indexOf(name); + if (i >= 0) { + this._names.splice(i, 1); + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function(name) { + return this._names.indexOf(name) >= 0; + } + }; + + function classedAdd(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.add(names[i]); + } + + function classedRemove(node, names) { + var list = classList(node), i = -1, n = names.length; + while (++i < n) list.remove(names[i]); + } + + function classedTrue(names) { + return function() { + classedAdd(this, names); + }; + } + + function classedFalse(names) { + return function() { + classedRemove(this, names); + }; + } + + function classedFunction(names, value) { + return function() { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; + } + + function selection_classed(name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), i = -1, n = names.length; + while (++i < n) if (!list.contains(names[i])) return false; + return true; + } + + return this.each((typeof value === "function" + ? classedFunction : value + ? classedTrue + : classedFalse)(names, value)); + } + + function textRemove() { + this.textContent = ""; + } + + function textConstant(value) { + return function() { + this.textContent = value; + }; + } + + function textFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; + } + + function selection_text(value) { + return arguments.length + ? this.each(value == null + ? textRemove : (typeof value === "function" + ? textFunction + : textConstant)(value)) + : this.node().textContent; + } + + function htmlRemove() { + this.innerHTML = ""; + } + + function htmlConstant(value) { + return function() { + this.innerHTML = value; + }; + } + + function htmlFunction(value) { + return function() { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; + } + + function selection_html(value) { + return arguments.length + ? this.each(value == null + ? htmlRemove : (typeof value === "function" + ? htmlFunction + : htmlConstant)(value)) + : this.node().innerHTML; + } + + function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); + } + + function selection_raise() { + return this.each(raise); + } + + function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); + } + + function selection_lower() { + return this.each(lower); + } + + function selection_append(name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function() { + return this.appendChild(create.apply(this, arguments)); + }); + } + + function constantNull() { + return null; + } + + function selection_insert(name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function() { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); + } + + function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + } + + function selection_remove() { + return this.each(remove); + } + + function selection_datum(value) { + return arguments.length + ? this.property("__data__", value) + : this.node().__data__; + } + + function dispatchEvent(node, type, params) { + var window = defaultView(node), + event = window.CustomEvent; + + if (event) { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; + else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); + } + + function dispatchConstant(type, params) { + return function() { + return dispatchEvent(this, type, params); + }; + } + + function dispatchFunction(type, params) { + return function() { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; + } + + function selection_dispatch(type, params) { + return this.each((typeof params === "function" + ? dispatchFunction + : dispatchConstant)(type, params)); + } + + var root = [null]; + + function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; + } + + function selection() { + return new Selection([[document.documentElement]], root); + } + + Selection.prototype = selection.prototype = { + constructor: Selection, + select: selection_select, + selectAll: selection_selectAll, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + merge: selection_merge, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch + }; + + function select(selector) { + return typeof selector === "string" + ? new Selection([[document.querySelector(selector)]], [document.documentElement]) + : new Selection([[selector]], root); + } + + function selectAll(selector) { + return typeof selector === "string" + ? new Selection([document.querySelectorAll(selector)], [document.documentElement]) + : new Selection([selector == null ? [] : selector], root); + } + + function touch(node, touches, identifier) { + if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; + + for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { + if ((touch = touches[i]).identifier === identifier) { + return point(node, touch); + } + } + + return null; + } + + function touches(node, touches) { + if (touches == null) touches = sourceEvent().touches; + + for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { + points[i] = point(node, touches[i]); + } + + return points; + } + + exports.creator = creator; + exports.local = local; + exports.matcher = matcher$1; + exports.mouse = mouse; + exports.namespace = namespace; + exports.namespaces = namespaces; + exports.select = select; + exports.selectAll = selectAll; + exports.selection = selection; + exports.selector = selector; + exports.selectorAll = selectorAll; + exports.touch = touch; + exports.touches = touches; + exports.window = defaultView; + exports.customEvent = customEvent; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); +},{}],9:[function(require,module,exports){ +// https://d3js.org/d3-time-format/ Version 2.0.3. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-time')) : + typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) : + (factory((global.d3 = global.d3 || {}),global.d3)); +}(this, (function (exports,d3Time) { 'use strict'; + +function localDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); + date.setFullYear(d.y); + return date; + } + return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); +} + +function utcDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); + date.setUTCFullYear(d.y); + return date; + } + return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); +} + +function newYear(y) { + return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; +} + +function formatLocale(locale) { + var locale_dateTime = locale.dateTime, + locale_date = locale.date, + locale_time = locale.time, + locale_periods = locale.periods, + locale_weekdays = locale.days, + locale_shortWeekdays = locale.shortDays, + locale_months = locale.months, + locale_shortMonths = locale.shortMonths; + + var periodRe = formatRe(locale_periods), + periodLookup = formatLookup(locale_periods), + weekdayRe = formatRe(locale_weekdays), + weekdayLookup = formatLookup(locale_weekdays), + shortWeekdayRe = formatRe(locale_shortWeekdays), + shortWeekdayLookup = formatLookup(locale_shortWeekdays), + monthRe = formatRe(locale_months), + monthLookup = formatLookup(locale_months), + shortMonthRe = formatRe(locale_shortMonths), + shortMonthLookup = formatLookup(locale_shortMonths); + + var formats = { + "a": formatShortWeekday, + "A": formatWeekday, + "b": formatShortMonth, + "B": formatMonth, + "c": null, + "d": formatDayOfMonth, + "e": formatDayOfMonth, + "H": formatHour24, + "I": formatHour12, + "j": formatDayOfYear, + "L": formatMilliseconds, + "m": formatMonthNumber, + "M": formatMinutes, + "p": formatPeriod, + "S": formatSeconds, + "U": formatWeekNumberSunday, + "w": formatWeekdayNumber, + "W": formatWeekNumberMonday, + "x": null, + "X": null, + "y": formatYear, + "Y": formatFullYear, + "Z": formatZone, + "%": formatLiteralPercent + }; + + var utcFormats = { + "a": formatUTCShortWeekday, + "A": formatUTCWeekday, + "b": formatUTCShortMonth, + "B": formatUTCMonth, + "c": null, + "d": formatUTCDayOfMonth, + "e": formatUTCDayOfMonth, + "H": formatUTCHour24, + "I": formatUTCHour12, + "j": formatUTCDayOfYear, + "L": formatUTCMilliseconds, + "m": formatUTCMonthNumber, + "M": formatUTCMinutes, + "p": formatUTCPeriod, + "S": formatUTCSeconds, + "U": formatUTCWeekNumberSunday, + "w": formatUTCWeekdayNumber, + "W": formatUTCWeekNumberMonday, + "x": null, + "X": null, + "y": formatUTCYear, + "Y": formatUTCFullYear, + "Z": formatUTCZone, + "%": formatLiteralPercent + }; + + var parses = { + "a": parseShortWeekday, + "A": parseWeekday, + "b": parseShortMonth, + "B": parseMonth, + "c": parseLocaleDateTime, + "d": parseDayOfMonth, + "e": parseDayOfMonth, + "H": parseHour24, + "I": parseHour24, + "j": parseDayOfYear, + "L": parseMilliseconds, + "m": parseMonthNumber, + "M": parseMinutes, + "p": parsePeriod, + "S": parseSeconds, + "U": parseWeekNumberSunday, + "w": parseWeekdayNumber, + "W": parseWeekNumberMonday, + "x": parseLocaleDate, + "X": parseLocaleTime, + "y": parseYear, + "Y": parseFullYear, + "Z": parseZone, + "%": parseLiteralPercent + }; + + // These recursive directive definitions must be deferred. + formats.x = newFormat(locale_date, formats); + formats.X = newFormat(locale_time, formats); + formats.c = newFormat(locale_dateTime, formats); + utcFormats.x = newFormat(locale_date, utcFormats); + utcFormats.X = newFormat(locale_time, utcFormats); + utcFormats.c = newFormat(locale_dateTime, utcFormats); + + function newFormat(specifier, formats) { + return function(date) { + var string = [], + i = -1, + j = 0, + n = specifier.length, + c, + pad, + format; + + if (!(date instanceof Date)) date = new Date(+date); + + while (++i < n) { + if (specifier.charCodeAt(i) === 37) { + string.push(specifier.slice(j, i)); + if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); + else pad = c === "e" ? " " : "0"; + if (format = formats[c]) c = format(date, pad); + string.push(c); + j = i + 1; + } + } + + string.push(specifier.slice(j, i)); + return string.join(""); + }; + } + + function newParse(specifier, newDate) { + return function(string) { + var d = newYear(1900), + i = parseSpecifier(d, specifier, string += "", 0); + if (i != string.length) return null; + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + // Convert day-of-week and week-of-year to day-of-year. + if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "W" in d ? 1 : 0; + var day = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); + d.m = 0; + d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; + } + + // If a time zone is specified, all fields are interpreted as UTC and then + // offset according to the specified time zone. + if ("Z" in d) { + d.H += d.Z / 100 | 0; + d.M += d.Z % 100; + return utcDate(d); + } + + // Otherwise, all fields are in local time. + return newDate(d); + }; + } + + function parseSpecifier(d, specifier, string, j) { + var i = 0, + n = specifier.length, + m = string.length, + c, + parse; + + while (i < n) { + if (j >= m) return -1; + c = specifier.charCodeAt(i++); + if (c === 37) { + c = specifier.charAt(i++); + parse = parses[c in pads ? specifier.charAt(i++) : c]; + if (!parse || ((j = parse(d, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + + return j; + } + + function parsePeriod(d, string, i) { + var n = periodRe.exec(string.slice(i)); + return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortWeekday(d, string, i) { + var n = shortWeekdayRe.exec(string.slice(i)); + return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseWeekday(d, string, i) { + var n = weekdayRe.exec(string.slice(i)); + return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortMonth(d, string, i) { + var n = shortMonthRe.exec(string.slice(i)); + return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseMonth(d, string, i) { + var n = monthRe.exec(string.slice(i)); + return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseLocaleDateTime(d, string, i) { + return parseSpecifier(d, locale_dateTime, string, i); + } + + function parseLocaleDate(d, string, i) { + return parseSpecifier(d, locale_date, string, i); + } + + function parseLocaleTime(d, string, i) { + return parseSpecifier(d, locale_time, string, i); + } + + function formatShortWeekday(d) { + return locale_shortWeekdays[d.getDay()]; + } + + function formatWeekday(d) { + return locale_weekdays[d.getDay()]; + } + + function formatShortMonth(d) { + return locale_shortMonths[d.getMonth()]; + } + + function formatMonth(d) { + return locale_months[d.getMonth()]; + } + + function formatPeriod(d) { + return locale_periods[+(d.getHours() >= 12)]; + } + + function formatUTCShortWeekday(d) { + return locale_shortWeekdays[d.getUTCDay()]; + } + + function formatUTCWeekday(d) { + return locale_weekdays[d.getUTCDay()]; + } + + function formatUTCShortMonth(d) { + return locale_shortMonths[d.getUTCMonth()]; + } + + function formatUTCMonth(d) { + return locale_months[d.getUTCMonth()]; + } + + function formatUTCPeriod(d) { + return locale_periods[+(d.getUTCHours() >= 12)]; + } + + return { + format: function(specifier) { + var f = newFormat(specifier += "", formats); + f.toString = function() { return specifier; }; + return f; + }, + parse: function(specifier) { + var p = newParse(specifier += "", localDate); + p.toString = function() { return specifier; }; + return p; + }, + utcFormat: function(specifier) { + var f = newFormat(specifier += "", utcFormats); + f.toString = function() { return specifier; }; + return f; + }, + utcParse: function(specifier) { + var p = newParse(specifier, utcDate); + p.toString = function() { return specifier; }; + return p; + } + }; +} + +var pads = {"-": "", "_": " ", "0": "0"}; +var numberRe = /^\s*\d+/; +var percentRe = /^%/; +var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; + +function pad(value, fill, width) { + var sign = value < 0 ? "-" : "", + string = (sign ? -value : value) + "", + length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); +} + +function requote(s) { + return s.replace(requoteRe, "\\$&"); +} + +function formatRe(names) { + return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); +} + +function formatLookup(names) { + var map = {}, i = -1, n = names.length; + while (++i < n) map[names[i].toLowerCase()] = i; + return map; +} + +function parseWeekdayNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.w = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.U = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.W = +n[0], i + n[0].length) : -1; +} + +function parseFullYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 4)); + return n ? (d.y = +n[0], i + n[0].length) : -1; +} + +function parseYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; +} + +function parseZone(d, string, i) { + var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6)); + return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; +} + +function parseMonthNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.m = n[0] - 1, i + n[0].length) : -1; +} + +function parseDayOfMonth(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.d = +n[0], i + n[0].length) : -1; +} + +function parseDayOfYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; +} + +function parseHour24(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.H = +n[0], i + n[0].length) : -1; +} + +function parseMinutes(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.M = +n[0], i + n[0].length) : -1; +} + +function parseSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.S = +n[0], i + n[0].length) : -1; +} + +function parseMilliseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.L = +n[0], i + n[0].length) : -1; +} + +function parseLiteralPercent(d, string, i) { + var n = percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; +} + +function formatDayOfMonth(d, p) { + return pad(d.getDate(), p, 2); +} + +function formatHour24(d, p) { + return pad(d.getHours(), p, 2); +} + +function formatHour12(d, p) { + return pad(d.getHours() % 12 || 12, p, 2); +} + +function formatDayOfYear(d, p) { + return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3); +} + +function formatMilliseconds(d, p) { + return pad(d.getMilliseconds(), p, 3); +} + +function formatMonthNumber(d, p) { + return pad(d.getMonth() + 1, p, 2); +} + +function formatMinutes(d, p) { + return pad(d.getMinutes(), p, 2); +} + +function formatSeconds(d, p) { + return pad(d.getSeconds(), p, 2); +} + +function formatWeekNumberSunday(d, p) { + return pad(d3Time.timeSunday.count(d3Time.timeYear(d), d), p, 2); +} + +function formatWeekdayNumber(d) { + return d.getDay(); +} + +function formatWeekNumberMonday(d, p) { + return pad(d3Time.timeMonday.count(d3Time.timeYear(d), d), p, 2); +} + +function formatYear(d, p) { + return pad(d.getFullYear() % 100, p, 2); +} + +function formatFullYear(d, p) { + return pad(d.getFullYear() % 10000, p, 4); +} + +function formatZone(d) { + var z = d.getTimezoneOffset(); + return (z > 0 ? "-" : (z *= -1, "+")) + + pad(z / 60 | 0, "0", 2) + + pad(z % 60, "0", 2); +} + +function formatUTCDayOfMonth(d, p) { + return pad(d.getUTCDate(), p, 2); +} + +function formatUTCHour24(d, p) { + return pad(d.getUTCHours(), p, 2); +} + +function formatUTCHour12(d, p) { + return pad(d.getUTCHours() % 12 || 12, p, 2); +} + +function formatUTCDayOfYear(d, p) { + return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3); +} + +function formatUTCMilliseconds(d, p) { + return pad(d.getUTCMilliseconds(), p, 3); +} + +function formatUTCMonthNumber(d, p) { + return pad(d.getUTCMonth() + 1, p, 2); +} + +function formatUTCMinutes(d, p) { + return pad(d.getUTCMinutes(), p, 2); +} + +function formatUTCSeconds(d, p) { + return pad(d.getUTCSeconds(), p, 2); +} + +function formatUTCWeekNumberSunday(d, p) { + return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2); +} + +function formatUTCWeekdayNumber(d) { + return d.getUTCDay(); +} + +function formatUTCWeekNumberMonday(d, p) { + return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2); +} + +function formatUTCYear(d, p) { + return pad(d.getUTCFullYear() % 100, p, 2); +} + +function formatUTCFullYear(d, p) { + return pad(d.getUTCFullYear() % 10000, p, 4); +} + +function formatUTCZone() { + return "+0000"; +} + +function formatLiteralPercent() { + return "%"; +} + +var locale$1; + + + + + +defaultLocale({ + dateTime: "%x, %X", + date: "%-m/%-d/%Y", + time: "%-I:%M:%S %p", + periods: ["AM", "PM"], + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +}); + +function defaultLocale(definition) { + locale$1 = formatLocale(definition); + exports.timeFormat = locale$1.format; + exports.timeParse = locale$1.parse; + exports.utcFormat = locale$1.utcFormat; + exports.utcParse = locale$1.utcParse; + return locale$1; +} + +var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; + +function formatIsoNative(date) { + return date.toISOString(); +} + +var formatIso = Date.prototype.toISOString + ? formatIsoNative + : exports.utcFormat(isoSpecifier); + +function parseIsoNative(string) { + var date = new Date(string); + return isNaN(date) ? null : date; +} + +var parseIso = +new Date("2000-01-01T00:00:00.000Z") + ? parseIsoNative + : exports.utcParse(isoSpecifier); + +exports.timeFormatDefaultLocale = defaultLocale; +exports.timeFormatLocale = formatLocale; +exports.isoFormat = formatIso; +exports.isoParse = parseIso; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{"d3-time":10}],10:[function(require,module,exports){ +// https://d3js.org/d3-time/ Version 1.0.4. Copyright 2016 Mike Bostock. +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.d3 = global.d3 || {}))); +}(this, (function (exports) { 'use strict'; + +var t0 = new Date; +var t1 = new Date; + +function newInterval(floori, offseti, count, field) { + + function interval(date) { + return floori(date = new Date(+date)), date; + } + + interval.floor = interval; + + interval.ceil = function(date) { + return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; + }; + + interval.round = function(date) { + var d0 = interval(date), + d1 = interval.ceil(date); + return date - d0 < d1 - date ? d0 : d1; + }; + + interval.offset = function(date, step) { + return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; + }; + + interval.range = function(start, stop, step) { + var range = []; + start = interval.ceil(start); + step = step == null ? 1 : Math.floor(step); + if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date + do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop) + return range; + }; + + interval.filter = function(test) { + return newInterval(function(date) { + if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); + }, function(date, step) { + if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty + }); + }; + + if (count) { + interval.count = function(start, end) { + t0.setTime(+start), t1.setTime(+end); + floori(t0), floori(t1); + return Math.floor(count(t0, t1)); + }; + + interval.every = function(step) { + step = Math.floor(step); + return !isFinite(step) || !(step > 0) ? null + : !(step > 1) ? interval + : interval.filter(field + ? function(d) { return field(d) % step === 0; } + : function(d) { return interval.count(0, d) % step === 0; }); + }; + } + + return interval; +} + +var millisecond = newInterval(function() { + // noop +}, function(date, step) { + date.setTime(+date + step); +}, function(start, end) { + return end - start; +}); + +// An optimized implementation for this simple case. +millisecond.every = function(k) { + k = Math.floor(k); + if (!isFinite(k) || !(k > 0)) return null; + if (!(k > 1)) return millisecond; + return newInterval(function(date) { + date.setTime(Math.floor(date / k) * k); + }, function(date, step) { + date.setTime(+date + step * k); + }, function(start, end) { + return (end - start) / k; + }); +}; + +var milliseconds = millisecond.range; + +var durationSecond = 1e3; +var durationMinute = 6e4; +var durationHour = 36e5; +var durationDay = 864e5; +var durationWeek = 6048e5; + +var second = newInterval(function(date) { + date.setTime(Math.floor(date / durationSecond) * durationSecond); +}, function(date, step) { + date.setTime(+date + step * durationSecond); +}, function(start, end) { + return (end - start) / durationSecond; +}, function(date) { + return date.getUTCSeconds(); +}); + +var seconds = second.range; + +var minute = newInterval(function(date) { + date.setTime(Math.floor(date / durationMinute) * durationMinute); +}, function(date, step) { + date.setTime(+date + step * durationMinute); +}, function(start, end) { + return (end - start) / durationMinute; +}, function(date) { + return date.getMinutes(); +}); + +var minutes = minute.range; + +var hour = newInterval(function(date) { + var offset = date.getTimezoneOffset() * durationMinute % durationHour; + if (offset < 0) offset += durationHour; + date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset); +}, function(date, step) { + date.setTime(+date + step * durationHour); +}, function(start, end) { + return (end - start) / durationHour; +}, function(date) { + return date.getHours(); +}); + +var hours = hour.range; + +var day = newInterval(function(date) { + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setDate(date.getDate() + step); +}, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; +}, function(date) { + return date.getDate() - 1; +}); + +var days = day.range; + +function weekday(i) { + return newInterval(function(date) { + date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setDate(date.getDate() + step * 7); + }, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; + }); +} + +var sunday = weekday(0); +var monday = weekday(1); +var tuesday = weekday(2); +var wednesday = weekday(3); +var thursday = weekday(4); +var friday = weekday(5); +var saturday = weekday(6); + +var sundays = sunday.range; +var mondays = monday.range; +var tuesdays = tuesday.range; +var wednesdays = wednesday.range; +var thursdays = thursday.range; +var fridays = friday.range; +var saturdays = saturday.range; + +var month = newInterval(function(date) { + date.setDate(1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setMonth(date.getMonth() + step); +}, function(start, end) { + return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; +}, function(date) { + return date.getMonth(); +}); + +var months = month.range; + +var year = newInterval(function(date) { + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setFullYear(date.getFullYear() + step); +}, function(start, end) { + return end.getFullYear() - start.getFullYear(); +}, function(date) { + return date.getFullYear(); +}); + +// An optimized implementation for this simple case. +year.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setFullYear(Math.floor(date.getFullYear() / k) * k); + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setFullYear(date.getFullYear() + step * k); + }); +}; + +var years = year.range; + +var utcMinute = newInterval(function(date) { + date.setUTCSeconds(0, 0); +}, function(date, step) { + date.setTime(+date + step * durationMinute); +}, function(start, end) { + return (end - start) / durationMinute; +}, function(date) { + return date.getUTCMinutes(); +}); + +var utcMinutes = utcMinute.range; + +var utcHour = newInterval(function(date) { + date.setUTCMinutes(0, 0, 0); +}, function(date, step) { + date.setTime(+date + step * durationHour); +}, function(start, end) { + return (end - start) / durationHour; +}, function(date) { + return date.getUTCHours(); +}); + +var utcHours = utcHour.range; + +var utcDay = newInterval(function(date) { + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCDate(date.getUTCDate() + step); +}, function(start, end) { + return (end - start) / durationDay; +}, function(date) { + return date.getUTCDate() - 1; +}); + +var utcDays = utcDay.range; + +function utcWeekday(i) { + return newInterval(function(date) { + date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCDate(date.getUTCDate() + step * 7); + }, function(start, end) { + return (end - start) / durationWeek; + }); +} + +var utcSunday = utcWeekday(0); +var utcMonday = utcWeekday(1); +var utcTuesday = utcWeekday(2); +var utcWednesday = utcWeekday(3); +var utcThursday = utcWeekday(4); +var utcFriday = utcWeekday(5); +var utcSaturday = utcWeekday(6); + +var utcSundays = utcSunday.range; +var utcMondays = utcMonday.range; +var utcTuesdays = utcTuesday.range; +var utcWednesdays = utcWednesday.range; +var utcThursdays = utcThursday.range; +var utcFridays = utcFriday.range; +var utcSaturdays = utcSaturday.range; + +var utcMonth = newInterval(function(date) { + date.setUTCDate(1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCMonth(date.getUTCMonth() + step); +}, function(start, end) { + return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; +}, function(date) { + return date.getUTCMonth(); +}); + +var utcMonths = utcMonth.range; + +var utcYear = newInterval(function(date) { + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step); +}, function(start, end) { + return end.getUTCFullYear() - start.getUTCFullYear(); +}, function(date) { + return date.getUTCFullYear(); +}); + +// An optimized implementation for this simple case. +utcYear.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step * k); + }); +}; + +var utcYears = utcYear.range; + +exports.timeInterval = newInterval; +exports.timeMillisecond = millisecond; +exports.timeMilliseconds = milliseconds; +exports.utcMillisecond = millisecond; +exports.utcMilliseconds = milliseconds; +exports.timeSecond = second; +exports.timeSeconds = seconds; +exports.utcSecond = second; +exports.utcSeconds = seconds; +exports.timeMinute = minute; +exports.timeMinutes = minutes; +exports.timeHour = hour; +exports.timeHours = hours; +exports.timeDay = day; +exports.timeDays = days; +exports.timeWeek = sunday; +exports.timeWeeks = sundays; +exports.timeSunday = sunday; +exports.timeSundays = sundays; +exports.timeMonday = monday; +exports.timeMondays = mondays; +exports.timeTuesday = tuesday; +exports.timeTuesdays = tuesdays; +exports.timeWednesday = wednesday; +exports.timeWednesdays = wednesdays; +exports.timeThursday = thursday; +exports.timeThursdays = thursdays; +exports.timeFriday = friday; +exports.timeFridays = fridays; +exports.timeSaturday = saturday; +exports.timeSaturdays = saturdays; +exports.timeMonth = month; +exports.timeMonths = months; +exports.timeYear = year; +exports.timeYears = years; +exports.utcMinute = utcMinute; +exports.utcMinutes = utcMinutes; +exports.utcHour = utcHour; +exports.utcHours = utcHours; +exports.utcDay = utcDay; +exports.utcDays = utcDays; +exports.utcWeek = utcSunday; +exports.utcWeeks = utcSundays; +exports.utcSunday = utcSunday; +exports.utcSundays = utcSundays; +exports.utcMonday = utcMonday; +exports.utcMondays = utcMondays; +exports.utcTuesday = utcTuesday; +exports.utcTuesdays = utcTuesdays; +exports.utcWednesday = utcWednesday; +exports.utcWednesdays = utcWednesdays; +exports.utcThursday = utcThursday; +exports.utcThursdays = utcThursdays; +exports.utcFriday = utcFriday; +exports.utcFridays = utcFridays; +exports.utcSaturday = utcSaturday; +exports.utcSaturdays = utcSaturdays; +exports.utcMonth = utcMonth; +exports.utcMonths = utcMonths; +exports.utcYear = utcYear; +exports.utcYears = utcYears; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +},{}],11:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = color; + +var _legend = require("./legend"); + +var _legend2 = _interopRequireDefault(_legend); + +var _d3Dispatch = require("d3-dispatch"); + +var _d3Scale = require("d3-scale"); + +var _d3Format = require("d3-format"); + +var _d3Array = require("d3-array"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function color() { + var scale = (0, _d3Scale.scaleLinear)(), + shape = "rect", + shapeWidth = 15, + shapeHeight = 15, + shapeRadius = 10, + shapePadding = 2, + cells = [5], + cellFilter = void 0, + labels = [], + classPrefix = "", + useClass = false, + title = "", + locale = _legend2.default.d3_defaultLocale, + specifier = _legend2.default.d3_defaultFormatSpecifier, + labelOffset = 10, + labelAlign = "middle", + labelDelimiter = _legend2.default.d3_defaultDelimiter, + labelWrap = void 0, + orient = "vertical", + ascending = false, + path = void 0, + titleWidth = void 0, + legendDispatcher = (0, _d3Dispatch.dispatch)("cellover", "cellout", "cellclick"); + + function legend(svg) { + var type = _legend2.default.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter), + legendG = svg.selectAll("g").data([scale]); + + legendG.enter().append("g").attr("class", classPrefix + "legendCells"); + + if (cellFilter) { + _legend2.default.d3_filterCells(type, cellFilter); + } + + var cell = svg.select("." + classPrefix + "legendCells").selectAll("." + classPrefix + "cell").data(type.data); + + var cellEnter = cell.enter().append("g").attr("class", classPrefix + "cell"); + cellEnter.append(shape).attr("class", classPrefix + "swatch"); + + var shapes = svg.selectAll("g." + classPrefix + "cell " + shape + "." + classPrefix + "swatch").data(type.data); + + //add event handlers + _legend2.default.d3_addEvents(cellEnter, legendDispatcher); + + cell.exit().transition().style("opacity", 0).remove(); + shapes.exit().transition().style("opacity", 0).remove(); + + shapes = shapes.merge(shapes); + + _legend2.default.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path); + var text = _legend2.default.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap); + + // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones. + cell = cellEnter.merge(cell); + + // sets placement + var textSize = text.nodes().map(function (d) { + return d.getBBox(); + }), + shapeSize = shapes.nodes().map(function (d) { + return d.getBBox(); + }); + //sets scale + //everything is fill except for line which is stroke, + if (!useClass) { + if (shape == "line") { + shapes.style("stroke", type.feature); + } else { + shapes.style("fill", type.feature); + } + } else { + shapes.attr("class", function (d) { + return classPrefix + "swatch " + type.feature(d); + }); + } + + var cellTrans = void 0, + textTrans = void 0, + textAlign = labelAlign == "start" ? 0 : labelAlign == "middle" ? 0.5 : 1; + + //positions cells and text + if (orient === "vertical") { + (function () { + var cellSize = textSize.map(function (d, i) { + return Math.max(d.height, shapeSize[i].height); + }); + + cellTrans = function cellTrans(d, i) { + var height = (0, _d3Array.sum)(cellSize.slice(0, i)); + return "translate(0, " + (height + i * shapePadding) + ")"; + }; + + textTrans = function textTrans(d, i) { + return "translate( " + (shapeSize[i].width + shapeSize[i].x + labelOffset) + ", " + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + ")"; + }; + })(); + } else if (orient === "horizontal") { + cellTrans = function cellTrans(d, i) { + return "translate(" + i * (shapeSize[i].width + shapePadding) + ",0)"; + }; + textTrans = function textTrans(d, i) { + return "translate(" + (shapeSize[i].width * textAlign + shapeSize[i].x) + ",\n " + (shapeSize[i].height + shapeSize[i].y + labelOffset + 8) + ")"; + }; + } + + _legend2.default.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign); + _legend2.default.d3_title(svg, title, classPrefix, titleWidth); + + cell.transition().style("opacity", 1); + } + + legend.scale = function (_) { + if (!arguments.length) return scale; + scale = _; + return legend; + }; + + legend.cells = function (_) { + if (!arguments.length) return cells; + if (_.length > 1 || _ >= 2) { + cells = _; + } + return legend; + }; + + legend.cellFilter = function (_) { + if (!arguments.length) return cellFilter; + cellFilter = _; + return legend; + }; + + legend.shape = function (_, d) { + if (!arguments.length) return shape; + if (_ == "rect" || _ == "circle" || _ == "line" || _ == "path" && typeof d === "string") { + shape = _; + path = d; + } + return legend; + }; + + legend.shapeWidth = function (_) { + if (!arguments.length) return shapeWidth; + shapeWidth = +_; + return legend; + }; + + legend.shapeHeight = function (_) { + if (!arguments.length) return shapeHeight; + shapeHeight = +_; + return legend; + }; + + legend.shapeRadius = function (_) { + if (!arguments.length) return shapeRadius; + shapeRadius = +_; + return legend; + }; + + legend.shapePadding = function (_) { + if (!arguments.length) return shapePadding; + shapePadding = +_; + return legend; + }; + + legend.labels = function (_) { + if (!arguments.length) return labels; + labels = _; + return legend; + }; + + legend.labelAlign = function (_) { + if (!arguments.length) return labelAlign; + if (_ == "start" || _ == "end" || _ == "middle") { + labelAlign = _; + } + return legend; + }; + + legend.locale = function (_) { + if (!arguments.length) return locale; + locale = (0, _d3Format.formatLocale)(_); + return legend; + }; + + legend.labelFormat = function (_) { + if (!arguments.length) return legend.locale().format(specifier); + specifier = (0, _d3Format.formatSpecifier)(_); + return legend; + }; + + legend.labelOffset = function (_) { + if (!arguments.length) return labelOffset; + labelOffset = +_; + return legend; + }; + + legend.labelDelimiter = function (_) { + if (!arguments.length) return labelDelimiter; + labelDelimiter = _; + return legend; + }; + + legend.labelWrap = function (_) { + if (!arguments.length) return labelWrap; + labelWrap = _; + return legend; + }; + + legend.useClass = function (_) { + if (!arguments.length) return useClass; + if (_ === true || _ === false) { + useClass = _; + } + return legend; + }; + + legend.orient = function (_) { + if (!arguments.length) return orient; + _ = _.toLowerCase(); + if (_ == "horizontal" || _ == "vertical") { + orient = _; + } + return legend; + }; + + legend.ascending = function (_) { + if (!arguments.length) return ascending; + ascending = !!_; + return legend; + }; + + legend.classPrefix = function (_) { + if (!arguments.length) return classPrefix; + classPrefix = _; + return legend; + }; + + legend.title = function (_) { + if (!arguments.length) return title; + title = _; + return legend; + }; + + legend.titleWidth = function (_) { + if (!arguments.length) return titleWidth; + titleWidth = _; + return legend; + }; + + legend.textWrap = function (_) { + if (!arguments.length) return textWrap; + textWrap = _; + return legend; + }; + + legend.on = function () { + var value = legendDispatcher.on.apply(legendDispatcher, arguments); + return value === legendDispatcher ? legend : value; + }; + + return legend; +} + +},{"./legend":13,"d3-array":1,"d3-dispatch":4,"d3-format":5,"d3-scale":7}],12:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var thresholdLabels = exports.thresholdLabels = function thresholdLabels(_ref) { + var i = _ref.i, + genLength = _ref.genLength, + generatedLabels = _ref.generatedLabels, + labelDelimiter = _ref.labelDelimiter; + + if (i === 0) { + var values = generatedLabels[i].split(" " + labelDelimiter + " "); + return "Less than " + values[1]; + } else if (i === genLength - 1) { + var _values = generatedLabels[i].split(" " + labelDelimiter + " "); + return _values[0] + " or more"; + } + return generatedLabels[i]; +}; + +exports.default = { + thresholdLabels: thresholdLabels +}; + +},{}],13:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +var _d3Selection = require("d3-selection"); + +var _d3Format = require("d3-format"); + +var d3_identity = function d3_identity(d) { + return d; +}; + +var d3_reverse = function d3_reverse(arr) { + var mirror = []; + for (var i = 0, l = arr.length; i < l; i++) { + mirror[i] = arr[l - i - 1]; + } + return mirror; +}; + +//Text wrapping code adapted from Mike Bostock +var d3_textWrapping = function d3_textWrapping(text, width) { + text.each(function () { + var text = (0, _d3Selection.select)(this), + words = text.text().split(/\s+/).reverse(), + word, + line = [], + lineNumber = 0, + lineHeight = 1.2, + //ems + y = text.attr("y"), + dy = parseFloat(text.attr("dy")) || 0, + tspan = text.text(null).append("tspan").attr("x", 0).attr("dy", dy + "em"); + + while (word = words.pop()) { + line.push(word); + tspan.text(line.join(" ")); + if (tspan.node().getComputedTextLength() > width && line.length > 1) { + line.pop(); + tspan.text(line.join(" ")); + line = [word]; + tspan = text.append("tspan").attr("x", 0).attr("dy", lineHeight + dy + "em").text(word); + } + } + }); +}; + +var d3_mergeLabels = function d3_mergeLabels() { + var gen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var labels = arguments[1]; + var domain = arguments[2]; + var range = arguments[3]; + var labelDelimiter = arguments[4]; + + if ((typeof labels === "undefined" ? "undefined" : _typeof(labels)) === "object") { + if (labels.length === 0) return gen; + + var i = labels.length; + for (; i < gen.length; i++) { + labels.push(gen[i]); + } + return labels; + } else if (typeof labels === "function") { + var customLabels = []; + var genLength = gen.length; + for (var _i = 0; _i < genLength; _i++) { + customLabels.push(labels({ + i: _i, + genLength: genLength, + generatedLabels: gen, + domain: domain, + range: range, + labelDelimiter: labelDelimiter + })); + } + return customLabels; + } + + return gen; +}; + +var d3_linearLegend = function d3_linearLegend(scale, cells, labelFormat) { + var data = []; + + if (cells.length > 1) { + data = cells; + } else { + var domain = scale.domain(), + increment = (domain[domain.length - 1] - domain[0]) / (cells - 1); + var i = 0; + + for (; i < cells; i++) { + data.push(domain[0] + i * increment); + } + } + + var labels = data.map(labelFormat); + return { + data: data, + labels: labels, + feature: function feature(d) { + return scale(d); + } + }; +}; + +var d3_quantLegend = function d3_quantLegend(scale, labelFormat, labelDelimiter) { + var labels = scale.range().map(function (d) { + var invert = scale.invertExtent(d); + return labelFormat(invert[0]) + " " + labelDelimiter + " " + labelFormat(invert[1]); + }); + + return { + data: scale.range(), + labels: labels, + feature: d3_identity + }; +}; + +var d3_ordinalLegend = function d3_ordinalLegend(scale) { + return { + data: scale.domain(), + labels: scale.domain(), + feature: function feature(d) { + return scale(d); + } + }; +}; + +var d3_cellOver = function d3_cellOver(cellDispatcher, d, obj) { + cellDispatcher.call("cellover", obj, d); +}; + +var d3_cellOut = function d3_cellOut(cellDispatcher, d, obj) { + cellDispatcher.call("cellout", obj, d); +}; + +var d3_cellClick = function d3_cellClick(cellDispatcher, d, obj) { + cellDispatcher.call("cellclick", obj, d); +}; + +exports.default = { + d3_drawShapes: function d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path) { + if (shape === "rect") { + shapes.attr("height", shapeHeight).attr("width", shapeWidth); + } else if (shape === "circle") { + shapes.attr("r", shapeRadius); + } else if (shape === "line") { + shapes.attr("x1", 0).attr("x2", shapeWidth).attr("y1", 0).attr("y2", 0); + } else if (shape === "path") { + shapes.attr("d", path); + } + }, + + d3_addText: function d3_addText(svg, enter, labels, classPrefix, labelWidth) { + enter.append("text").attr("class", classPrefix + "label"); + var text = svg.selectAll("g." + classPrefix + "cell text." + classPrefix + "label").data(labels).text(d3_identity); + + if (labelWidth) { + svg.selectAll("g." + classPrefix + "cell text." + classPrefix + "label").call(d3_textWrapping, labelWidth); + } + + return text; + }, + + d3_calcType: function d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter) { + var type = scale.invertExtent ? d3_quantLegend(scale, labelFormat, labelDelimiter) : scale.ticks ? d3_linearLegend(scale, cells, labelFormat) : d3_ordinalLegend(scale); + + //for d3.scaleSequential that doesn't have a range function + var range = scale.range && scale.range() || scale.domain(); + type.labels = d3_mergeLabels(type.labels, labels, scale.domain(), range, labelDelimiter); + + if (ascending) { + type.labels = d3_reverse(type.labels); + type.data = d3_reverse(type.data); + } + + return type; + }, + + d3_filterCells: function d3_filterCells(type, cellFilter) { + var filterCells = type.data.map(function (d, i) { + return { data: d, label: type.labels[i] }; + }).filter(cellFilter); + var dataValues = filterCells.map(function (d) { + return d.data; + }); + var labelValues = filterCells.map(function (d) { + return d.label; + }); + type.data = type.data.filter(function (d) { + return dataValues.indexOf(d) !== -1; + }); + type.labels = type.labels.filter(function (d) { + return labelValues.indexOf(d) !== -1; + }); + return type; + }, + + d3_placement: function d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign) { + cell.attr("transform", cellTrans); + text.attr("transform", textTrans); + if (orient === "horizontal") { + text.style("text-anchor", labelAlign); + } + }, + + d3_addEvents: function d3_addEvents(cells, dispatcher) { + cells.on("mouseover.legend", function (d) { + d3_cellOver(dispatcher, d, this); + }).on("mouseout.legend", function (d) { + d3_cellOut(dispatcher, d, this); + }).on("click.legend", function (d) { + d3_cellClick(dispatcher, d, this); + }); + }, + + d3_title: function d3_title(svg, title, classPrefix, titleWidth) { + if (title !== "") { + var titleText = svg.selectAll("text." + classPrefix + "legendTitle"); + + titleText.data([title]).enter().append("text").attr("class", classPrefix + "legendTitle"); + + svg.selectAll("text." + classPrefix + "legendTitle").text(title); + + if (titleWidth) { + svg.selectAll("text." + classPrefix + "legendTitle").call(d3_textWrapping, titleWidth); + } + + var cellsSvg = svg.select("." + classPrefix + "legendCells"); + var yOffset = svg.select("." + classPrefix + "legendTitle").nodes().map(function (d) { + return d.getBBox().height; + })[0], + xOffset = -cellsSvg.nodes().map(function (d) { + return d.getBBox().x; + })[0]; + cellsSvg.attr("transform", "translate(" + xOffset + "," + yOffset + ")"); + } + }, + + d3_defaultLocale: { + format: _d3Format.format, + formatPrefix: _d3Format.formatPrefix + }, + + d3_defaultFormatSpecifier: ".01f", + + d3_defaultDelimiter: "to" +}; + +},{"d3-format":5,"d3-selection":8}],14:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = size; + +var _legend = require("./legend"); + +var _legend2 = _interopRequireDefault(_legend); + +var _d3Dispatch = require("d3-dispatch"); + +var _d3Scale = require("d3-scale"); + +var _d3Format = require("d3-format"); + +var _d3Array = require("d3-array"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function size() { + var scale = (0, _d3Scale.scaleLinear)(), + shape = "rect", + shapeWidth = 15, + shapePadding = 2, + cells = [5], + cellFilter = void 0, + labels = [], + classPrefix = "", + title = "", + locale = _legend2.default.d3_defaultLocale, + specifier = _legend2.default.d3_defaultFormatSpecifier, + labelOffset = 10, + labelAlign = "middle", + labelDelimiter = _legend2.default.d3_defaultDelimiter, + labelWrap = void 0, + orient = "vertical", + ascending = false, + path = void 0, + titleWidth = void 0, + legendDispatcher = (0, _d3Dispatch.dispatch)("cellover", "cellout", "cellclick"); + + function legend(svg) { + var type = _legend2.default.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter), + legendG = svg.selectAll("g").data([scale]); + + if (cellFilter) { + _legend2.default.d3_filterCells(type, cellFilter); + } + + legendG.enter().append("g").attr("class", classPrefix + "legendCells"); + + var cell = svg.select("." + classPrefix + "legendCells").selectAll("." + classPrefix + "cell").data(type.data); + var cellEnter = cell.enter().append("g").attr("class", classPrefix + "cell"); + cellEnter.append(shape).attr("class", classPrefix + "swatch"); + + var shapes = svg.selectAll("g." + classPrefix + "cell " + shape + "." + classPrefix + "swatch"); + + //add event handlers + _legend2.default.d3_addEvents(cellEnter, legendDispatcher); + + cell.exit().transition().style("opacity", 0).remove(); + + shapes.exit().transition().style("opacity", 0).remove(); + shapes = shapes.merge(shapes); + + //creates shape + if (shape === "line") { + _legend2.default.d3_drawShapes(shape, shapes, 0, shapeWidth); + shapes.attr("stroke-width", type.feature); + } else { + _legend2.default.d3_drawShapes(shape, shapes, type.feature, type.feature, type.feature, path); + } + + var text = _legend2.default.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap); + + // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones. + cell = cellEnter.merge(cell); + + //sets placement + + var textSize = text.nodes().map(function (d) { + return d.getBBox(); + }), + shapeSize = shapes.nodes().map(function (d, i) { + var bbox = d.getBBox(); + var stroke = scale(type.data[i]); + + if (shape === "line" && orient === "horizontal") { + bbox.height = bbox.height + stroke; + } else if (shape === "line" && orient === "vertical") { + bbox.width = bbox.width; + } + return bbox; + }); + + var maxH = (0, _d3Array.max)(shapeSize, function (d) { + return d.height + d.y; + }), + maxW = (0, _d3Array.max)(shapeSize, function (d) { + return d.width + d.x; + }); + + var cellTrans = void 0, + textTrans = void 0, + textAlign = labelAlign == "start" ? 0 : labelAlign == "middle" ? 0.5 : 1; + + //positions cells and text + if (orient === "vertical") { + (function () { + var cellSize = textSize.map(function (d, i) { + return Math.max(d.height, shapeSize[i].height); + }); + var y = shape == "circle" || shape == "line" ? shapeSize[0].height / 2 : 0; + cellTrans = function cellTrans(d, i) { + var height = (0, _d3Array.sum)(cellSize.slice(0, i)); + + return "translate(0, " + (y + height + i * shapePadding) + ")"; + }; + + textTrans = function textTrans(d, i) { + return "translate( " + (maxW + labelOffset) + ",\n " + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + ")"; + }; + })(); + } else if (orient === "horizontal") { + (function () { + cellTrans = function cellTrans(d, i) { + var width = (0, _d3Array.sum)(shapeSize.slice(0, i), function (d) { + return d.width; + }); + var y = shape == "circle" || shape == "line" ? maxH / 2 : 0; + return "translate(" + (width + i * shapePadding) + ", " + y + ")"; + }; + + var offset = shape == "line" ? maxH / 2 : maxH; + textTrans = function textTrans(d, i) { + return "translate( " + (shapeSize[i].width * textAlign + shapeSize[i].x) + ",\n " + (offset + labelOffset) + ")"; + }; + })(); + } + + _legend2.default.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign); + _legend2.default.d3_title(svg, title, classPrefix, titleWidth); + + cell.transition().style("opacity", 1); + } + + legend.scale = function (_) { + if (!arguments.length) return scale; + scale = _; + return legend; + }; + + legend.cells = function (_) { + if (!arguments.length) return cells; + if (_.length > 1 || _ >= 2) { + cells = _; + } + return legend; + }; + + legend.cellFilter = function (_) { + if (!arguments.length) return cellFilter; + cellFilter = _; + return legend; + }; + + legend.shape = function (_, d) { + if (!arguments.length) return shape; + if (_ == "rect" || _ == "circle" || _ == "line") { + shape = _; + path = d; + } + return legend; + }; + + legend.shapeWidth = function (_) { + if (!arguments.length) return shapeWidth; + shapeWidth = +_; + return legend; + }; + + legend.shapePadding = function (_) { + if (!arguments.length) return shapePadding; + shapePadding = +_; + return legend; + }; + + legend.labels = function (_) { + if (!arguments.length) return labels; + labels = _; + return legend; + }; + + legend.labelAlign = function (_) { + if (!arguments.length) return labelAlign; + if (_ == "start" || _ == "end" || _ == "middle") { + labelAlign = _; + } + return legend; + }; + + legend.locale = function (_) { + if (!arguments.length) return locale; + locale = (0, _d3Format.formatLocale)(_); + return legend; + }; + + legend.labelFormat = function (_) { + if (!arguments.length) return legend.locale().format(specifier); + specifier = (0, _d3Format.formatSpecifier)(_); + return legend; + }; + + legend.labelOffset = function (_) { + if (!arguments.length) return labelOffset; + labelOffset = +_; + return legend; + }; + + legend.labelDelimiter = function (_) { + if (!arguments.length) return labelDelimiter; + labelDelimiter = _; + return legend; + }; + + legend.labelWrap = function (_) { + if (!arguments.length) return labelWrap; + labelWrap = _; + return legend; + }; + + legend.orient = function (_) { + if (!arguments.length) return orient; + _ = _.toLowerCase(); + if (_ == "horizontal" || _ == "vertical") { + orient = _; + } + return legend; + }; + + legend.ascending = function (_) { + if (!arguments.length) return ascending; + ascending = !!_; + return legend; + }; + + legend.classPrefix = function (_) { + if (!arguments.length) return classPrefix; + classPrefix = _; + return legend; + }; + + legend.title = function (_) { + if (!arguments.length) return title; + title = _; + return legend; + }; + + legend.titleWidth = function (_) { + if (!arguments.length) return titleWidth; + titleWidth = _; + return legend; + }; + + legend.on = function () { + var value = legendDispatcher.on.apply(legendDispatcher, arguments); + return value === legendDispatcher ? legend : value; + }; + + return legend; +} + +},{"./legend":13,"d3-array":1,"d3-dispatch":4,"d3-format":5,"d3-scale":7}],15:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = symbol; + +var _legend = require("./legend"); + +var _legend2 = _interopRequireDefault(_legend); + +var _d3Dispatch = require("d3-dispatch"); + +var _d3Scale = require("d3-scale"); + +var _d3Format = require("d3-format"); + +var _d3Array = require("d3-array"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function symbol() { + var scale = (0, _d3Scale.scaleLinear)(), + shape = "path", + shapeWidth = 15, + shapeHeight = 15, + shapeRadius = 10, + shapePadding = 5, + cells = [5], + cellFilter = void 0, + labels = [], + classPrefix = "", + title = "", + locale = _legend2.default.d3_defaultLocale, + specifier = _legend2.default.d3_defaultFormatSpecifier, + labelAlign = "middle", + labelOffset = 10, + labelDelimiter = _legend2.default.d3_defaultDelimiter, + labelWrap = void 0, + orient = "vertical", + ascending = false, + titleWidth = void 0, + legendDispatcher = (0, _d3Dispatch.dispatch)("cellover", "cellout", "cellclick"); + + function legend(svg) { + var type = _legend2.default.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter), + legendG = svg.selectAll("g").data([scale]); + + if (cellFilter) { + _legend2.default.d3_filterCells(type, cellFilter); + } + + legendG.enter().append("g").attr("class", classPrefix + "legendCells"); + + var cell = svg.select("." + classPrefix + "legendCells").selectAll("." + classPrefix + "cell").data(type.data); + var cellEnter = cell.enter().append("g").attr("class", classPrefix + "cell"); + cellEnter.append(shape).attr("class", classPrefix + "swatch"); + + var shapes = svg.selectAll("g." + classPrefix + "cell " + shape + "." + classPrefix + "swatch"); + + //add event handlers + _legend2.default.d3_addEvents(cellEnter, legendDispatcher); + + //remove old shapes + cell.exit().transition().style("opacity", 0).remove(); + shapes.exit().transition().style("opacity", 0).remove(); + shapes = shapes.merge(shapes); + + _legend2.default.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, type.feature); + var text = _legend2.default.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap); + + // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones. + cell = cellEnter.merge(cell); + + // sets placement + var textSize = text.nodes().map(function (d) { + return d.getBBox(); + }), + shapeSize = shapes.nodes().map(function (d) { + return d.getBBox(); + }); + + var maxH = (0, _d3Array.max)(shapeSize, function (d) { + return d.height; + }), + maxW = (0, _d3Array.max)(shapeSize, function (d) { + return d.width; + }); + + var cellTrans = void 0, + textTrans = void 0, + textAlign = labelAlign == "start" ? 0 : labelAlign == "middle" ? 0.5 : 1; + + //positions cells and text + if (orient === "vertical") { + (function () { + var cellSize = textSize.map(function (d, i) { + return Math.max(maxH, d.height); + }); + + cellTrans = function cellTrans(d, i) { + var height = (0, _d3Array.sum)(cellSize.slice(0, i)); + return "translate(0, " + (height + i * shapePadding) + " )"; + }; + textTrans = function textTrans(d, i) { + return "translate( " + (maxW + labelOffset) + ",\n " + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + ")"; + }; + })(); + } else if (orient === "horizontal") { + cellTrans = function cellTrans(d, i) { + return "translate( " + i * (maxW + shapePadding) + ",0)"; + }; + textTrans = function textTrans(d, i) { + return "translate( " + (shapeSize[i].width * textAlign + shapeSize[i].x) + ",\n " + (maxH + labelOffset) + ")"; + }; + } + + _legend2.default.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign); + _legend2.default.d3_title(svg, title, classPrefix, titleWidth); + cell.transition().style("opacity", 1); + } + + legend.scale = function (_) { + if (!arguments.length) return scale; + scale = _; + return legend; + }; + + legend.cells = function (_) { + if (!arguments.length) return cells; + if (_.length > 1 || _ >= 2) { + cells = _; + } + return legend; + }; + + legend.cellFilter = function (_) { + if (!arguments.length) return cellFilter; + cellFilter = _; + return legend; + }; + + legend.shapePadding = function (_) { + if (!arguments.length) return shapePadding; + shapePadding = +_; + return legend; + }; + + legend.labels = function (_) { + if (!arguments.length) return labels; + labels = _; + return legend; + }; + + legend.labelAlign = function (_) { + if (!arguments.length) return labelAlign; + if (_ == "start" || _ == "end" || _ == "middle") { + labelAlign = _; + } + return legend; + }; + + legend.locale = function (_) { + if (!arguments.length) return locale; + locale = (0, _d3Format.formatLocale)(_); + return legend; + }; + + legend.labelFormat = function (_) { + if (!arguments.length) return legend.locale().format(specifier); + specifier = (0, _d3Format.formatSpecifier)(_); + return legend; + }; + + legend.labelOffset = function (_) { + if (!arguments.length) return labelOffset; + labelOffset = +_; + return legend; + }; + + legend.labelDelimiter = function (_) { + if (!arguments.length) return labelDelimiter; + labelDelimiter = _; + return legend; + }; + + legend.labelWrap = function (_) { + if (!arguments.length) return labelWrap; + labelWrap = _; + return legend; + }; + + legend.orient = function (_) { + if (!arguments.length) return orient; + _ = _.toLowerCase(); + if (_ == "horizontal" || _ == "vertical") { + orient = _; + } + return legend; + }; + + legend.ascending = function (_) { + if (!arguments.length) return ascending; + ascending = !!_; + return legend; + }; + + legend.classPrefix = function (_) { + if (!arguments.length) return classPrefix; + classPrefix = _; + return legend; + }; + + legend.title = function (_) { + if (!arguments.length) return title; + title = _; + return legend; + }; + + legend.titleWidth = function (_) { + if (!arguments.length) return titleWidth; + titleWidth = _; + return legend; + }; + + legend.on = function () { + var value = legendDispatcher.on.apply(legendDispatcher, arguments); + return value === legendDispatcher ? legend : value; + }; + + return legend; +} + +},{"./legend":13,"d3-array":1,"d3-dispatch":4,"d3-format":5,"d3-scale":7}],16:[function(require,module,exports){ +'use strict'; + +var _color = require('./color'); + +var _color2 = _interopRequireDefault(_color); + +var _size = require('./size'); + +var _size2 = _interopRequireDefault(_size); + +var _symbol = require('./symbol'); + +var _symbol2 = _interopRequireDefault(_symbol); + +var _helpers = require('./helpers'); + +var _helpers2 = _interopRequireDefault(_helpers); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +d3.legendColor = _color2.default; +d3.legendSize = _size2.default; +d3.legendSymbol = _symbol2.default; +d3.legendHelpers = _helpers2.default; + +},{"./color":11,"./helpers":12,"./size":14,"./symbol":15}]},{},[16]) +//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvYnVpbGQvZDMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9idWlsZC9kMy1jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLWNvbG9yL2J1aWxkL2QzLWNvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL2J1aWxkL2QzLWRpc3BhdGNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9idWlsZC9kMy1mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvYnVpbGQvZDMtaW50ZXJwb2xhdGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvYnVpbGQvZDMtc2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL2J1aWxkL2QzLXNlbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9idWlsZC9kMy10aW1lLWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL2J1aWxkL2QzLXRpbWUuanMiLCJzcmMvY29sb3IuanMiLCJzcmMvaGVscGVycy5qcyIsInNyYy9sZWdlbmQuanMiLCJzcmMvc2l6ZS5qcyIsInNyYy9zeW1ib2wuanMiLCJzcmMvd2ViLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcjRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1OEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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V0FBTyxNQUFQO0FBQ0QsR0FKRDs7QUFNQSxTQUFPLEtBQVAsR0FBZSxVQUFTLENBQVQsRUFBWTtBQUN6QixRQUFJLENBQUMsVUFBVSxNQUFmLEVBQXVCLE9BQU8sS0FBUDtBQUN2QixZQUFRLENBQVI7QUFDQSxXQUFPLE1BQVA7QUFDRCxHQUpEOztBQU1BLFNBQU8sVUFBUCxHQUFvQixVQUFTLENBQVQsRUFBWTtBQUM5QixRQUFJLENBQUMsVUFBVSxNQUFmLEVBQXVCLE9BQU8sVUFBUDtBQUN2QixpQkFBYSxDQUFiO0FBQ0EsV0FBTyxNQUFQO0FBQ0QsR0FKRDs7QUFNQSxTQUFPLEVBQVAsR0FBWSxZQUFXO0FBQ3JCLFFBQU0sUUFBUSxpQkFBaUIsRUFBakIsQ0FBb0IsS0FBcEIsQ0FBMEIsZ0JBQTFCLEVBQTRDLFNBQTVDLENBQWQ7QUFDQSxXQUFPLFVBQVUsZ0JBQVYsR0FBNkIsTUFBN0IsR0FBc0MsS0FBN0M7QUFDRCxHQUhEOztBQUtBLFNBQU8sTUFBUDtBQUNEOzs7OztBQzlPRDs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsR0FBRyxXQUFIO0FBQ0EsR0FBRyxVQUFIO0FBQ0EsR0FBRyxZQUFIO0FBQ0EsR0FBRyxhQUFIIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtYXJyYXkvIFZlcnNpb24gMS4wLjEuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlzZWN0b3IoY29tcGFyZSkge1xuICAgIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xuICAgICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvO1xuICAgICAgfSxcbiAgICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0gbWlkO1xuICAgICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsbztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQsIHgpIHtcbiAgICAgIHJldHVybiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuICB2YXIgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG4gIHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5cbiAgZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gICAgcmV0dXJuIGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOO1xuICB9XG5cbiAgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICByZXR1cm4geCA9PT0gbnVsbCA/IE5hTiA6ICt4O1xuICB9XG5cbiAgZnVuY3Rpb24gdmFyaWFuY2UoYXJyYXksIGYpIHtcbiAgICB2YXIgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgbSA9IDAsXG4gICAgICAgIGEsXG4gICAgICAgIGQsXG4gICAgICAgIHMgPSAwLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIGogPSAwO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKCFpc05hTihhID0gbnVtYmVyKGFycmF5W2ldKSkpIHtcbiAgICAgICAgICBkID0gYSAtIG07XG4gICAgICAgICAgbSArPSBkIC8gKytqO1xuICAgICAgICAgIHMgKz0gZCAqIChhIC0gbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmICghaXNOYU4oYSA9IG51bWJlcihmKGFycmF5W2ldLCBpLCBhcnJheSkpKSkge1xuICAgICAgICAgIGQgPSBhIC0gbTtcbiAgICAgICAgICBtICs9IGQgLyArK2o7XG4gICAgICAgICAgcyArPSBkICogKGEgLSBtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChqID4gMSkgcmV0dXJuIHMgLyAoaiAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGV2aWF0aW9uKGFycmF5LCBmKSB7XG4gICAgdmFyIHYgPSB2YXJpYW5jZShhcnJheSwgZik7XG4gICAgcmV0dXJuIHYgPyBNYXRoLnNxcnQodikgOiB2O1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0ZW50KGFycmF5LCBmKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgYSxcbiAgICAgICAgYixcbiAgICAgICAgYztcblxuICAgIGlmIChmID09IG51bGwpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID49IGIpIHsgYSA9IGMgPSBiOyBicmVhazsgfVxuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhID4gYikgYSA9IGI7XG4gICAgICAgIGlmIChjIDwgYikgYyA9IGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYyA9IGI7IGJyZWFrOyB9XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhID4gYikgYSA9IGI7XG4gICAgICAgIGlmIChjIDwgYikgYyA9IGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFthLCBjXTtcbiAgfVxuXG4gIHZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuICB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbiAgdmFyIG1hcCA9IGFycmF5Lm1hcDtcblxuICBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICB2YXIgZTEwID0gTWF0aC5zcXJ0KDUwKTtcbiAgdmFyIGU1ID0gTWF0aC5zcXJ0KDEwKTtcbiAgdmFyIGUyID0gTWF0aC5zcXJ0KDIpO1xuICBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgcmV0dXJuIHJhbmdlKFxuICAgICAgTWF0aC5jZWlsKHN0YXJ0IC8gc3RlcCkgKiBzdGVwLFxuICAgICAgTWF0aC5mbG9vcihzdG9wIC8gc3RlcCkgKiBzdGVwICsgc3RlcCAvIDIsIC8vIGluY2x1c2l2ZVxuICAgICAgc3RlcFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgICBzdGVwMSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXAwKSAvIE1hdGguTE4xMCkpLFxuICAgICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gICAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTUpIHN0ZXAxICo9IDU7XG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gICAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xuICB9XG5cbiAgZnVuY3Rpb24gc3R1cmdlcyh2YWx1ZXMpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHZhbHVlcy5sZW5ndGgpIC8gTWF0aC5MTjIpICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhpc3RvZ3JhbSgpIHtcbiAgICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgICAgZG9tYWluID0gZXh0ZW50LFxuICAgICAgICB0aHJlc2hvbGQgPSBzdHVyZ2VzO1xuXG4gICAgZnVuY3Rpb24gaGlzdG9ncmFtKGRhdGEpIHtcbiAgICAgIHZhciBpLFxuICAgICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHZhbHVlcyA9IG5ldyBBcnJheShuKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHh6ID0gZG9tYWluKHZhbHVlcyksXG4gICAgICAgICAgeDAgPSB4elswXSxcbiAgICAgICAgICB4MSA9IHh6WzFdLFxuICAgICAgICAgIHR6ID0gdGhyZXNob2xkKHZhbHVlcywgeDAsIHgxKTtcblxuICAgICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0eikpIHR6ID0gdGlja3MoeDAsIHgxLCB0eik7XG5cbiAgICAgIC8vIFJlbW92ZSBhbnkgdGhyZXNob2xkcyBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgICB2YXIgbSA9IHR6Lmxlbmd0aDtcbiAgICAgIHdoaWxlICh0elswXSA8PSB4MCkgdHouc2hpZnQoKSwgLS1tO1xuICAgICAgd2hpbGUgKHR6W20gLSAxXSA+PSB4MSkgdHoucG9wKCksIC0tbTtcblxuICAgICAgdmFyIGJpbnMgPSBuZXcgQXJyYXkobSArIDEpLFxuICAgICAgICAgIGJpbjtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBiaW5zLlxuICAgICAgZm9yIChpID0gMDsgaSA8PSBtOyArK2kpIHtcbiAgICAgICAgYmluID0gYmluc1tpXSA9IFtdO1xuICAgICAgICBiaW4ueDAgPSBpID4gMCA/IHR6W2kgLSAxXSA6IHgwO1xuICAgICAgICBiaW4ueDEgPSBpIDwgbSA/IHR6W2ldIDogeDE7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzc2lnbiBkYXRhIHRvIGJpbnMgYnkgdmFsdWUsIGlnbm9yaW5nIGFueSBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHggPSB2YWx1ZXNbaV07XG4gICAgICAgIGlmICh4MCA8PSB4ICYmIHggPD0geDEpIHtcbiAgICAgICAgICBiaW5zW2Jpc2VjdFJpZ2h0KHR6LCB4LCAwLCBtKV0ucHVzaChkYXRhW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmlucztcbiAgICB9XG5cbiAgICBoaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGhpc3RvZ3JhbSkgOiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgaGlzdG9ncmFtLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW19bMF0sIF9bMV1dKSwgaGlzdG9ncmFtKSA6IGRvbWFpbjtcbiAgICB9O1xuXG4gICAgaGlzdG9ncmFtLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aHJlc2hvbGQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IEFycmF5LmlzQXJyYXkoXykgPyBjb25zdGFudChzbGljZS5jYWxsKF8pKSA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdGhyZXNob2xkO1xuICAgIH07XG5cbiAgICByZXR1cm4gaGlzdG9ncmFtO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpbGUoYXJyYXksIHAsIGYpIHtcbiAgICBpZiAoZiA9PSBudWxsKSBmID0gbnVtYmVyO1xuICAgIGlmICghKG4gPSBhcnJheS5sZW5ndGgpKSByZXR1cm47XG4gICAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArZihhcnJheVswXSwgMCwgYXJyYXkpO1xuICAgIGlmIChwID49IDEpIHJldHVybiArZihhcnJheVtuIC0gMV0sIG4gLSAxLCBhcnJheSk7XG4gICAgdmFyIG4sXG4gICAgICAgIGggPSAobiAtIDEpICogcCxcbiAgICAgICAgaSA9IE1hdGguZmxvb3IoaCksXG4gICAgICAgIGEgPSArZihhcnJheVtpXSwgaSwgYXJyYXkpLFxuICAgICAgICBiID0gK2YoYXJyYXlbaSArIDFdLCBpICsgMSwgYXJyYXkpO1xuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIChoIC0gaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmcmVlZG1hbkRpYWNvbmlzKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgICB2YWx1ZXMgPSBtYXAuY2FsbCh2YWx1ZXMsIG51bWJlcikuc29ydChhc2NlbmRpbmcpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoMiAqIChxdWFudGlsZSh2YWx1ZXMsIDAuNzUpIC0gcXVhbnRpbGUodmFsdWVzLCAwLjI1KSkgKiBNYXRoLnBvdyh2YWx1ZXMubGVuZ3RoLCAtMSAvIDMpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBzY290dCh2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgobWF4IC0gbWluKSAvICgzLjUgKiBkZXZpYXRpb24odmFsdWVzKSAqIE1hdGgucG93KHZhbHVlcy5sZW5ndGgsIC0xIC8gMykpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heChhcnJheSwgZikge1xuICAgIHZhciBpID0gLTEsXG4gICAgICAgIG4gPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGEsXG4gICAgICAgIGI7XG5cbiAgICBpZiAoZiA9PSBudWxsKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKSB7IGEgPSBiOyBicmVhazsgfVxuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsICYmIGIgPiBhKSBhID0gYjtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmKGFycmF5W2ldLCBpLCBhcnJheSkpICE9IG51bGwgJiYgYiA+PSBiKSB7IGEgPSBiOyBicmVhazsgfVxuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGYoYXJyYXlbaV0sIGksIGFycmF5KSkgIT0gbnVsbCAmJiBiID4gYSkgYSA9IGI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiBtZWFuKGFycmF5LCBmKSB7XG4gICAgdmFyIHMgPSAwLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIGogPSBuO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihhcnJheVtpXSkpKSBzICs9IGE7IGVsc2UgLS1qO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihmKGFycmF5W2ldLCBpLCBhcnJheSkpKSkgcyArPSBhOyBlbHNlIC0tajtcbiAgICB9XG5cbiAgICBpZiAoaikgcmV0dXJuIHMgLyBqO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVkaWFuKGFycmF5LCBmKSB7XG4gICAgdmFyIG51bWJlcnMgPSBbXSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgYSxcbiAgICAgICAgaSA9IC0xO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihhcnJheVtpXSkpKSBudW1iZXJzLnB1c2goYSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpc05hTihhID0gbnVtYmVyKGYoYXJyYXlbaV0sIGksIGFycmF5KSkpKSBudW1iZXJzLnB1c2goYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2UoYXJyYXlzKSB7XG4gICAgdmFyIG4gPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICBtLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIGogPSAwLFxuICAgICAgICBtZXJnZWQsXG4gICAgICAgIGFycmF5O1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIGogKz0gYXJyYXlzW2ldLmxlbmd0aDtcbiAgICBtZXJnZWQgPSBuZXcgQXJyYXkoaik7XG5cbiAgICB3aGlsZSAoLS1uID49IDApIHtcbiAgICAgIGFycmF5ID0gYXJyYXlzW25dO1xuICAgICAgbSA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIHdoaWxlICgtLW0gPj0gMCkge1xuICAgICAgICBtZXJnZWRbLS1qXSA9IGFycmF5W21dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBtaW4oYXJyYXksIGYpIHtcbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBiO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYjsgYnJlYWs7IH1cbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhID4gYikgYSA9IGI7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYjsgYnJlYWs7IH1cbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmKGFycmF5W2ldLCBpLCBhcnJheSkpICE9IG51bGwgJiYgYSA+IGIpIGEgPSBiO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFpcnMoYXJyYXkpIHtcbiAgICB2YXIgaSA9IDAsIG4gPSBhcnJheS5sZW5ndGggLSAxLCBwID0gYXJyYXlbMF0sIHBhaXJzID0gbmV3IEFycmF5KG4gPCAwID8gMCA6IG4pO1xuICAgIHdoaWxlIChpIDwgbikgcGFpcnNbaV0gPSBbcCwgcCA9IGFycmF5WysraV1dO1xuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGUoYXJyYXksIGluZGV4ZXMpIHtcbiAgICB2YXIgaSA9IGluZGV4ZXMubGVuZ3RoLCBwZXJtdXRlcyA9IG5ldyBBcnJheShpKTtcbiAgICB3aGlsZSAoaS0tKSBwZXJtdXRlc1tpXSA9IGFycmF5W2luZGV4ZXNbaV1dO1xuICAgIHJldHVybiBwZXJtdXRlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYW4oYXJyYXksIGNvbXBhcmUpIHtcbiAgICBpZiAoIShuID0gYXJyYXkubGVuZ3RoKSkgcmV0dXJuO1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbixcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIHhpLFxuICAgICAgICB4aiA9IGFycmF5W2pdO1xuXG4gICAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIGlmIChjb21wYXJlKHhpID0gYXJyYXlbaV0sIHhqKSA8IDAgfHwgY29tcGFyZSh4aiwgeGopICE9PSAwKSB4aiA9IHhpLCBqID0gaTtcblxuICAgIGlmIChjb21wYXJlKHhqLCB4aikgPT09IDApIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZShhcnJheSwgaTAsIGkxKSB7XG4gICAgdmFyIG0gPSAoaTEgPT0gbnVsbCA/IGFycmF5Lmxlbmd0aCA6IGkxKSAtIChpMCA9IGkwID09IG51bGwgPyAwIDogK2kwKSxcbiAgICAgICAgdCxcbiAgICAgICAgaTtcblxuICAgIHdoaWxlIChtKSB7XG4gICAgICBpID0gTWF0aC5yYW5kb20oKSAqIG0tLSB8IDA7XG4gICAgICB0ID0gYXJyYXlbbSArIGkwXTtcbiAgICAgIGFycmF5W20gKyBpMF0gPSBhcnJheVtpICsgaTBdO1xuICAgICAgYXJyYXlbaSArIGkwXSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgZnVuY3Rpb24gc3VtKGFycmF5LCBmKSB7XG4gICAgdmFyIHMgPSAwLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBpID0gLTE7XG5cbiAgICBpZiAoZiA9PSBudWxsKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKGEgPSArYXJyYXlbaV0pIHMgKz0gYTsgLy8gTm90ZTogemVybyBhbmQgbnVsbCBhcmUgZXF1aXZhbGVudC5cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoYSA9ICtmKGFycmF5W2ldLCBpLCBhcnJheSkpIHMgKz0gYTtcbiAgICB9XG5cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zcG9zZShtYXRyaXgpIHtcbiAgICBpZiAoIShuID0gbWF0cml4Lmxlbmd0aCkpIHJldHVybiBbXTtcbiAgICBmb3IgKHZhciBpID0gLTEsIG0gPSBtaW4obWF0cml4LCBsZW5ndGgpLCB0cmFuc3Bvc2UgPSBuZXcgQXJyYXkobSk7ICsraSA8IG07KSB7XG4gICAgICBmb3IgKHZhciBqID0gLTEsIG4sIHJvdyA9IHRyYW5zcG9zZVtpXSA9IG5ldyBBcnJheShuKTsgKytqIDwgbjspIHtcbiAgICAgICAgcm93W2pdID0gbWF0cml4W2pdW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJhbnNwb3NlO1xuICB9XG5cbiAgZnVuY3Rpb24gbGVuZ3RoKGQpIHtcbiAgICByZXR1cm4gZC5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiB6aXAoKSB7XG4gICAgcmV0dXJuIHRyYW5zcG9zZShhcmd1bWVudHMpO1xuICB9XG5cbiAgZXhwb3J0cy5iaXNlY3QgPSBiaXNlY3RSaWdodDtcbiAgZXhwb3J0cy5iaXNlY3RSaWdodCA9IGJpc2VjdFJpZ2h0O1xuICBleHBvcnRzLmJpc2VjdExlZnQgPSBiaXNlY3RMZWZ0O1xuICBleHBvcnRzLmFzY2VuZGluZyA9IGFzY2VuZGluZztcbiAgZXhwb3J0cy5iaXNlY3RvciA9IGJpc2VjdG9yO1xuICBleHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuICBleHBvcnRzLmRldmlhdGlvbiA9IGRldmlhdGlvbjtcbiAgZXhwb3J0cy5leHRlbnQgPSBleHRlbnQ7XG4gIGV4cG9ydHMuaGlzdG9ncmFtID0gaGlzdG9ncmFtO1xuICBleHBvcnRzLnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMgPSBmcmVlZG1hbkRpYWNvbmlzO1xuICBleHBvcnRzLnRocmVzaG9sZFNjb3R0ID0gc2NvdHQ7XG4gIGV4cG9ydHMudGhyZXNob2xkU3R1cmdlcyA9IHN0dXJnZXM7XG4gIGV4cG9ydHMubWF4ID0gbWF4O1xuICBleHBvcnRzLm1lYW4gPSBtZWFuO1xuICBleHBvcnRzLm1lZGlhbiA9IG1lZGlhbjtcbiAgZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuICBleHBvcnRzLm1pbiA9IG1pbjtcbiAgZXhwb3J0cy5wYWlycyA9IHBhaXJzO1xuICBleHBvcnRzLnBlcm11dGUgPSBwZXJtdXRlO1xuICBleHBvcnRzLnF1YW50aWxlID0gcXVhbnRpbGU7XG4gIGV4cG9ydHMucmFuZ2UgPSByYW5nZTtcbiAgZXhwb3J0cy5zY2FuID0gc2NhbjtcbiAgZXhwb3J0cy5zaHVmZmxlID0gc2h1ZmZsZTtcbiAgZXhwb3J0cy5zdW0gPSBzdW07XG4gIGV4cG9ydHMudGlja3MgPSB0aWNrcztcbiAgZXhwb3J0cy50aWNrU3RlcCA9IHRpY2tTdGVwO1xuICBleHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbiAgZXhwb3J0cy52YXJpYW5jZSA9IHZhcmlhbmNlO1xuICBleHBvcnRzLnppcCA9IHppcDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7IiwiLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1jb2xsZWN0aW9uLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbnZhciBuZXN0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBrZXlzID0gW10sXG4gICAgICBzb3J0S2V5cyA9IFtdLFxuICAgICAgc29ydFZhbHVlcyxcbiAgICAgIHJvbGx1cCxcbiAgICAgIG5lc3Q7XG5cbiAgZnVuY3Rpb24gYXBwbHkoYXJyYXksIGRlcHRoLCBjcmVhdGVSZXN1bHQsIHNldFJlc3VsdCkge1xuICAgIGlmIChkZXB0aCA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHJvbGx1cCAhPSBudWxsXG4gICAgICAgID8gcm9sbHVwKGFycmF5KSA6IChzb3J0VmFsdWVzICE9IG51bGxcbiAgICAgICAgPyBhcnJheS5zb3J0KHNvcnRWYWx1ZXMpXG4gICAgICAgIDogYXJyYXkpO1xuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCQkMSwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwJCQxO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcCQkMS5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAkJDEuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdCgpIHtcbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBzZXRPYmplY3Qob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcCgpIHtcbiAgcmV0dXJuIG1hcCgpO1xufVxuXG5mdW5jdGlvbiBzZXRNYXAobWFwJCQxLCBrZXksIHZhbHVlKSB7XG4gIG1hcCQkMS5zZXQoa2V5LCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIFNldCgpIHt9XG5cbnZhciBwcm90byA9IG1hcC5wcm90b3R5cGU7XG5cblNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2V0LFxuICBoYXM6IHByb3RvLmhhcyxcbiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhbHVlICs9IFwiXCI7XG4gICAgdGhpc1twcmVmaXggKyB2YWx1ZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBwcm90by5yZW1vdmUsXG4gIGNsZWFyOiBwcm90by5jbGVhcixcbiAgdmFsdWVzOiBwcm90by5rZXlzLFxuICBzaXplOiBwcm90by5zaXplLFxuICBlbXB0eTogcHJvdG8uZW1wdHksXG4gIGVhY2g6IHByb3RvLmVhY2hcbn07XG5cbmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHtcbiAgdmFyIHNldCA9IG5ldyBTZXQ7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNldCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUpIHsgc2V0LmFkZCh2YWx1ZSk7IH0pO1xuXG4gIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS5cbiAgZWxzZSBpZiAob2JqZWN0KSB7XG4gICAgdmFyIGkgPSAtMSwgbiA9IG9iamVjdC5sZW5ndGg7XG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBzZXQuYWRkKGYob2JqZWN0W2ldLCBpLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbnZhciBrZXlzID0gZnVuY3Rpb24obWFwKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn07XG5cbnZhciB2YWx1ZXMgPSBmdW5jdGlvbihtYXApIHtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSB2YWx1ZXMucHVzaChtYXBba2V5XSk7XG4gIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgZW50cmllcyA9IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIgZW50cmllcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goe2tleToga2V5LCB2YWx1ZTogbWFwW2tleV19KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59O1xuXG5leHBvcnRzLm5lc3QgPSBuZXN0O1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG5leHBvcnRzLm1hcCA9IG1hcDtcbmV4cG9ydHMua2V5cyA9IGtleXM7XG5leHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcbmV4cG9ydHMuZW50cmllcyA9IGVudHJpZXM7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4iLCIvLyBodHRwczovL2QzanMub3JnL2QzLWNvbG9yLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn07XG5cbmZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cblxuZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG52YXIgZGFya2VyID0gMC43O1xudmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiO1xudmFyIHJlTiA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCI7XG52YXIgcmVQID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCI7XG52YXIgcmVIZXgzID0gL14jKFswLTlhLWZdezN9KSQvO1xudmFyIHJlSGV4NiA9IC9eIyhbMC05YS1mXXs2fSkkLztcbnZhciByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVJLCByZUksIHJlSV0gKyBcIlxcXFwpJFwiKTtcbnZhciByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKTtcbnZhciByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZUksIHJlSSwgcmVJLCByZU5dICsgXCJcXFxcKSRcIik7XG52YXIgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xudmFyIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpO1xudmFyIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiICsgW3JlTiwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKSArIFwiXCI7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG07XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXgzLmV4ZWMoZm9ybWF0KSkgPyAobSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweDBmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkpIC8vICNmMDBcbiAgICAgIDogKG0gPSByZUhleDYuZXhlYyhmb3JtYXQpKSA/IHJnYm4ocGFyc2VJbnQobVsxXSwgMTYpKSAvLyAjZmYwMDAwXG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKVxuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5mdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMuciAmJiB0aGlzLnIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmcgJiYgdGhpcy5nIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5iICYmIHRoaXMuYiA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXG4gICAgICAgIGwgPSB0aGlzLmwsXG4gICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgIG0xID0gMiAqIGwgLSBtMjtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9XG59KSk7XG5cbi8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcbiAgICAgIDogaCA8IDE4MCA/IG0yXG4gICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICA6IG0xKSAqIDI1NTtcbn1cblxudmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xudmFyIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuXG52YXIgS24gPSAxODtcbnZhciBYbiA9IDAuOTUwNDcwO1xudmFyIFluID0gMTtcbnZhciBabiA9IDEuMDg4ODMwO1xudmFyIHQwID0gNCAvIDI5O1xudmFyIHQxID0gNiAvIDI5O1xudmFyIHQyID0gMyAqIHQxICogdDE7XG52YXIgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHtcbiAgICB2YXIgaCA9IG8uaCAqIGRlZzJyYWQ7XG4gICAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG4gIH1cbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgYiA9IHJnYjJ4eXooby5yKSxcbiAgICAgIGEgPSByZ2IyeHl6KG8uZyksXG4gICAgICBsID0gcmdiMnh5eihvLmIpLFxuICAgICAgeCA9IHh5ejJsYWIoKDAuNDEyNDU2NCAqIGIgKyAwLjM1NzU3NjEgKiBhICsgMC4xODA0Mzc1ICogbCkgLyBYbiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMTI2NzI5ICogYiArIDAuNzE1MTUyMiAqIGEgKyAwLjA3MjE3NTAgKiBsKSAvIFluKSxcbiAgICAgIHogPSB4eXoybGFiKCgwLjAxOTMzMzkgKiBiICsgMC4xMTkxOTIwICogYSArIDAuOTUwMzA0MSAqIGwpIC8gWm4pO1xuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIHh5ejJyZ2IoIDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICB4eXoycmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopLFxuICAgICAgeHl6MnJnYiggMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMuYyA9ICtjO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEtuICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEtuICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGFiQ29udmVydCh0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuXG52YXIgQSA9IC0wLjE0ODYxO1xudmFyIEIgPSArMS43ODI3NztcbnZhciBDID0gLTAuMjkyMjc7XG52YXIgRCA9IC0wLjkwNjQ5O1xudmFyIEUgPSArMS45NzI5NDtcbnZhciBFRCA9IEUgKiBEO1xudmFyIEVCID0gRSAqIEI7XG52YXIgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEN1YmVoZWxpeCwgY3ViZWhlbGl4LCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gaXNOYU4odGhpcy5oKSA/IDAgOiAodGhpcy5oICsgMTIwKSAqIGRlZzJyYWQsXG4gICAgICAgIGwgPSArdGhpcy5sLFxuICAgICAgICBhID0gaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMgKiBsICogKDEgLSBsKSxcbiAgICAgICAgY29zaCA9IE1hdGguY29zKGgpLFxuICAgICAgICBzaW5oID0gTWF0aC5zaW4oaCk7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICAyNTUgKiAobCArIGEgKiAoQSAqIGNvc2ggKyBCICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEMgKiBjb3NoICsgRCAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChFICogY29zaCkpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5leHBvcnRzLmNvbG9yID0gY29sb3I7XG5leHBvcnRzLnJnYiA9IHJnYjtcbmV4cG9ydHMuaHNsID0gaHNsO1xuZXhwb3J0cy5sYWIgPSBsYWI7XG5leHBvcnRzLmhjbCA9IGhjbDtcbmV4cG9ydHMuY3ViZWhlbGl4ID0gY3ViZWhlbGl4O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwiLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1kaXNwYXRjaC8gVmVyc2lvbiAxLjAuMS4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSkpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICAgIF9bdF0gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgICB0aGlzLl8gPSBfO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICAgIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gICAgfSk7XG4gIH1cblxuICBEaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICAgIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICAgIHQsXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgICB9LFxuICAgIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBleHBvcnRzLmRpc3BhdGNoID0gZGlzcGF0Y2g7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpOyIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtZm9ybWF0LyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvLyBDb21wdXRlcyB0aGUgZGVjaW1hbCBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQgb2YgdGhlIHNwZWNpZmllZCBudW1iZXIgeCB3aXRoXG4gIC8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbCgxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbiAgZnVuY3Rpb24gZm9ybWF0RGVjaW1hbCh4LCBwKSB7XG4gICAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gICAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICAgIHJldHVybiBbXG4gICAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICAgK3guc2xpY2UoaSArIDEpXG4gICAgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cG9uZW50KHgpIHtcbiAgICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWwoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdEdyb3VwKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgICB0ID0gW10sXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0RGVmYXVsdCh4LCBwKSB7XG4gICAgeCA9IHgudG9QcmVjaXNpb24ocCk7XG5cbiAgICBvdXQ6IGZvciAodmFyIG4gPSB4Lmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgICBzd2l0Y2ggKHhbaV0pIHtcbiAgICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgICAgY2FzZSBcImVcIjogYnJlYWsgb3V0O1xuICAgICAgICBkZWZhdWx0OiBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpMCA+IDAgPyB4LnNsaWNlKDAsIGkwKSArIHguc2xpY2UoaTEgKyAxKSA6IHg7XG4gIH1cblxuICB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4QXV0byh4LCBwKSB7XG4gICAgdmFyIGQgPSBmb3JtYXREZWNpbWFsKHgsIHApO1xuICAgIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICAgIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICAgIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3VuZGVkKHgsIHApIHtcbiAgICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gICAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gICAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICAgIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxuICAgICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG4gIH1cblxuICB2YXIgZm9ybWF0VHlwZXMgPSB7XG4gICAgXCJcIjogZm9ybWF0RGVmYXVsdCxcbiAgICBcIiVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gKHggKiAxMDApLnRvRml4ZWQocCk7IH0sXG4gICAgXCJiXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMik7IH0sXG4gICAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICAgIFwiZFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDEwKTsgfSxcbiAgICBcImVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0V4cG9uZW50aWFsKHApOyB9LFxuICAgIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gICAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXG4gICAgXCJvXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCk7IH0sXG4gICAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gICAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gICAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gICAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gICAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XG4gIH07XG5cbiAgLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICB2YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtXFwoIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KFthLXolXSk/JC9pO1xuXG4gIGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICAgIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcblxuICAgIHZhciBtYXRjaCxcbiAgICAgICAgZmlsbCA9IG1hdGNoWzFdIHx8IFwiIFwiLFxuICAgICAgICBhbGlnbiA9IG1hdGNoWzJdIHx8IFwiPlwiLFxuICAgICAgICBzaWduID0gbWF0Y2hbM10gfHwgXCItXCIsXG4gICAgICAgIHN5bWJvbCA9IG1hdGNoWzRdIHx8IFwiXCIsXG4gICAgICAgIHplcm8gPSAhIW1hdGNoWzVdLFxuICAgICAgICB3aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XSxcbiAgICAgICAgY29tbWEgPSAhIW1hdGNoWzddLFxuICAgICAgICBwcmVjaXNpb24gPSBtYXRjaFs4XSAmJiArbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgICAgIHR5cGUgPSBtYXRjaFs5XSB8fCBcIlwiO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gTWFwIGludmFsaWQgdHlwZXMgdG8gdGhlIGRlZmF1bHQgZm9ybWF0LlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgdHlwZSA9IFwiXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG4gICAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICAgIHRoaXMuc2lnbiA9IHNpZ247XG4gICAgdGhpcy5zeW1ib2wgPSBzeW1ib2w7XG4gICAgdGhpcy56ZXJvID0gemVybztcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5jb21tYSA9IGNvbW1hO1xuICAgIHRoaXMucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgICArIHRoaXMuYWxpZ25cbiAgICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICAgICsgKHRoaXMud2lkdGggPT0gbnVsbCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgICArIHRoaXMudHlwZTtcbiAgfTtcblxuICB2YXIgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG4gIGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgJiYgbG9jYWxlLnRob3VzYW5kcyA/IGZvcm1hdEdyb3VwKGxvY2FsZS5ncm91cGluZywgbG9jYWxlLnRob3VzYW5kcykgOiBpZGVudGl0eSxcbiAgICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbDtcblxuICAgIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMF0gOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5WzFdIDogL1slcF0vLnRlc3QodHlwZSkgPyBcIiVcIiA6IFwiXCI7XG5cbiAgICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICAgIG1heWJlU3VmZml4ID0gIXR5cGUgfHwgL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT0gbnVsbCA/ICh0eXBlID8gNiA6IDEyKVxuICAgICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgICAvLyBDb252ZXJ0IG5lZ2F0aXZlIHRvIHBvc2l0aXZlLCBhbmQgY29tcHV0ZSB0aGUgcHJlZml4LlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSAodmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDApICYmICh2YWx1ZSAqPSAtMSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgICAgdmFsdWUgPSBmb3JtYXRUeXBlKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBuZWdhdGl2ZSwgaXQgbWF5IGJlIHJvdW5kZWQgdG8gemVybyBkdXJpbmdcbiAgICAgICAgICAvLyBmb3JtYXR0aW5nOyB0cmVhdCB0aGlzIGFzIChwb3NpdGl2ZSkgemVyby5cbiAgICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSkge1xuICAgICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCAoNDggPCBjICYmIGMgPCA1OClcbiAgICAgICAgICAgICAgICAgIHx8ICh0eXBlID09PSBcInhcIiAmJiA5NiA8IGMgJiYgYyA8IDEwMylcbiAgICAgICAgICAgICAgICAgIHx8ICh0eXBlID09PSBcIlhcIiAmJiA2NCA8IGMgJiYgYyA8IDcxKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlTmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBcIi1cIikgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICAgIHZhbHVlU3VmZml4ID0gdmFsdWVTdWZmaXggKyAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgICBjYXNlIFwiPFwiOiByZXR1cm4gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZztcbiAgICAgICAgICBjYXNlIFwiPVwiOiByZXR1cm4gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICBjYXNlIFwiXlwiOiByZXR1cm4gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgIH1cblxuICAgICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICAgIH07XG4gIH1cblxuICB2YXIgbG9jYWxlO1xuICBkZWZhdWx0TG9jYWxlKHtcbiAgICBkZWNpbWFsOiBcIi5cIixcbiAgICB0aG91c2FuZHM6IFwiLFwiLFxuICAgIGdyb3VwaW5nOiBbM10sXG4gICAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICAgIGV4cG9ydHMuZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgICBleHBvcnRzLmZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gICAgcmV0dXJuIGxvY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWNpc2lvbkZpeGVkKHN0ZXApIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgLWV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlY2lzaW9uUm91bmQoc3RlcCwgbWF4KSB7XG4gICAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG4gIH1cblxuICBleHBvcnRzLmZvcm1hdERlZmF1bHRMb2NhbGUgPSBkZWZhdWx0TG9jYWxlO1xuICBleHBvcnRzLmZvcm1hdExvY2FsZSA9IGZvcm1hdExvY2FsZTtcbiAgZXhwb3J0cy5mb3JtYXRTcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXI7XG4gIGV4cG9ydHMucHJlY2lzaW9uRml4ZWQgPSBwcmVjaXNpb25GaXhlZDtcbiAgZXhwb3J0cy5wcmVjaXNpb25QcmVmaXggPSBwcmVjaXNpb25QcmVmaXg7XG4gIGV4cG9ydHMucHJlY2lzaW9uUm91bmQgPSBwcmVjaXNpb25Sb3VuZDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7IiwiLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1pbnRlcnBvbGF0ZS8gVmVyc2lvbiAxLjEuMi4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCdkMy1jb2xvcicpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMtY29sb3InXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSxnbG9iYWwuZDMpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzLGQzQ29sb3IpIHsgJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG52YXIgYmFzaXMkMSA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdCA8PSAwID8gKHQgPSAwKSA6IHQgPj0gMSA/ICh0ID0gMSwgbiAtIDEpIDogTWF0aC5mbG9vcih0ICogbiksXG4gICAgICAgIHYxID0gdmFsdWVzW2ldLFxuICAgICAgICB2MiA9IHZhbHVlc1tpICsgMV0sXG4gICAgICAgIHYwID0gaSA+IDAgPyB2YWx1ZXNbaSAtIDFdIDogMiAqIHYxIC0gdjIsXG4gICAgICAgIHYzID0gaSA8IG4gLSAxID8gdmFsdWVzW2kgKyAyXSA6IDIgKiB2MiAtIHYxO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn07XG5cbnZhciBiYXNpc0Nsb3NlZCA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn07XG5cbnZhciBjb25zdGFudCA9IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufTtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5mdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbnZhciByZ2IkMSA9IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciQkMSA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYiQkMShzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvciQkMSgoc3RhcnQgPSBkM0NvbG9yLnJnYihzdGFydCkpLnIsIChlbmQgPSBkM0NvbG9yLnJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yJCQxKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yJCQxKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yJCQxKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuciA9IHIodCk7XG4gICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cblxuICByZ2IkJDEuZ2FtbWEgPSByZ2JHYW1tYTtcblxuICByZXR1cm4gcmdiJCQxO1xufSkoMSk7XG5cbmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbG9ycykge1xuICAgIHZhciBuID0gY29sb3JzLmxlbmd0aCxcbiAgICAgICAgciA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgZyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgaSwgY29sb3IkJDE7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29sb3IkJDEgPSBkM0NvbG9yLnJnYihjb2xvcnNbaV0pO1xuICAgICAgcltpXSA9IGNvbG9yJCQxLnIgfHwgMDtcbiAgICAgIGdbaV0gPSBjb2xvciQkMS5nIHx8IDA7XG4gICAgICBiW2ldID0gY29sb3IkJDEuYiB8fCAwO1xuICAgIH1cbiAgICByID0gc3BsaW5lKHIpO1xuICAgIGcgPSBzcGxpbmUoZyk7XG4gICAgYiA9IHNwbGluZShiKTtcbiAgICBjb2xvciQkMS5vcGFjaXR5ID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgY29sb3IkJDEuciA9IHIodCk7XG4gICAgICBjb2xvciQkMS5nID0gZyh0KTtcbiAgICAgIGNvbG9yJCQxLmIgPSBiKHQpO1xuICAgICAgcmV0dXJuIGNvbG9yJCQxICsgXCJcIjtcbiAgICB9O1xuICB9O1xufVxuXG52YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMkMSk7XG52YXIgcmdiQmFzaXNDbG9zZWQgPSByZ2JTcGxpbmUoYmFzaXNDbG9zZWQpO1xuXG52YXIgYXJyYXkgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmIpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59O1xuXG52YXIgZGF0ZSA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICsgYiAqIHQpLCBkO1xuICB9O1xufTtcblxudmFyIG51bWJlciA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyBiICogdDtcbiAgfTtcbn07XG5cbnZhciBvYmplY3QgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufTtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZztcbnZhciByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbnZhciBzdHJpbmcgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59O1xuXG52YXIgdmFsdWUgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gZDNDb2xvci5jb2xvcihiKSkgPyAoYiA9IGMsIHJnYiQxKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGQzQ29sb3IuY29sb3IgPyByZ2IkMVxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGFycmF5XG4gICAgICA6IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59O1xuXG52YXIgcm91bmQgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKyBiICogdCk7XG4gIH07XG59O1xuXG52YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbnZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbnZhciBkZWNvbXBvc2UgPSBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn07XG5cbnZhciBjc3NOb2RlO1xudmFyIGNzc1Jvb3Q7XG52YXIgY3NzVmlldztcbnZhciBzdmdOb2RlO1xuXG5mdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IFwibm9uZVwiKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghY3NzTm9kZSkgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksIGNzc1Jvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGNzc1ZpZXcgPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgY3NzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgdmFsdWUgPSBjc3NWaWV3LmdldENvbXB1dGVkU3R5bGUoY3NzUm9vdC5hcHBlbmRDaGlsZChjc3NOb2RlKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKTtcbiAgY3NzUm9vdC5yZW1vdmVDaGlsZChjc3NOb2RlKTtcbiAgdmFsdWUgPSB2YWx1ZS5zbGljZSg3LCAtMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gZGVjb21wb3NlKCt2YWx1ZVswXSwgK3ZhbHVlWzFdLCArdmFsdWVbMl0sICt2YWx1ZVszXSwgK3ZhbHVlWzRdLCArdmFsdWVbNV0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbnZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xudmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcblxudmFyIHJobyA9IE1hdGguU1FSVDI7XG52YXIgcmhvMiA9IDI7XG52YXIgcmhvNCA9IDQ7XG52YXIgZXBzaWxvbjIgPSAxZS0xMjtcblxuZnVuY3Rpb24gY29zaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgKyAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiBzaW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSAtIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHRhbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoMiAqIHgpKSAtIDEpIC8gKHggKyAxKTtcbn1cblxuLy8gcDAgPSBbdXgwLCB1eTAsIHcwXVxuLy8gcDEgPSBbdXgxLCB1eTEsIHcxXVxudmFyIHpvb20gPSBmdW5jdGlvbihwMCwgcDEpIHtcbiAgdmFyIHV4MCA9IHAwWzBdLCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSxcbiAgICAgIHV4MSA9IHAxWzBdLCB1eTEgPSBwMVsxXSwgdzEgPSBwMVsyXSxcbiAgICAgIGR4ID0gdXgxIC0gdXgwLFxuICAgICAgZHkgPSB1eTEgLSB1eTAsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgaSxcbiAgICAgIFM7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciB1MCDiiYUgdTEuXG4gIGlmIChkMiA8IGVwc2lsb24yKSB7XG4gICAgUyA9IE1hdGgubG9nKHcxIC8gdzApIC8gcmhvO1xuICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB0ICogZHgsXG4gICAgICAgIHV5MCArIHQgKiBkeSxcbiAgICAgICAgdzAgKiBNYXRoLmV4cChyaG8gKiB0ICogUylcbiAgICAgIF07XG4gICAgfTtcbiAgfVxuXG4gIC8vIEdlbmVyYWwgY2FzZS5cbiAgZWxzZSB7XG4gICAgdmFyIGQxID0gTWF0aC5zcXJ0KGQyKSxcbiAgICAgICAgYjAgPSAodzEgKiB3MSAtIHcwICogdzAgKyByaG80ICogZDIpIC8gKDIgKiB3MCAqIHJobzIgKiBkMSksXG4gICAgICAgIGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gcmhvNCAqIGQyKSAvICgyICogdzEgKiByaG8yICogZDEpLFxuICAgICAgICByMCA9IE1hdGgubG9nKE1hdGguc3FydChiMCAqIGIwICsgMSkgLSBiMCksXG4gICAgICAgIHIxID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIxICogYjEgKyAxKSAtIGIxKTtcbiAgICBTID0gKHIxIC0gcjApIC8gcmhvO1xuICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgcyA9IHQgKiBTLFxuICAgICAgICAgIGNvc2hyMCA9IGNvc2gocjApLFxuICAgICAgICAgIHUgPSB3MCAvIChyaG8yICogZDEpICogKGNvc2hyMCAqIHRhbmgocmhvICogcyArIHIwKSAtIHNpbmgocjApKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHV4MCArIHUgKiBkeCxcbiAgICAgICAgdXkwICsgdSAqIGR5LFxuICAgICAgICB3MCAqIGNvc2hyMCAvIGNvc2gocmhvICogcyArIHIwKVxuICAgICAgXTtcbiAgICB9O1xuICB9XG5cbiAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwO1xuXG4gIHJldHVybiBpO1xufTtcblxuZnVuY3Rpb24gaHNsJDEoaHVlJCQxKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgdmFyIGggPSBodWUkJDEoKHN0YXJ0ID0gZDNDb2xvci5oc2woc3RhcnQpKS5oLCAoZW5kID0gZDNDb2xvci5oc2woZW5kKSkuaCksXG4gICAgICAgIHMgPSBub2dhbW1hKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgbCA9IG5vZ2FtbWEoc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICBzdGFydC5sID0gbCh0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG59XG5cbnZhciBoc2wkMiA9IGhzbCQxKGh1ZSk7XG52YXIgaHNsTG9uZyA9IGhzbCQxKG5vZ2FtbWEpO1xuXG5mdW5jdGlvbiBsYWIkMShzdGFydCwgZW5kKSB7XG4gIHZhciBsID0gbm9nYW1tYSgoc3RhcnQgPSBkM0NvbG9yLmxhYihzdGFydCkpLmwsIChlbmQgPSBkM0NvbG9yLmxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBub2dhbW1hKHN0YXJ0LmEsIGVuZC5hKSxcbiAgICAgIGIgPSBub2dhbW1hKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoY2wkMShodWUkJDEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSQkMSgoc3RhcnQgPSBkM0NvbG9yLmhjbChzdGFydCkpLmgsIChlbmQgPSBkM0NvbG9yLmhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IG5vZ2FtbWEoc3RhcnQuYywgZW5kLmMpLFxuICAgICAgICBsID0gbm9nYW1tYShzdGFydC5sLCBlbmQubCksXG4gICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxudmFyIGhjbCQyID0gaGNsJDEoaHVlKTtcbnZhciBoY2xMb25nID0gaGNsJDEobm9nYW1tYSk7XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeCQxKGh1ZSQkMSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGN1YmVoZWxpeEdhbW1hKHkpIHtcbiAgICB5ID0gK3k7XG5cbiAgICBmdW5jdGlvbiBjdWJlaGVsaXgkJDEoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGggPSBodWUkJDEoKHN0YXJ0ID0gZDNDb2xvci5jdWJlaGVsaXgoc3RhcnQpKS5oLCAoZW5kID0gZDNDb2xvci5jdWJlaGVsaXgoZW5kKSkuaCksXG4gICAgICAgICAgcyA9IG5vZ2FtbWEoc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBub2dhbW1hKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICAgIHN0YXJ0LmwgPSBsKE1hdGgucG93KHQsIHkpKTtcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGN1YmVoZWxpeCQkMS5nYW1tYSA9IGN1YmVoZWxpeEdhbW1hO1xuXG4gICAgcmV0dXJuIGN1YmVoZWxpeCQkMTtcbiAgfSkoMSk7XG59XG5cbnZhciBjdWJlaGVsaXgkMiA9IGN1YmVoZWxpeCQxKGh1ZSk7XG52YXIgY3ViZWhlbGl4TG9uZyA9IGN1YmVoZWxpeCQxKG5vZ2FtbWEpO1xuXG52YXIgcXVhbnRpemUgPSBmdW5jdGlvbihpbnRlcnBvbGF0b3IsIG4pIHtcbiAgdmFyIHNhbXBsZXMgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBzYW1wbGVzW2ldID0gaW50ZXJwb2xhdG9yKGkgLyAobiAtIDEpKTtcbiAgcmV0dXJuIHNhbXBsZXM7XG59O1xuXG5leHBvcnRzLmludGVycG9sYXRlID0gdmFsdWU7XG5leHBvcnRzLmludGVycG9sYXRlQXJyYXkgPSBhcnJheTtcbmV4cG9ydHMuaW50ZXJwb2xhdGVCYXNpcyA9IGJhc2lzJDE7XG5leHBvcnRzLmludGVycG9sYXRlQmFzaXNDbG9zZWQgPSBiYXNpc0Nsb3NlZDtcbmV4cG9ydHMuaW50ZXJwb2xhdGVEYXRlID0gZGF0ZTtcbmV4cG9ydHMuaW50ZXJwb2xhdGVOdW1iZXIgPSBudW1iZXI7XG5leHBvcnRzLmludGVycG9sYXRlT2JqZWN0ID0gb2JqZWN0O1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVJvdW5kID0gcm91bmQ7XG5leHBvcnRzLmludGVycG9sYXRlU3RyaW5nID0gc3RyaW5nO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtQ3NzO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtU3ZnO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVpvb20gPSB6b29tO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVJnYiA9IHJnYiQxO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVJnYkJhc2lzID0gcmdiQmFzaXM7XG5leHBvcnRzLmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQgPSByZ2JCYXNpc0Nsb3NlZDtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIc2wgPSBoc2wkMjtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIc2xMb25nID0gaHNsTG9uZztcbmV4cG9ydHMuaW50ZXJwb2xhdGVMYWIgPSBsYWIkMTtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIY2wgPSBoY2wkMjtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIY2xMb25nID0gaGNsTG9uZztcbmV4cG9ydHMuaW50ZXJwb2xhdGVDdWJlaGVsaXggPSBjdWJlaGVsaXgkMjtcbmV4cG9ydHMuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nID0gY3ViZWhlbGl4TG9uZztcbmV4cG9ydHMucXVhbnRpemUgPSBxdWFudGl6ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtc2NhbGUvIFZlcnNpb24gMS4wLjMuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnZDMtYXJyYXknKSwgcmVxdWlyZSgnZDMtY29sbGVjdGlvbicpLCByZXF1aXJlKCdkMy1pbnRlcnBvbGF0ZScpLCByZXF1aXJlKCdkMy1mb3JtYXQnKSwgcmVxdWlyZSgnZDMtdGltZScpLCByZXF1aXJlKCdkMy10aW1lLWZvcm1hdCcpLCByZXF1aXJlKCdkMy1jb2xvcicpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMtYXJyYXknLCAnZDMtY29sbGVjdGlvbicsICdkMy1pbnRlcnBvbGF0ZScsICdkMy1mb3JtYXQnLCAnZDMtdGltZScsICdkMy10aW1lLWZvcm1hdCcsICdkMy1jb2xvciddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pLGdsb2JhbC5kMyxnbG9iYWwuZDMsZ2xvYmFsLmQzLGdsb2JhbC5kMyxnbG9iYWwuZDMsZ2xvYmFsLmQzLGdsb2JhbC5kMykpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cyxkM0FycmF5LGQzQ29sbGVjdGlvbixkM0ludGVycG9sYXRlLGQzRm9ybWF0LGQzVGltZSxkM1RpbWVGb3JtYXQsZDNDb2xvcikgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG4gIHZhciBtYXAkMSA9IGFycmF5Lm1hcDtcbiAgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG5cbiAgdmFyIGltcGxpY2l0ID0ge25hbWU6IFwiaW1wbGljaXRcIn07XG5cbiAgZnVuY3Rpb24gb3JkaW5hbChyYW5nZSkge1xuICAgIHZhciBpbmRleCA9IGQzQ29sbGVjdGlvbi5tYXAoKSxcbiAgICAgICAgZG9tYWluID0gW10sXG4gICAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICAgIHJhbmdlID0gcmFuZ2UgPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChyYW5nZSk7XG5cbiAgICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgICB2YXIga2V5ID0gZCArIFwiXCIsIGkgPSBpbmRleC5nZXQoa2V5KTtcbiAgICAgIGlmICghaSkge1xuICAgICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgICBpbmRleC5zZXQoa2V5LCBpID0gZG9tYWluLnB1c2goZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICAgIH1cblxuICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgICAgZG9tYWluID0gW10sIGluZGV4ID0gZDNDb2xsZWN0aW9uLm1hcCgpO1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IF8ubGVuZ3RoLCBkLCBrZXk7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgICByZXR1cm4gc2NhbGU7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gICAgfTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBvcmRpbmFsKClcbiAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhbmQoKSB7XG4gICAgdmFyIHNjYWxlID0gb3JkaW5hbCgpLnVua25vd24odW5kZWZpbmVkKSxcbiAgICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgICBvcmRpbmFsUmFuZ2UgPSBzY2FsZS5yYW5nZSxcbiAgICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICAgIHN0ZXAsXG4gICAgICAgIGJhbmR3aWR0aCxcbiAgICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgICAgcGFkZGluZ091dGVyID0gMCxcbiAgICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgICByZXZlcnNlID0gcmFuZ2VbMV0gPCByYW5nZVswXSxcbiAgICAgICAgICBzdGFydCA9IHJhbmdlW3JldmVyc2UgLSAwXSxcbiAgICAgICAgICBzdG9wID0gcmFuZ2VbMSAtIHJldmVyc2VdO1xuICAgICAgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMSwgbiAtIHBhZGRpbmdJbm5lciArIHBhZGRpbmdPdXRlciAqIDIpO1xuICAgICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHN0YXJ0ICs9IChzdG9wIC0gc3RhcnQgLSBzdGVwICogKG4gLSBwYWRkaW5nSW5uZXIpKSAqIGFsaWduO1xuICAgICAgYmFuZHdpZHRoID0gc3RlcCAqICgxIC0gcGFkZGluZ0lubmVyKTtcbiAgICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgICAgdmFyIHZhbHVlcyA9IGQzQXJyYXkucmFuZ2UobikubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7IH0pO1xuICAgICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gICAgfVxuXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gcmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLmJhbmR3aWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgICB9O1xuXG4gICAgc2NhbGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfTtcblxuICAgIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgICB9O1xuXG4gICAgc2NhbGUucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IHBhZGRpbmdPdXRlciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIF8pKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgICB9O1xuXG4gICAgc2NhbGUucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogcGFkZGluZ0lubmVyO1xuICAgIH07XG5cbiAgICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nT3V0ZXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBwYWRkaW5nT3V0ZXI7XG4gICAgfTtcblxuICAgIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxpZ24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBhbGlnbjtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGJhbmQoKVxuICAgICAgICAgIC5kb21haW4oZG9tYWluKCkpXG4gICAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAgIC5yb3VuZChyb3VuZClcbiAgICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgICAuYWxpZ24oYWxpZ24pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9pbnRpc2goc2NhbGUpIHtcbiAgICB2YXIgY29weSA9IHNjYWxlLmNvcHk7XG5cbiAgICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICAgIGRlbGV0ZSBzY2FsZS5wYWRkaW5nSW5uZXI7XG4gICAgZGVsZXRlIHNjYWxlLnBhZGRpbmdPdXRlcjtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwb2ludGlzaChjb3B5KCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBwb2ludCgpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goYmFuZCgpLnBhZGRpbmdJbm5lcigxKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgcmV0dXJuICt4O1xuICB9XG5cbiAgdmFyIHVuaXQgPSBbMCwgMV07XG5cbiAgZnVuY3Rpb24gZGVpbnRlcnBvbGF0ZShhLCBiKSB7XG4gICAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICAgIDogY29uc3RhbnQoYik7XG4gIH1cblxuICBmdW5jdGlvbiBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICB2YXIgZCA9IGRlaW50ZXJwb2xhdGUoYSA9ICthLCBiID0gK2IpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPD0gYSA/IDAgOiB4ID49IGIgPyAxIDogZCh4KTsgfTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgICAgdmFyIHIgPSByZWludGVycG9sYXRlKGEgPSArYSwgYiA9ICtiKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiB0IDw9IDAgPyBhIDogdCA+PSAxID8gYiA6IHIodCk7IH07XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICAgIGlmIChkMSA8IGQwKSBkMCA9IGRlaW50ZXJwb2xhdGUoZDEsIGQwKSwgcjAgPSByZWludGVycG9sYXRlKHIxLCByMCk7XG4gICAgZWxzZSBkMCA9IGRlaW50ZXJwb2xhdGUoZDAsIGQxKSwgcjAgPSByZWludGVycG9sYXRlKHIwLCByMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICAgIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICAgIGkgPSAtMTtcblxuICAgIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICAgIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKCsraSA8IGopIHtcbiAgICAgIGRbaV0gPSBkZWludGVycG9sYXRlKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgICByW2ldID0gcmVpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgICAgdmFyIGkgPSBkM0FycmF5LmJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldFxuICAgICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSk7XG4gIH1cblxuICAvLyBkZWludGVycG9sYXRlKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4gIC8vIHJlaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBkb21haW4gdmFsdWUgeCBpbiBbYSxiXS5cbiAgZnVuY3Rpb24gY29udGludW91cyhkZWludGVycG9sYXRlJCQsIHJlaW50ZXJwb2xhdGUpIHtcbiAgICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgICBpbnRlcnBvbGF0ZSA9IGQzSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGUsXG4gICAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICAgIHBpZWNld2lzZSxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBpbnB1dDtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgICByZXR1cm4gKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbiwgcmFuZ2UsIGNsYW1wID8gZGVpbnRlcnBvbGF0ZUNsYW1wKGRlaW50ZXJwb2xhdGUkJCkgOiBkZWludGVycG9sYXRlJCQsIGludGVycG9sYXRlKSkpKCt4KTtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLCBkZWludGVycG9sYXRlLCBjbGFtcCA/IHJlaW50ZXJwb2xhdGVDbGFtcChyZWludGVycG9sYXRlKSA6IHJlaW50ZXJwb2xhdGUpKSkoK3kpO1xuICAgIH07XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAkMS5jYWxsKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBkM0ludGVycG9sYXRlLmludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9ICEhXywgcmVzY2FsZSgpKSA6IGNsYW1wO1xuICAgIH07XG5cbiAgICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkb21haW4sIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgc3RhcnQgPSBkb21haW5bMF0sXG4gICAgICAgIHN0b3AgPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdLFxuICAgICAgICBzdGVwID0gZDNBcnJheS50aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpLFxuICAgICAgICBwcmVjaXNpb247XG4gICAgc3BlY2lmaWVyID0gZDNGb3JtYXQuZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgICBjYXNlIFwic1wiOiB7XG4gICAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBkM0Zvcm1hdC5wcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgICAgcmV0dXJuIGQzRm9ybWF0LmZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJcIjpcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZ1wiOlxuICAgICAgY2FzZSBcInBcIjpcbiAgICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gZDNGb3JtYXQucHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJmXCI6XG4gICAgICBjYXNlIFwiJVwiOiB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IGQzRm9ybWF0LnByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkM0Zvcm1hdC5mb3JtYXQoc3BlY2lmaWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICAgIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgICAgcmV0dXJuIGQzQXJyYXkudGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgICByZXR1cm4gdGlja0Zvcm1hdChkb21haW4oKSwgY291bnQsIHNwZWNpZmllcik7XG4gICAgfTtcblxuICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xuICAgICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgICBpID0gZC5sZW5ndGggLSAxLFxuICAgICAgICAgIG4gPSBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCxcbiAgICAgICAgICBzdGFydCA9IGRbMF0sXG4gICAgICAgICAgc3RvcCA9IGRbaV0sXG4gICAgICAgICAgc3RlcCA9IGQzQXJyYXkudGlja1N0ZXAoc3RhcnQsIHN0b3AsIG4pO1xuXG4gICAgICBpZiAoc3RlcCkge1xuICAgICAgICBzdGVwID0gZDNBcnJheS50aWNrU3RlcChNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwLCBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcCwgbik7XG4gICAgICAgIGRbMF0gPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBkW2ldID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIGRvbWFpbihkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gICAgdmFyIHNjYWxlID0gY29udGludW91cyhkZWludGVycG9sYXRlLCBkM0ludGVycG9sYXRlLmludGVycG9sYXRlTnVtYmVyKTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRlbnRpdHkoKSB7XG4gICAgdmFyIGRvbWFpbiA9IFswLCAxXTtcblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIHJldHVybiAreDtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnQgPSBzY2FsZTtcblxuICAgIHNjYWxlLmRvbWFpbiA9IHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gbWFwJDEuY2FsbChfLCBudW1iZXIpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlkZW50aXR5KCkuZG9tYWluKGRvbWFpbik7XG4gICAgfTtcblxuICAgIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmljZShkb21haW4sIGludGVydmFsKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgICB2YXIgaTAgPSAwLFxuICAgICAgICBpMSA9IGRvbWFpbi5sZW5ndGggLSAxLFxuICAgICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgICAgdDtcblxuICAgIGlmICh4MSA8IHgwKSB7XG4gICAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICAgIHQgPSB4MCwgeDAgPSB4MSwgeDEgPSB0O1xuICAgIH1cblxuICAgIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gICAgZG9tYWluW2kxXSA9IGludGVydmFsLmNlaWwoeDEpO1xuICAgIHJldHVybiBkb21haW47XG4gIH1cblxuICBmdW5jdGlvbiBkZWludGVycG9sYXRlJDEoYSwgYikge1xuICAgIHJldHVybiAoYiA9IE1hdGgubG9nKGIgLyBhKSlcbiAgICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLmxvZyh4IC8gYSkgLyBiOyB9XG4gICAgICAgIDogY29uc3RhbnQoYik7XG4gIH1cblxuICBmdW5jdGlvbiByZWludGVycG9sYXRlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IDBcbiAgICAgICAgPyBmdW5jdGlvbih0KSB7IHJldHVybiAtTWF0aC5wb3coLWIsIHQpICogTWF0aC5wb3coLWEsIDEgLSB0KTsgfVxuICAgICAgICA6IGZ1bmN0aW9uKHQpIHsgcmV0dXJuIE1hdGgucG93KGIsIHQpICogTWF0aC5wb3coYSwgMSAtIHQpOyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcG93MTAoeCkge1xuICAgIHJldHVybiBpc0Zpbml0ZSh4KSA/ICsoXCIxZVwiICsgeCkgOiB4IDwgMCA/IDAgOiB4O1xuICB9XG5cbiAgZnVuY3Rpb24gcG93cChiYXNlKSB7XG4gICAgcmV0dXJuIGJhc2UgPT09IDEwID8gcG93MTBcbiAgICAgICAgOiBiYXNlID09PSBNYXRoLkUgPyBNYXRoLmV4cFxuICAgICAgICA6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucG93KGJhc2UsIHgpOyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9ncChiYXNlKSB7XG4gICAgcmV0dXJuIGJhc2UgPT09IE1hdGguRSA/IE1hdGgubG9nXG4gICAgICAgIDogYmFzZSA9PT0gMTAgJiYgTWF0aC5sb2cxMFxuICAgICAgICB8fCBiYXNlID09PSAyICYmIE1hdGgubG9nMlxuICAgICAgICB8fCAoYmFzZSA9IE1hdGgubG9nKGJhc2UpLCBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLmxvZyh4KSAvIGJhc2U7IH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmbGVjdChmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiAtZigteCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZygpIHtcbiAgICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUkMSwgcmVpbnRlcnBvbGF0ZSkuZG9tYWluKFsxLCAxMF0pLFxuICAgICAgICBkb21haW4gPSBzY2FsZS5kb21haW4sXG4gICAgICAgIGJhc2UgPSAxMCxcbiAgICAgICAgbG9ncyA9IGxvZ3AoMTApLFxuICAgICAgICBwb3dzID0gcG93cCgxMCk7XG5cbiAgICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgICAgbG9ncyA9IGxvZ3AoYmFzZSksIHBvd3MgPSBwb3dwKGJhc2UpO1xuICAgICAgaWYgKGRvbWFpbigpWzBdIDwgMCkgbG9ncyA9IHJlZmxlY3QobG9ncyksIHBvd3MgPSByZWZsZWN0KHBvd3MpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHNjYWxlLmJhc2UgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChiYXNlID0gK18sIHJlc2NhbGUoKSkgOiBiYXNlO1xuICAgIH07XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgICB9O1xuXG4gICAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgICB1ID0gZFswXSxcbiAgICAgICAgICB2ID0gZFtkLmxlbmd0aCAtIDFdLFxuICAgICAgICAgIHI7XG5cbiAgICAgIGlmIChyID0gdiA8IHUpIGkgPSB1LCB1ID0gdiwgdiA9IGk7XG5cbiAgICAgIHZhciBpID0gbG9ncyh1KSxcbiAgICAgICAgICBqID0gbG9ncyh2KSxcbiAgICAgICAgICBwLFxuICAgICAgICAgIGssXG4gICAgICAgICAgdCxcbiAgICAgICAgICBuID0gY291bnQgPT0gbnVsbCA/IDEwIDogK2NvdW50LFxuICAgICAgICAgIHogPSBbXTtcblxuICAgICAgaWYgKCEoYmFzZSAlIDEpICYmIGogLSBpIDwgbikge1xuICAgICAgICBpID0gTWF0aC5yb3VuZChpKSAtIDEsIGogPSBNYXRoLnJvdW5kKGopICsgMTtcbiAgICAgICAgaWYgKHUgPiAwKSBmb3IgKDsgaSA8IGo7ICsraSkge1xuICAgICAgICAgIGZvciAoayA9IDEsIHAgPSBwb3dzKGkpOyBrIDwgYmFzZTsgKytrKSB7XG4gICAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgICBpZiAodCA8IHUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHQgPiB2KSBicmVhaztcbiAgICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBmb3IgKDsgaSA8IGo7ICsraSkge1xuICAgICAgICAgIGZvciAoayA9IGJhc2UgLSAxLCBwID0gcG93cyhpKTsgayA+PSAxOyAtLWspIHtcbiAgICAgICAgICAgIHQgPSBwICogaztcbiAgICAgICAgICAgIGlmICh0IDwgdSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgICAgei5wdXNoKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeiA9IGQzQXJyYXkudGlja3MoaSwgaiwgTWF0aC5taW4oaiAtIGksIG4pKS5tYXAocG93cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByID8gei5yZXZlcnNlKCkgOiB6O1xuICAgIH07XG5cbiAgICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgICAgaWYgKHNwZWNpZmllciA9PSBudWxsKSBzcGVjaWZpZXIgPSBiYXNlID09PSAxMCA/IFwiLjBlXCIgOiBcIixcIjtcbiAgICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHNwZWNpZmllciA9IGQzRm9ybWF0LmZvcm1hdChzcGVjaWZpZXIpO1xuICAgICAgaWYgKGNvdW50ID09PSBJbmZpbml0eSkgcmV0dXJuIHNwZWNpZmllcjtcbiAgICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuICAgICAgdmFyIGsgPSBNYXRoLm1heCgxLCBiYXNlICogY291bnQgLyBzY2FsZS50aWNrcygpLmxlbmd0aCk7IC8vIFRPRE8gZmFzdCBlc3RpbWF0ZT9cbiAgICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBpID0gZCAvIHBvd3MoTWF0aC5yb3VuZChsb2dzKGQpKSk7XG4gICAgICAgIGlmIChpICogYmFzZSA8IGJhc2UgLSAwLjUpIGkgKj0gYmFzZTtcbiAgICAgICAgcmV0dXJuIGkgPD0gayA/IHNwZWNpZmllcihkKSA6IFwiXCI7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZG9tYWluKG5pY2UoZG9tYWluKCksIHtcbiAgICAgICAgZmxvb3I6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5mbG9vcihsb2dzKHgpKSk7IH0sXG4gICAgICAgIGNlaWw6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5jZWlsKGxvZ3MoeCkpKTsgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29weShzY2FsZSwgbG9nKCkuYmFzZShiYXNlKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhaXNlKHgsIGV4cG9uZW50KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLU1hdGgucG93KC14LCBleHBvbmVudCkgOiBNYXRoLnBvdyh4LCBleHBvbmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBwb3coKSB7XG4gICAgdmFyIGV4cG9uZW50ID0gMSxcbiAgICAgICAgc2NhbGUgPSBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpLFxuICAgICAgICBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgICBmdW5jdGlvbiBkZWludGVycG9sYXRlKGEsIGIpIHtcbiAgICAgIHJldHVybiAoYiA9IHJhaXNlKGIsIGV4cG9uZW50KSAtIChhID0gcmFpc2UoYSwgZXhwb25lbnQpKSlcbiAgICAgICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIChyYWlzZSh4LCBleHBvbmVudCkgLSBhKSAvIGI7IH1cbiAgICAgICAgICA6IGNvbnN0YW50KGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlaW50ZXJwb2xhdGUoYSwgYikge1xuICAgICAgYiA9IHJhaXNlKGIsIGV4cG9uZW50KSAtIChhID0gcmFpc2UoYSwgZXhwb25lbnQpKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiByYWlzZShhICsgYiAqIHQsIDEgLyBleHBvbmVudCk7IH07XG4gICAgfVxuXG4gICAgc2NhbGUuZXhwb25lbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHBvbmVudCA9ICtfLCBkb21haW4oZG9tYWluKCkpKSA6IGV4cG9uZW50O1xuICAgIH07XG5cbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29weShzY2FsZSwgcG93KCkuZXhwb25lbnQoZXhwb25lbnQpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzcXJ0KCkge1xuICAgIHJldHVybiBwb3coKS5leHBvbmVudCgwLjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpbGUkMSgpIHtcbiAgICB2YXIgZG9tYWluID0gW10sXG4gICAgICAgIHJhbmdlID0gW10sXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgaSA9IDAsIG4gPSBNYXRoLm1heCgxLCByYW5nZS5sZW5ndGgpO1xuICAgICAgdGhyZXNob2xkcyA9IG5ldyBBcnJheShuIC0gMSk7XG4gICAgICB3aGlsZSAoKytpIDwgbikgdGhyZXNob2xkc1tpIC0gMV0gPSBkM0FycmF5LnF1YW50aWxlKGRvbWFpbiwgaSAvIG4pO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIGlmICghaXNOYU4oeCA9ICt4KSkgcmV0dXJuIHJhbmdlW2QzQXJyYXkuYmlzZWN0KHRocmVzaG9sZHMsIHgpXTtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dIDogW1xuICAgICAgICBpID4gMCA/IHRocmVzaG9sZHNbaSAtIDFdIDogZG9tYWluWzBdLFxuICAgICAgICBpIDwgdGhyZXNob2xkcy5sZW5ndGggPyB0aHJlc2hvbGRzW2ldIDogZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXVxuICAgICAgXTtcbiAgICB9O1xuXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgICBkb21haW4gPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gXy5sZW5ndGgsIGQ7IGkgPCBuOyArK2kpIGlmIChkID0gX1tpXSwgZCAhPSBudWxsICYmICFpc05hTihkID0gK2QpKSBkb21haW4ucHVzaChkKTtcbiAgICAgIGRvbWFpbi5zb3J0KGQzQXJyYXkuYXNjZW5kaW5nKTtcbiAgICAgIHJldHVybiByZXNjYWxlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUucXVhbnRpbGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhyZXNob2xkcy5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVhbnRpbGUkMSgpXG4gICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgLnJhbmdlKHJhbmdlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpemUoKSB7XG4gICAgdmFyIHgwID0gMCxcbiAgICAgICAgeDEgPSAxLFxuICAgICAgICBuID0gMSxcbiAgICAgICAgZG9tYWluID0gWzAuNV0sXG4gICAgICAgIHJhbmdlID0gWzAsIDFdO1xuXG4gICAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgICAgaWYgKHggPD0geCkgcmV0dXJuIHJhbmdlW2QzQXJyYXkuYmlzZWN0KGRvbWFpbiwgeCwgMCwgbildO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgaSA9IC0xO1xuICAgICAgZG9tYWluID0gbmV3IEFycmF5KG4pO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGRvbWFpbltpXSA9ICgoaSArIDEpICogeDEgLSAoaSAtIG4pICogeDApIC8gKG4gKyAxKTtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9ICtfWzBdLCB4MSA9ICtfWzFdLCByZXNjYWxlKCkpIDogW3gwLCB4MV07XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobiA9IChyYW5nZSA9IHNsaWNlLmNhbGwoXykpLmxlbmd0aCAtIDEsIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dXG4gICAgICAgICAgOiBpIDwgMSA/IFt4MCwgZG9tYWluWzBdXVxuICAgICAgICAgIDogaSA+PSBuID8gW2RvbWFpbltuIC0gMV0sIHgxXVxuICAgICAgICAgIDogW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gICAgfTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWFudGl6ZSgpXG4gICAgICAgICAgLmRvbWFpbihbeDAsIHgxXSlcbiAgICAgICAgICAucmFuZ2UocmFuZ2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocmVzaG9sZCgpIHtcbiAgICB2YXIgZG9tYWluID0gWzAuNV0sXG4gICAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgICBuID0gMTtcblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIGlmICh4IDw9IHgpIHJldHVybiByYW5nZVtkM0FycmF5LmJpc2VjdChkb21haW4sIHgsIDAsIG4pXTtcbiAgICB9XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBzbGljZS5jYWxsKF8pLCBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoIC0gMSksIHNjYWxlKSA6IGRvbWFpbi5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgICByZXR1cm4gW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gICAgfTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aHJlc2hvbGQoKVxuICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgIC5yYW5nZShyYW5nZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHZhciBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG4gIHZhciBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG4gIHZhciBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuICB2YXIgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbiAgdmFyIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbiAgdmFyIGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuICB2YXIgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG4gIGZ1bmN0aW9uIGRhdGUodCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG51bWJlciQxKHQpIHtcbiAgICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxlbmRhcih5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsIGZvcm1hdCkge1xuICAgIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoZGVpbnRlcnBvbGF0ZSwgZDNJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0ZU51bWJlciksXG4gICAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gICAgdmFyIGZvcm1hdE1pbGxpc2Vjb25kID0gZm9ybWF0KFwiLiVMXCIpLFxuICAgICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgICBmb3JtYXRIb3VyID0gZm9ybWF0KFwiJUkgJXBcIiksXG4gICAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICAgIGZvcm1hdE1vbnRoID0gZm9ybWF0KFwiJUJcIiksXG4gICAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICAgIHZhciB0aWNrSW50ZXJ2YWxzID0gW1xuICAgICAgW3NlY29uZCwgIDEsICAgICAgZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW3NlY29uZCwgMzAsIDMwICogZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgICAgW21pbnV0ZSwgMTUsIDE1ICogZHVyYXRpb25NaW51dGVdLFxuICAgICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgaG91ciwgIDMsICAzICogZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgIGRheSwgIDEsICAgICAgZHVyYXRpb25EYXkgICBdLFxuICAgICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgICAgWyBtb250aCwgIDEsICAgICAgZHVyYXRpb25Nb250aCBdLFxuICAgICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICAgIGlmIChpbnRlcnZhbCA9PSBudWxsKSBpbnRlcnZhbCA9IDEwO1xuXG4gICAgICAvLyBJZiBhIGRlc2lyZWQgdGljayBjb3VudCBpcyBzcGVjaWZpZWQsIHBpY2sgYSByZWFzb25hYmxlIHRpY2sgaW50ZXJ2YWxcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgdGhlIGRvbWFpbiBhbmQgYSByb3VnaCBlc3RpbWF0ZSBvZiB0aWNrIHNpemUuXG4gICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSBpbnRlcnZhbCBpcyBhbHJlYWR5IGEgdGltZSBpbnRlcnZhbCBhbmQgdXNlIGl0LlxuICAgICAgaWYgKHR5cGVvZiBpbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGludGVydmFsLFxuICAgICAgICAgICAgaSA9IGQzQXJyYXkuYmlzZWN0b3IoZnVuY3Rpb24oaSkgeyByZXR1cm4gaVsyXTsgfSkucmlnaHQodGlja0ludGVydmFscywgdGFyZ2V0KTtcbiAgICAgICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSB7XG4gICAgICAgICAgc3RlcCA9IGQzQXJyYXkudGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGludGVydmFsKTtcbiAgICAgICAgICBpbnRlcnZhbCA9IHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoaSkge1xuICAgICAgICAgIGkgPSB0aWNrSW50ZXJ2YWxzW3RhcmdldCAvIHRpY2tJbnRlcnZhbHNbaSAtIDFdWzJdIDwgdGlja0ludGVydmFsc1tpXVsyXSAvIHRhcmdldCA/IGkgLSAxIDogaV07XG4gICAgICAgICAgc3RlcCA9IGlbMV07XG4gICAgICAgICAgaW50ZXJ2YWwgPSBpWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ZXAgPSBkM0FycmF5LnRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBpbnRlcnZhbCk7XG4gICAgICAgICAgaW50ZXJ2YWwgPSBtaWxsaXNlY29uZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RlcCA9PSBudWxsID8gaW50ZXJ2YWwgOiBpbnRlcnZhbC5ldmVyeShzdGVwKTtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoaW52ZXJ0KHkpKTtcbiAgICB9O1xuXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBkb21haW4obWFwJDEuY2FsbChfLCBudW1iZXIkMSkpIDogZG9tYWluKCkubWFwKGRhdGUpO1xuICAgIH07XG5cbiAgICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICAgIHQwID0gZFswXSxcbiAgICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgICByID0gdDEgPCB0MCxcbiAgICAgICAgICB0O1xuICAgICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgICAgdCA9IHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgdDAsIHQxLCBzdGVwKTtcbiAgICAgIHQgPSB0ID8gdC5yYW5nZSh0MCwgdDEgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gICAgfTtcblxuICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gICAgfTtcblxuICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCwgc3RlcCkge1xuICAgICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICAgIHJldHVybiAoaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgc3RlcCkpXG4gICAgICAgICAgPyBkb21haW4obmljZShkLCBpbnRlcnZhbCkpXG4gICAgICAgICAgOiBzY2FsZTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWUoKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKGQzVGltZS50aW1lWWVhciwgZDNUaW1lLnRpbWVNb250aCwgZDNUaW1lLnRpbWVXZWVrLCBkM1RpbWUudGltZURheSwgZDNUaW1lLnRpbWVIb3VyLCBkM1RpbWUudGltZU1pbnV0ZSwgZDNUaW1lLnRpbWVTZWNvbmQsIGQzVGltZS50aW1lTWlsbGlzZWNvbmQsIGQzVGltZUZvcm1hdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXRjVGltZSgpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIoZDNUaW1lLnV0Y1llYXIsIGQzVGltZS51dGNNb250aCwgZDNUaW1lLnV0Y1dlZWssIGQzVGltZS51dGNEYXksIGQzVGltZS51dGNIb3VyLCBkM1RpbWUudXRjTWludXRlLCBkM1RpbWUudXRjU2Vjb25kLCBkM1RpbWUudXRjTWlsbGlzZWNvbmQsIGQzVGltZUZvcm1hdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMjAwMCwgMCwgMSksIERhdGUuVVRDKDIwMDAsIDAsIDIpXSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb2xvcnMocykge1xuICAgIHJldHVybiBzLm1hdGNoKC8uezZ9L2cpLm1hcChmdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gXCIjXCIgKyB4O1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGNhdGVnb3J5MTAgPSBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG5cbiAgdmFyIGNhdGVnb3J5MjBiID0gY29sb3JzKFwiMzkzYjc5NTI1NGEzNmI2ZWNmOWM5ZWRlNjM3OTM5OGNhMjUyYjVjZjZiY2VkYjljOGM2ZDMxYmQ5ZTM5ZTdiYTUyZTdjYjk0ODQzYzM5YWQ0OTRhZDY2MTZiZTc5NjljN2I0MTczYTU1MTk0Y2U2ZGJkZGU5ZWQ2XCIpO1xuXG4gIHZhciBjYXRlZ29yeTIwYyA9IGNvbG9ycyhcIjMxODJiZDZiYWVkNjllY2FlMWM2ZGJlZmU2NTUwZGZkOGQzY2ZkYWU2YmZkZDBhMjMxYTM1NDc0YzQ3NmExZDk5YmM3ZTljMDc1NmJiMTllOWFjOGJjYmRkY2RhZGFlYjYzNjM2Mzk2OTY5NmJkYmRiZGQ5ZDlkOVwiKTtcblxuICB2YXIgY2F0ZWdvcnkyMCA9IGNvbG9ycyhcIjFmNzdiNGFlYzdlOGZmN2YwZWZmYmI3ODJjYTAyYzk4ZGY4YWQ2MjcyOGZmOTg5Njk0NjdiZGM1YjBkNThjNTY0YmM0OWM5NGUzNzdjMmY3YjZkMjdmN2Y3ZmM3YzdjN2JjYmQyMmRiZGI4ZDE3YmVjZjllZGFlNVwiKTtcblxuICB2YXIgY3ViZWhlbGl4JDEgPSBkM0ludGVycG9sYXRlLmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhkM0NvbG9yLmN1YmVoZWxpeCgzMDAsIDAuNSwgMC4wKSwgZDNDb2xvci5jdWJlaGVsaXgoLTI0MCwgMC41LCAxLjApKTtcblxuICB2YXIgd2FybSA9IGQzSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGQzQ29sb3IuY3ViZWhlbGl4KC0xMDAsIDAuNzUsIDAuMzUpLCBkM0NvbG9yLmN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbiAgdmFyIGNvb2wgPSBkM0ludGVycG9sYXRlLmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhkM0NvbG9yLmN1YmVoZWxpeCgyNjAsIDAuNzUsIDAuMzUpLCBkM0NvbG9yLmN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbiAgdmFyIHJhaW5ib3cgPSBkM0NvbG9yLmN1YmVoZWxpeCgpO1xuXG4gIGZ1bmN0aW9uIHJhaW5ib3ckMSh0KSB7XG4gICAgaWYgKHQgPCAwIHx8IHQgPiAxKSB0IC09IE1hdGguZmxvb3IodCk7XG4gICAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gICAgcmFpbmJvdy5oID0gMzYwICogdCAtIDEwMDtcbiAgICByYWluYm93LnMgPSAxLjUgLSAxLjUgKiB0cztcbiAgICByYWluYm93LmwgPSAwLjggLSAwLjkgKiB0cztcbiAgICByZXR1cm4gcmFpbmJvdyArIFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiByYW1wKHJhbmdlKSB7XG4gICAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiByYW5nZVtNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICogbikpKV07XG4gICAgfTtcbiAgfVxuXG4gIHZhciB2aXJpZGlzID0gcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG4gIHZhciBtYWdtYSA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmXCIpKTtcblxuICB2YXIgaW5mZXJubyA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0XCIpKTtcblxuICB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuXG4gIGZ1bmN0aW9uIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKSB7XG4gICAgdmFyIHgwID0gMCxcbiAgICAgICAgeDEgPSAxLFxuICAgICAgICBjbGFtcCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgICAgdmFyIHQgPSAoeCAtIHgwKSAvICh4MSAtIHgwKTtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0b3IoY2xhbXAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSkgOiB0KTtcbiAgICB9XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9ICtfWzBdLCB4MSA9ICtfWzFdLCBzY2FsZSkgOiBbeDAsIHgxXTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9ICEhXywgc2NhbGUpIDogY2xhbXA7XG4gICAgfTtcblxuICAgIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRvciA9IF8sIHNjYWxlKSA6IGludGVycG9sYXRvcjtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKS5kb21haW4oW3gwLCB4MV0pLmNsYW1wKGNsYW1wKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG4gIH1cblxuICBleHBvcnRzLnNjYWxlQmFuZCA9IGJhbmQ7XG4gIGV4cG9ydHMuc2NhbGVQb2ludCA9IHBvaW50O1xuICBleHBvcnRzLnNjYWxlSWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgZXhwb3J0cy5zY2FsZUxpbmVhciA9IGxpbmVhcjtcbiAgZXhwb3J0cy5zY2FsZUxvZyA9IGxvZztcbiAgZXhwb3J0cy5zY2FsZU9yZGluYWwgPSBvcmRpbmFsO1xuICBleHBvcnRzLnNjYWxlSW1wbGljaXQgPSBpbXBsaWNpdDtcbiAgZXhwb3J0cy5zY2FsZVBvdyA9IHBvdztcbiAgZXhwb3J0cy5zY2FsZVNxcnQgPSBzcXJ0O1xuICBleHBvcnRzLnNjYWxlUXVhbnRpbGUgPSBxdWFudGlsZSQxO1xuICBleHBvcnRzLnNjYWxlUXVhbnRpemUgPSBxdWFudGl6ZTtcbiAgZXhwb3J0cy5zY2FsZVRocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgZXhwb3J0cy5zY2FsZVRpbWUgPSB0aW1lO1xuICBleHBvcnRzLnNjYWxlVXRjID0gdXRjVGltZTtcbiAgZXhwb3J0cy5zY2hlbWVDYXRlZ29yeTEwID0gY2F0ZWdvcnkxMDtcbiAgZXhwb3J0cy5zY2hlbWVDYXRlZ29yeTIwYiA9IGNhdGVnb3J5MjBiO1xuICBleHBvcnRzLnNjaGVtZUNhdGVnb3J5MjBjID0gY2F0ZWdvcnkyMGM7XG4gIGV4cG9ydHMuc2NoZW1lQ2F0ZWdvcnkyMCA9IGNhdGVnb3J5MjA7XG4gIGV4cG9ydHMuaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0ID0gY3ViZWhlbGl4JDE7XG4gIGV4cG9ydHMuaW50ZXJwb2xhdGVSYWluYm93ID0gcmFpbmJvdyQxO1xuICBleHBvcnRzLmludGVycG9sYXRlV2FybSA9IHdhcm07XG4gIGV4cG9ydHMuaW50ZXJwb2xhdGVDb29sID0gY29vbDtcbiAgZXhwb3J0cy5pbnRlcnBvbGF0ZVZpcmlkaXMgPSB2aXJpZGlzO1xuICBleHBvcnRzLmludGVycG9sYXRlTWFnbWEgPSBtYWdtYTtcbiAgZXhwb3J0cy5pbnRlcnBvbGF0ZUluZmVybm8gPSBpbmZlcm5vO1xuICBleHBvcnRzLmludGVycG9sYXRlUGxhc21hID0gcGxhc21hO1xuICBleHBvcnRzLnNjYWxlU2VxdWVudGlhbCA9IHNlcXVlbnRpYWw7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpOyIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtc2VsZWN0aW9uLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuICB2YXIgbmFtZXNwYWNlcyA9IHtcbiAgICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4aHRtbDogeGh0bWwsXG4gICAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG4gIH07XG5cbiAgZnVuY3Rpb24gbmFtZXNwYWNlKG5hbWUpIHtcbiAgICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9yKG5hbWUpIHtcbiAgICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gICAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG4gIH1cblxuICB2YXIgbmV4dElkID0gMDtcblxuICBmdW5jdGlvbiBsb2NhbCgpIHtcbiAgICByZXR1cm4gbmV3IExvY2FsO1xuICB9XG5cbiAgZnVuY3Rpb24gTG9jYWwoKSB7XG4gICAgdGhpcy5fID0gXCJAXCIgKyAoKytuZXh0SWQpLnRvU3RyaW5nKDM2KTtcbiAgfVxuXG4gIExvY2FsLnByb3RvdHlwZSA9IGxvY2FsLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogTG9jYWwsXG4gICAgZ2V0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgaWQgPSB0aGlzLl87XG4gICAgICB3aGlsZSAoIShpZCBpbiBub2RlKSkgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHJldHVybjtcbiAgICAgIHJldHVybiBub2RlW2lkXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24obm9kZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBub2RlW3RoaXMuX10gPSB2YWx1ZTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuXyBpbiBub2RlICYmIGRlbGV0ZSBub2RlW3RoaXMuX107XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbWF0Y2hlciA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfTtcbiAgfTtcblxuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50Lm1hdGNoZXMpIHtcbiAgICAgIHZhciB2ZW5kb3JNYXRjaGVzID0gZWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgICB8fCBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgICAgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgICB8fCBlbGVtZW50Lm9NYXRjaGVzU2VsZWN0b3I7XG4gICAgICBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB2ZW5kb3JNYXRjaGVzLmNhbGwodGhpcywgc2VsZWN0b3IpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWF0Y2hlciQxID0gbWF0Y2hlcjtcblxuICB2YXIgZmlsdGVyRXZlbnRzID0ge307XG5cbiAgZXhwb3J0cy5ldmVudCA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBlbGVtZW50JDEgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgaWYgKCEoXCJvbm1vdXNlZW50ZXJcIiBpbiBlbGVtZW50JDEpKSB7XG4gICAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICAgIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApO1xuICAgIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgaWYgKCFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0aGlzICYmICEocmVsYXRlZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSAmIDgpKSkge1xuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQxKSB7XG4gICAgICB2YXIgZXZlbnQwID0gZXhwb3J0cy5ldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICAgIGV4cG9ydHMuZXZlbnQgPSBldmVudDE7XG4gICAgICB0cnkge1xuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHRoaXMuX19kYXRhX18sIGluZGV4LCBncm91cCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLmV2ZW50ID0gZXZlbnQwO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgICAgaWYgKCFvbikgcmV0dXJuO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgICB2YXIgd3JhcCA9IGZpbHRlckV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlbmFtZS50eXBlKSA/IGZpbHRlckNvbnRleHRMaXN0ZW5lciA6IGNvbnRleHRMaXN0ZW5lcjtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCwgaSwgZ3JvdXApIHtcbiAgICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciA9IGxpc3RlbmVyLCBvLmNhcHR1cmUgPSBjYXB0dXJlKTtcbiAgICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgbyA9IHt0eXBlOiB0eXBlbmFtZS50eXBlLCBuYW1lOiB0eXBlbmFtZS5uYW1lLCB2YWx1ZTogdmFsdWUsIGxpc3RlbmVyOiBsaXN0ZW5lciwgY2FwdHVyZTogY2FwdHVyZX07XG4gICAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgICBlbHNlIG9uLnB1c2gobyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9vbih0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgICBpZiAoY2FwdHVyZSA9PSBudWxsKSBjYXB0dXJlID0gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIGNhcHR1cmUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgICB2YXIgZXZlbnQwID0gZXhwb3J0cy5ldmVudDtcbiAgICBldmVudDEuc291cmNlRXZlbnQgPSBleHBvcnRzLmV2ZW50O1xuICAgIGV4cG9ydHMuZXZlbnQgPSBldmVudDE7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhwb3J0cy5ldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzb3VyY2VFdmVudCgpIHtcbiAgICB2YXIgY3VycmVudCA9IGV4cG9ydHMuZXZlbnQsIHNvdXJjZTtcbiAgICB3aGlsZSAoc291cmNlID0gY3VycmVudC5zb3VyY2VFdmVudCkgY3VycmVudCA9IHNvdXJjZTtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvaW50KG5vZGUsIGV2ZW50KSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgICB2YXIgcG9pbnQgPSBzdmcuY3JlYXRlU1ZHUG9pbnQoKTtcbiAgICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICAgIHJldHVybiBbcG9pbnQueCwgcG9pbnQueV07XG4gICAgfVxuXG4gICAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Uobm9kZSkge1xuICAgIHZhciBldmVudCA9IHNvdXJjZUV2ZW50KCk7XG4gICAgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzKSBldmVudCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBub25lKCkge31cblxuICBmdW5jdGlvbiBzZWxlY3RvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Qoc2VsZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9yQWxsKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3RBbGwoc2VsZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9maWx0ZXIobWF0Y2gpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlciQxKG1hdGNoKTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwYXJzZSh1cGRhdGUpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VudGVyKCkge1xuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICAgIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICAgIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xuICB9XG5cbiAgRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gICAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY29uc3RhbnQoeCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cblxuICB2YXIga2V5UHJlZml4ID0gXCIkXCI7IC8vIFByb3RlY3QgYWdhaW5zdCBrZXlzIGxpa2Ug4oCcX19wcm90b19f4oCdLlxuXG4gIGZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBub2RlLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gICAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICAgIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICAgIHZhciBpLFxuICAgICAgICBub2RlLFxuICAgICAgICBub2RlQnlLZXlWYWx1ZSA9IHt9LFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAgICBrZXlWYWx1ZTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAgIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgICBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICAgIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlW2tleVZhbHVlc1tpXV0gPT09IG5vZGUpKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9kYXRhKHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBkYXRhID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaiA9IC0xO1xuICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gICAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgICBkYXRhID0gdmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpLFxuICAgICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICAgIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICAgIHJldHVybiB1cGRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZXhpdCgpIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbWVyZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9vcmRlcigpIHtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zb3J0KGNvbXBhcmUpIHtcbiAgICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jYWxsKCkge1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbm9kZXMoKSB7XG4gICAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9ub2RlKCkge1xuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc2l6ZSgpIHtcbiAgICB2YXIgc2l6ZSA9IDA7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyArK3NpemU7IH0pO1xuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5ub2RlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZWFjaChjYWxsYmFjaykge1xuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2F0dHIobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFZpZXcobm9kZSkge1xuICAgIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3N0eWxlKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICAgIHZhciBub2RlO1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgICA6IGRlZmF1bHRWaWV3KG5vZGUgPSB0aGlzLm5vZGUoKSlcbiAgICAgICAgICAgIC5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3Byb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG4gIH1cblxuICBmdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICAgIHRoaXMuX25vZGUgPSBub2RlO1xuICAgIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xuICB9XG5cbiAgQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jbGFzc2VkKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl90ZXh0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gICAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2h0bWwodmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhaXNlKCkge1xuICAgIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fcmFpc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBsb3dlcigpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2xvd2VyKCkge1xuICAgIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2FwcGVuZChuYW1lKSB7XG4gICAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25faW5zZXJ0KG5hbWUsIGJlZm9yZSkge1xuICAgIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3JlbW92ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZGF0dW0odmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQobm9kZSwgdHlwZSwgcGFyYW1zKSB7XG4gICAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hDb25zdGFudCh0eXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Rpc3BhdGNoKHR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgICAgOiBkaXNwYXRjaENvbnN0YW50KSh0eXBlLCBwYXJhbXMpKTtcbiAgfVxuXG4gIHZhciByb290ID0gW251bGxdO1xuXG4gIGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gICAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG4gIH1cblxuICBTZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICAgIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gICAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICAgIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICAgIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gICAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gICAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICAgIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICAgIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICAgIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gICAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gICAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gICAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICAgIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gICAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gICAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gICAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gICAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICAgIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gICAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICAgIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gICAgb246IHNlbGVjdGlvbl9vbixcbiAgICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG4gIH07XG5cbiAgZnVuY3Rpb24gc2VsZWN0KHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RBbGwoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gbmV3IFNlbGVjdGlvbihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2gobm9kZSwgdG91Y2hlcywgaWRlbnRpZmllcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgaWRlbnRpZmllciA9IHRvdWNoZXMsIHRvdWNoZXMgPSBzb3VyY2VFdmVudCgpLmNoYW5nZWRUb3VjaGVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0b3VjaGVzID8gdG91Y2hlcy5sZW5ndGggOiAwLCB0b3VjaDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0b3VjaCA9IHRvdWNoZXNbaV0pLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIHRvdWNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZXMobm9kZSwgdG91Y2hlcykge1xuICAgIGlmICh0b3VjaGVzID09IG51bGwpIHRvdWNoZXMgPSBzb3VyY2VFdmVudCgpLnRvdWNoZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHBvaW50cyA9IG5ldyBBcnJheShuKTsgaSA8IG47ICsraSkge1xuICAgICAgcG9pbnRzW2ldID0gcG9pbnQobm9kZSwgdG91Y2hlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbiAgfVxuXG4gIGV4cG9ydHMuY3JlYXRvciA9IGNyZWF0b3I7XG4gIGV4cG9ydHMubG9jYWwgPSBsb2NhbDtcbiAgZXhwb3J0cy5tYXRjaGVyID0gbWF0Y2hlciQxO1xuICBleHBvcnRzLm1vdXNlID0gbW91c2U7XG4gIGV4cG9ydHMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICBleHBvcnRzLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuICBleHBvcnRzLnNlbGVjdCA9IHNlbGVjdDtcbiAgZXhwb3J0cy5zZWxlY3RBbGwgPSBzZWxlY3RBbGw7XG4gIGV4cG9ydHMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICBleHBvcnRzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gIGV4cG9ydHMuc2VsZWN0b3JBbGwgPSBzZWxlY3RvckFsbDtcbiAgZXhwb3J0cy50b3VjaCA9IHRvdWNoO1xuICBleHBvcnRzLnRvdWNoZXMgPSB0b3VjaGVzO1xuICBleHBvcnRzLndpbmRvdyA9IGRlZmF1bHRWaWV3O1xuICBleHBvcnRzLmN1c3RvbUV2ZW50ID0gY3VzdG9tRXZlbnQ7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpOyIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtdGltZS1mb3JtYXQvIFZlcnNpb24gMi4wLjMuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnZDMtdGltZScpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMtdGltZSddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pLGdsb2JhbC5kMykpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsZDNUaW1lKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3WWVhcih5KSB7XG4gIHJldHVybiB7eTogeSwgbTogMCwgZDogMSwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcIlNcIjogZm9ybWF0U2Vjb25kcyxcbiAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcbiAgICBcIndcIjogZm9ybWF0V2Vla2RheU51bWJlcixcbiAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0WWVhcixcbiAgICBcIllcIjogZm9ybWF0RnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFpvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHV0Y0Zvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFVUQ1Nob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0VVRDV2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0VVRDU2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0VVRDTW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlcixcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXIsXG4gICAgXCJXXCI6IHBhcnNlV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxuICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgXCJ5XCI6IHBhcnNlWWVhcixcbiAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgIFwiJVwiOiBwYXJzZUxpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIGogPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFkLFxuICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSBkYXRlID0gbmV3IERhdGUoK2RhdGUpO1xuXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgICBpZiAoKHBhZCA9IHBhZHNbYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKV0pICE9IG51bGwpIGMgPSBzcGVjaWZpZXIuY2hhckF0KCsraSk7XG4gICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcbiAgICAgICAgICBzdHJpbmcucHVzaChjKTtcbiAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UGFyc2Uoc3BlY2lmaWVyLCBuZXdEYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIGQgPSBuZXdZZWFyKDE5MDApLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwiV1wiIGluIGQgPyAxIDogMDtcbiAgICAgICAgdmFyIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld1llYXIoZC55KSkuZ2V0VVRDRGF5KCkgOiBuZXdEYXRlKG5ld1llYXIoZC55KSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBuZXdEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgbG9jYWxEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIsIHV0Y0RhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9O1xudmFyIG51bWJlclJlID0gL15cXHMqXFxkKy87XG52YXIgcGVyY2VudFJlID0gL14lLztcbnZhciByZXF1b3RlUmUgPSAvW1xcXFxcXF5cXCRcXCpcXCtcXD9cXHxcXFtcXF1cXChcXClcXC5cXHtcXH1dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICB2YXIgbWFwID0ge30sIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzpcXDo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgZDNUaW1lLnRpbWVEYXkuY291bnQoZDNUaW1lLnRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKGQzVGltZS50aW1lU3VuZGF5LmNvdW50KGQzVGltZS50aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKGQzVGltZS50aW1lTW9uZGF5LmNvdW50KGQzVGltZS50aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcbiAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcbiAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIGQzVGltZS51dGNEYXkuY291bnQoZDNUaW1lLnV0Y1llYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQoZDNUaW1lLnV0Y1N1bmRheS5jb3VudChkM1RpbWUudXRjWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKGQzVGltZS51dGNNb25kYXkuY291bnQoZDNUaW1lLnV0Y1llYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxudmFyIGxvY2FsZSQxO1xuXG5cblxuXG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkYXRlVGltZTogXCIleCwgJVhcIixcbiAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXG4gIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXG4gIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcbiAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUkMSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZXhwb3J0cy50aW1lRm9ybWF0ID0gbG9jYWxlJDEuZm9ybWF0O1xuICBleHBvcnRzLnRpbWVQYXJzZSA9IGxvY2FsZSQxLnBhcnNlO1xuICBleHBvcnRzLnV0Y0Zvcm1hdCA9IGxvY2FsZSQxLnV0Y0Zvcm1hdDtcbiAgZXhwb3J0cy51dGNQYXJzZSA9IGxvY2FsZSQxLnV0Y1BhcnNlO1xuICByZXR1cm4gbG9jYWxlJDE7XG59XG5cbnZhciBpc29TcGVjaWZpZXIgPSBcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiO1xuXG5mdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG52YXIgZm9ybWF0SXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcbiAgICA/IGZvcm1hdElzb05hdGl2ZVxuICAgIDogZXhwb3J0cy51dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZnVuY3Rpb24gcGFyc2VJc29OYXRpdmUoc3RyaW5nKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoc3RyaW5nKTtcbiAgcmV0dXJuIGlzTmFOKGRhdGUpID8gbnVsbCA6IGRhdGU7XG59XG5cbnZhciBwYXJzZUlzbyA9ICtuZXcgRGF0ZShcIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWlwiKVxuICAgID8gcGFyc2VJc29OYXRpdmVcbiAgICA6IGV4cG9ydHMudXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0cy50aW1lRm9ybWF0RGVmYXVsdExvY2FsZSA9IGRlZmF1bHRMb2NhbGU7XG5leHBvcnRzLnRpbWVGb3JtYXRMb2NhbGUgPSBmb3JtYXRMb2NhbGU7XG5leHBvcnRzLmlzb0Zvcm1hdCA9IGZvcm1hdElzbztcbmV4cG9ydHMuaXNvUGFyc2UgPSBwYXJzZUlzbztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtdGltZS8gVmVyc2lvbiAxLjAuNC4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG52YXIgdDAgPSBuZXcgRGF0ZTtcbnZhciB0MSA9IG5ldyBEYXRlO1xuXG5mdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBpbnRlcnZhbDtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdO1xuICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XG4gICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgIGlmICghKHN0YXJ0IDwgc3RvcCkgfHwgIShzdGVwID4gMCkpIHJldHVybiByYW5nZTsgLy8gYWxzbyBoYW5kbGVzIEludmFsaWQgRGF0ZVxuICAgIGRvIHJhbmdlLnB1c2gobmV3IERhdGUoK3N0YXJ0KSk7IHdoaWxlIChvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KSwgc3RhcnQgPCBzdG9wKVxuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSBmdW5jdGlvbih0ZXN0KSB7XG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlICgtLXN0ZXAgPj0gMCkgd2hpbGUgKG9mZnNldGkoZGF0ZSwgMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICB0MC5zZXRUaW1lKCtzdGFydCksIHQxLnNldFRpbWUoK2VuZCk7XG4gICAgICBmbG9vcmkodDApLCBmbG9vcmkodDEpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAsIHQxKSk7XG4gICAgfTtcblxuICAgIGludGVydmFsLmV2ZXJ5ID0gZnVuY3Rpb24oc3RlcCkge1xuICAgICAgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgICByZXR1cm4gIWlzRmluaXRlKHN0ZXApIHx8ICEoc3RlcCA+IDApID8gbnVsbFxuICAgICAgICAgIDogIShzdGVwID4gMSkgPyBpbnRlcnZhbFxuICAgICAgICAgIDogaW50ZXJ2YWwuZmlsdGVyKGZpZWxkXG4gICAgICAgICAgICAgID8gZnVuY3Rpb24oZCkgeyByZXR1cm4gZmllbGQoZCkgJSBzdGVwID09PSAwOyB9XG4gICAgICAgICAgICAgIDogZnVuY3Rpb24oZCkgeyByZXR1cm4gaW50ZXJ2YWwuY291bnQoMCwgZCkgJSBzdGVwID09PSAwOyB9KTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGludGVydmFsO1xufVxuXG52YXIgbWlsbGlzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbnZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xudmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xudmFyIGR1cmF0aW9uSG91ciA9IDM2ZTU7XG52YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbnZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XG5cbnZhciBzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvblNlY29uZCkgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG52YXIgc2Vjb25kcyA9IHNlY29uZC5yYW5nZTtcblxudmFyIG1pbnV0ZSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoZGF0ZSAvIGR1cmF0aW9uTWludXRlKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbnZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuXG52YXIgaG91ciA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgdmFyIG9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIGR1cmF0aW9uTWludXRlICUgZHVyYXRpb25Ib3VyO1xuICBpZiAob2Zmc2V0IDwgMCkgb2Zmc2V0ICs9IGR1cmF0aW9uSG91cjtcbiAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoKCtkYXRlIC0gb2Zmc2V0KSAvIGR1cmF0aW9uSG91cikgKiBkdXJhdGlvbkhvdXIgKyBvZmZzZXQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG59KTtcblxudmFyIGhvdXJzID0gaG91ci5yYW5nZTtcblxudmFyIGRheSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgLSAxO1xufSk7XG5cbnZhciBkYXlzID0gZGF5LnJhbmdlO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG52YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbnZhciBtb25kYXkgPSB3ZWVrZGF5KDEpO1xudmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xudmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG52YXIgdGh1cnNkYXkgPSB3ZWVrZGF5KDQpO1xudmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG52YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG52YXIgc3VuZGF5cyA9IHN1bmRheS5yYW5nZTtcbnZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xudmFyIHR1ZXNkYXlzID0gdHVlc2RheS5yYW5nZTtcbnZhciB3ZWRuZXNkYXlzID0gd2VkbmVzZGF5LnJhbmdlO1xudmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xudmFyIGZyaWRheXMgPSBmcmlkYXkucmFuZ2U7XG52YXIgc2F0dXJkYXlzID0gc2F0dXJkYXkucmFuZ2U7XG5cbnZhciBtb250aCA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG52YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG5cbnZhciB5ZWFyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnllYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG52YXIgeWVhcnMgPSB5ZWFyLnJhbmdlO1xuXG52YXIgdXRjTWludXRlID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG52YXIgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcblxudmFyIHV0Y0hvdXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbnZhciB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG5cbnZhciB1dGNEYXkgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xufSk7XG5cbnZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbnZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xudmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG52YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG52YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbnZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG52YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbnZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbnZhciB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xudmFyIHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG52YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xudmFyIHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG52YXIgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG52YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbnZhciB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcblxudmFyIHV0Y01vbnRoID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbnZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcblxudmFyIHV0Y1llYXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbnZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG5cbmV4cG9ydHMudGltZUludGVydmFsID0gbmV3SW50ZXJ2YWw7XG5leHBvcnRzLnRpbWVNaWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kO1xuZXhwb3J0cy50aW1lTWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzO1xuZXhwb3J0cy51dGNNaWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kO1xuZXhwb3J0cy51dGNNaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG5leHBvcnRzLnRpbWVTZWNvbmQgPSBzZWNvbmQ7XG5leHBvcnRzLnRpbWVTZWNvbmRzID0gc2Vjb25kcztcbmV4cG9ydHMudXRjU2Vjb25kID0gc2Vjb25kO1xuZXhwb3J0cy51dGNTZWNvbmRzID0gc2Vjb25kcztcbmV4cG9ydHMudGltZU1pbnV0ZSA9IG1pbnV0ZTtcbmV4cG9ydHMudGltZU1pbnV0ZXMgPSBtaW51dGVzO1xuZXhwb3J0cy50aW1lSG91ciA9IGhvdXI7XG5leHBvcnRzLnRpbWVIb3VycyA9IGhvdXJzO1xuZXhwb3J0cy50aW1lRGF5ID0gZGF5O1xuZXhwb3J0cy50aW1lRGF5cyA9IGRheXM7XG5leHBvcnRzLnRpbWVXZWVrID0gc3VuZGF5O1xuZXhwb3J0cy50aW1lV2Vla3MgPSBzdW5kYXlzO1xuZXhwb3J0cy50aW1lU3VuZGF5ID0gc3VuZGF5O1xuZXhwb3J0cy50aW1lU3VuZGF5cyA9IHN1bmRheXM7XG5leHBvcnRzLnRpbWVNb25kYXkgPSBtb25kYXk7XG5leHBvcnRzLnRpbWVNb25kYXlzID0gbW9uZGF5cztcbmV4cG9ydHMudGltZVR1ZXNkYXkgPSB0dWVzZGF5O1xuZXhwb3J0cy50aW1lVHVlc2RheXMgPSB0dWVzZGF5cztcbmV4cG9ydHMudGltZVdlZG5lc2RheSA9IHdlZG5lc2RheTtcbmV4cG9ydHMudGltZVdlZG5lc2RheXMgPSB3ZWRuZXNkYXlzO1xuZXhwb3J0cy50aW1lVGh1cnNkYXkgPSB0aHVyc2RheTtcbmV4cG9ydHMudGltZVRodXJzZGF5cyA9IHRodXJzZGF5cztcbmV4cG9ydHMudGltZUZyaWRheSA9IGZyaWRheTtcbmV4cG9ydHMudGltZUZyaWRheXMgPSBmcmlkYXlzO1xuZXhwb3J0cy50aW1lU2F0dXJkYXkgPSBzYXR1cmRheTtcbmV4cG9ydHMudGltZVNhdHVyZGF5cyA9IHNhdHVyZGF5cztcbmV4cG9ydHMudGltZU1vbnRoID0gbW9udGg7XG5leHBvcnRzLnRpbWVNb250aHMgPSBtb250aHM7XG5leHBvcnRzLnRpbWVZZWFyID0geWVhcjtcbmV4cG9ydHMudGltZVllYXJzID0geWVhcnM7XG5leHBvcnRzLnV0Y01pbnV0ZSA9IHV0Y01pbnV0ZTtcbmV4cG9ydHMudXRjTWludXRlcyA9IHV0Y01pbnV0ZXM7XG5leHBvcnRzLnV0Y0hvdXIgPSB1dGNIb3VyO1xuZXhwb3J0cy51dGNIb3VycyA9IHV0Y0hvdXJzO1xuZXhwb3J0cy51dGNEYXkgPSB1dGNEYXk7XG5leHBvcnRzLnV0Y0RheXMgPSB1dGNEYXlzO1xuZXhwb3J0cy51dGNXZWVrID0gdXRjU3VuZGF5O1xuZXhwb3J0cy51dGNXZWVrcyA9IHV0Y1N1bmRheXM7XG5leHBvcnRzLnV0Y1N1bmRheSA9IHV0Y1N1bmRheTtcbmV4cG9ydHMudXRjU3VuZGF5cyA9IHV0Y1N1bmRheXM7XG5leHBvcnRzLnV0Y01vbmRheSA9IHV0Y01vbmRheTtcbmV4cG9ydHMudXRjTW9uZGF5cyA9IHV0Y01vbmRheXM7XG5leHBvcnRzLnV0Y1R1ZXNkYXkgPSB1dGNUdWVzZGF5O1xuZXhwb3J0cy51dGNUdWVzZGF5cyA9IHV0Y1R1ZXNkYXlzO1xuZXhwb3J0cy51dGNXZWRuZXNkYXkgPSB1dGNXZWRuZXNkYXk7XG5leHBvcnRzLnV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXlzO1xuZXhwb3J0cy51dGNUaHVyc2RheSA9IHV0Y1RodXJzZGF5O1xuZXhwb3J0cy51dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheXM7XG5leHBvcnRzLnV0Y0ZyaWRheSA9IHV0Y0ZyaWRheTtcbmV4cG9ydHMudXRjRnJpZGF5cyA9IHV0Y0ZyaWRheXM7XG5leHBvcnRzLnV0Y1NhdHVyZGF5ID0gdXRjU2F0dXJkYXk7XG5leHBvcnRzLnV0Y1NhdHVyZGF5cyA9IHV0Y1NhdHVyZGF5cztcbmV4cG9ydHMudXRjTW9udGggPSB1dGNNb250aDtcbmV4cG9ydHMudXRjTW9udGhzID0gdXRjTW9udGhzO1xuZXhwb3J0cy51dGNZZWFyID0gdXRjWWVhcjtcbmV4cG9ydHMudXRjWWVhcnMgPSB1dGNZZWFycztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsImltcG9ydCBoZWxwZXIgZnJvbSBcIi4vbGVnZW5kXCJcbmltcG9ydCB7IGRpc3BhdGNoIH0gZnJvbSBcImQzLWRpc3BhdGNoXCJcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzLXNjYWxlXCJcbmltcG9ydCB7IGZvcm1hdExvY2FsZSwgZm9ybWF0U3BlY2lmaWVyIH0gZnJvbSBcImQzLWZvcm1hdFwiXG5cbmltcG9ydCB7IHN1bSB9IGZyb20gXCJkMy1hcnJheVwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKCkge1xuICBsZXQgc2NhbGUgPSBzY2FsZUxpbmVhcigpLFxuICAgIHNoYXBlID0gXCJyZWN0XCIsXG4gICAgc2hhcGVXaWR0aCA9IDE1LFxuICAgIHNoYXBlSGVpZ2h0ID0gMTUsXG4gICAgc2hhcGVSYWRpdXMgPSAxMCxcbiAgICBzaGFwZVBhZGRpbmcgPSAyLFxuICAgIGNlbGxzID0gWzVdLFxuICAgIGNlbGxGaWx0ZXIsXG4gICAgbGFiZWxzID0gW10sXG4gICAgY2xhc3NQcmVmaXggPSBcIlwiLFxuICAgIHVzZUNsYXNzID0gZmFsc2UsXG4gICAgdGl0bGUgPSBcIlwiLFxuICAgIGxvY2FsZSA9IGhlbHBlci5kM19kZWZhdWx0TG9jYWxlLFxuICAgIHNwZWNpZmllciA9IGhlbHBlci5kM19kZWZhdWx0Rm9ybWF0U3BlY2lmaWVyLFxuICAgIGxhYmVsT2Zmc2V0ID0gMTAsXG4gICAgbGFiZWxBbGlnbiA9IFwibWlkZGxlXCIsXG4gICAgbGFiZWxEZWxpbWl0ZXIgPSBoZWxwZXIuZDNfZGVmYXVsdERlbGltaXRlcixcbiAgICBsYWJlbFdyYXAsXG4gICAgb3JpZW50ID0gXCJ2ZXJ0aWNhbFwiLFxuICAgIGFzY2VuZGluZyA9IGZhbHNlLFxuICAgIHBhdGgsXG4gICAgdGl0bGVXaWR0aCxcbiAgICBsZWdlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2goXCJjZWxsb3ZlclwiLCBcImNlbGxvdXRcIiwgXCJjZWxsY2xpY2tcIilcblxuICBmdW5jdGlvbiBsZWdlbmQoc3ZnKSB7XG4gICAgY29uc3QgdHlwZSA9IGhlbHBlci5kM19jYWxjVHlwZShcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGFzY2VuZGluZyxcbiAgICAgICAgY2VsbHMsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgbG9jYWxlLmZvcm1hdChzcGVjaWZpZXIpLFxuICAgICAgICBsYWJlbERlbGltaXRlclxuICAgICAgKSxcbiAgICAgIGxlZ2VuZEcgPSBzdmcuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKFtzY2FsZV0pXG5cbiAgICBsZWdlbmRHXG4gICAgICAuZW50ZXIoKVxuICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpXG5cbiAgICBpZiAoY2VsbEZpbHRlcikge1xuICAgICAgaGVscGVyLmQzX2ZpbHRlckNlbGxzKHR5cGUsIGNlbGxGaWx0ZXIpXG4gICAgfVxuXG4gICAgbGV0IGNlbGwgPSBzdmdcbiAgICAgIC5zZWxlY3QoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kQ2VsbHNcIilcbiAgICAgIC5zZWxlY3RBbGwoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKVxuICAgICAgLmRhdGEodHlwZS5kYXRhKVxuXG4gICAgY29uc3QgY2VsbEVudGVyID0gY2VsbFxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpXG4gICAgY2VsbEVudGVyLmFwcGVuZChzaGFwZSkuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIilcblxuICAgIGxldCBzaGFwZXMgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoXG4gICAgICAgIFwiZy5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsIFwiICsgc2hhcGUgKyBcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIlxuICAgICAgKVxuICAgICAgLmRhdGEodHlwZS5kYXRhKVxuXG4gICAgLy9hZGQgZXZlbnQgaGFuZGxlcnNcbiAgICBoZWxwZXIuZDNfYWRkRXZlbnRzKGNlbGxFbnRlciwgbGVnZW5kRGlzcGF0Y2hlcilcblxuICAgIGNlbGxcbiAgICAgIC5leGl0KClcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMClcbiAgICAgIC5yZW1vdmUoKVxuICAgIHNoYXBlc1xuICAgICAgLmV4aXQoKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCAwKVxuICAgICAgLnJlbW92ZSgpXG5cbiAgICBzaGFwZXMgPSBzaGFwZXMubWVyZ2Uoc2hhcGVzKVxuXG4gICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoXG4gICAgICBzaGFwZSxcbiAgICAgIHNoYXBlcyxcbiAgICAgIHNoYXBlSGVpZ2h0LFxuICAgICAgc2hhcGVXaWR0aCxcbiAgICAgIHNoYXBlUmFkaXVzLFxuICAgICAgcGF0aFxuICAgIClcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoXG4gICAgICBzdmcsXG4gICAgICBjZWxsRW50ZXIsXG4gICAgICB0eXBlLmxhYmVscyxcbiAgICAgIGNsYXNzUHJlZml4LFxuICAgICAgbGFiZWxXcmFwXG4gICAgKVxuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKVxuXG4gICAgLy8gc2V0cyBwbGFjZW1lbnRcbiAgICBjb25zdCB0ZXh0U2l6ZSA9IHRleHQubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSksXG4gICAgICBzaGFwZVNpemUgPSBzaGFwZXMubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSlcbiAgICAvL3NldHMgc2NhbGVcbiAgICAvL2V2ZXJ5dGhpbmcgaXMgZmlsbCBleGNlcHQgZm9yIGxpbmUgd2hpY2ggaXMgc3Ryb2tlLFxuICAgIGlmICghdXNlQ2xhc3MpIHtcbiAgICAgIGlmIChzaGFwZSA9PSBcImxpbmVcIikge1xuICAgICAgICBzaGFwZXMuc3R5bGUoXCJzdHJva2VcIiwgdHlwZS5mZWF0dXJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hhcGVzLnN0eWxlKFwiZmlsbFwiLCB0eXBlLmZlYXR1cmUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNoYXBlcy5hdHRyKFwiY2xhc3NcIiwgZCA9PiBgJHtjbGFzc1ByZWZpeH1zd2F0Y2ggJHt0eXBlLmZlYXR1cmUoZCl9YClcbiAgICB9XG5cbiAgICBsZXQgY2VsbFRyYW5zLFxuICAgICAgdGV4dFRyYW5zLFxuICAgICAgdGV4dEFsaWduID0gbGFiZWxBbGlnbiA9PSBcInN0YXJ0XCIgPyAwIDogbGFiZWxBbGlnbiA9PSBcIm1pZGRsZVwiID8gMC41IDogMVxuXG4gICAgLy9wb3NpdGlvbnMgY2VsbHMgYW5kIHRleHRcbiAgICBpZiAob3JpZW50ID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGNvbnN0IGNlbGxTaXplID0gdGV4dFNpemUubWFwKChkLCBpKSA9PlxuICAgICAgICBNYXRoLm1heChkLmhlaWdodCwgc2hhcGVTaXplW2ldLmhlaWdodClcbiAgICAgIClcblxuICAgICAgY2VsbFRyYW5zID0gKGQsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gc3VtKGNlbGxTaXplLnNsaWNlKDAsIGkpKVxuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgwLCAke2hlaWdodCArIGkgKiBzaGFwZVBhZGRpbmd9KWBcbiAgICAgIH1cblxuICAgICAgdGV4dFRyYW5zID0gKGQsIGkpID0+XG4gICAgICAgIGB0cmFuc2xhdGUoICR7c2hhcGVTaXplW2ldLndpZHRoICtcbiAgICAgICAgICBzaGFwZVNpemVbaV0ueCArXG4gICAgICAgICAgbGFiZWxPZmZzZXR9LCAke3NoYXBlU2l6ZVtpXS55ICsgc2hhcGVTaXplW2ldLmhlaWdodCAvIDIgKyA1fSlgXG4gICAgfSBlbHNlIGlmIChvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBjZWxsVHJhbnMgPSAoZCwgaSkgPT5cbiAgICAgICAgYHRyYW5zbGF0ZSgke2kgKiAoc2hhcGVTaXplW2ldLndpZHRoICsgc2hhcGVQYWRkaW5nKX0sMClgXG4gICAgICB0ZXh0VHJhbnMgPSAoZCwgaSkgPT4gYHRyYW5zbGF0ZSgke3NoYXBlU2l6ZVtpXS53aWR0aCAqIHRleHRBbGlnbiArXG4gICAgICAgIHNoYXBlU2l6ZVtpXS54fSxcbiAgICAgICAgICAke3NoYXBlU2l6ZVtpXS5oZWlnaHQgKyBzaGFwZVNpemVbaV0ueSArIGxhYmVsT2Zmc2V0ICsgOH0pYFxuICAgIH1cblxuICAgIGhlbHBlci5kM19wbGFjZW1lbnQob3JpZW50LCBjZWxsLCBjZWxsVHJhbnMsIHRleHQsIHRleHRUcmFucywgbGFiZWxBbGlnbilcbiAgICBoZWxwZXIuZDNfdGl0bGUoc3ZnLCB0aXRsZSwgY2xhc3NQcmVmaXgsIHRpdGxlV2lkdGgpXG5cbiAgICBjZWxsLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMSlcbiAgfVxuXG4gIGxlZ2VuZC5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZVxuICAgIHNjYWxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jZWxscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjZWxsc1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2VsbEZpbHRlclxuICAgIGNlbGxGaWx0ZXIgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlID0gZnVuY3Rpb24oXywgZCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlXG4gICAgaWYgKFxuICAgICAgXyA9PSBcInJlY3RcIiB8fFxuICAgICAgXyA9PSBcImNpcmNsZVwiIHx8XG4gICAgICBfID09IFwibGluZVwiIHx8XG4gICAgICAoXyA9PSBcInBhdGhcIiAmJiB0eXBlb2YgZCA9PT0gXCJzdHJpbmdcIilcbiAgICApIHtcbiAgICAgIHNoYXBlID0gX1xuICAgICAgcGF0aCA9IGRcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVXaWR0aFxuICAgIHNoYXBlV2lkdGggPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5zaGFwZUhlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZUhlaWdodFxuICAgIHNoYXBlSGVpZ2h0ID0gK19cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQuc2hhcGVSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVSYWRpdXNcbiAgICBzaGFwZVJhZGl1cyA9ICtfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVBhZGRpbmdcbiAgICBzaGFwZVBhZGRpbmcgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbHMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxzXG4gICAgbGFiZWxzID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbEFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsQWxpZ25cbiAgICBpZiAoXyA9PSBcInN0YXJ0XCIgfHwgXyA9PSBcImVuZFwiIHx8IF8gPT0gXCJtaWRkbGVcIikge1xuICAgICAgbGFiZWxBbGlnbiA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxvY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb2NhbGVcbiAgICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoXylcbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGVnZW5kLmxvY2FsZSgpLmZvcm1hdChzcGVjaWZpZXIpXG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKF8pXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxhYmVsT2Zmc2V0ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsT2Zmc2V0XG4gICAgbGFiZWxPZmZzZXQgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbERlbGltaXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbERlbGltaXRlclxuICAgIGxhYmVsRGVsaW1pdGVyID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbFdyYXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxXcmFwXG4gICAgbGFiZWxXcmFwID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC51c2VDbGFzcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB1c2VDbGFzc1xuICAgIGlmIChfID09PSB0cnVlIHx8IF8gPT09IGZhbHNlKSB7XG4gICAgICB1c2VDbGFzcyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLm9yaWVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBvcmllbnRcbiAgICBfID0gXy50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKF8gPT0gXCJob3Jpem9udGFsXCIgfHwgXyA9PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIG9yaWVudCA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmFzY2VuZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhc2NlbmRpbmdcbiAgICBhc2NlbmRpbmcgPSAhIV9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQuY2xhc3NQcmVmaXggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2xhc3NQcmVmaXhcbiAgICBjbGFzc1ByZWZpeCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQudGl0bGUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGVcbiAgICB0aXRsZSA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQudGl0bGVXaWR0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aXRsZVdpZHRoXG4gICAgdGl0bGVXaWR0aCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQudGV4dFdyYXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGV4dFdyYXBcbiAgICB0ZXh0V3JhcCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQub24gPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGxlZ2VuZERpc3BhdGNoZXIub24uYXBwbHkobGVnZW5kRGlzcGF0Y2hlciwgYXJndW1lbnRzKVxuICAgIHJldHVybiB2YWx1ZSA9PT0gbGVnZW5kRGlzcGF0Y2hlciA/IGxlZ2VuZCA6IHZhbHVlXG4gIH1cblxuICByZXR1cm4gbGVnZW5kXG59XG4iLCJleHBvcnQgY29uc3QgdGhyZXNob2xkTGFiZWxzID0gZnVuY3Rpb24oe1xuICBpLFxuICBnZW5MZW5ndGgsXG4gIGdlbmVyYXRlZExhYmVscyxcbiAgbGFiZWxEZWxpbWl0ZXJcbn0pIHtcbiAgaWYgKGkgPT09IDApIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZW5lcmF0ZWRMYWJlbHNbaV0uc3BsaXQoYCAke2xhYmVsRGVsaW1pdGVyfSBgKVxuICAgIHJldHVybiBgTGVzcyB0aGFuICR7dmFsdWVzWzFdfWBcbiAgfSBlbHNlIGlmIChpID09PSBnZW5MZW5ndGggLSAxKSB7XG4gICAgY29uc3QgdmFsdWVzID0gZ2VuZXJhdGVkTGFiZWxzW2ldLnNwbGl0KGAgJHtsYWJlbERlbGltaXRlcn0gYClcbiAgICByZXR1cm4gYCR7dmFsdWVzWzBdfSBvciBtb3JlYFxuICB9XG4gIHJldHVybiBnZW5lcmF0ZWRMYWJlbHNbaV1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICB0aHJlc2hvbGRMYWJlbHNcbn1cbiIsImltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkMy1zZWxlY3Rpb25cIlxuaW1wb3J0IHsgZm9ybWF0LCBmb3JtYXRQcmVmaXggfSBmcm9tIFwiZDMtZm9ybWF0XCJcblxuY29uc3QgZDNfaWRlbnRpdHkgPSBkID0+IGRcblxuY29uc3QgZDNfcmV2ZXJzZSA9IGFyciA9PiB7XG4gIGNvbnN0IG1pcnJvciA9IFtdXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG1pcnJvcltpXSA9IGFycltsIC0gaSAtIDFdXG4gIH1cbiAgcmV0dXJuIG1pcnJvclxufVxuXG4vL1RleHQgd3JhcHBpbmcgY29kZSBhZGFwdGVkIGZyb20gTWlrZSBCb3N0b2NrXG5jb25zdCBkM190ZXh0V3JhcHBpbmcgPSAodGV4dCwgd2lkdGgpID0+IHtcbiAgdGV4dC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ZXh0ID0gc2VsZWN0KHRoaXMpLFxuICAgICAgd29yZHMgPSB0ZXh0XG4gICAgICAgIC50ZXh0KClcbiAgICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgICAgLnJldmVyc2UoKSxcbiAgICAgIHdvcmQsXG4gICAgICBsaW5lID0gW10sXG4gICAgICBsaW5lTnVtYmVyID0gMCxcbiAgICAgIGxpbmVIZWlnaHQgPSAxLjIsIC8vZW1zXG4gICAgICB5ID0gdGV4dC5hdHRyKFwieVwiKSxcbiAgICAgIGR5ID0gcGFyc2VGbG9hdCh0ZXh0LmF0dHIoXCJkeVwiKSkgfHwgMCxcbiAgICAgIHRzcGFuID0gdGV4dFxuICAgICAgICAudGV4dChudWxsKVxuICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcbiAgICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgZHkgKyBcImVtXCIpXG5cbiAgICB3aGlsZSAoKHdvcmQgPSB3b3Jkcy5wb3AoKSkpIHtcbiAgICAgIGxpbmUucHVzaCh3b3JkKVxuICAgICAgdHNwYW4udGV4dChsaW5lLmpvaW4oXCIgXCIpKVxuICAgICAgaWYgKHRzcGFuLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSA+IHdpZHRoICYmIGxpbmUubGVuZ3RoID4gMSkge1xuICAgICAgICBsaW5lLnBvcCgpXG4gICAgICAgIHRzcGFuLnRleHQobGluZS5qb2luKFwiIFwiKSlcbiAgICAgICAgbGluZSA9IFt3b3JkXVxuICAgICAgICB0c3BhbiA9IHRleHRcbiAgICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAuYXR0cihcImR5XCIsIGxpbmVIZWlnaHQgKyBkeSArIFwiZW1cIilcbiAgICAgICAgICAudGV4dCh3b3JkKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZDNfbWVyZ2VMYWJlbHMgPSAoZ2VuID0gW10sIGxhYmVscywgZG9tYWluLCByYW5nZSwgbGFiZWxEZWxpbWl0ZXIpID0+IHtcbiAgaWYgKHR5cGVvZiBsYWJlbHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGdlblxuXG4gICAgbGV0IGkgPSBsYWJlbHMubGVuZ3RoXG4gICAgZm9yICg7IGkgPCBnZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxhYmVscy5wdXNoKGdlbltpXSlcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IGN1c3RvbUxhYmVscyA9IFtdXG4gICAgY29uc3QgZ2VuTGVuZ3RoID0gZ2VuLmxlbmd0aFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1c3RvbUxhYmVscy5wdXNoKFxuICAgICAgICBsYWJlbHMoe1xuICAgICAgICAgIGksXG4gICAgICAgICAgZ2VuTGVuZ3RoLFxuICAgICAgICAgIGdlbmVyYXRlZExhYmVsczogZ2VuLFxuICAgICAgICAgIGRvbWFpbixcbiAgICAgICAgICByYW5nZSxcbiAgICAgICAgICBsYWJlbERlbGltaXRlclxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gY3VzdG9tTGFiZWxzXG4gIH1cblxuICByZXR1cm4gZ2VuXG59XG5cbmNvbnN0IGQzX2xpbmVhckxlZ2VuZCA9IChzY2FsZSwgY2VsbHMsIGxhYmVsRm9ybWF0KSA9PiB7XG4gIGxldCBkYXRhID0gW11cblxuICBpZiAoY2VsbHMubGVuZ3RoID4gMSkge1xuICAgIGRhdGEgPSBjZWxsc1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRvbWFpbiA9IHNjYWxlLmRvbWFpbigpLFxuICAgICAgaW5jcmVtZW50ID0gKGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0gLSBkb21haW5bMF0pIC8gKGNlbGxzIC0gMSlcbiAgICBsZXQgaSA9IDBcblxuICAgIGZvciAoOyBpIDwgY2VsbHM7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKGRvbWFpblswXSArIGkgKiBpbmNyZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGFiZWxzID0gZGF0YS5tYXAobGFiZWxGb3JtYXQpXG4gIHJldHVybiB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBsYWJlbHM6IGxhYmVscyxcbiAgICBmZWF0dXJlOiBkID0+IHNjYWxlKGQpXG4gIH1cbn1cblxuY29uc3QgZDNfcXVhbnRMZWdlbmQgPSAoc2NhbGUsIGxhYmVsRm9ybWF0LCBsYWJlbERlbGltaXRlcikgPT4ge1xuICBjb25zdCBsYWJlbHMgPSBzY2FsZS5yYW5nZSgpLm1hcChkID0+IHtcbiAgICBjb25zdCBpbnZlcnQgPSBzY2FsZS5pbnZlcnRFeHRlbnQoZClcbiAgICByZXR1cm4gKFxuICAgICAgbGFiZWxGb3JtYXQoaW52ZXJ0WzBdKSArXG4gICAgICBcIiBcIiArXG4gICAgICBsYWJlbERlbGltaXRlciArXG4gICAgICBcIiBcIiArXG4gICAgICBsYWJlbEZvcm1hdChpbnZlcnRbMV0pXG4gICAgKVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgZGF0YTogc2NhbGUucmFuZ2UoKSxcbiAgICBsYWJlbHM6IGxhYmVscyxcbiAgICBmZWF0dXJlOiBkM19pZGVudGl0eVxuICB9XG59XG5cbmNvbnN0IGQzX29yZGluYWxMZWdlbmQgPSBzY2FsZSA9PiAoe1xuICBkYXRhOiBzY2FsZS5kb21haW4oKSxcbiAgbGFiZWxzOiBzY2FsZS5kb21haW4oKSxcbiAgZmVhdHVyZTogZCA9PiBzY2FsZShkKVxufSlcblxuY29uc3QgZDNfY2VsbE92ZXIgPSAoY2VsbERpc3BhdGNoZXIsIGQsIG9iaikgPT4ge1xuICBjZWxsRGlzcGF0Y2hlci5jYWxsKFwiY2VsbG92ZXJcIiwgb2JqLCBkKVxufVxuXG5jb25zdCBkM19jZWxsT3V0ID0gKGNlbGxEaXNwYXRjaGVyLCBkLCBvYmopID0+IHtcbiAgY2VsbERpc3BhdGNoZXIuY2FsbChcImNlbGxvdXRcIiwgb2JqLCBkKVxufVxuXG5jb25zdCBkM19jZWxsQ2xpY2sgPSAoY2VsbERpc3BhdGNoZXIsIGQsIG9iaikgPT4ge1xuICBjZWxsRGlzcGF0Y2hlci5jYWxsKFwiY2VsbGNsaWNrXCIsIG9iaiwgZClcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBkM19kcmF3U2hhcGVzOiAoXG4gICAgc2hhcGUsXG4gICAgc2hhcGVzLFxuICAgIHNoYXBlSGVpZ2h0LFxuICAgIHNoYXBlV2lkdGgsXG4gICAgc2hhcGVSYWRpdXMsXG4gICAgcGF0aFxuICApID0+IHtcbiAgICBpZiAoc2hhcGUgPT09IFwicmVjdFwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcImhlaWdodFwiLCBzaGFwZUhlaWdodCkuYXR0cihcIndpZHRoXCIsIHNoYXBlV2lkdGgpXG4gICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gXCJjaXJjbGVcIikge1xuICAgICAgc2hhcGVzLmF0dHIoXCJyXCIsIHNoYXBlUmFkaXVzKVxuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwibGluZVwiKSB7XG4gICAgICBzaGFwZXNcbiAgICAgICAgLmF0dHIoXCJ4MVwiLCAwKVxuICAgICAgICAuYXR0cihcIngyXCIsIHNoYXBlV2lkdGgpXG4gICAgICAgIC5hdHRyKFwieTFcIiwgMClcbiAgICAgICAgLmF0dHIoXCJ5MlwiLCAwKVxuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwicGF0aFwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcImRcIiwgcGF0aClcbiAgICB9XG4gIH0sXG5cbiAgZDNfYWRkVGV4dDogZnVuY3Rpb24oc3ZnLCBlbnRlciwgbGFiZWxzLCBjbGFzc1ByZWZpeCwgbGFiZWxXaWR0aCkge1xuICAgIGVudGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsYWJlbFwiKVxuICAgIGNvbnN0IHRleHQgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoYGcuJHtjbGFzc1ByZWZpeH1jZWxsIHRleHQuJHtjbGFzc1ByZWZpeH1sYWJlbGApXG4gICAgICAuZGF0YShsYWJlbHMpXG4gICAgICAudGV4dChkM19pZGVudGl0eSlcblxuICAgIGlmIChsYWJlbFdpZHRoKSB7XG4gICAgICBzdmdcbiAgICAgICAgLnNlbGVjdEFsbChgZy4ke2NsYXNzUHJlZml4fWNlbGwgdGV4dC4ke2NsYXNzUHJlZml4fWxhYmVsYClcbiAgICAgICAgLmNhbGwoZDNfdGV4dFdyYXBwaW5nLCBsYWJlbFdpZHRoKVxuICAgIH1cblxuICAgIHJldHVybiB0ZXh0XG4gIH0sXG5cbiAgZDNfY2FsY1R5cGU6IGZ1bmN0aW9uKFxuICAgIHNjYWxlLFxuICAgIGFzY2VuZGluZyxcbiAgICBjZWxscyxcbiAgICBsYWJlbHMsXG4gICAgbGFiZWxGb3JtYXQsXG4gICAgbGFiZWxEZWxpbWl0ZXJcbiAgKSB7XG4gICAgY29uc3QgdHlwZSA9IHNjYWxlLmludmVydEV4dGVudFxuICAgICAgPyBkM19xdWFudExlZ2VuZChzY2FsZSwgbGFiZWxGb3JtYXQsIGxhYmVsRGVsaW1pdGVyKVxuICAgICAgOiBzY2FsZS50aWNrc1xuICAgICAgICA/IGQzX2xpbmVhckxlZ2VuZChzY2FsZSwgY2VsbHMsIGxhYmVsRm9ybWF0KVxuICAgICAgICA6IGQzX29yZGluYWxMZWdlbmQoc2NhbGUpXG5cbiAgICAvL2ZvciBkMy5zY2FsZVNlcXVlbnRpYWwgdGhhdCBkb2Vzbid0IGhhdmUgYSByYW5nZSBmdW5jdGlvblxuICAgIGNvbnN0IHJhbmdlID0gKHNjYWxlLnJhbmdlICYmIHNjYWxlLnJhbmdlKCkpIHx8IHNjYWxlLmRvbWFpbigpXG4gICAgdHlwZS5sYWJlbHMgPSBkM19tZXJnZUxhYmVscyhcbiAgICAgIHR5cGUubGFiZWxzLFxuICAgICAgbGFiZWxzLFxuICAgICAgc2NhbGUuZG9tYWluKCksXG4gICAgICByYW5nZSxcbiAgICAgIGxhYmVsRGVsaW1pdGVyXG4gICAgKVxuXG4gICAgaWYgKGFzY2VuZGluZykge1xuICAgICAgdHlwZS5sYWJlbHMgPSBkM19yZXZlcnNlKHR5cGUubGFiZWxzKVxuICAgICAgdHlwZS5kYXRhID0gZDNfcmV2ZXJzZSh0eXBlLmRhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBkM19maWx0ZXJDZWxsczogKHR5cGUsIGNlbGxGaWx0ZXIpID0+IHtcbiAgICBsZXQgZmlsdGVyQ2VsbHMgPSB0eXBlLmRhdGFcbiAgICAgIC5tYXAoKGQsIGkpID0+ICh7IGRhdGE6IGQsIGxhYmVsOiB0eXBlLmxhYmVsc1tpXSB9KSlcbiAgICAgIC5maWx0ZXIoY2VsbEZpbHRlcilcbiAgICBjb25zdCBkYXRhVmFsdWVzID0gZmlsdGVyQ2VsbHMubWFwKGQgPT4gZC5kYXRhKVxuICAgIGNvbnN0IGxhYmVsVmFsdWVzID0gZmlsdGVyQ2VsbHMubWFwKGQgPT4gZC5sYWJlbClcbiAgICB0eXBlLmRhdGEgPSB0eXBlLmRhdGEuZmlsdGVyKGQgPT4gZGF0YVZhbHVlcy5pbmRleE9mKGQpICE9PSAtMSlcbiAgICB0eXBlLmxhYmVscyA9IHR5cGUubGFiZWxzLmZpbHRlcihkID0+IGxhYmVsVmFsdWVzLmluZGV4T2YoZCkgIT09IC0xKVxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZDNfcGxhY2VtZW50OiAob3JpZW50LCBjZWxsLCBjZWxsVHJhbnMsIHRleHQsIHRleHRUcmFucywgbGFiZWxBbGlnbikgPT4ge1xuICAgIGNlbGwuYXR0cihcInRyYW5zZm9ybVwiLCBjZWxsVHJhbnMpXG4gICAgdGV4dC5hdHRyKFwidHJhbnNmb3JtXCIsIHRleHRUcmFucylcbiAgICBpZiAob3JpZW50ID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgdGV4dC5zdHlsZShcInRleHQtYW5jaG9yXCIsIGxhYmVsQWxpZ24pXG4gICAgfVxuICB9LFxuXG4gIGQzX2FkZEV2ZW50czogZnVuY3Rpb24oY2VsbHMsIGRpc3BhdGNoZXIpIHtcbiAgICBjZWxsc1xuICAgICAgLm9uKFwibW91c2VvdmVyLmxlZ2VuZFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICAgIGQzX2NlbGxPdmVyKGRpc3BhdGNoZXIsIGQsIHRoaXMpXG4gICAgICB9KVxuICAgICAgLm9uKFwibW91c2VvdXQubGVnZW5kXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgZDNfY2VsbE91dChkaXNwYXRjaGVyLCBkLCB0aGlzKVxuICAgICAgfSlcbiAgICAgIC5vbihcImNsaWNrLmxlZ2VuZFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICAgIGQzX2NlbGxDbGljayhkaXNwYXRjaGVyLCBkLCB0aGlzKVxuICAgICAgfSlcbiAgfSxcblxuICBkM190aXRsZTogKHN2ZywgdGl0bGUsIGNsYXNzUHJlZml4LCB0aXRsZVdpZHRoKSA9PiB7XG4gICAgaWYgKHRpdGxlICE9PSBcIlwiKSB7XG4gICAgICBjb25zdCB0aXRsZVRleHQgPSBzdmcuc2VsZWN0QWxsKFwidGV4dC5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRUaXRsZVwiKVxuXG4gICAgICB0aXRsZVRleHRcbiAgICAgICAgLmRhdGEoW3RpdGxlXSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIilcblxuICAgICAgc3ZnLnNlbGVjdEFsbChcInRleHQuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIikudGV4dCh0aXRsZSlcblxuICAgICAgaWYgKHRpdGxlV2lkdGgpIHtcbiAgICAgICAgc3ZnXG4gICAgICAgICAgLnNlbGVjdEFsbChcInRleHQuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIilcbiAgICAgICAgICAuY2FsbChkM190ZXh0V3JhcHBpbmcsIHRpdGxlV2lkdGgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxzU3ZnID0gc3ZnLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKVxuICAgICAgY29uc3QgeU9mZnNldCA9IHN2Z1xuICAgICAgICAgIC5zZWxlY3QoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIilcbiAgICAgICAgICAubm9kZXMoKVxuICAgICAgICAgIC5tYXAoZCA9PiBkLmdldEJCb3goKS5oZWlnaHQpWzBdLFxuICAgICAgICB4T2Zmc2V0ID0gLWNlbGxzU3ZnLm5vZGVzKCkubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC5nZXRCQm94KCkueFxuICAgICAgICB9KVswXVxuICAgICAgY2VsbHNTdmcuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHhPZmZzZXQgKyBcIixcIiArIHlPZmZzZXQgKyBcIilcIilcbiAgICB9XG4gIH0sXG5cbiAgZDNfZGVmYXVsdExvY2FsZToge1xuICAgIGZvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXhcbiAgfSxcblxuICBkM19kZWZhdWx0Rm9ybWF0U3BlY2lmaWVyOiBcIi4wMWZcIixcblxuICBkM19kZWZhdWx0RGVsaW1pdGVyOiBcInRvXCJcbn1cbiIsImltcG9ydCBoZWxwZXIgZnJvbSBcIi4vbGVnZW5kXCJcbmltcG9ydCB7IGRpc3BhdGNoIH0gZnJvbSBcImQzLWRpc3BhdGNoXCJcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzLXNjYWxlXCJcbmltcG9ydCB7IGZvcm1hdExvY2FsZSwgZm9ybWF0U3BlY2lmaWVyIH0gZnJvbSBcImQzLWZvcm1hdFwiXG5pbXBvcnQgeyBzdW0sIG1heCB9IGZyb20gXCJkMy1hcnJheVwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpemUoKSB7XG4gIGxldCBzY2FsZSA9IHNjYWxlTGluZWFyKCksXG4gICAgc2hhcGUgPSBcInJlY3RcIixcbiAgICBzaGFwZVdpZHRoID0gMTUsXG4gICAgc2hhcGVQYWRkaW5nID0gMixcbiAgICBjZWxscyA9IFs1XSxcbiAgICBjZWxsRmlsdGVyLFxuICAgIGxhYmVscyA9IFtdLFxuICAgIGNsYXNzUHJlZml4ID0gXCJcIixcbiAgICB0aXRsZSA9IFwiXCIsXG4gICAgbG9jYWxlID0gaGVscGVyLmQzX2RlZmF1bHRMb2NhbGUsXG4gICAgc3BlY2lmaWVyID0gaGVscGVyLmQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXIsXG4gICAgbGFiZWxPZmZzZXQgPSAxMCxcbiAgICBsYWJlbEFsaWduID0gXCJtaWRkbGVcIixcbiAgICBsYWJlbERlbGltaXRlciA9IGhlbHBlci5kM19kZWZhdWx0RGVsaW1pdGVyLFxuICAgIGxhYmVsV3JhcCxcbiAgICBvcmllbnQgPSBcInZlcnRpY2FsXCIsXG4gICAgYXNjZW5kaW5nID0gZmFsc2UsXG4gICAgcGF0aCxcbiAgICB0aXRsZVdpZHRoLFxuICAgIGxlZ2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaChcImNlbGxvdmVyXCIsIFwiY2VsbG91dFwiLCBcImNlbGxjbGlja1wiKVxuXG4gIGZ1bmN0aW9uIGxlZ2VuZChzdmcpIHtcbiAgICBjb25zdCB0eXBlID0gaGVscGVyLmQzX2NhbGNUeXBlKFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgYXNjZW5kaW5nLFxuICAgICAgICBjZWxscyxcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICBsb2NhbGUuZm9ybWF0KHNwZWNpZmllciksXG4gICAgICAgIGxhYmVsRGVsaW1pdGVyXG4gICAgICApLFxuICAgICAgbGVnZW5kRyA9IHN2Zy5zZWxlY3RBbGwoXCJnXCIpLmRhdGEoW3NjYWxlXSlcblxuICAgIGlmIChjZWxsRmlsdGVyKSB7XG4gICAgICBoZWxwZXIuZDNfZmlsdGVyQ2VsbHModHlwZSwgY2VsbEZpbHRlcilcbiAgICB9XG5cbiAgICBsZWdlbmRHXG4gICAgICAuZW50ZXIoKVxuICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpXG5cbiAgICBsZXQgY2VsbCA9IHN2Z1xuICAgICAgLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKVxuICAgICAgLnNlbGVjdEFsbChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpXG4gICAgICAuZGF0YSh0eXBlLmRhdGEpXG4gICAgY29uc3QgY2VsbEVudGVyID0gY2VsbFxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpXG4gICAgY2VsbEVudGVyLmFwcGVuZChzaGFwZSkuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIilcblxuICAgIGxldCBzaGFwZXMgPSBzdmcuc2VsZWN0QWxsKFxuICAgICAgXCJnLlwiICsgY2xhc3NQcmVmaXggKyBcImNlbGwgXCIgKyBzaGFwZSArIFwiLlwiICsgY2xhc3NQcmVmaXggKyBcInN3YXRjaFwiXG4gICAgKVxuXG4gICAgLy9hZGQgZXZlbnQgaGFuZGxlcnNcbiAgICBoZWxwZXIuZDNfYWRkRXZlbnRzKGNlbGxFbnRlciwgbGVnZW5kRGlzcGF0Y2hlcilcblxuICAgIGNlbGxcbiAgICAgIC5leGl0KClcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMClcbiAgICAgIC5yZW1vdmUoKVxuXG4gICAgc2hhcGVzXG4gICAgICAuZXhpdCgpXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDApXG4gICAgICAucmVtb3ZlKClcbiAgICBzaGFwZXMgPSBzaGFwZXMubWVyZ2Uoc2hhcGVzKVxuXG4gICAgLy9jcmVhdGVzIHNoYXBlXG4gICAgaWYgKHNoYXBlID09PSBcImxpbmVcIikge1xuICAgICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoc2hhcGUsIHNoYXBlcywgMCwgc2hhcGVXaWR0aClcbiAgICAgIHNoYXBlcy5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIHR5cGUuZmVhdHVyZSlcbiAgICB9IGVsc2Uge1xuICAgICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBzaGFwZXMsXG4gICAgICAgIHR5cGUuZmVhdHVyZSxcbiAgICAgICAgdHlwZS5mZWF0dXJlLFxuICAgICAgICB0eXBlLmZlYXR1cmUsXG4gICAgICAgIHBhdGhcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoXG4gICAgICBzdmcsXG4gICAgICBjZWxsRW50ZXIsXG4gICAgICB0eXBlLmxhYmVscyxcbiAgICAgIGNsYXNzUHJlZml4LFxuICAgICAgbGFiZWxXcmFwXG4gICAgKVxuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKVxuXG4gICAgLy9zZXRzIHBsYWNlbWVudFxuXG4gICAgY29uc3QgdGV4dFNpemUgPSB0ZXh0Lm5vZGVzKCkubWFwKGQgPT4gZC5nZXRCQm94KCkpLFxuICAgICAgc2hhcGVTaXplID0gc2hhcGVzLm5vZGVzKCkubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGJib3ggPSBkLmdldEJCb3goKVxuICAgICAgICBjb25zdCBzdHJva2UgPSBzY2FsZSh0eXBlLmRhdGFbaV0pXG5cbiAgICAgICAgaWYgKHNoYXBlID09PSBcImxpbmVcIiAmJiBvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgYmJveC5oZWlnaHQgPSBiYm94LmhlaWdodCArIHN0cm9rZVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSBcImxpbmVcIiAmJiBvcmllbnQgPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIGJib3gud2lkdGggPSBiYm94LndpZHRoXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJib3hcbiAgICAgIH0pXG5cbiAgICBjb25zdCBtYXhIID0gbWF4KHNoYXBlU2l6ZSwgZCA9PiBkLmhlaWdodCArIGQueSksXG4gICAgICBtYXhXID0gbWF4KHNoYXBlU2l6ZSwgZCA9PiBkLndpZHRoICsgZC54KVxuXG4gICAgbGV0IGNlbGxUcmFucyxcbiAgICAgIHRleHRUcmFucyxcbiAgICAgIHRleHRBbGlnbiA9IGxhYmVsQWxpZ24gPT0gXCJzdGFydFwiID8gMCA6IGxhYmVsQWxpZ24gPT0gXCJtaWRkbGVcIiA/IDAuNSA6IDFcblxuICAgIC8vcG9zaXRpb25zIGNlbGxzIGFuZCB0ZXh0XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICBjb25zdCBjZWxsU2l6ZSA9IHRleHRTaXplLm1hcCgoZCwgaSkgPT5cbiAgICAgICAgTWF0aC5tYXgoZC5oZWlnaHQsIHNoYXBlU2l6ZVtpXS5oZWlnaHQpXG4gICAgICApXG4gICAgICBjb25zdCB5ID1cbiAgICAgICAgc2hhcGUgPT0gXCJjaXJjbGVcIiB8fCBzaGFwZSA9PSBcImxpbmVcIiA/IHNoYXBlU2l6ZVswXS5oZWlnaHQgLyAyIDogMFxuICAgICAgY2VsbFRyYW5zID0gKGQsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gc3VtKGNlbGxTaXplLnNsaWNlKDAsIGkpKVxuXG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKDAsICR7eSArIGhlaWdodCArIGkgKiBzaGFwZVBhZGRpbmd9KWBcbiAgICAgIH1cblxuICAgICAgdGV4dFRyYW5zID0gKGQsIGkpID0+IGB0cmFuc2xhdGUoICR7bWF4VyArIGxhYmVsT2Zmc2V0fSxcbiAgICAgICAgICAke3NoYXBlU2l6ZVtpXS55ICsgc2hhcGVTaXplW2ldLmhlaWdodCAvIDIgKyA1fSlgXG4gICAgfSBlbHNlIGlmIChvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBjZWxsVHJhbnMgPSAoZCwgaSkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHN1bShzaGFwZVNpemUuc2xpY2UoMCwgaSksIGQgPT4gZC53aWR0aClcbiAgICAgICAgY29uc3QgeSA9IHNoYXBlID09IFwiY2lyY2xlXCIgfHwgc2hhcGUgPT0gXCJsaW5lXCIgPyBtYXhIIC8gMiA6IDBcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt3aWR0aCArIGkgKiBzaGFwZVBhZGRpbmd9LCAke3l9KWBcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gc2hhcGUgPT0gXCJsaW5lXCIgPyBtYXhIIC8gMiA6IG1heEhcbiAgICAgIHRleHRUcmFucyA9IChkLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCAke3NoYXBlU2l6ZVtpXS53aWR0aCAqIHRleHRBbGlnbiArIHNoYXBlU2l6ZVtpXS54fSxcbiAgICAgICAgICAgICAgJHtvZmZzZXQgKyBsYWJlbE9mZnNldH0pYFxuICAgICAgfVxuICAgIH1cblxuICAgIGhlbHBlci5kM19wbGFjZW1lbnQob3JpZW50LCBjZWxsLCBjZWxsVHJhbnMsIHRleHQsIHRleHRUcmFucywgbGFiZWxBbGlnbilcbiAgICBoZWxwZXIuZDNfdGl0bGUoc3ZnLCB0aXRsZSwgY2xhc3NQcmVmaXgsIHRpdGxlV2lkdGgpXG5cbiAgICBjZWxsLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMSlcbiAgfVxuXG4gIGxlZ2VuZC5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZVxuICAgIHNjYWxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jZWxscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjZWxsc1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2VsbEZpbHRlclxuICAgIGNlbGxGaWx0ZXIgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlID0gZnVuY3Rpb24oXywgZCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlXG4gICAgaWYgKF8gPT0gXCJyZWN0XCIgfHwgXyA9PSBcImNpcmNsZVwiIHx8IF8gPT0gXCJsaW5lXCIpIHtcbiAgICAgIHNoYXBlID0gX1xuICAgICAgcGF0aCA9IGRcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVXaWR0aFxuICAgIHNoYXBlV2lkdGggPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5zaGFwZVBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVQYWRkaW5nXG4gICAgc2hhcGVQYWRkaW5nID0gK19cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsc1xuICAgIGxhYmVscyA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxBbGlnbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbEFsaWduXG4gICAgaWYgKF8gPT0gXCJzdGFydFwiIHx8IF8gPT0gXCJlbmRcIiB8fCBfID09IFwibWlkZGxlXCIpIHtcbiAgICAgIGxhYmVsQWxpZ24gPSBfXG4gICAgfVxuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sb2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG9jYWxlXG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKF8pXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxhYmVsRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxlZ2VuZC5sb2NhbGUoKS5mb3JtYXQoc3BlY2lmaWVyKVxuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihfKVxuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbE9mZnNldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbE9mZnNldFxuICAgIGxhYmVsT2Zmc2V0ID0gK19cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxEZWxpbWl0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxEZWxpbWl0ZXJcbiAgICBsYWJlbERlbGltaXRlciA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxXcmFwID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsV3JhcFxuICAgIGxhYmVsV3JhcCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQub3JpZW50ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudFxuICAgIF8gPSBfLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoXyA9PSBcImhvcml6b250YWxcIiB8fCBfID09IFwidmVydGljYWxcIikge1xuICAgICAgb3JpZW50ID0gX1xuICAgIH1cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQuYXNjZW5kaW5nID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGFzY2VuZGluZ1xuICAgIGFzY2VuZGluZyA9ICEhX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjbGFzc1ByZWZpeFxuICAgIGNsYXNzUHJlZml4ID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC50aXRsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aXRsZVxuICAgIHRpdGxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC50aXRsZVdpZHRoID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpdGxlV2lkdGhcbiAgICB0aXRsZVdpZHRoID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHZhbHVlID0gbGVnZW5kRGlzcGF0Y2hlci5vbi5hcHBseShsZWdlbmREaXNwYXRjaGVyLCBhcmd1bWVudHMpXG4gICAgcmV0dXJuIHZhbHVlID09PSBsZWdlbmREaXNwYXRjaGVyID8gbGVnZW5kIDogdmFsdWVcbiAgfVxuXG4gIHJldHVybiBsZWdlbmRcbn1cbiIsImltcG9ydCBoZWxwZXIgZnJvbSBcIi4vbGVnZW5kXCJcbmltcG9ydCB7IGRpc3BhdGNoIH0gZnJvbSBcImQzLWRpc3BhdGNoXCJcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzLXNjYWxlXCJcbmltcG9ydCB7IGZvcm1hdExvY2FsZSwgZm9ybWF0U3BlY2lmaWVyIH0gZnJvbSBcImQzLWZvcm1hdFwiXG5pbXBvcnQgeyBzdW0sIG1heCB9IGZyb20gXCJkMy1hcnJheVwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWJvbCgpIHtcbiAgbGV0IHNjYWxlID0gc2NhbGVMaW5lYXIoKSxcbiAgICBzaGFwZSA9IFwicGF0aFwiLFxuICAgIHNoYXBlV2lkdGggPSAxNSxcbiAgICBzaGFwZUhlaWdodCA9IDE1LFxuICAgIHNoYXBlUmFkaXVzID0gMTAsXG4gICAgc2hhcGVQYWRkaW5nID0gNSxcbiAgICBjZWxscyA9IFs1XSxcbiAgICBjZWxsRmlsdGVyLFxuICAgIGxhYmVscyA9IFtdLFxuICAgIGNsYXNzUHJlZml4ID0gXCJcIixcbiAgICB0aXRsZSA9IFwiXCIsXG4gICAgbG9jYWxlID0gaGVscGVyLmQzX2RlZmF1bHRMb2NhbGUsXG4gICAgc3BlY2lmaWVyID0gaGVscGVyLmQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXIsXG4gICAgbGFiZWxBbGlnbiA9IFwibWlkZGxlXCIsXG4gICAgbGFiZWxPZmZzZXQgPSAxMCxcbiAgICBsYWJlbERlbGltaXRlciA9IGhlbHBlci5kM19kZWZhdWx0RGVsaW1pdGVyLFxuICAgIGxhYmVsV3JhcCxcbiAgICBvcmllbnQgPSBcInZlcnRpY2FsXCIsXG4gICAgYXNjZW5kaW5nID0gZmFsc2UsXG4gICAgdGl0bGVXaWR0aCxcbiAgICBsZWdlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2goXCJjZWxsb3ZlclwiLCBcImNlbGxvdXRcIiwgXCJjZWxsY2xpY2tcIilcblxuICBmdW5jdGlvbiBsZWdlbmQoc3ZnKSB7XG4gICAgY29uc3QgdHlwZSA9IGhlbHBlci5kM19jYWxjVHlwZShcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGFzY2VuZGluZyxcbiAgICAgICAgY2VsbHMsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgbG9jYWxlLmZvcm1hdChzcGVjaWZpZXIpLFxuICAgICAgICBsYWJlbERlbGltaXRlclxuICAgICAgKSxcbiAgICAgIGxlZ2VuZEcgPSBzdmcuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKFtzY2FsZV0pXG5cbiAgICBpZiAoY2VsbEZpbHRlcikge1xuICAgICAgaGVscGVyLmQzX2ZpbHRlckNlbGxzKHR5cGUsIGNlbGxGaWx0ZXIpXG4gICAgfVxuXG4gICAgbGVnZW5kR1xuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKVxuXG4gICAgbGV0IGNlbGwgPSBzdmdcbiAgICAgIC5zZWxlY3QoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kQ2VsbHNcIilcbiAgICAgIC5zZWxlY3RBbGwoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKVxuICAgICAgLmRhdGEodHlwZS5kYXRhKVxuICAgIGNvbnN0IGNlbGxFbnRlciA9IGNlbGxcbiAgICAgIC5lbnRlcigpXG4gICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKVxuICAgIGNlbGxFbnRlci5hcHBlbmQoc2hhcGUpLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwic3dhdGNoXCIpXG5cbiAgICBsZXQgc2hhcGVzID0gc3ZnLnNlbGVjdEFsbChcImcuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbCBcIiArIHNoYXBlICsgXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwic3dhdGNoXCIpXG5cbiAgICAvL2FkZCBldmVudCBoYW5kbGVyc1xuICAgIGhlbHBlci5kM19hZGRFdmVudHMoY2VsbEVudGVyLCBsZWdlbmREaXNwYXRjaGVyKVxuXG4gICAgLy9yZW1vdmUgb2xkIHNoYXBlc1xuICAgIGNlbGxcbiAgICAgIC5leGl0KClcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMClcbiAgICAgIC5yZW1vdmUoKVxuICAgIHNoYXBlc1xuICAgICAgLmV4aXQoKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCAwKVxuICAgICAgLnJlbW92ZSgpXG4gICAgc2hhcGVzID0gc2hhcGVzLm1lcmdlKHNoYXBlcylcblxuICAgIGhlbHBlci5kM19kcmF3U2hhcGVzKFxuICAgICAgc2hhcGUsXG4gICAgICBzaGFwZXMsXG4gICAgICBzaGFwZUhlaWdodCxcbiAgICAgIHNoYXBlV2lkdGgsXG4gICAgICBzaGFwZVJhZGl1cyxcbiAgICAgIHR5cGUuZmVhdHVyZVxuICAgIClcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoXG4gICAgICBzdmcsXG4gICAgICBjZWxsRW50ZXIsXG4gICAgICB0eXBlLmxhYmVscyxcbiAgICAgIGNsYXNzUHJlZml4LFxuICAgICAgbGFiZWxXcmFwXG4gICAgKVxuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKVxuXG4gICAgLy8gc2V0cyBwbGFjZW1lbnRcbiAgICBjb25zdCB0ZXh0U2l6ZSA9IHRleHQubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSksXG4gICAgICBzaGFwZVNpemUgPSBzaGFwZXMubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSlcblxuICAgIGNvbnN0IG1heEggPSBtYXgoc2hhcGVTaXplLCBkID0+IGQuaGVpZ2h0KSxcbiAgICAgIG1heFcgPSBtYXgoc2hhcGVTaXplLCBkID0+IGQud2lkdGgpXG5cbiAgICBsZXQgY2VsbFRyYW5zLFxuICAgICAgdGV4dFRyYW5zLFxuICAgICAgdGV4dEFsaWduID0gbGFiZWxBbGlnbiA9PSBcInN0YXJ0XCIgPyAwIDogbGFiZWxBbGlnbiA9PSBcIm1pZGRsZVwiID8gMC41IDogMVxuXG4gICAgLy9wb3NpdGlvbnMgY2VsbHMgYW5kIHRleHRcbiAgICBpZiAob3JpZW50ID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGNvbnN0IGNlbGxTaXplID0gdGV4dFNpemUubWFwKChkLCBpKSA9PiBNYXRoLm1heChtYXhILCBkLmhlaWdodCkpXG5cbiAgICAgIGNlbGxUcmFucyA9IChkLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHN1bShjZWxsU2l6ZS5zbGljZSgwLCBpKSlcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHtoZWlnaHQgKyBpICogc2hhcGVQYWRkaW5nfSApYFxuICAgICAgfVxuICAgICAgdGV4dFRyYW5zID0gKGQsIGkpID0+IGB0cmFuc2xhdGUoICR7bWF4VyArIGxhYmVsT2Zmc2V0fSxcbiAgICAgICAgICAgICAgJHtzaGFwZVNpemVbaV0ueSArIHNoYXBlU2l6ZVtpXS5oZWlnaHQgLyAyICsgNX0pYFxuICAgIH0gZWxzZSBpZiAob3JpZW50ID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgY2VsbFRyYW5zID0gKGQsIGkpID0+IGB0cmFuc2xhdGUoICR7aSAqIChtYXhXICsgc2hhcGVQYWRkaW5nKX0sMClgXG4gICAgICB0ZXh0VHJhbnMgPSAoZCwgaSkgPT4gYHRyYW5zbGF0ZSggJHtzaGFwZVNpemVbaV0ud2lkdGggKiB0ZXh0QWxpZ24gK1xuICAgICAgICBzaGFwZVNpemVbaV0ueH0sXG4gICAgICAgICAgICAgICR7bWF4SCArIGxhYmVsT2Zmc2V0fSlgXG4gICAgfVxuXG4gICAgaGVscGVyLmQzX3BsYWNlbWVudChvcmllbnQsIGNlbGwsIGNlbGxUcmFucywgdGV4dCwgdGV4dFRyYW5zLCBsYWJlbEFsaWduKVxuICAgIGhlbHBlci5kM190aXRsZShzdmcsIHRpdGxlLCBjbGFzc1ByZWZpeCwgdGl0bGVXaWR0aClcbiAgICBjZWxsLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMSlcbiAgfVxuXG4gIGxlZ2VuZC5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZVxuICAgIHNjYWxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jZWxscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjZWxsc1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2VsbEZpbHRlclxuICAgIGNlbGxGaWx0ZXIgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVBhZGRpbmdcbiAgICBzaGFwZVBhZGRpbmcgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbHMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxzXG4gICAgbGFiZWxzID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbEFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsQWxpZ25cbiAgICBpZiAoXyA9PSBcInN0YXJ0XCIgfHwgXyA9PSBcImVuZFwiIHx8IF8gPT0gXCJtaWRkbGVcIikge1xuICAgICAgbGFiZWxBbGlnbiA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxvY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb2NhbGVcbiAgICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoXylcbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGVnZW5kLmxvY2FsZSgpLmZvcm1hdChzcGVjaWZpZXIpXG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKF8pXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxhYmVsT2Zmc2V0ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsT2Zmc2V0XG4gICAgbGFiZWxPZmZzZXQgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbERlbGltaXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbERlbGltaXRlclxuICAgIGxhYmVsRGVsaW1pdGVyID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbFdyYXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxXcmFwXG4gICAgbGFiZWxXcmFwID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5vcmllbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb3JpZW50XG4gICAgXyA9IF8udG9Mb3dlckNhc2UoKVxuICAgIGlmIChfID09IFwiaG9yaXpvbnRhbFwiIHx8IF8gPT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICBvcmllbnQgPSBfXG4gICAgfVxuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5hc2NlbmRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gYXNjZW5kaW5nXG4gICAgYXNjZW5kaW5nID0gISFfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNsYXNzUHJlZml4ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsYXNzUHJlZml4XG4gICAgY2xhc3NQcmVmaXggPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnRpdGxlID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpdGxlXG4gICAgdGl0bGUgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnRpdGxlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGVXaWR0aFxuICAgIHRpdGxlV2lkdGggPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgdmFsdWUgPSBsZWdlbmREaXNwYXRjaGVyLm9uLmFwcGx5KGxlZ2VuZERpc3BhdGNoZXIsIGFyZ3VtZW50cylcbiAgICByZXR1cm4gdmFsdWUgPT09IGxlZ2VuZERpc3BhdGNoZXIgPyBsZWdlbmQgOiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIGxlZ2VuZFxufVxuIiwiaW1wb3J0IGNvbG9yIGZyb20gJy4vY29sb3InXG5pbXBvcnQgc2l6ZSBmcm9tICcuL3NpemUnXG5pbXBvcnQgc3ltYm9sIGZyb20gJy4vc3ltYm9sJ1xuaW1wb3J0IGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJ1xuXG5kMy5sZWdlbmRDb2xvciA9IGNvbG9yXG5kMy5sZWdlbmRTaXplID0gc2l6ZVxuZDMubGVnZW5kU3ltYm9sID0gc3ltYm9sXG5kMy5sZWdlbmRIZWxwZXJzID0gaGVscGVyc1xuIl19 + +;/*! + * tinygradient (v1.1.5) + * @copyright 2014-2021 Damien "Mistic" Sorel + * @licence MIT + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('tinycolor2')) : + typeof define === 'function' && define.amd ? define(['tinycolor2'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinygradient = factory(global.tinycolor)); +}(this, (function (tinycolor2) { 'use strict'; + + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + + var tinycolor2__default = /*#__PURE__*/_interopDefaultLegacy(tinycolor2); + + /** + * @typedef {Object} TinyGradient.StopInput + * @property {ColorInput} color + * @property {number} pos + */ + + /** + * @typedef {Object} TinyGradient.StepValue + * @type {number} [r] + * @type {number} [g] + * @type {number} [b] + * @type {number} [h] + * @type {number} [s] + * @type {number} [v] + * @type {number} [a] + */ + + /** + * @type {StepValue} + */ + + var RGBA_MAX = { + r: 256, + g: 256, + b: 256, + a: 1 + }; + /** + * @type {StepValue} + */ + + var HSVA_MAX = { + h: 360, + s: 1, + v: 1, + a: 1 + }; + /** + * Linearly compute the step size between start and end (not normalized) + * @param {StepValue} start + * @param {StepValue} end + * @param {number} steps - number of desired steps + * @return {StepValue} + */ + + function stepize(start, end, steps) { + var step = {}; + + for (var k in start) { + if (start.hasOwnProperty(k)) { + step[k] = steps === 0 ? 0 : (end[k] - start[k]) / steps; + } + } + + return step; + } + /** + * Compute the final step color + * @param {StepValue} step - from `stepize` + * @param {StepValue} start + * @param {number} i - color index + * @param {StepValue} max - rgba or hsva of maximum values for each channel + * @return {StepValue} + */ + + + function interpolate(step, start, i, max) { + var color = {}; + + for (var k in start) { + if (start.hasOwnProperty(k)) { + color[k] = step[k] * i + start[k]; + color[k] = color[k] < 0 ? color[k] + max[k] : max[k] !== 1 ? color[k] % max[k] : color[k]; + } + } + + return color; + } + /** + * Generate gradient with RGBa interpolation + * @param {StopInput} stop1 + * @param {StopInput} stop2 + * @param {number} steps + * @return {tinycolor[]} color1 included, color2 excluded + */ + + + function interpolateRgb(stop1, stop2, steps) { + var start = stop1.color.toRgb(); + var end = stop2.color.toRgb(); + var step = stepize(start, end, steps); + var gradient = [stop1.color]; + + for (var i = 1; i < steps; i++) { + var color = interpolate(step, start, i, RGBA_MAX); + gradient.push(tinycolor2__default['default'](color)); + } + + return gradient; + } + /** + * Generate gradient with HSVa interpolation + * @param {StopInput} stop1 + * @param {StopInput} stop2 + * @param {number} steps + * @param {boolean|'long'|'short'} mode + * @return {tinycolor[]} color1 included, color2 excluded + */ + + + function interpolateHsv(stop1, stop2, steps, mode) { + var start = stop1.color.toHsv(); + var end = stop2.color.toHsv(); // rgb interpolation if one of the steps in grayscale + + if (start.s === 0 || end.s === 0) { + return interpolateRgb(stop1, stop2, steps); + } + + var trigonometric; + + if (typeof mode === 'boolean') { + trigonometric = mode; + } else { + var trigShortest = start.h < end.h && end.h - start.h < 180 || start.h > end.h && start.h - end.h > 180; + trigonometric = mode === 'long' && trigShortest || mode === 'short' && !trigShortest; + } + + var step = stepize(start, end, steps); + var gradient = [stop1.color]; // recompute hue + + var diff; + + if (start.h <= end.h && !trigonometric || start.h >= end.h && trigonometric) { + diff = end.h - start.h; + } else if (trigonometric) { + diff = 360 - end.h + start.h; + } else { + diff = 360 - start.h + end.h; + } + + step.h = Math.pow(-1, trigonometric ? 1 : 0) * Math.abs(diff) / steps; + + for (var i = 1; i < steps; i++) { + var color = interpolate(step, start, i, HSVA_MAX); + gradient.push(tinycolor2__default['default'](color)); + } + + return gradient; + } + /** + * Compute substeps between each stops + * @param {StopInput[]} stops + * @param {number} steps + * @return {number[]} + */ + + + function computeSubsteps(stops, steps) { + var l = stops.length; // validation + + steps = parseInt(steps, 10); + + if (isNaN(steps) || steps < 2) { + throw new Error('Invalid number of steps (< 2)'); + } + + if (steps < l) { + throw new Error('Number of steps cannot be inferior to number of stops'); + } // compute substeps from stop positions + + + var substeps = []; + + for (var i = 1; i < l; i++) { + var step = (steps - 1) * (stops[i].pos - stops[i - 1].pos); + substeps.push(Math.max(1, Math.round(step))); + } // adjust number of steps + + + var totalSubsteps = 1; + + for (var n = l - 1; n--;) { + totalSubsteps += substeps[n]; + } + + while (totalSubsteps !== steps) { + if (totalSubsteps < steps) { + var min = Math.min.apply(null, substeps); + substeps[substeps.indexOf(min)]++; + totalSubsteps++; + } else { + var max = Math.max.apply(null, substeps); + substeps[substeps.indexOf(max)]--; + totalSubsteps--; + } + } + + return substeps; + } + /** + * Compute the color at a specific position + * @param {StopInput[]} stops + * @param {number} pos + * @param {string} method + * @param {StepValue} max + * @returns {tinycolor} + */ + + + function computeAt(stops, pos, method, max) { + if (pos < 0 || pos > 1) { + throw new Error('Position must be between 0 and 1'); + } + + var start, end; + + for (var i = 0, l = stops.length; i < l - 1; i++) { + if (pos >= stops[i].pos && pos < stops[i + 1].pos) { + start = stops[i]; + end = stops[i + 1]; + break; + } + } + + if (!start) { + start = end = stops[stops.length - 1]; + } + + var step = stepize(start.color[method](), end.color[method](), (end.pos - start.pos) * 100); + var color = interpolate(step, start.color[method](), (pos - start.pos) * 100, max); + return tinycolor2__default['default'](color); + } + + var TinyGradient = /*#__PURE__*/function () { + /** + * @param {StopInput[]|ColorInput[]} stops + * @returns {TinyGradient} + */ + function TinyGradient(stops) { + // validation + if (stops.length < 2) { + throw new Error('Invalid number of stops (< 2)'); + } + + var havingPositions = stops[0].pos !== undefined; + var l = stops.length; + var p = -1; + var lastColorLess = false; // create tinycolor objects and clean positions + + this.stops = stops.map(function (stop, i) { + var hasPosition = stop.pos !== undefined; + + if (havingPositions ^ hasPosition) { + throw new Error('Cannot mix positionned and not posionned color stops'); + } + + if (hasPosition) { + var hasColor = stop.color !== undefined; + + if (!hasColor && (lastColorLess || i === 0 || i === l - 1)) { + throw new Error('Cannot define two consecutive position-only stops'); + } + + lastColorLess = !hasColor; + stop = { + color: hasColor ? tinycolor2__default['default'](stop.color) : null, + colorLess: !hasColor, + pos: stop.pos + }; + + if (stop.pos < 0 || stop.pos > 1) { + throw new Error('Color stops positions must be between 0 and 1'); + } else if (stop.pos < p) { + throw new Error('Color stops positions are not ordered'); + } + + p = stop.pos; + } else { + stop = { + color: tinycolor2__default['default'](stop.color !== undefined ? stop.color : stop), + pos: i / (l - 1) + }; + } + + return stop; + }); + + if (this.stops[0].pos !== 0) { + this.stops.unshift({ + color: this.stops[0].color, + pos: 0 + }); + l++; + } + + if (this.stops[l - 1].pos !== 1) { + this.stops.push({ + color: this.stops[l - 1].color, + pos: 1 + }); + } + } + /** + * Return new instance with reversed stops + * @return {TinyGradient} + */ + + + var _proto = TinyGradient.prototype; + + _proto.reverse = function reverse() { + var stops = []; + this.stops.forEach(function (stop) { + stops.push({ + color: stop.color, + pos: 1 - stop.pos + }); + }); + return new TinyGradient(stops.reverse()); + } + /** + * Return new instance with looped stops + * @return {TinyGradient} + */ + ; + + _proto.loop = function loop() { + var stops1 = []; + var stops2 = []; + this.stops.forEach(function (stop) { + stops1.push({ + color: stop.color, + pos: stop.pos / 2 + }); + }); + this.stops.slice(0, -1).forEach(function (stop) { + stops2.push({ + color: stop.color, + pos: 1 - stop.pos / 2 + }); + }); + return new TinyGradient(stops1.concat(stops2.reverse())); + } + /** + * Generate gradient with RGBa interpolation + * @param {number} steps + * @return {tinycolor[]} + */ + ; + + _proto.rgb = function rgb(steps) { + var _this = this; + + var substeps = computeSubsteps(this.stops, steps); + var gradient = []; + this.stops.forEach(function (stop, i) { + if (stop.colorLess) { + stop.color = interpolateRgb(_this.stops[i - 1], _this.stops[i + 1], 2)[1]; + } + }); + + for (var i = 0, l = this.stops.length; i < l - 1; i++) { + var rgb = interpolateRgb(this.stops[i], this.stops[i + 1], substeps[i]); + gradient.splice.apply(gradient, [gradient.length, 0].concat(rgb)); + } + + gradient.push(this.stops[this.stops.length - 1].color); + return gradient; + } + /** + * Generate gradient with HSVa interpolation + * @param {number} steps + * @param {boolean|'long'|'short'} [mode=false] + * - false to step in clockwise + * - true to step in trigonometric order + * - 'short' to use the shortest way + * - 'long' to use the longest way + * @return {tinycolor[]} + */ + ; + + _proto.hsv = function hsv(steps, mode) { + var _this2 = this; + + var substeps = computeSubsteps(this.stops, steps); + var gradient = []; + this.stops.forEach(function (stop, i) { + if (stop.colorLess) { + stop.color = interpolateHsv(_this2.stops[i - 1], _this2.stops[i + 1], 2, mode)[1]; + } + }); + + for (var i = 0, l = this.stops.length; i < l - 1; i++) { + var hsv = interpolateHsv(this.stops[i], this.stops[i + 1], substeps[i], mode); + gradient.splice.apply(gradient, [gradient.length, 0].concat(hsv)); + } + + gradient.push(this.stops[this.stops.length - 1].color); + return gradient; + } + /** + * Generate CSS3 command (no prefix) for this gradient + * @param {String} [mode=linear] - 'linear' or 'radial' + * @param {String} [direction] - default is 'to right' or 'ellipse at center' + * @return {String} + */ + ; + + _proto.css = function css(mode, direction) { + mode = mode || 'linear'; + direction = direction || (mode === 'linear' ? 'to right' : 'ellipse at center'); + var css = mode + '-gradient(' + direction; + this.stops.forEach(function (stop) { + css += ', ' + (stop.colorLess ? '' : stop.color.toRgbString() + ' ') + stop.pos * 100 + '%'; + }); + css += ')'; + return css; + } + /** + * Returns the color at specific position with RGBa interpolation + * @param {number} pos, between 0 and 1 + * @return {tinycolor} + */ + ; + + _proto.rgbAt = function rgbAt(pos) { + return computeAt(this.stops, pos, 'toRgb', RGBA_MAX); + } + /** + * Returns the color at specific position with HSVa interpolation + * @param {number} pos, between 0 and 1 + * @return {tinycolor} + */ + ; + + _proto.hsvAt = function hsvAt(pos) { + return computeAt(this.stops, pos, 'toHsv', HSVA_MAX); + }; + + return TinyGradient; + }(); + /** + * @param {StopInput[]|ColorInput[]|StopInput...|ColorInput...} stops + * @returns {TinyGradient} + */ + + + var tinygradient = function tinygradient(stops) { + // varargs + if (arguments.length === 1) { + if (!Array.isArray(arguments[0])) { + throw new Error('"stops" is not an array'); + } + + stops = arguments[0]; + } else { + stops = Array.prototype.slice.call(arguments); + } + + return new TinyGradient(stops); + }; + + return tinygradient; + +}))); +//# sourceMappingURL=browser.js.map + +;/** + * marked v12.0.2 - a markdown parser + * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){"use strict";function t(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function n(t){e.defaults=t}e.defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};const s=/[&<>"']/,r=new RegExp(s.source,"g"),i=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,l=new RegExp(i.source,"g"),o={"&":"&","<":"<",">":">",'"':""","'":"'"},a=e=>o[e];function c(e,t){if(t){if(s.test(e))return e.replace(r,a)}else if(i.test(e))return e.replace(l,a);return e}const h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function p(e){return e.replace(h,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const u=/(^|[^\[])\^/g;function k(e,t){let n="string"==typeof e?e:e.source;t=t||"";const s={replace:(e,t)=>{let r="string"==typeof t?t:t.source;return r=r.replace(u,"$1"),n=n.replace(e,r),s},getRegex:()=>new RegExp(n,t)};return s}function g(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch(e){return null}return e}const f={exec:()=>null};function d(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let s=!1,r=t;for(;--r>=0&&"\\"===n[r];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:x(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\s+)(?:```)/);if(null===n)return t;const s=n[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=s.length?e.slice(s.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=x(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=t[0].replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1");e=x(e.replace(/^ *>[ \t]?/gm,""),"\n");const n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:"blockquote",raw:t[0],tokens:s,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const i=new RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`);let l="",o="",a=!1;for(;e;){let n=!1;if(!(t=i.exec(e)))break;if(this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let s=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],h=0;this.options.pedantic?(h=2,o=s.trimStart()):(h=t[2].search(/[^ ]/),h=h>4?1:h,o=s.slice(h),h+=t[1].length);let p=!1;if(!s&&/^ *$/.test(c)&&(l+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),n=new RegExp(`^ {0,${Math.min(3,h-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:\`\`\`|~~~)`),i=new RegExp(`^ {0,${Math.min(3,h-1)}}#`);for(;e;){const a=e.split("\n",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),r.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=h||!c.trim())o+="\n"+c.slice(h);else{if(p)break;if(s.search(/[^ ]/)>=4)break;if(r.test(s))break;if(i.test(s))break;if(n.test(s))break;o+="\n"+c}p||c.trim()||(p=!0),l+=a+"\n",e=e.substring(a.length+1),s=c.slice(h)}}r.loose||(a?r.loose=!0:/\n *\n *$/.test(l)&&(a=!0));let u,k=null;this.options.gfm&&(k=/^\[[ xX]\] /.exec(o),k&&(u="[ ] "!==k[0],o=o.replace(/^\[[ xX]\] +/,""))),r.items.push({type:"list_item",raw:l,task:!!k,checked:u,loose:!1,text:o,tokens:[]}),r.raw+=l}r.items[r.items.length-1].raw=l.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));r.loose=n}if(r.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=d(t[1]),s=t[2].replace(/^\||\| *$/g,"").split("|"),r=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],i={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(const e of s)/^ *-+: *$/.test(e)?i.align.push("right"):/^ *:-+: *$/.test(e)?i.align.push("center"):/^ *:-+ *$/.test(e)?i.align.push("left"):i.align.push(null);for(const e of n)i.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of r)i.rows.push(d(e,i.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:c(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^
    /i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=x(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let s=0;s-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],s="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),b(t,{href:n?n.replace(this.rules.inline.anyPunctuation,"$1"):n,title:s?s.replace(this.rules.inline.anyPunctuation,"$1"):s},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return b(n,e,n[0],this.lexer)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s)return;if(s[3]&&n.match(/[\p{L}\p{N}]/u))return;if(!(s[1]||s[2]||"")||!n||this.rules.inline.punctuation.exec(n)){const n=[...s[0]].length-1;let r,i,l=n,o=0;const a="*"===s[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+n);null!=(s=a.exec(t));){if(r=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!r)continue;if(i=[...r].length,s[3]||s[4]){l+=i;continue}if((s[5]||s[6])&&n%3&&!((n+i)%3)){o+=i;continue}if(l-=i,l>0)continue;i=Math.min(i,i+l+o);const t=[...s[0]][0].length,a=e.slice(0,n+s.index+t+i);if(Math.min(n,i)%2){const e=a.slice(1,-1);return{type:"em",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}const c=a.slice(2,-2);return{type:"strong",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return n&&s&&(e=e.substring(1,e.length-1)),e=c(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=c(t[1]),n="mailto:"+e):(e=c(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if("@"===t[2])e=c(t[0]),n="mailto:"+e;else{let s;do{s=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??""}while(s!==t[0]);e=c(t[0]),n="www."===t[1]?"http://"+t[0]:t[0]}return{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:c(t[0]),{type:"text",raw:t[0],text:e}}}}const m=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,y=/(?:[*+-]|\d{1,9}[.)])/,$=k(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,y).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),z=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,T=/(?!\s*\])(?:\\.|[^\[\]\\])+/,R=k(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace("label",T).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),_=k(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,y).getRegex(),A="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",S=/|$))/,I=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))","i").replace("comment",S).replace("tag",A).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),E=k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),q={blockquote:k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",E).getRegex(),code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,def:R,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,hr:m,html:I,lheading:$,list:_,newline:/^(?: *(?:\n|$))+/,paragraph:E,table:f,text:/^[^\n]+/},Z=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex(),L={...q,table:Z,paragraph:k(z).replace("hr",m).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Z).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",A).getRegex()},P={...q,html:k("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",S).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:f,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(z).replace("hr",m).replace("heading"," *#{1,6} *[^\n]").replace("lheading",$).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Q=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,v=/^( {2,}|\\)\n(?!\s*$)/,B="\\p{P}\\p{S}",C=k(/^((?![*_])[\spunctuation])/,"u").replace(/punctuation/g,B).getRegex(),M=k(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,B).getRegex(),O=k("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,B).getRegex(),D=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,B).getRegex(),j=k(/\\([punct])/,"gu").replace(/punct/g,B).getRegex(),H=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),U=k(S).replace("(?:--\x3e|$)","--\x3e").getRegex(),X=k("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",U).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),F=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,N=k(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",F).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),G=k(/^!?\[(label)\]\[(ref)\]/).replace("label",F).replace("ref",T).getRegex(),J=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",T).getRegex(),K={_backpedal:f,anyPunctuation:j,autolink:H,blockSkip:/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,br:v,code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,del:f,emStrongLDelim:M,emStrongRDelimAst:O,emStrongRDelimUnd:D,escape:Q,link:N,nolink:J,punctuation:C,reflink:G,reflinkSearch:k("reflink|nolink(?!\\()","g").replace("reflink",G).replace("nolink",J).getRegex(),tag:X,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\t+" ".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.space(e))e=e.substring(n.raw.length),1===n.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?t.push(n):(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(s.raw+="\n"+n.raw,s.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startBlock.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(n=this.tokenizer.paragraph(r)))s=t[t.length-1],i&&"paragraph"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n),i=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+n.raw,s.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,s,r,i,l,o,a=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,i.index)+"["+"a".repeat(i[0].length-2)+"]"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,i.index)+"++"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(l||(o=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,a,o))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startInline.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(r))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(o=n.raw.slice(-1)),l=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(n.raw.length),t.push(n);return t}}class se{options;constructor(t){this.options=t||e.defaults}code(e,t,n){const s=(t||"").match(/^\S*/)?.[0];return e=e.replace(/\n$/,"")+"\n",s?'

    '+(n?e:c(e,!0))+"
    \n":"
    "+(n?e:c(e,!0))+"
    \n"}blockquote(e){return`
    \n${e}
    \n`}html(e,t){return e}heading(e,t,n){return`${e}\n`}hr(){return"
    \n"}list(e,t,n){const s=t?"ol":"ul";return"<"+s+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"}listitem(e,t,n){return`
  • ${e}
  • \n`}checkbox(e){return"'}paragraph(e){return`

    ${e}

    \n`}table(e,t){return t&&(t=`${t}`),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return`\n${e}\n`}tablecell(e,t){const n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return"
    "}del(e){return`${e}`}link(e,t,n){const s=g(e);if(null===s)return n;let r='
    ",r}image(e,t,n){const s=g(e);if(null===s)return n;let r=`${n}0&&"paragraph"===n.tokens[0].type?(n.tokens[0].text=e+" "+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&"text"===n.tokens[0].tokens[0].type&&(n.tokens[0].tokens[0].text=e+" "+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:"text",text:e+" "}):o+=e+" "}o+=this.parse(n.tokens,i),l+=this.renderer.listitem(o,r,!!s)}n+=this.renderer.list(l,t,s);continue}case"html":{const e=r;n+=this.renderer.html(e.text,e.block);continue}case"paragraph":{const e=r;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case"text":{let i=r,l=i.tokens?this.parseInline(i.tokens):i.text;for(;s+1{const r=e[s].flat(1/0);n=n.concat(this.walkTokens(r,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{const n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){const n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=n.apply(this,t)),s}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");const n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){const t=this.defaults.renderer||new se(this.defaults);for(const n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.renderer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){const t=this.defaults.tokenizer||new w(this.defaults);for(const n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;const s=n,r=e.tokenizer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){const t=this.defaults.hooks||new le;for(const n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if("options"===n)continue;const s=n,r=e.hooks[s],i=t[s];le.passThroughHooks.has(n)?t[s]=e=>{if(this.defaults.async)return Promise.resolve(r.call(t,e)).then((e=>i.call(t,e)));const n=r.call(t,e);return i.call(t,n)}:t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){const t=this.defaults.walkTokens,s=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(s.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}})),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ne.lex(e,t??this.defaults)}parser(e,t){return ie.parse(e,t??this.defaults)}#e(e,t){return(n,s)=>{const r={...s},i={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(i.silent||console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored."),i.async=!0);const l=this.#t(!!i.silent,!!i.async);if(null==n)return l(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof n)return l(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(i.hooks&&(i.hooks.options=i),i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(n):n).then((t=>e(t,i))).then((e=>i.hooks?i.hooks.processAllTokens(e):e)).then((e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then((()=>e)):e)).then((e=>t(e,i))).then((e=>i.hooks?i.hooks.postprocess(e):e)).catch(l);try{i.hooks&&(n=i.hooks.preprocess(n));let s=e(n,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let r=t(s,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return l(e)}}}#t(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+c(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}}const ae=new oe;function ce(e,t){return ae.parse(e,t)}ce.options=ce.setOptions=function(e){return ae.setOptions(e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.getDefaults=t,ce.defaults=e.defaults,ce.use=function(...e){return ae.use(...e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.walkTokens=function(e,t){return ae.walkTokens(e,t)},ce.parseInline=ae.parseInline,ce.Parser=ie,ce.parser=ie.parse,ce.Renderer=se,ce.TextRenderer=re,ce.Lexer=ne,ce.lexer=ne.lex,ce.Tokenizer=w,ce.Hooks=le,ce.parse=ce;const he=ce.options,pe=ce.setOptions,ue=ce.use,ke=ce.walkTokens,ge=ce.parseInline,fe=ce,de=ie.parse,xe=ne.lex;e.Hooks=le,e.Lexer=ne,e.Marked=oe,e.Parser=ie,e.Renderer=se,e.TextRenderer=re,e.Tokenizer=w,e.getDefaults=t,e.lexer=xe,e.marked=ce,e.options=he,e.parse=fe,e.parseInline=ge,e.parser=de,e.setOptions=pe,e.use=ue,e.walkTokens=ke})); + +; +//# sourceMappingURL=scripts.js.map \ No newline at end of file diff --git a/site/mitre/scripts.js.map b/site/mitre/scripts.js.map new file mode 100644 index 0000000..75fdd87 --- /dev/null +++ b/site/mitre/scripts.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts.js","mappings":"AAAA;AACA;AACA;AACA,IAAI;AACJ;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA,6EAA6E;AAC7E;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC;;AAEpC;;AAEA;AACA;AACA,MAAM;;AAEN;AACA,IAAI;;;AAGJ;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO,QAAQ;;AAEf;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,MAAM;AACN;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,wDAAwD,GAAG,yBAAyB;AACpF,6CAA6C;AAC7C,sBAAsB;AACtB;;AAEA;AACA,MAAM;AACN;AACA;AACA,sCAAsC;AACtC,oBAAoB;;AAEpB;AACA;AACA,OAAO,QAAQ;AACf;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,CAAC;;CC3LD;AACA,eAAe,6KAA6K,iBAAiB,OAAO,mBAAmB,MAAM,aAAa,aAAa,6BAA6B,0DAA0D,0BAA0B,wDAAwD,cAAc,oCAAoC,gBAAgB,gCAAgC,uHAAuH,gBAAgB,0CAA0C,oBAAoB,OAAO,WAAW,uBAAuB,iCAAiC,sBAAsB,uDAA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CA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,UAAU;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,YAAY;AAChC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D,UAAU;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D,wBAAwB;;AAErF;AACA;AACA,6CAA6C,wBAAwB;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gFAAgF,4BAA4B,iBAAiB;AAC7H,gFAAgF,2BAA2B,kBAAkB;AAC7H,uDAAuD,oDAAoD,iBAAiB;AAC5H,uDAAuD,oDAAoD,iBAAiB;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,sBAAsB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,QAAQ,iBAAiB,aAAa,iBAAiB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,EAAE,cAAc,EAAE,cAAc,EAAE;AAC/D,6BAA6B,EAAE,cAAc,EAAE,cAAc,EAAE;AAC/D,6BAA6B,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE;AAC/E,6BAA6B,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE;AAC/E;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C,SAAS,QAAQ,SAAS,QAAQ,QAAQ;AACrF;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,CAAC;;CCtqCD;AACA;AACA;AACA;AACA,8GAA8G;AAC9G,CAAC,8BAA8B;;AAE/B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS,6BAA6B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,MAAM;AACnC;AACA;AACA;;AAEA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,+BAA+B;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,4CAA4C;AAC5C;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wCAAwC;AACxC,4CAA4C;AAC5C;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA,kCAAkC,QAAQ;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,UAAU,iBAAiB,SAAS,YAAY;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;;AAEA,qBAAqB,cAAc;AACnC;AACA;AACA;AACA;AACA;;AAEA,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC,IAAI;AACJ,iCAAiC,OAAO;AACxC,yBAAyB,OAAO;AAChC;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA,QAAQ;AACR,oBAAoB,OAAO;AAC3B;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA,MAAM;AACN,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0EAA0E,QAAQ;AAClF,2DAA2D,QAAQ;AACnE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa;AACnB;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C,4FAA4F;;AAEvI;AACA;AACA,2CAA2C,gCAAgC,yEAAyE;AACpJ;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,yCAAyC,yCAAyC;;AAElF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,yBAAyB;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,cAAc;;AAEd;AACA,8CAA8C,KAAK,OAAO;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;AACA,iBAAiB;AACjB;AACA;AACA,GAAG;AACH;AACA,mFAAmF,OAAO;AAC1F;AACA,gDAAgD,OAAO;AACvD,GAAG;AACH;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA,mCAAmC,4BAA4B;AAC/D;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8CAA8C,wCAAwC,QAAQ;AAC9F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sFAAsF,OAAO;AAC7F,gHAAgH,OAAO;AACvH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,0FAA0F,OAAO;AACjG,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sFAAsF,OAAO;AAC7F,6FAA6F,OAAO;AACpG;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,sDAAsD;AACvF,wCAAwC,gDAAgD;AACxF,sCAAsC,8CAA8C;AACpF,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS,gBAAgB;AACzB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,SAAS,iBAAiB;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,gBAAgB;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA,cAAc,iBAAiB;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,uGAAuG,OAAO;AAC9G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;;AAEA,+JAA+J,OAAO;AACtK,yHAAyH,OAAO;AAChI;AACA;AACA;AACA;AACA;;AAEA,SAAS,QAAQ;AACjB;AACA;;AAEA;AACA;;AAEA;;AAEA,6DAA6D,QAAQ;AACrE,6EAA6E,SAAS;AACtF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,uFAAuF,OAAO;AAC9F,yGAAyG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,4DAA4D,OAAO;AACnE,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,mCAAmC;AACnC;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY;AACZ,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,8CAA8C,OAAO;AACrD,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB,2BAA2B;;AAE3B;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA4B,mCAAmC;AAC/D;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,cAAc,qDAAqD;AACnE,aAAa,oDAAoD;AACjE,iBAAiB,wDAAwD;AACzE,aAAa,oDAAoD;AACjE,QAAQ,+CAA+C;AACvD,QAAQ,+CAA+C;AACvD,SAAS,gDAAgD;AACzD,SAAS,gDAAgD;AACzD,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,wBAAwB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0CAA0C,qBAAqB,QAAQ;AACvE,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;;AAEA;AACA;AACA;AACA,oEAAoE;AACpE,2DAA2D;AAC3D,yEAAyE;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB,IAAI;AAC7B,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;AACnE,wCAAwC,IAAI,GAAG,IAAI,GAAG,IAAI;AAC1D,0CAA0C,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY;AACrD;;AAEA;AACA,aAAa,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,oDAAoD;AAC3G;;AAEA;AACA;AACA,YAAY,2BAA2B,EAAE,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE,qBAAqB,EAAE,GAAG;AAC1H;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,cAAc,2BAA2B,EAAE,eAAe,IAAI,qBAAqB,KAAK,qBAAqB,GAAG,qBAAqB,EAAE,GAAG;AAC1I;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB,SAAS,QAAQ;;AAEjB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA,yCAAyC;AACzC,4BAA4B;AAC5B;AACA,MAAM,OAAO;AACb;AACA,cAAc,mCAAmC;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,uCAAuC,GAAG,uCAAuC;AAC/F,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,gCAAgC;AACjE,cAAc,8EAA8E;AAC5F,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,cAAc,6EAA6E;AAC3F,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,uCAAuC,GAAG,uCAAuC;AAC/F,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sIAAsI;;AAEtI;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA,+BAA+B;AAC/B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,2DAA2D;AAC3D;AACA;;AAEA;AACA;AACA,2DAA2D;AAC3D;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yDAAyD;AACzD;AACA,2DAA2D;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,yCAAyC;AACzC;;AAEA;AACA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA,mDAAmD,eAAe;AAClE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,4BAA4B,OAAO;AAChF;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,sFAAsF,OAAO;AAC7F,6FAA6F,OAAO;AACpG;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,gKAAgK,OAAO;AACvK,yHAAyH,OAAO;AAChI;AACA;AACA;AACA;AACA;;AAEA,SAAS,QAAQ;AACjB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,sFAAsF,OAAO;AAC7F,gHAAgH,OAAO;AACvH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,0FAA0F,OAAO;AACjG,+DAA+D,OAAO;AACtE;AACA,oIAAoI,OAAO;AAC3I;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,cAAc;AAChC,eAAe,oBAAoB;;AAEnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,sCAAsC;AACtC,mCAAmC;;AAEnC;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA,uCAAuC;AACvC,oCAAoC;;AAEpC;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yCAAyC;AACzC,sCAAsC;;AAEtC;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA,4DAA4D,OAAO;AACnE,+DAA+D,OAAO;AACtE;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,aAAa,oDAAoD;AACjE,gBAAgB,uDAAuD;AACvE,WAAW,kDAAkD;AAC7D,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,iBAAiB,aAAa;AAC9B,kBAAkB,cAAc;AAChC,mBAAmB,eAAe;AAClC,mBAAmB;;AAEnB,OAAO,oCAAoC;;AAE3C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,iEAAiE;AAC3F,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,0BAA0B,iEAAiE;AAC3F,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA,wBAAwB,yCAAyC;AACjE,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,uCAAuC,gBAAgB;;AAEvD;;AAEA;AACA,qCAAqC,oCAAoC;AACzE,sCAAsC,yBAAyB;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C,sDAAsD;AACrG,6DAA6D,sCAAsC;AACnG;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW;AACX,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,iHAAiH;AACpJ,mCAAmC,iGAAiG;AACpI,uCAAuC,wGAAwG;AAC/I,wCAAwC,wGAAwG;AAChJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,wDAAwD;AACxD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8CAA8C,qBAAqB,QAAQ;AAC3E,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,UAAU;AAC7B;AACA,yCAAyC;AACzC,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA,oCAAoC;AACpC,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,sCAAsC;AACtC,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB,cAAc;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gCAAgC,cAAc;AAC9C;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yEAAyE,2BAA2B;AACpG,8BAA8B;AAC9B,cAAc;AACd,uEAAuE,2BAA2B;AAClG,8BAA8B;AAC9B;AACA;AACA,uBAAuB;AACvB,UAAU;AACV;AACA;AACA;AACA;AACA;AACA,iEAAiE,2BAA2B;AAC5F,8BAA8B;AAC9B,cAAc;AACd,iEAAiE,2BAA2B;AAC5F,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB,GAAG,yBAAyB;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,cAAc,GAAG,cAAc;AACnD;AACA;AACA,oBAAoB,IAAI,GAAG,IAAI,GAAG,cAAc,GAAG,cAAc;AACjE;AACA;AACA,oBAAoB,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,cAAc,GAAG,cAAc;AAC/E;AACA;AACA;;AAEA;AACA,mDAAmD,EAAE;;AAErD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,cAAc,GAAG,cAAc;AACrD;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,cAAc,GAAG,cAAc;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,eAAe,GAAG,eAAe;AACzD;;AAEA,sBAAsB,EAAE,GAAG,EAAE,OAAO,yBAAyB,GAAG,0BAA0B,GAAG,0BAA0B;AACvH;AACA;AACA;AACA;;AAEA;AACA,mDAAmD,EAAE;;AAErD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB,GAAG,GAAG,GAAG;AAC/B;;AAEA;AACA;AACA,sBAAsB,GAAG,GAAG,GAAG;AAC/B;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,sBAAsB,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,OAAO,GAAG,OAAO,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,GAAG,cAAc,GAAG,cAAc;AACjH;;AAEA;AACA;AACA,sBAAsB,EAAE,GAAG,EAAE,KAAK,cAAc,GAAG,GAAG,GAAG,gCAAgC,GAAG,gCAAgC;AAC5H;AACA;AACA;AACA,oBAAoB,yBAAyB,GAAG,yBAAyB,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG;AAC/F;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,oDAAoD,MAAM;;AAE1D;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,oDAAoD,OAAO;AAC3D;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,+DAA+D;AAC/D;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,+DAA+D;AAC/D;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,QAAQ;AACR,iEAAiE;AACjE;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,WAAW,kCAAkC;AAC7C;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,2CAA2C,iCAAiC;AAC5E;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,UAAU;AAC9B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA6C;AAC7C,6CAA6C;AAC7C,4CAA4C;AAC5C,yDAAyD;;AAEzD;AACA;AACA;;AAEA;AACA;;AAEA;AACA,eAAe,0FAA0F;AACzG;;AAEA,+CAA+C;AAC/C;AACA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,wBAAwB,OAAO;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4BAA4B,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,wBAAwB,OAAO;AAC/B;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,gCAAgC,sBAAsB;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uDAAuD,oBAAoB;AAC3E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,kCAAkC;;AAEtE;AACA;;AAEA;AACA;AACA,4BAA4B;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C,cAAc;AAC3D;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,eAAe,sDAAsD;;AAErE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,4BAA4B;AAC5B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,sEAAsE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,YAAY;AACZ;;AAEA;AACA;AACA,+BAA+B,YAAY;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB,oBAAoB;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA,kBAAkB,yBAAyB,GAAG,yBAAyB;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,cAAc,GAAG,cAAc;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,GAAG,GAAG,GAAG;AAClD;AACA;AACA,kBAAkB,EAAE,GAAG,EAAE,SAAS,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,cAAc,GAAG,cAAc;AAC/F;AACA;AACA,kBAAkB,yBAAyB,GAAG,yBAAyB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACzF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW,wBAAwB,WAAW;AACzD,gBAAgB;;AAEhB;AACA;AACA,uDAAuD,OAAO;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW,yBAAyB,0BAA0B;AACzE;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW,SAAS;AAC/B,2CAA2C,OAAO;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD,SAAS;AAC9D,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,0BAA0B,gCAAgC;AACrE;AACA,gCAAgC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiF,OAAO;AACxF;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,UAAU;AAC5C,gEAAgE,OAAO;AACvE,kCAAkC,UAAU;AAC5C,gEAAgE,OAAO;AACvE,kCAAkC,UAAU;AAC5C,gEAAgE,OAAO;AACvE,kCAAkC,UAAU;AAC5C,gEAAgE,OAAO;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,MAAM,mBAAmB;AACzB;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,MAAM,mBAAmB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,cAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS,mBAAmB;AAC5B,kBAAkB,sBAAsB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wCAAwC,wBAAwB;AAChE,iGAAiG;AACjG;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,sDAAsD;AACtD;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,4DAA4D;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,yDAAyD;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,WAAW,8BAA8B;AACzC,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,WAAW;AACtB,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,YAAY;AACZ,YAAY;AACZ;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC;AACA,GAAG,gBAAgB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,YAAY;AAC7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;AACpH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;;AAEA,4EAA4E,OAAO;AACnF;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC;;AAEzC;AACA;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,OAAO;AACrB;AACA;;AAEA;AACA;;AAEA;AACA,mDAAmD;;AAEnD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C,0CAA0C;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+CAA+C;AAC/C,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2FAA2F;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD,qDAAqD;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,mCAAmC,OAAO;AAC1C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,gBAAgB;AAC9B,+CAA+C;AAC/C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA,YAAY,gDAAgD;AAC5D;AACA,oBAAoB,OAAO;AAC3B;AACA,sCAAsC,qDAAqD;AAC3F;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,gBAAgB;AACtD,wDAAwD,OAAO;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA,qCAAqC,OAAO;AAC5C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,oBAAoB,gBAAgB;AACpC;;AAEA;AACA;AACA,OAAO;;AAEP,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,OAAO;AAClC;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;;AAEA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,4CAA4C,OAAO;AACnD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gGAAgG;AAChG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA,uDAAuD;;AAEvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA,6BAA6B;AAC7B,sCAAsC,QAAQ;AAC9C,sCAAsC,oBAAoB;AAC1D;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8FAA8F;AAC9F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uEAAuE;AACvE,uEAAuE;AACvE,sIAAsI;AACtI,sEAAsE;AACtE;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,4EAA4E,QAAQ;AACpF;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,0BAA0B,iCAAiC;AAC3D;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,kBAAkB;AAClB,kBAAkB;AAClB,kBAAkB;AAClB,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;AACA;;AAEA,+BAA+B,OAAO;AACtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD,UAAU;AACV;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,sCAAsC,QAAQ;AAC9C,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,sBAAsB;AAC9D;AACA;AACA;AACA;AACA;AACA,aAAa;;AAEb;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,6CAA6C;AACrD,8EAA8E;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,wBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;;AAE7C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,oCAAoC;AACpC,6BAA6B;AAC7B,iCAAiC;AACjC;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC;AACjC;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,0CAA0C,OAAO;AACjD,mHAAmH,OAAO;AAC1H;AACA,0BAA0B;AAC1B,iBAAiB;AACjB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uBAAuB,2BAA2B,gBAAgB;AAClE;;AAEA;AACA;AACA,uBAAuB,2BAA2B,gBAAgB;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;AACA;AACA,yEAAyE,mCAAmC;AAC5G,yEAAyE,mCAAmC;AAC5G;;AAEA;AACA,+CAA+C,QAAQ,gDAAgD;AACvG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,EAAE,GAAG,EAAE;AAC/B;AACA;AACA;AACA;AACA,wBAAwB,EAAE,GAAG,EAAE;AAC/B;AACA;AACA;AACA,wBAAwB,EAAE,GAAG,EAAE;AAC/B;AACA;AACA;AACA,uBAAuB;AACvB,4BAA4B,EAAE,GAAG,EAAE,GAAG,GAAG,UAAU,OAAO,GAAG,EAAE,GAAG,GAAG,UAAU,MAAM;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;;AAEA;AACA;AACA,yDAAyD,OAAO;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA6D,EAAE;AAC/D;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,0BAA0B,0BAA0B;AACpD,uBAAuB,uBAAuB;AAC9C,0BAA0B,0BAA0B;AACpD,wBAAwB,wBAAwB;AAChD,6BAA6B,6BAA6B;AAC1D,2BAA2B;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA,0CAA0C;;AAE1C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;;AAErC;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB,uCAAuC;AAC/F,+BAA+B,qBAAqB;AACpD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,wCAAwC,iBAAiB;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,4BAA4B,YAAY,yCAAyC;AACjF,yBAAyB,YAAY,sCAAsC;AAC3E,4BAA4B,YAAY,yCAAyC;AACjF,0BAA0B,YAAY,uCAAuC;AAC7E,+BAA+B,YAAY,4CAA4C;AACvF,6BAA6B,YAAY;AACzC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,wBAAwB;;AAEpD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iBAAiB;AACjB,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB,kBAAkB,kCAAkC;AACpD;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,OAAO;AAChD;AACA;AACA;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,cAAc,cAAc;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,kBAAkB;AAChC,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,cAAc;AAChC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,OAAO;AAC3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;;AAEN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,wCAAwC;;AAE5D;AACA,cAAc,OAAO;;AAErB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,OAAO;AAChC;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,eAAe,UAAU;AACzB,kBAAkB;AAClB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,oCAAoC,MAAM;AAC/E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAY,KAAK;AACjB;AACA;AACA,sCAAsC,KAAK;AAC3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iBAAiB;AACjB,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,iBAAiB;AACjB,cAAc;AACd;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;;AAEA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA,iCAAiC,uBAAuB;AACxD;AACA;;AAEA;AACA,qBAAqB,8DAA8D;AACnF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,8BAA8B,OAAO;AACrC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,OAAO;AACzD;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,OAAO;AACrB;AACA;AACA;;AAEA,iCAAiC;AACjC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,cAAc,OAAO;AACrB;AACA,cAAc,OAAO;;AAErB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oCAAoC,QAAQ;AAC5C,sBAAsB,qCAAqC;;AAE3D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;;AAER;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,SAAS;AACxC;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,QAAQ;AAC1D;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC,+CAA+C;AAC/C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,0BAA0B;AACxE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,QAAQ;AAChC,oBAAoB,UAAU;AAC9B;AACA;AACA;AACA;AACA;AACA,QAAQ,YAAY,QAAQ;AAC5B,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,oDAAoD;AACpD,UAAU;AACV,oDAAoD;AACpD;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oEAAoE;AACpE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA,YAAY,4BAA4B;AACxC;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uBAAuB,cAAc;AACrC;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,6DAA6D,EAAE;AAC/D;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,sEAAsE;AACrG,+BAA+B;AAC/B,2CAA2C;AAC3C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,gBAAgB,QAAQ;AACxB;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,0BAA0B,QAAQ;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA,wDAAwD,sCAAsC;AAC9F,uDAAuD,gCAAgC;;AAEvF;AACA,mDAAmD,OAAO;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,0BAA0B;AAC5D,gCAAgC,0BAA0B;AAC1D,mCAAmC,0BAA0B;AAC7D,mCAAmC,0BAA0B;;AAE7D;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,OAAO;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,iDAAiD;AACjD,wDAAwD;AACxD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,sEAAsE;AACrG,+BAA+B;AAC/B,+BAA+B,oFAAoF;AACnH,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D,+BAA+B,4BAA4B;AAC3D,+BAA+B,4BAA4B,4FAA4F;AACvJ,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B;AAC/B,+BAA+B;AAC/B,+BAA+B,oFAAoF,0EAA0E;AAC7L,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wDAAwD;AACxD,iDAAiD;AACjD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,sEAAsE;AACrG,+BAA+B,4BAA4B;AAC3D,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,4BAA4B;AAC3D,+BAA+B,kDAAkD;AACjF,+BAA+B,4BAA4B;AAC3D,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B;AAC/B,+BAA+B;AAC/B,+BAA+B,kGAAkG;AACjI,+BAA+B;AAC/B,oCAAoC;AACpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wDAAwD;AACxD,8CAA8C;AAC9C;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,sEAAsE;AACrG,+BAA+B;AAC/B,+BAA+B;AAC/B,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B,4BAA4B;AAC3D,+BAA+B,kDAAkD;AACjF,+BAA+B,4BAA4B;AAC3D,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,+BAA+B;AAC/B,+BAA+B;AAC/B,+BAA+B,kGAAkG;AACjI,+BAA+B;AAC/B,oCAAoC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,wDAAwD;AACxD,6DAA6D;AAC7D;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA,kDAAkD;AAClD;AACA,+BAA+B,sEAAsE;AACrG,+BAA+B;AAC/B,+BAA+B,wDAAwD;AACvF,+DAA+D;AAC/D;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,2BAA2B,6BAA6B;AACxD,0BAA0B,4BAA4B;AACtD,2BAA2B,6BAA6B;AACxD,kDAAkD;AAClD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,WAAW;AACzB;AACA,cAAc,OAAO;AACrB;AACA,kBAAkB,QAAQ;AAC1B;AACA,cAAc,WAAW;AACzB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,+BAA+B,sEAAsE;AACrG,+BAA+B;AAC/B;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE,OAAO;AACzE;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA,uCAAuC,OAAO;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,iDAAiD,OAAO;AACxD,oBAAoB,OAAO;AAC3B,uBAAuB,OAAO;AAC9B;AACA;AACA;;AAEA;AACA;AACA,oEAAoE,OAAO;AAC3E,6BAA6B,OAAO;AACpC;AACA;AACA,QAAQ;AACR;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2DAA2D,OAAO;AAClE,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,OAAO;AAC1C,oCAAoC,OAAO;AAC3C;AACA;AACA;AACA;AACA,sBAAsB,OAAO;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,6BAA6B;AACzE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,2BAA2B;AACvE;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,WAAW,kDAAkD;AAC7D,kBAAkB,yDAAyD;AAC3E,aAAa,oDAAoD;AACjE,gBAAgB,uDAAuD;AACvE,QAAQ;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oCAAoC,eAAe;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uCAAuC,gDAAgD;AACvF,oDAAoD,8CAA8C;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;AAChC,mBAAmB,4BAA4B;AAC/C;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iFAAiF,uBAAuB;AACxG;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C,qBAAqB;AAC/D,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;;CChpoBD,mBAAmB,gBAAgB,UAAU,UAAU,0CAA0C,wBAAwB,oBAAoB,8CAA8C,kCAAkC,YAAY,YAAY,mCAAmC,iBAAiB,gBAAgB,sBAAsB,oBAAoB,0CAA0C,YAAY,WAAW,YAAY,SAAS,GAAG;AAC5b;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,4BAA4B;;AAE7B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,WAAW;AACzE;AACA;AACA;AACA;AACA;;AAEA;AACA,2EAA2E,WAAW;AACtF;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,QAAQ;AAC1B;AACA;AACA;AACA;;AAEA;AACA,kBAAkB,OAAO;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,OAAO;AACrE;AACA;;AAEA;AACA,2EAA2E,OAAO;AAClF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,gEAAgE;AAChE;;AAEA;AACA,6EAA6E;AAC7E;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,8DAA8D,OAAO;AACrE;AACA;;AAEA;AACA,2EAA2E,OAAO;AAClF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,iDAAiD;AACjD;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,wEAAwE,QAAQ;AAChF,6DAA6D,QAAQ;AACrE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,aAAa;;AAE9D,CAAC;AACD,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,6BAA6B;;AAE9B;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,yEAAyE,8CAA8C;AACvH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gEAAgE,sBAAsB;;AAEtF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA,kDAAkD,YAAY,kCAAkC,IAAI;AACpG,yDAAyD,+BAA+B;AACxF;;AAEA;AACA,8BAA8B,kDAAkD;AAChF,2BAA2B,4CAA4C;AACvE,+BAA+B,wDAAwD;AACvF,uBAAuB,cAAc,cAAc;AACnD,gCAAgC,mCAAmC,cAAc;AACjF,kCAAkC,oBAAoB,cAAc;AACpE,0BAA0B,YAAY;AACtC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2DAA2D,iBAAiB;;AAE5E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qCAAqC,0BAA0B;AAC/D;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;;AAED,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,6BAA6B;;AAE9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B,EAAE;AAC5B,0BAA0B,EAAE;AAC5B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;;AAED,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,4BAA4B;;AAE7B,cAAc;;AAEd;AACA,gDAAgD,KAAK,OAAO;AAC5D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,mBAAmB;AACnB;AACA;AACA,KAAK;AACL;AACA,qFAAqF,OAAO;AAC5F;AACA,kDAAkD,OAAO;AACzD,KAAK;AACL;AACA;AACA,sDAAsD,OAAO;AAC7D;AACA;;AAEA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA,qCAAqC,4BAA4B;AACjE;AACA;;AAEA;;AAEA,iDAAiD,aAAa;;AAE9D,CAAC;AACD,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,4BAA4B;;AAE7B;AACA;AACA;AACA;AACA,kGAAkG;AAClG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,oDAAoD,OAAO;AAC3D;AACA,+BAA+B;AAC/B,wCAAwC,QAAQ;AAChD;AACA,qCAAqC;AACrC;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2FAA2F;AAC3F;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,8BAA8B;AACxD,uBAAuB,mCAAmC;AAC1D,uBAAuB,gBAAgB;AACvC,uBAAuB,oCAAoC;AAC3D,0BAA0B,4BAA4B;AACtD,0BAA0B,sBAAsB;AAChD,0BAA0B,0BAA0B;AACpD,uBAAuB,mCAAmC;AAC1D,0BAA0B,mCAAmC;AAC7D;AACA;AACA,uBAAuB,kDAAkD;AACzE,uBAAuB;AACvB;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,aAAa;;AAE9D,CAAC;AACD,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,qCAAqC;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,cAAc,QAAQ;AACtB,SAAS,QAAQ;;AAEjB;AACA,gBAAgB,QAAQ;AACxB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,4BAA4B;AAC5B;AACA;AACA,yCAAyC;AACzC,4BAA4B;AAC5B;AACA,MAAM,OAAO;AACb;AACA,cAAc,wBAAwB;AACtC;AACA;AACA;;AAEA;AACA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,OAAO;AACpC;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,4BAA4B,GAAG,4BAA4B;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,iCAAiC,gCAAgC;AACjE,cAAc,mEAAmE;AACjF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,cAAc,kEAAkE;AAChF,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAc,4BAA4B,GAAG,4BAA4B;AACzE,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA,kBAAkB,OAAO;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;;AAED,CAAC,EAAE,aAAa;AAChB;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,oGAAoG;;AAErG;;AAEA;AACA;;AAEA,kBAAkB;;AAElB;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,0BAA0B;AAChF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA;;AAEA;AACA;AACA,wBAAwB;AACxB,wBAAwB;AACxB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;;AAEA;AACA;AACA;AACA;AACA,iDAAiD,4BAA4B;AAC7E;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B,OAAO;AACjC,mCAAmC,UAAU;AAC7C;AACA;AACA;AACA;AACA;AACA,UAAU,YAAY,OAAO;AAC7B,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gEAAgE;AAChE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,6BAA6B,mCAAmC;AAChE,4BAA4B;AAC5B,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,0BAA0B;AAC1B;AACA;;AAEA;AACA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA+C,cAAc;AAC7D;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAsB,EAAE;AACxB;AACA,KAAK;AACL;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,aAAa;;AAE9D,CAAC;AACD,CAAC,EAAE,6GAA6G;AAChH;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,4BAA4B;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gDAAgD,wCAAwC;AACxF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,sBAAsB;AACtB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,gDAAgD,OAAO;AACvD;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C,OAAO;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,gDAAgD,OAAO;AACvD,+BAA+B,OAAO;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,OAAO;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wFAAwF,OAAO;AAC/F,kHAAkH,OAAO;AACzH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4FAA4F,OAAO;AACnG,iEAAiE,OAAO;AACxE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,wFAAwF,OAAO;AAC/F,+FAA+F,OAAO;AACtG;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mCAAmC,sDAAsD;AACzF,0CAA0C,gDAAgD;AAC1F,wCAAwC,8CAA8C;AACtF,2CAA2C;AAC3C;;AAEA;AACA;AACA;AACA;AACA;;AAEA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA,WAAW,iBAAiB;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;;AAEA;AACA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAgB,gBAAgB;AAChC;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA,gBAAgB,iBAAiB;AACjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,8BAA8B,gBAAgB;AAC9C;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,yGAAyG,OAAO;AAChH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,+CAA+C,iBAAiB;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,iKAAiK,OAAO;AACxK,2HAA2H,OAAO;AAClI;AACA;AACA;AACA;AACA;;AAEA,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA;;AAEA;;AAEA,+DAA+D,QAAQ;AACvE,+EAA+E,SAAS;AACxF;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,yFAAyF,OAAO;AAChG,2GAA2G,OAAO;AAClH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,2BAA2B,oBAAoB;AAC/C;AACA;;AAEA;;AAEA,8DAA8D,OAAO;AACrE,2DAA2D,OAAO;AAClE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,2BAA2B,SAAS;AACpC;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,8DAA8D,OAAO;AACrE,iEAAiE,OAAO;AACxE;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,6DAA6D,OAAO;AACpE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,6EAA6E,OAAO;AACpF;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAiD,aAAa;;AAE9D,CAAC;AACD,CAAC,GAAG;AACJ;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,oCAAoC;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA,KAAK;AACL;AACA;AACA,gCAAgC;AAChC;AACA;AACA;AACA;;AAEA,YAAY;AACZ;AACA;AACA,4CAA4C,EAAE;;AAE9C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,cAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;;AAED,CAAC,EAAE,aAAa;AAChB;AACA;AACA;AACA;AACA,uCAAuC;AACvC,CAAC,6BAA6B;;AAE9B;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAsD;AACtD,qCAAqC;AACrC;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL,qFAAqF;AACrF,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,8BAA8B,2CAA2C;AACzE;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;AACD;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;;AAED,CAAC,GAAG;AACJ;;AAEA;AACA;AACA,CAAC;AACD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAuC,uCAAuC;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,sEAAsE;AACzE;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,CAAC,GAAG;AACJ;;AAEA;AACA;AACA,CAAC;;AAED,qGAAqG,qBAAqB,mBAAmB;;AAE7I;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,qBAAqB,gBAAgB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA,WAAW,WAAW;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA,eAAe;AACf,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;AACA;;AAEA,CAAC,EAAE,+BAA+B;AAClC;;AAEA;AACA;AACA,CAAC;AACD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAuC,uCAAuC;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,CAAC,EAAE,sEAAsE;AACzE;;AAEA;AACA;AACA,CAAC;AACD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,uCAAuC,uCAAuC;;AAE9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA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ACA;AACA,cAAc;AACd;AACA;;AAEA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA,kBAAkB;AAClB;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET,+CAA+C,WAAW;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,iBAAiB,wBAAwB;AACzC;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET,+CAA+C,WAAW;AAC1D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,iBAAiB,QAAQ;AACzB,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,QAAQ;AACzB,kBAAkB;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,eAAe,qDAAqD;AACpE,iBAAiB;AACjB;;;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA;;AAEA,CAAC;AACD;;CCheA;AACA;AACA;AACA;AACA;AACA,eAAe,6LAA6L,EAAE,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","sources":["node_modules/file-saver/dist/FileSaver.js","node_modules/mathjs/lib/browser/math.js","node_modules/tinycolor2/tinycolor.js","node_modules/d3/dist/d3.js","node_modules/d3-svg-legend/d3-legend.js","node_modules/tinygradient/browser.js","node_modules/marked/marked.min.js"],"sourcesContent":["(function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof exports !== \"undefined\") {\n factory();\n } else {\n var mod = {\n exports: {}\n };\n factory();\n global.FileSaver = mod.exports;\n }\n})(this, function () {\n \"use strict\";\n\n /*\n * FileSaver.js\n * A saveAs() FileSaver implementation.\n *\n * By Eli Grey, http://eligrey.com\n *\n * License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n * source : http://purl.eligrey.com/github/FileSaver.js\n */\n // The one and only way of getting global scope in all environments\n // https://stackoverflow.com/q/3277182/1008999\n var _global = typeof window === 'object' && window.window === window ? window : typeof self === 'object' && self.self === self ? self : typeof global === 'object' && global.global === global ? global : void 0;\n\n function bom(blob, opts) {\n if (typeof opts === 'undefined') opts = {\n autoBom: false\n };else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object');\n opts = {\n autoBom: !opts\n };\n } // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], {\n type: blob.type\n });\n }\n\n return blob;\n }\n\n function download(url, name, opts) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url);\n xhr.responseType = 'blob';\n\n xhr.onload = function () {\n saveAs(xhr.response, name, opts);\n };\n\n xhr.onerror = function () {\n console.error('could not download file');\n };\n\n xhr.send();\n }\n\n function corsEnabled(url) {\n var xhr = new XMLHttpRequest(); // use sync to avoid popup blocker\n\n xhr.open('HEAD', url, false);\n\n try {\n xhr.send();\n } catch (e) {}\n\n return xhr.status >= 200 && xhr.status <= 299;\n } // `a.click()` doesn't work for all browsers (#465)\n\n\n function click(node) {\n try {\n node.dispatchEvent(new MouseEvent('click'));\n } catch (e) {\n var evt = document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n node.dispatchEvent(evt);\n }\n } // Detect WebView inside a native macOS app by ruling out all browsers\n // We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n // https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\n\n\n var isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent);\n var saveAs = _global.saveAs || ( // probably in some web worker\n typeof window !== 'object' || window !== _global ? function saveAs() {}\n /* noop */\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : 'download' in HTMLAnchorElement.prototype && !isMacOSWebView ? function saveAs(blob, name, opts) {\n var URL = _global.URL || _global.webkitURL;\n var a = document.createElement('a');\n name = name || blob.name || 'download';\n a.download = name;\n a.rel = 'noopener'; // tabnabbing\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob;\n\n if (a.origin !== location.origin) {\n corsEnabled(a.href) ? download(blob, name, opts) : click(a, a.target = '_blank');\n } else {\n click(a);\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob);\n setTimeout(function () {\n URL.revokeObjectURL(a.href);\n }, 4E4); // 40s\n\n setTimeout(function () {\n click(a);\n }, 0);\n }\n } // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator ? function saveAs(blob, name, opts) {\n name = name || blob.name || 'download';\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts);\n } else {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_blank';\n setTimeout(function () {\n click(a);\n });\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name);\n }\n } // Fallback to using FileReader and a popup\n : function saveAs(blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank');\n\n if (popup) {\n popup.document.title = popup.document.body.innerText = 'downloading...';\n }\n\n if (typeof blob === 'string') return download(blob, name, opts);\n var force = blob.type === 'application/octet-stream';\n\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari;\n\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent);\n\n if ((isChromeIOS || force && isSafari || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader();\n\n reader.onloadend = function () {\n var url = reader.result;\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;');\n if (popup) popup.location.href = url;else location = url;\n popup = null; // reverse-tabnabbing #460\n };\n\n reader.readAsDataURL(blob);\n } else {\n var URL = _global.URL || _global.webkitURL;\n var url = URL.createObjectURL(blob);\n if (popup) popup.location = url;else location.href = url;\n popup = null; // reverse-tabnabbing #460\n\n setTimeout(function () {\n URL.revokeObjectURL(url);\n }, 4E4); // 40s\n }\n });\n _global.saveAs = saveAs.saveAs = saveAs;\n\n if (typeof module !== 'undefined') {\n module.exports = saveAs;\n }\n});\n","/*! For license information please see math.js.LICENSE.txt */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.math=t():e.math=t()}(this,(()=>(()=>{var e={5716:function(e,t){var r;!function(n){\"use strict\";var i=Math.cosh||function(e){return Math.abs(e)<1e-9?1-e:.5*(Math.exp(e)+Math.exp(-e))},a=Math.sinh||function(e){return Math.abs(e)<1e-9?e:.5*(Math.exp(e)-Math.exp(-e))},o=function(){throw SyntaxError(\"Invalid Param\")};function u(e,t){var r=Math.abs(e),n=Math.abs(t);return 0===e?Math.log(n):0===t?Math.log(r):r<3e3&&n<3e3?.5*Math.log(e*e+t*t):(e/=2,t/=2,.5*Math.log(e*e+t*t)+Math.LN2)}function s(e,t){if(!(this instanceof s))return new s(e,t);var r=function(e,t){var r={re:0,im:0};if(null==e)r.re=r.im=0;else if(void 0!==t)r.re=e,r.im=t;else switch(typeof e){case\"object\":if(\"im\"in e&&\"re\"in e)r.re=e.re,r.im=e.im;else if(\"abs\"in e&&\"arg\"in e){if(!Number.isFinite(e.abs)&&Number.isFinite(e.arg))return s.INFINITY;r.re=e.abs*Math.cos(e.arg),r.im=e.abs*Math.sin(e.arg)}else if(\"r\"in e&&\"phi\"in e){if(!Number.isFinite(e.r)&&Number.isFinite(e.phi))return s.INFINITY;r.re=e.r*Math.cos(e.phi),r.im=e.r*Math.sin(e.phi)}else 2===e.length?(r.re=e[0],r.im=e[1]):o();break;case\"string\":r.im=r.re=0;var n=e.match(/\\d+\\.?\\d*e[+-]?\\d+|\\d+\\.?\\d*|\\.\\d+|./g),i=1,a=0;null===n&&o();for(var u=0;u0&&o();break;case\"number\":r.im=0,r.re=e;break;default:o()}return isNaN(r.re)||isNaN(r.im),r}(e,t);this.re=r.re,this.im=r.im}s.prototype={re:0,im:0,sign:function(){var e=this.abs();return new s(this.re/e,this.im/e)},add:function(e,t){var r=new s(e,t);return this.isInfinite()&&r.isInfinite()?s.NAN:this.isInfinite()||r.isInfinite()?s.INFINITY:new s(this.re+r.re,this.im+r.im)},sub:function(e,t){var r=new s(e,t);return this.isInfinite()&&r.isInfinite()?s.NAN:this.isInfinite()||r.isInfinite()?s.INFINITY:new s(this.re-r.re,this.im-r.im)},mul:function(e,t){var r=new s(e,t);return this.isInfinite()&&r.isZero()||this.isZero()&&r.isInfinite()?s.NAN:this.isInfinite()||r.isInfinite()?s.INFINITY:0===r.im&&0===this.im?new s(this.re*r.re,0):new s(this.re*r.re-this.im*r.im,this.re*r.im+this.im*r.re)},div:function(e,t){var r=new s(e,t);if(this.isZero()&&r.isZero()||this.isInfinite()&&r.isInfinite())return s.NAN;if(this.isInfinite()||r.isZero())return s.INFINITY;if(this.isZero()||r.isInfinite())return s.ZERO;e=this.re,t=this.im;var n,i,a=r.re,o=r.im;return 0===o?new s(e/a,t/a):Math.abs(a)0)return new s(Math.pow(e,r.re),0);if(0===e)switch((r.re%4+4)%4){case 0:return new s(Math.pow(t,r.re),0);case 1:return new s(0,Math.pow(t,r.re));case 2:return new s(-Math.pow(t,r.re),0);case 3:return new s(0,-Math.pow(t,r.re))}}if(0===e&&0===t&&r.re>0&&r.im>=0)return s.ZERO;var n=Math.atan2(t,e),i=u(e,t);return e=Math.exp(r.re*i-r.im*n),t=r.im*i+r.re*n,new s(e*Math.cos(t),e*Math.sin(t))},sqrt:function(){var e,t,r=this.re,n=this.im,i=this.abs();if(r>=0){if(0===n)return new s(Math.sqrt(r),0);e=.5*Math.sqrt(2*(i+r))}else e=Math.abs(n)/Math.sqrt(2*(i-r));return t=r<=0?.5*Math.sqrt(2*(i-r)):Math.abs(n)/Math.sqrt(2*(i+r)),new s(e,n<0?-t:t)},exp:function(){var e=Math.exp(this.re);return this.im,new s(e*Math.cos(this.im),e*Math.sin(this.im))},expm1:function(){var e=this.re,t=this.im;return new s(Math.expm1(e)*Math.cos(t)+function(e){var t=Math.PI/4;if(-t>e||e>t)return Math.cos(e)-1;var r=e*e;return r*(r*(r*(r*(r*(r*(r*(r/20922789888e3-1/87178291200)+1/479001600)-1/3628800)+1/40320)-1/720)+1/24)-.5)}(t),Math.exp(e)*Math.sin(t))},log:function(){var e=this.re,t=this.im;return new s(u(e,t),Math.atan2(t,e))},abs:function(){return e=this.re,t=this.im,r=Math.abs(e),n=Math.abs(t),r<3e3&&n<3e3?Math.sqrt(r*r+n*n):(r1&&0===t,n=1-e,i=1+e,a=n*n+t*t,o=0!==a?new s((i*n-t*t)/a,(t*n+i*t)/a):new s(-1!==e?e/0:0,0!==t?t/0:0),c=o.re;return o.re=u(o.re,o.im)/2,o.im=Math.atan2(o.im,c)/2,r&&(o.im=-o.im),o},acoth:function(){var e=this.re,t=this.im;if(0===e&&0===t)return new s(0,Math.PI/2);var r=e*e+t*t;return 0!==r?new s(e/r,-t/r).atanh():new s(0!==e?e/0:0,0!==t?-t/0:0).atanh()},acsch:function(){var e=this.re,t=this.im;if(0===t)return new s(0!==e?Math.log(e+Math.sqrt(e*e+1)):1/0,0);var r=e*e+t*t;return 0!==r?new s(e/r,-t/r).asinh():new s(0!==e?e/0:0,0!==t?-t/0:0).asinh()},asech:function(){var e=this.re,t=this.im;if(this.isZero())return s.INFINITY;var r=e*e+t*t;return 0!==r?new s(e/r,-t/r).acosh():new s(0!==e?e/0:0,0!==t?-t/0:0).acosh()},inverse:function(){if(this.isZero())return s.INFINITY;if(this.isInfinite())return s.ZERO;var e=this.re,t=this.im,r=e*e+t*t;return new s(e/r,-t/r)},conjugate:function(){return new s(this.re,-this.im)},neg:function(){return new s(-this.re,-this.im)},ceil:function(e){return e=Math.pow(10,e||0),new s(Math.ceil(this.re*e)/e,Math.ceil(this.im*e)/e)},floor:function(e){return e=Math.pow(10,e||0),new s(Math.floor(this.re*e)/e,Math.floor(this.im*e)/e)},round:function(e){return e=Math.pow(10,e||0),new s(Math.round(this.re*e)/e,Math.round(this.im*e)/e)},equals:function(e,t){var r=new s(e,t);return Math.abs(r.re-this.re)<=s.EPSILON&&Math.abs(r.im-this.im)<=s.EPSILON},clone:function(){return new s(this.re,this.im)},toString:function(){var e=this.re,t=this.im,r=\"\";return this.isNaN()?\"NaN\":this.isInfinite()?\"Infinity\":(Math.abs(e){\"use strict\";var t=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},o=a.preserveFormatting,u=void 0!==o&&o,s=a.escapeMapFn,c=void 0===s?i:s,f=String(e),l=\"\",p=c(t({},r),u?t({},n):{}),m=Object.keys(p),h=function(){var e=!1;m.forEach((function(t,r){e||f.length>=t.length&&f.slice(0,t.length)===t&&(l+=p[m[r]],f=f.slice(t.length,f.length),e=!0)})),e||(l+=f.slice(0,1),f=f.slice(1,f.length))};f;)h();return l}},3996:function(e){!function(t){\"use strict\";var r={s:1,n:0,d:1};function n(e,t){if(isNaN(e=parseInt(e,10)))throw f();return e*t}function i(e,t){if(0===t)throw c();var r=Object.create(s.prototype);r.s=e<0?-1:1;var n=u(e=e<0?-e:e,t);return r.n=e/n,r.d=t/n,r}function a(e){for(var t={},r=e,n=2,i=4;i<=r;){for(;r%n==0;)r/=n,t[n]=(t[n]||0)+1;i+=1+2*n++}return r!==e?r>1&&(t[r]=(t[r]||0)+1):t[e]=(t[e]||0)+1,t}var o=function(e,t){var i,a=0,o=1,u=1,s=0,p=0,m=0,h=1,d=1,v=0,y=1,g=1,x=1,b=1e7;if(null==e);else if(void 0!==t){if(u=(a=e)*(o=t),a%1!=0||o%1!=0)throw l()}else switch(typeof e){case\"object\":if(\"d\"in e&&\"n\"in e)a=e.n,o=e.d,\"s\"in e&&(a*=e.s);else{if(!(0 in e))throw f();a=e[0],1 in e&&(o=e[1])}u=a*o;break;case\"number\":if(e<0&&(u=e,e=-e),e%1==0)a=e;else if(e>0){for(e>=1&&(e/=d=Math.pow(10,Math.floor(1+Math.log(e)/Math.LN10)));y<=b&&x<=b;){if(e===(i=(v+g)/(y+x))){y+x<=b?(a=v+g,o=y+x):x>y?(a=g,o=x):(a=v,o=y);break}e>i?(v+=g,y+=x):(g+=v,x+=y),y>b?(a=g,o=x):(a=v,o=y)}a*=d}else(isNaN(e)||isNaN(t))&&(o=a=NaN);break;case\"string\":if(null===(y=e.match(/\\d+|./g)))throw f();if(\"-\"===y[v]?(u=-1,v++):\"+\"===y[v]&&v++,y.length===v+1?p=n(y[v++],u):\".\"===y[v+1]||\".\"===y[v]?(\".\"!==y[v]&&(s=n(y[v++],u)),(1+ ++v===y.length||\"(\"===y[v+1]&&\")\"===y[v+3]||\"'\"===y[v+1]&&\"'\"===y[v+3])&&(p=n(y[v],u),h=Math.pow(10,y[v].length),v++),(\"(\"===y[v]&&\")\"===y[v+2]||\"'\"===y[v]&&\"'\"===y[v+2])&&(m=n(y[v+1],u),d=Math.pow(10,y[v+1].length)-1,v+=3)):\"/\"===y[v+1]||\":\"===y[v+1]?(p=n(y[v],u),h=n(y[v+2],1),v+=3):\"/\"===y[v+3]&&\" \"===y[v+1]&&(s=n(y[v],u),p=n(y[v+2],u),h=n(y[v+4],1),v+=5),y.length<=v){u=a=m+(o=h*d)*s+d*p;break}default:throw f()}if(0===o)throw c();r.s=u<0?-1:1,r.n=Math.abs(a),r.d=Math.abs(o)};function u(e,t){if(!e)return t;if(!t)return e;for(;;){if(!(e%=t))return t;if(!(t%=e))return e}}function s(e,t){if(o(e,t),!(this instanceof s))return i(r.s*r.n,r.d);e=u(r.d,r.n),this.s=r.s,this.n=r.n/e,this.d=r.d/e}var c=function(){return new Error(\"Division by Zero\")},f=function(){return new Error(\"Invalid argument\")},l=function(){return new Error(\"Parameters must be integer\")};s.prototype={s:1,n:0,d:1,abs:function(){return i(this.n,this.d)},neg:function(){return i(-this.s*this.n,this.d)},add:function(e,t){return o(e,t),i(this.s*this.n*r.d+r.s*this.d*r.n,this.d*r.d)},sub:function(e,t){return o(e,t),i(this.s*this.n*r.d-r.s*this.d*r.n,this.d*r.d)},mul:function(e,t){return o(e,t),i(this.s*r.s*this.n*r.n,this.d*r.d)},div:function(e,t){return o(e,t),i(this.s*r.s*this.n*r.d,this.d*r.n)},clone:function(){return i(this.s*this.n,this.d)},mod:function(e,t){if(isNaN(this.n)||isNaN(this.d))return new s(NaN);if(void 0===e)return i(this.s*this.n%this.d,1);if(o(e,t),0===r.n&&0===this.d)throw c();return i(this.s*(r.d*this.n)%(r.n*this.d),r.d*this.d)},gcd:function(e,t){return o(e,t),i(u(r.n,this.n)*u(r.d,this.d),r.d*this.d)},lcm:function(e,t){return o(e,t),0===r.n&&0===this.n?i(0,1):i(r.n*this.n,u(r.n,this.n)*u(r.d,this.d))},ceil:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new s(NaN):i(Math.ceil(e*this.s*this.n/this.d),e)},floor:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new s(NaN):i(Math.floor(e*this.s*this.n/this.d),e)},round:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new s(NaN):i(Math.round(e*this.s*this.n/this.d),e)},inverse:function(){return i(this.s*this.d,this.n)},pow:function(e,t){if(o(e,t),1===r.d)return r.s<0?i(Math.pow(this.s*this.d,r.n),Math.pow(this.n,r.n)):i(Math.pow(this.s*this.n,r.n),Math.pow(this.d,r.n));if(this.s<0)return null;var n=a(this.n),u=a(this.d),s=1,c=1;for(var f in n)if(\"1\"!==f){if(\"0\"===f){s=0;break}if(n[f]*=r.n,n[f]%r.d!=0)return null;n[f]/=r.d,s*=Math.pow(f,n[f])}for(var f in u)if(\"1\"!==f){if(u[f]*=r.n,u[f]%r.d!=0)return null;u[f]/=r.d,c*=Math.pow(f,u[f])}return r.s<0?i(c,s):i(s,c)},equals:function(e,t){return o(e,t),this.s*this.n*r.d==r.s*r.n*this.d},compare:function(e,t){o(e,t);var n=this.s*this.n*r.d-r.s*r.n*this.d;return(0=0;o--)a=a.inverse().add(r[o]);if(Math.abs(a.sub(t).valueOf())0&&(r+=t,r+=\" \",n%=i),r+=n,r+=\"/\",r+=i),r},toLatex:function(e){var t,r=\"\",n=this.n,i=this.d;return this.s<0&&(r+=\"-\"),1===i?r+=n:(e&&(t=Math.floor(n/i))>0&&(r+=t,n%=i),r+=\"\\\\frac{\",r+=n,r+=\"}{\",r+=i,r+=\"}\"),r},toContinued:function(){var e,t=this.n,r=this.d,n=[];if(isNaN(t)||isNaN(r))return n;do{n.push(Math.floor(t/r)),e=t%r,t=r,r=e}while(1!==t);return n},toString:function(e){var t=this.n,r=this.d;if(isNaN(t)||isNaN(r))return\"NaN\";e=e||15;var n=function(e,t){for(;t%2==0;t/=2);for(;t%5==0;t/=5);if(1===t)return 0;for(var r=10%t,n=1;1!==r;n++)if(r=10*r%t,n>2e3)return 0;return n}(0,r),i=function(e,t,r){for(var n=1,i=function(e,t,r){for(var n=1;t>0;e=e*e%r,t>>=1)1&t&&(n=n*e%r);return n}(10,r,t),a=0;a<300;a++){if(n===i)return a;n=10*n%t,i=10*i%t}return 0}(0,r,n),a=this.s<0?\"-\":\"\";if(a+=t/r|0,t%=r,(t*=10)&&(a+=\".\"),n){for(var o=i;o--;)a+=t/r|0,t%=r,t*=10;for(a+=\"(\",o=n;o--;)a+=t/r|0,t%=r,t*=10;a+=\")\"}else for(o=e;t&&o--;)a+=t/r|0,t%=r,t*=10;return a}},Object.defineProperty(s,\"__esModule\",{value:!0}),s.default=s,s.Fraction=s,e.exports=s}()},1880:e=>{e.exports=function e(t,r){\"use strict\";var n,i,a=/(^([+\\-]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)?$|^0x[0-9a-f]+$|\\d+)/gi,o=/(^[ ]*|[ ]*$)/g,u=/(^([\\w ]+,?[\\w ]+)?[\\w ]+,?[\\w ]+\\d+:\\d+(:\\d+)?[\\w ]?|^\\d{1,4}[\\/\\-]\\d{1,4}[\\/\\-]\\d{1,4}|^\\w+, \\w+ \\d+, \\d{4})/,s=/^0x[0-9a-f]+$/i,c=/^0/,f=function(t){return e.insensitive&&(\"\"+t).toLowerCase()||\"\"+t},l=f(t).replace(o,\"\")||\"\",p=f(r).replace(o,\"\")||\"\",m=l.replace(a,\"\\0$1\\0\").replace(/\\0$/,\"\").replace(/^\\0/,\"\").split(\"\\0\"),h=p.replace(a,\"\\0$1\\0\").replace(/\\0$/,\"\").replace(/^\\0/,\"\").split(\"\\0\"),d=parseInt(l.match(s),16)||1!==m.length&&l.match(u)&&Date.parse(l),v=parseInt(p.match(s),16)||d&&p.match(u)&&Date.parse(p)||null;if(v){if(dv)return 1}for(var y=0,g=Math.max(m.length,h.length);yi)return 1}return 0}},7391:(e,t,r)=>{var n=r(7180),i=r(3181),a=r(3031),o=r(9067),u=r(6833),s=r(6098),c=r(4801);c.alea=n,c.xor128=i,c.xorwow=a,c.xorshift7=o,c.xor4096=u,c.tychei=s,e.exports=c},7180:function(e,t,r){var n;!function(e,i,a){function o(e){var t,r=this,n=(t=4022871197,function(e){e=String(e);for(var r=0;r>>0,t=(n*=t)>>>0,t+=4294967296*(n-=t)}return 2.3283064365386963e-10*(t>>>0)});r.next=function(){var e=2091639*r.s0+2.3283064365386963e-10*r.c;return r.s0=r.s1,r.s1=r.s2,r.s2=e-(r.c=0|e)},r.c=1,r.s0=n(\" \"),r.s1=n(\" \"),r.s2=n(\" \"),r.s0-=n(e),r.s0<0&&(r.s0+=1),r.s1-=n(e),r.s1<0&&(r.s1+=1),r.s2-=n(e),r.s2<0&&(r.s2+=1),n=null}function u(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function s(e,t){var r=new o(e),n=t&&t.state,i=r.next;return i.int32=function(){return 4294967296*r.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,n&&(\"object\"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.alea=s}(0,e=r.nmd(e),r.amdD)},6098:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this,r=\"\";t.next=function(){var e=t.b,r=t.c,n=t.d,i=t.a;return e=e<<25^e>>>7^r,r=r-n|0,n=n<<24^n>>>8^i,i=i-e|0,t.b=e=e<<20^e>>>12^r,t.c=r=r-n|0,t.d=n<<16^r>>>16^i,t.a=i-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):r+=e;for(var n=0;n>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(\"object\"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.tychei=s}(0,e=r.nmd(e),r.amdD)},3181:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this,r=\"\";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:r+=e;for(var n=0;n>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(\"object\"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xor128=s}(0,e=r.nmd(e),r.amdD)},6833:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this;t.next=function(){var e,r,n=t.w,i=t.X,a=t.i;return t.w=n=n+1640531527|0,r=i[a+34&127],e=i[a=a+1&127],r^=r<<13,e^=e<<17,r^=r>>>15,e^=e>>>12,r=i[a]=r^e,t.i=a,r+(n^n>>>16)|0},function(e,t){var r,n,i,a,o,u=[],s=128;for(t===(0|t)?(n=t,t=null):(t+=\"\\0\",n=0,s=Math.max(s,t.length)),i=0,a=-32;a>>15,n^=n<<4,n^=n>>>13,a>=0&&(o=o+1640531527|0,i=0==(r=u[127&a]^=n+o)?i+1:0);for(i>=128&&(u[127&(t&&t.length||0)]=-1),i=127,a=512;a>0;--a)n=u[i+34&127],r=u[i=i+1&127],n^=n<<13,r^=r<<17,n^=n>>>15,r^=r>>>12,u[i]=n^r;e.w=o,e.X=u,e.i=i}(t,e)}function u(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function s(e,t){null==e&&(e=+new Date);var r=new o(e),n=t&&t.state,i=function(){return(r.next()>>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(n.X&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xor4096=s}(0,e=r.nmd(e),r.amdD)},9067:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this;t.next=function(){var e,r,n=t.x,i=t.i;return e=n[i],r=(e^=e>>>7)^e<<24,r^=(e=n[i+1&7])^e>>>10,r^=(e=n[i+3&7])^e>>>3,r^=(e=n[i+4&7])^e<<7,e=n[i+7&7],r^=(e^=e<<13)^e<<9,n[i]=r,t.i=i+1&7,r},function(e,t){var r,n=[];if(t===(0|t))n[0]=t;else for(t=\"\"+t,r=0;r0;--r)e.next()}(t,e)}function u(e,t){return t.x=e.x.slice(),t.i=e.i,t}function s(e,t){null==e&&(e=+new Date);var r=new o(e),n=t&&t.state,i=function(){return(r.next()>>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(n.x&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xorshift7=s}(0,e=r.nmd(e),r.amdD)},3031:function(e,t,r){var n;!function(e,i,a){function o(e){var t=this,r=\"\";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:r+=e;for(var n=0;n>>4),t.next()}function u(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function s(e,t){var r=new o(e),n=t&&t.state,i=function(){return(r.next()>>>0)/4294967296};return i.double=function(){do{var e=((r.next()>>>11)+(r.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=r.next,i.quick=i,n&&(\"object\"==typeof n&&u(n,r),i.state=function(){return u(r,{})}),i}i&&i.exports?i.exports=s:r.amdD&&r.amdO?void 0===(n=function(){return s}.call(t,r,t,i))||(i.exports=n):this.xorwow=s}(0,e=r.nmd(e),r.amdD)},4801:function(e,t,r){var n;!function(i,a,o){var u,s=256,c=o.pow(s,6),f=o.pow(2,52),l=2*f,p=s-1;function m(e,t,r){var n=[],p=y(v((t=1==t?{entropy:!0}:t||{}).entropy?[e,g(a)]:null==e?function(){try{var e;return u&&(e=u.randomBytes)?e=e(s):(e=new Uint8Array(s),(i.crypto||i.msCrypto).getRandomValues(e)),g(e)}catch(e){var t=i.navigator,r=t&&t.plugins;return[+new Date,i,r,i.screen,g(a)]}}():e,3),n),m=new h(n),x=function(){for(var e=m.g(6),t=c,r=0;e=l;)e/=2,t/=2,r>>>=1;return(e+r)/t};return x.int32=function(){return 0|m.g(4)},x.quick=function(){return m.g(4)/4294967296},x.double=x,y(g(m.S),a),(t.pass||r||function(e,t,r,n){return n&&(n.S&&d(n,m),e.state=function(){return d(m,{})}),r?(o.random=e,t):e})(x,p,\"global\"in t?t.global:this==o,t.state)}function h(e){var t,r=e.length,n=this,i=0,a=n.i=n.j=0,o=n.S=[];for(r||(e=[r++]);i{function t(){}t.prototype={on:function(e,t,r){var n=this.e||(this.e={});return(n[e]||(n[e]=[])).push({fn:t,ctx:r}),this},once:function(e,t,r){var n=this;function i(){n.off(e,i),t.apply(r,arguments)}return i._=t,this.on(e,i,r)},emit:function(e){for(var t=[].slice.call(arguments,1),r=((this.e||(this.e={}))[e]||[]).slice(),n=0,i=r.length;n{},4633:(e,t,r)=>{var n=r(3738).default;function i(){\"use strict\";e.exports=i=function(){return r},e.exports.__esModule=!0,e.exports.default=e.exports;var t,r={},a=Object.prototype,o=a.hasOwnProperty,u=Object.defineProperty||function(e,t,r){e[t]=r.value},s=\"function\"==typeof Symbol?Symbol:{},c=s.iterator||\"@@iterator\",f=s.asyncIterator||\"@@asyncIterator\",l=s.toStringTag||\"@@toStringTag\";function p(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{p({},\"\")}catch(t){p=function(e,t,r){return e[t]=r}}function m(e,t,r,n){var i=t&&t.prototype instanceof b?t:b,a=Object.create(i.prototype),o=new B(n||[]);return u(a,\"_invoke\",{value:F(e,r,o)}),a}function h(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}r.wrap=m;var d=\"suspendedStart\",v=\"suspendedYield\",y=\"executing\",g=\"completed\",x={};function b(){}function w(){}function D(){}var N={};p(N,c,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(k([])));A&&A!==a&&o.call(A,c)&&(N=A);var S=D.prototype=b.prototype=Object.create(N);function C(e){[\"next\",\"throw\",\"return\"].forEach((function(t){p(e,t,(function(e){return this._invoke(t,e)}))}))}function M(e,t){function r(i,a,u,s){var c=h(e[i],e,a);if(\"throw\"!==c.type){var f=c.arg,l=f.value;return l&&\"object\"==n(l)&&o.call(l,\"__await\")?t.resolve(l.__await).then((function(e){r(\"next\",e,u,s)}),(function(e){r(\"throw\",e,u,s)})):t.resolve(l).then((function(e){f.value=e,u(f)}),(function(e){return r(\"throw\",e,u,s)}))}s(c.arg)}var i;u(this,\"_invoke\",{value:function(e,n){function a(){return new t((function(t,i){r(e,n,t,i)}))}return i=i?i.then(a,a):a()}})}function F(e,r,n){var i=d;return function(a,o){if(i===y)throw Error(\"Generator is already running\");if(i===g){if(\"throw\"===a)throw o;return{value:t,done:!0}}for(n.method=a,n.arg=o;;){var u=n.delegate;if(u){var s=O(u,n);if(s){if(s===x)continue;return s}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(i===d)throw i=g,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);i=y;var c=h(e,r,n);if(\"normal\"===c.type){if(i=n.done?g:v,c.arg===x)continue;return{value:c.arg,done:n.done}}\"throw\"===c.type&&(i=g,n.method=\"throw\",n.arg=c.arg)}}}function O(e,r){var n=r.method,i=e.iterator[n];if(i===t)return r.delegate=null,\"throw\"===n&&e.iterator.return&&(r.method=\"return\",r.arg=t,O(e,r),\"throw\"===r.method)||\"return\"!==n&&(r.method=\"throw\",r.arg=new TypeError(\"The iterator does not provide a '\"+n+\"' method\")),x;var a=h(i,e.iterator,r.arg);if(\"throw\"===a.type)return r.method=\"throw\",r.arg=a.arg,r.delegate=null,x;var o=a.arg;return o?o.done?(r[e.resultName]=o.value,r.next=e.nextLoc,\"return\"!==r.method&&(r.method=\"next\",r.arg=t),r.delegate=null,x):o:(r.method=\"throw\",r.arg=new TypeError(\"iterator result is not an object\"),r.delegate=null,x)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function B(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(T,this),this.reset(!0)}function k(e){if(e||\"\"===e){var r=e[c];if(r)return r.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function r(){for(;++i=0;--i){var a=this.tryEntries[i],u=a.completion;if(\"root\"===a.tryLoc)return n(\"end\");if(a.tryLoc<=this.prev){var s=o.call(a,\"catchLoc\"),c=o.call(a,\"finallyLoc\");if(s&&c){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&o.call(n,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),_(r),x}},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 i=n.arg;_(r)}return i}}throw Error(\"illegal catch attempt\")},delegateYield:function(e,r,n){return this.delegate={iterator:k(e),resultName:r,nextLoc:n},\"next\"===this.method&&(this.arg=t),x}},r}e.exports=i,e.exports.__esModule=!0,e.exports.default=e.exports},3738:e=>{function t(r){return e.exports=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},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},4756:(e,t,r)=>{var n=r(4633)();e.exports=n;try{regeneratorRuntime=n}catch(e){\"object\"==typeof globalThis?globalThis.regeneratorRuntime=n:Function(\"r\",\"regeneratorRuntime = r\")(n)}},9306:(e,t,r)=>{\"use strict\";var n=r(4901),i=r(6823),a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(i(e)+\" is not a function\")}},5548:(e,t,r)=>{\"use strict\";var n=r(3517),i=r(6823),a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(i(e)+\" is not a constructor\")}},3506:(e,t,r)=>{\"use strict\";var n=r(3925),i=String,a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(\"Can't set \"+i(e)+\" as a prototype\")}},6469:(e,t,r)=>{\"use strict\";var n=r(8227),i=r(2360),a=r(4913).f,o=n(\"unscopables\"),u=Array.prototype;void 0===u[o]&&a(u,o,{configurable:!0,value:i(null)}),e.exports=function(e){u[o][e]=!0}},7829:(e,t,r)=>{\"use strict\";var n=r(8183).charAt;e.exports=function(e,t,r){return t+(r?n(e,t).length:1)}},679:(e,t,r)=>{\"use strict\";var n=r(1625),i=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw new i(\"Incorrect invocation\")}},8551:(e,t,r)=>{\"use strict\";var n=r(34),i=String,a=TypeError;e.exports=function(e){if(n(e))return e;throw new a(i(e)+\" is not an object\")}},5652:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=n((function(){if(\"function\"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,\"a\",{value:8})}}))},4373:(e,t,r)=>{\"use strict\";var n=r(8981),i=r(5610),a=r(6198);e.exports=function(e){for(var t=n(this),r=a(t),o=arguments.length,u=i(o>1?arguments[1]:void 0,r),s=o>2?arguments[2]:void 0,c=void 0===s?r:i(s,r);c>u;)t[u++]=e;return t}},235:(e,t,r)=>{\"use strict\";var n=r(9213).forEach,i=r(4598)(\"forEach\");e.exports=i?[].forEach:function(e){return n(this,e,arguments.length>1?arguments[1]:void 0)}},7916:(e,t,r)=>{\"use strict\";var n=r(6080),i=r(9565),a=r(8981),o=r(6319),u=r(4209),s=r(3517),c=r(6198),f=r(4659),l=r(81),p=r(851),m=Array;e.exports=function(e){var t=a(e),r=s(this),h=arguments.length,d=h>1?arguments[1]:void 0,v=void 0!==d;v&&(d=n(d,h>2?arguments[2]:void 0));var y,g,x,b,w,D,N=p(t),E=0;if(!N||this===m&&u(N))for(y=c(t),g=r?new this(y):m(y);y>E;E++)D=v?d(t[E],E):t[E],f(g,E,D);else for(g=r?new this:[],w=(b=l(t,N)).next;!(x=i(w,b)).done;E++)D=v?o(b,d,[x.value,E],!0):x.value,f(g,E,D);return g.length=E,g}},9617:(e,t,r)=>{\"use strict\";var n=r(5397),i=r(5610),a=r(6198),o=function(e){return function(t,r,o){var u=n(t),s=a(u);if(0===s)return!e&&-1;var c,f=i(o,s);if(e&&r!=r){for(;s>f;)if((c=u[f++])!=c)return!0}else for(;s>f;f++)if((e||f in u)&&u[f]===r)return e||f||0;return!e&&-1}};e.exports={includes:o(!0),indexOf:o(!1)}},9213:(e,t,r)=>{\"use strict\";var n=r(6080),i=r(9504),a=r(7055),o=r(8981),u=r(6198),s=r(1469),c=i([].push),f=function(e){var t=1===e,r=2===e,i=3===e,f=4===e,l=6===e,p=7===e,m=5===e||l;return function(h,d,v,y){for(var g,x,b=o(h),w=a(b),D=u(w),N=n(d,v),E=0,A=y||s,S=t?A(h,D):r||p?A(h,0):void 0;D>E;E++)if((m||E in w)&&(x=N(g=w[E],E,b),e))if(t)S[E]=x;else if(x)switch(e){case 3:return!0;case 5:return g;case 6:return E;case 2:c(S,g)}else switch(e){case 4:return!1;case 7:c(S,g)}return l?-1:i||f?f:S}};e.exports={forEach:f(0),map:f(1),filter:f(2),some:f(3),every:f(4),find:f(5),findIndex:f(6),filterReject:f(7)}},597:(e,t,r)=>{\"use strict\";var n=r(9039),i=r(8227),a=r(7388),o=i(\"species\");e.exports=function(e){return a>=51||!n((function(){var t=[];return(t.constructor={})[o]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},4598:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){return 1},1)}))}},926:(e,t,r)=>{\"use strict\";var n=r(9306),i=r(8981),a=r(7055),o=r(6198),u=TypeError,s=\"Reduce of empty array with no initial value\",c=function(e){return function(t,r,c,f){var l=i(t),p=a(l),m=o(l);if(n(r),0===m&&c<2)throw new u(s);var h=e?m-1:0,d=e?-1:1;if(c<2)for(;;){if(h in p){f=p[h],h+=d;break}if(h+=d,e?h<0:m<=h)throw new u(s)}for(;e?h>=0:m>h;h+=d)h in p&&(f=r(f,p[h],h,l));return f}};e.exports={left:c(!1),right:c(!0)}},4527:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(4376),a=TypeError,o=Object.getOwnPropertyDescriptor,u=n&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],\"length\",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=u?function(e,t){if(i(e)&&!o(e,\"length\").writable)throw new a(\"Cannot set read only .length\");return e.length=t}:function(e,t){return e.length=t}},7680:(e,t,r)=>{\"use strict\";var n=r(9504);e.exports=n([].slice)},4488:(e,t,r)=>{\"use strict\";var n=r(7680),i=Math.floor,a=function(e,t){var r=e.length;if(r<8)for(var o,u,s=1;s0;)e[u]=e[--u];u!==s++&&(e[u]=o)}else for(var c=i(r/2),f=a(n(e,0,c),t),l=a(n(e,c),t),p=f.length,m=l.length,h=0,d=0;h{\"use strict\";var n=r(4376),i=r(3517),a=r(34),o=r(8227)(\"species\"),u=Array;e.exports=function(e){var t;return n(e)&&(t=e.constructor,(i(t)&&(t===u||n(t.prototype))||a(t)&&null===(t=t[o]))&&(t=void 0)),void 0===t?u:t}},1469:(e,t,r)=>{\"use strict\";var n=r(7433);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},6319:(e,t,r)=>{\"use strict\";var n=r(8551),i=r(9539);e.exports=function(e,t,r,a){try{return a?t(n(r)[0],r[1]):t(r)}catch(t){i(e,\"throw\",t)}}},4428:(e,t,r)=>{\"use strict\";var n=r(8227)(\"iterator\"),i=!1;try{var a=0,o={next:function(){return{done:!!a++}},return:function(){i=!0}};o[n]=function(){return this},Array.from(o,(function(){throw 2}))}catch(e){}e.exports=function(e,t){try{if(!t&&!i)return!1}catch(e){return!1}var r=!1;try{var a={};a[n]=function(){return{next:function(){return{done:r=!0}}}},e(a)}catch(e){}return r}},4576:(e,t,r)=>{\"use strict\";var n=r(9504),i=n({}.toString),a=n(\"\".slice);e.exports=function(e){return a(i(e),8,-1)}},6955:(e,t,r)=>{\"use strict\";var n=r(2140),i=r(4901),a=r(4576),o=r(8227)(\"toStringTag\"),u=Object,s=\"Arguments\"===a(function(){return arguments}());e.exports=n?a:function(e){var t,r,n;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=u(e),o))?r:s?a(t):\"Object\"===(n=a(t))&&i(t.callee)?\"Arguments\":n}},6938:(e,t,r)=>{\"use strict\";var n=r(2360),i=r(2106),a=r(6279),o=r(6080),u=r(679),s=r(4117),c=r(2652),f=r(1088),l=r(2529),p=r(7633),m=r(3724),h=r(3451).fastKey,d=r(1181),v=d.set,y=d.getterFor;e.exports={getConstructor:function(e,t,r,f){var l=e((function(e,i){u(e,p),v(e,{type:t,index:n(null),first:void 0,last:void 0,size:0}),m||(e.size=0),s(i)||c(i,e[f],{that:e,AS_ENTRIES:r})})),p=l.prototype,d=y(t),g=function(e,t,r){var n,i,a=d(e),o=x(e,t);return o?o.value=r:(a.last=o={index:i=h(t,!0),key:t,value:r,previous:n=a.last,next:void 0,removed:!1},a.first||(a.first=o),n&&(n.next=o),m?a.size++:e.size++,\"F\"!==i&&(a.index[i]=o)),e},x=function(e,t){var r,n=d(e),i=h(t);if(\"F\"!==i)return n.index[i];for(r=n.first;r;r=r.next)if(r.key===t)return r};return a(p,{clear:function(){for(var e=d(this),t=e.first;t;)t.removed=!0,t.previous&&(t.previous=t.previous.next=void 0),t=t.next;e.first=e.last=void 0,e.index=n(null),m?e.size=0:this.size=0},delete:function(e){var t=this,r=d(t),n=x(t,e);if(n){var i=n.next,a=n.previous;delete r.index[n.index],n.removed=!0,a&&(a.next=i),i&&(i.previous=a),r.first===n&&(r.first=i),r.last===n&&(r.last=a),m?r.size--:t.size--}return!!n},forEach:function(e){for(var t,r=d(this),n=o(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:r.first;)for(n(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!x(this,e)}}),a(p,r?{get:function(e){var t=x(this,e);return t&&t.value},set:function(e,t){return g(this,0===e?0:e,t)}}:{add:function(e){return g(this,e=0===e?0:e,e)}}),m&&i(p,\"size\",{configurable:!0,get:function(){return d(this).size}}),l},setStrong:function(e,t,r){var n=t+\" Iterator\",i=y(t),a=y(n);f(e,t,(function(e,t){v(this,{type:n,target:e,state:i(e),kind:t,last:void 0})}),(function(){for(var e=a(this),t=e.kind,r=e.last;r&&r.removed;)r=r.previous;return e.target&&(e.last=r=r?r.next:e.state.first)?l(\"keys\"===t?r.key:\"values\"===t?r.value:[r.key,r.value],!1):(e.target=void 0,l(void 0,!0))}),r?\"entries\":\"values\",!r,!0),p(t)}}},6468:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(4475),a=r(9504),o=r(2796),u=r(6840),s=r(3451),c=r(2652),f=r(679),l=r(4901),p=r(4117),m=r(34),h=r(9039),d=r(4428),v=r(687),y=r(3167);e.exports=function(e,t,r){var g=-1!==e.indexOf(\"Map\"),x=-1!==e.indexOf(\"Weak\"),b=g?\"set\":\"add\",w=i[e],D=w&&w.prototype,N=w,E={},A=function(e){var t=a(D[e]);u(D,e,\"add\"===e?function(e){return t(this,0===e?0:e),this}:\"delete\"===e?function(e){return!(x&&!m(e))&&t(this,0===e?0:e)}:\"get\"===e?function(e){return x&&!m(e)?void 0:t(this,0===e?0:e)}:\"has\"===e?function(e){return!(x&&!m(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(o(e,!l(w)||!(x||D.forEach&&!h((function(){(new w).entries().next()})))))N=r.getConstructor(t,e,g,b),s.enable();else if(o(e,!0)){var S=new N,C=S[b](x?{}:-0,1)!==S,M=h((function(){S.has(1)})),F=d((function(e){new w(e)})),O=!x&&h((function(){for(var e=new w,t=5;t--;)e[b](t,t);return!e.has(-0)}));F||((N=t((function(e,t){f(e,D);var r=y(new w,e,N);return p(t)||c(t,r[b],{that:r,AS_ENTRIES:g}),r}))).prototype=D,D.constructor=N),(M||O)&&(A(\"delete\"),A(\"has\"),g&&A(\"get\")),(O||C)&&A(b),x&&D.clear&&delete D.clear}return E[e]=N,n({global:!0,constructor:!0,forced:N!==w},E),v(N,e),x||r.setStrong(N,e,g),N}},7740:(e,t,r)=>{\"use strict\";var n=r(9297),i=r(5031),a=r(7347),o=r(4913);e.exports=function(e,t,r){for(var u=i(t),s=o.f,c=a.f,f=0;f{\"use strict\";var n=r(8227)(\"match\");e.exports=function(e){var t=/./;try{\"/./\"[e](t)}catch(r){try{return t[n]=!1,\"/./\"[e](t)}catch(e){}}return!1}},2211:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},7240:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(7750),a=r(655),o=/\"/g,u=n(\"\".replace);e.exports=function(e,t,r,n){var s=a(i(e)),c=\"<\"+t;return\"\"!==r&&(c+=\" \"+r+'=\"'+u(a(n),o,\""\")+'\"'),c+\">\"+s+\"\"}},2529:e=>{\"use strict\";e.exports=function(e,t){return{value:e,done:t}}},6699:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(4913),a=r(6980);e.exports=n?function(e,t,r){return i.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},6980:e=>{\"use strict\";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},4659:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(4913),a=r(6980);e.exports=function(e,t,r){n?i.f(e,t,a(0,r)):e[t]=r}},2106:(e,t,r)=>{\"use strict\";var n=r(283),i=r(4913);e.exports=function(e,t,r){return r.get&&n(r.get,t,{getter:!0}),r.set&&n(r.set,t,{setter:!0}),i.f(e,t,r)}},6840:(e,t,r)=>{\"use strict\";var n=r(4901),i=r(4913),a=r(283),o=r(9433);e.exports=function(e,t,r,u){u||(u={});var s=u.enumerable,c=void 0!==u.name?u.name:t;if(n(r)&&a(r,c,u),u.global)s?e[t]=r:o(t,r);else{try{u.unsafe?e[t]&&(s=!0):delete e[t]}catch(e){}s?e[t]=r:i.f(e,t,{value:r,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return e}},6279:(e,t,r)=>{\"use strict\";var n=r(6840);e.exports=function(e,t,r){for(var i in t)n(e,i,t[i],r);return e}},9433:(e,t,r)=>{\"use strict\";var n=r(4475),i=Object.defineProperty;e.exports=function(e,t){try{i(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},4606:(e,t,r)=>{\"use strict\";var n=r(6823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i(\"Cannot delete property \"+n(t)+\" of \"+n(e))}},3724:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4055:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(34),a=n.document,o=i(a)&&i(a.createElement);e.exports=function(e){return o?a.createElement(e):{}}},6837:e=>{\"use strict\";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t(\"Maximum allowed index exceeded\");return e}},7400:e=>{\"use strict\";e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},9296:(e,t,r)=>{\"use strict\";var n=r(4055)(\"span\").classList,i=n&&n.constructor&&n.constructor.prototype;e.exports=i===Object.prototype?void 0:i},8834:(e,t,r)=>{\"use strict\";var n=r(9392).match(/firefox\\/(\\d+)/i);e.exports=!!n&&+n[1]},7290:(e,t,r)=>{\"use strict\";var n=r(516),i=r(9088);e.exports=!n&&!i&&\"object\"==typeof window&&\"object\"==typeof document},516:e=>{\"use strict\";e.exports=\"object\"==typeof Deno&&Deno&&\"object\"==typeof Deno.version},3202:(e,t,r)=>{\"use strict\";var n=r(9392);e.exports=/MSIE|Trident/.test(n)},28:(e,t,r)=>{\"use strict\";var n=r(9392);e.exports=/ipad|iphone|ipod/i.test(n)&&\"undefined\"!=typeof Pebble},8119:(e,t,r)=>{\"use strict\";var n=r(9392);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},9088:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(4576);e.exports=\"process\"===i(n.process)},6765:(e,t,r)=>{\"use strict\";var n=r(9392);e.exports=/web0s(?!.*chrome)/i.test(n)},9392:e=>{\"use strict\";e.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},7388:(e,t,r)=>{\"use strict\";var n,i,a=r(4475),o=r(9392),u=a.process,s=a.Deno,c=u&&u.versions||s&&s.version,f=c&&c.v8;f&&(i=(n=f.split(\".\"))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(i=+n[1]),e.exports=i},9160:(e,t,r)=>{\"use strict\";var n=r(9392).match(/AppleWebKit\\/(\\d+)\\./);e.exports=!!n&&+n[1]},8727:e=>{\"use strict\";e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},6518:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(7347).f,a=r(6699),o=r(6840),u=r(9433),s=r(7740),c=r(2796);e.exports=function(e,t){var r,f,l,p,m,h=e.target,d=e.global,v=e.stat;if(r=d?n:v?n[h]||u(h,{}):n[h]&&n[h].prototype)for(f in t){if(p=t[f],l=e.dontCallGetSet?(m=i(r,f))&&m.value:r[f],!c(d?f:h+(v?\".\":\"#\")+f,e.forced)&&void 0!==l){if(typeof p==typeof l)continue;s(p,l)}(e.sham||l&&l.sham)&&a(p,\"sham\",!0),o(r,f,p,e)}}},9039:e=>{\"use strict\";e.exports=function(e){try{return!!e()}catch(e){return!0}}},9228:(e,t,r)=>{\"use strict\";r(7495);var n=r(9565),i=r(6840),a=r(7323),o=r(9039),u=r(8227),s=r(6699),c=u(\"species\"),f=RegExp.prototype;e.exports=function(e,t,r,l){var p=u(e),m=!o((function(){var t={};return t[p]=function(){return 7},7!==\"\"[e](t)})),h=m&&!o((function(){var t=!1,r=/a/;return\"split\"===e&&((r={}).constructor={},r.constructor[c]=function(){return r},r.flags=\"\",r[p]=/./[p]),r.exec=function(){return t=!0,null},r[p](\"\"),!t}));if(!m||!h||r){var d=/./[p],v=t(p,\"\"[e],(function(e,t,r,i,o){var u=t.exec;return u===a||u===f.exec?m&&!o?{done:!0,value:n(d,t,r,i)}:{done:!0,value:n(e,r,t,i)}:{done:!1}}));i(String.prototype,e,v[0]),i(f,p,v[1])}l&&s(f[p],\"sham\",!0)}},2744:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},8745:(e,t,r)=>{\"use strict\";var n=r(616),i=Function.prototype,a=i.apply,o=i.call;e.exports=\"object\"==typeof Reflect&&Reflect.apply||(n?o.bind(a):function(){return o.apply(a,arguments)})},6080:(e,t,r)=>{\"use strict\";var n=r(7476),i=r(9306),a=r(616),o=n(n.bind);e.exports=function(e,t){return i(e),void 0===t?e:a?o(e,t):function(){return e.apply(t,arguments)}}},616:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=!n((function(){var e=function(){}.bind();return\"function\"!=typeof e||e.hasOwnProperty(\"prototype\")}))},566:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(9306),a=r(34),o=r(9297),u=r(7680),s=r(616),c=Function,f=n([].concat),l=n([].join),p={};e.exports=s?c.bind:function(e){var t=i(this),r=t.prototype,n=u(arguments,1),s=function(){var r=f(n,u(arguments));return this instanceof s?function(e,t,r){if(!o(p,t)){for(var n=[],i=0;i{\"use strict\";var n=r(616),i=Function.prototype.call;e.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},350:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(9297),a=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,u=i(a,\"name\"),s=u&&\"something\"===function(){}.name,c=u&&(!n||n&&o(a,\"name\").configurable);e.exports={EXISTS:u,PROPER:s,CONFIGURABLE:c}},6706:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(9306);e.exports=function(e,t,r){try{return n(i(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}},7476:(e,t,r)=>{\"use strict\";var n=r(4576),i=r(9504);e.exports=function(e){if(\"Function\"===n(e))return i(e)}},9504:(e,t,r)=>{\"use strict\";var n=r(616),i=Function.prototype,a=i.call,o=n&&i.bind.bind(a,a);e.exports=n?o:function(e){return function(){return a.apply(e,arguments)}}},7751:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(4901);e.exports=function(e,t){return arguments.length<2?(r=n[e],i(r)?r:void 0):n[e]&&n[e][t];var r}},851:(e,t,r)=>{\"use strict\";var n=r(6955),i=r(5966),a=r(4117),o=r(6269),u=r(8227)(\"iterator\");e.exports=function(e){if(!a(e))return i(e,u)||i(e,\"@@iterator\")||o[n(e)]}},81:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(9306),a=r(8551),o=r(6823),u=r(851),s=TypeError;e.exports=function(e,t){var r=arguments.length<2?u(e):t;if(i(r))return a(n(r,e));throw new s(o(e)+\" is not iterable\")}},6933:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(4376),a=r(4901),o=r(4576),u=r(655),s=n([].push);e.exports=function(e){if(a(e))return e;if(i(e)){for(var t=e.length,r=[],n=0;n{\"use strict\";var n=r(9306),i=r(4117);e.exports=function(e,t){var r=e[t];return i(r)?void 0:n(r)}},2478:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(8981),a=Math.floor,o=n(\"\".charAt),u=n(\"\".replace),s=n(\"\".slice),c=/\\$([$&'`]|\\d{1,2}|<[^>]*>)/g,f=/\\$([$&'`]|\\d{1,2})/g;e.exports=function(e,t,r,n,l,p){var m=r+e.length,h=n.length,d=f;return void 0!==l&&(l=i(l),d=c),u(p,d,(function(i,u){var c;switch(o(u,0)){case\"$\":return\"$\";case\"&\":return e;case\"`\":return s(t,0,r);case\"'\":return s(t,m);case\"<\":c=l[s(u,1,-1)];break;default:var f=+u;if(0===f)return i;if(f>h){var p=a(f/10);return 0===p?i:p<=h?void 0===n[p-1]?o(u,1):n[p-1]+o(u,1):i}c=n[f-1]}return void 0===c?\"\":c}))}},4475:function(e){\"use strict\";var t=function(e){return e&&e.Math===Math&&e};e.exports=t(\"object\"==typeof globalThis&&globalThis)||t(\"object\"==typeof window&&window)||t(\"object\"==typeof self&&self)||t(\"object\"==typeof global&&global)||t(\"object\"==typeof this&&this)||function(){return this}()||Function(\"return this\")()},9297:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(8981),a=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return a(i(e),t)}},421:e=>{\"use strict\";e.exports={}},3138:e=>{\"use strict\";e.exports=function(e,t){try{1===arguments.length?console.error(e):console.error(e,t)}catch(e){}}},397:(e,t,r)=>{\"use strict\";var n=r(7751);e.exports=n(\"document\",\"documentElement\")},5917:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(9039),a=r(4055);e.exports=!n&&!i((function(){return 7!==Object.defineProperty(a(\"div\"),\"a\",{get:function(){return 7}}).a}))},7055:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(9039),a=r(4576),o=Object,u=n(\"\".split);e.exports=i((function(){return!o(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"===a(e)?u(e,\"\"):o(e)}:o},3167:(e,t,r)=>{\"use strict\";var n=r(4901),i=r(34),a=r(2967);e.exports=function(e,t,r){var o,u;return a&&n(o=t.constructor)&&o!==r&&i(u=o.prototype)&&u!==r.prototype&&a(e,u),e}},3706:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(4901),a=r(7629),o=n(Function.toString);i(a.inspectSource)||(a.inspectSource=function(e){return o(e)}),e.exports=a.inspectSource},3451:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(421),o=r(34),u=r(9297),s=r(4913).f,c=r(8480),f=r(298),l=r(4124),p=r(3392),m=r(2744),h=!1,d=p(\"meta\"),v=0,y=function(e){s(e,d,{value:{objectID:\"O\"+v++,weakData:{}}})},g=e.exports={enable:function(){g.enable=function(){},h=!0;var e=c.f,t=i([].splice),r={};r[d]=1,e(r).length&&(c.f=function(r){for(var n=e(r),i=0,a=n.length;i{\"use strict\";var n,i,a,o=r(8622),u=r(4475),s=r(34),c=r(6699),f=r(9297),l=r(7629),p=r(6119),m=r(421),h=\"Object already initialized\",d=u.TypeError,v=u.WeakMap;if(o||l.state){var y=l.state||(l.state=new v);y.get=y.get,y.has=y.has,y.set=y.set,n=function(e,t){if(y.has(e))throw new d(h);return t.facade=e,y.set(e,t),t},i=function(e){return y.get(e)||{}},a=function(e){return y.has(e)}}else{var g=p(\"state\");m[g]=!0,n=function(e,t){if(f(e,g))throw new d(h);return t.facade=e,c(e,g,t),t},i=function(e){return f(e,g)?e[g]:{}},a=function(e){return f(e,g)}}e.exports={set:n,get:i,has:a,enforce:function(e){return a(e)?i(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!s(t)||(r=i(t)).type!==e)throw new d(\"Incompatible receiver, \"+e+\" required\");return r}}}},4209:(e,t,r)=>{\"use strict\";var n=r(8227),i=r(6269),a=n(\"iterator\"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||o[a]===e)}},4376:(e,t,r)=>{\"use strict\";var n=r(4576);e.exports=Array.isArray||function(e){return\"Array\"===n(e)}},4901:e=>{\"use strict\";var t=\"object\"==typeof document&&document.all;e.exports=void 0===t&&void 0!==t?function(e){return\"function\"==typeof e||e===t}:function(e){return\"function\"==typeof e}},3517:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(9039),a=r(4901),o=r(6955),u=r(7751),s=r(3706),c=function(){},f=u(\"Reflect\",\"construct\"),l=/^\\s*(?:class|function)\\b/,p=n(l.exec),m=!l.test(c),h=function(e){if(!a(e))return!1;try{return f(c,[],e),!0}catch(e){return!1}},d=function(e){if(!a(e))return!1;switch(o(e)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return m||!!p(l,s(e))}catch(e){return!0}};d.sham=!0,e.exports=!f||i((function(){var e;return h(h.call)||!h(Object)||!h((function(){e=!0}))||e}))?d:h},2796:(e,t,r)=>{\"use strict\";var n=r(9039),i=r(4901),a=/#|\\.prototype\\./,o=function(e,t){var r=s[u(e)];return r===f||r!==c&&(i(t)?n(t):!!t)},u=o.normalize=function(e){return String(e).replace(a,\".\").toLowerCase()},s=o.data={},c=o.NATIVE=\"N\",f=o.POLYFILL=\"P\";e.exports=o},4117:e=>{\"use strict\";e.exports=function(e){return null==e}},34:(e,t,r)=>{\"use strict\";var n=r(4901);e.exports=function(e){return\"object\"==typeof e?null!==e:n(e)}},3925:(e,t,r)=>{\"use strict\";var n=r(34);e.exports=function(e){return n(e)||null===e}},6395:e=>{\"use strict\";e.exports=!1},788:(e,t,r)=>{\"use strict\";var n=r(34),i=r(4576),a=r(8227)(\"match\");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[a])?!!t:\"RegExp\"===i(e))}},757:(e,t,r)=>{\"use strict\";var n=r(7751),i=r(4901),a=r(1625),o=r(7040),u=Object;e.exports=o?function(e){return\"symbol\"==typeof e}:function(e){var t=n(\"Symbol\");return i(t)&&a(t.prototype,u(e))}},2652:(e,t,r)=>{\"use strict\";var n=r(6080),i=r(9565),a=r(8551),o=r(6823),u=r(4209),s=r(6198),c=r(1625),f=r(81),l=r(851),p=r(9539),m=TypeError,h=function(e,t){this.stopped=e,this.result=t},d=h.prototype;e.exports=function(e,t,r){var v,y,g,x,b,w,D,N=r&&r.that,E=!(!r||!r.AS_ENTRIES),A=!(!r||!r.IS_RECORD),S=!(!r||!r.IS_ITERATOR),C=!(!r||!r.INTERRUPTED),M=n(t,N),F=function(e){return v&&p(v,\"normal\",e),new h(!0,e)},O=function(e){return E?(a(e),C?M(e[0],e[1],F):M(e[0],e[1])):C?M(e,F):M(e)};if(A)v=e.iterator;else if(S)v=e;else{if(!(y=l(e)))throw new m(o(e)+\" is not iterable\");if(u(y)){for(g=0,x=s(e);x>g;g++)if((b=O(e[g]))&&c(d,b))return b;return new h(!1)}v=f(e,y)}for(w=A?e.next:v.next;!(D=i(w,v)).done;){try{b=O(D.value)}catch(e){p(v,\"throw\",e)}if(\"object\"==typeof b&&b&&c(d,b))return b}return new h(!1)}},9539:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(8551),a=r(5966);e.exports=function(e,t,r){var o,u;i(e);try{if(!(o=a(e,\"return\"))){if(\"throw\"===t)throw r;return r}o=n(o,e)}catch(e){u=!0,o=e}if(\"throw\"===t)throw r;if(u)throw o;return i(o),r}},3994:(e,t,r)=>{\"use strict\";var n=r(7657).IteratorPrototype,i=r(2360),a=r(6980),o=r(687),u=r(6269),s=function(){return this};e.exports=function(e,t,r,c){var f=t+\" Iterator\";return e.prototype=i(n,{next:a(+!c,r)}),o(e,f,!1,!0),u[f]=s,e}},1088:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9565),a=r(6395),o=r(350),u=r(4901),s=r(3994),c=r(2787),f=r(2967),l=r(687),p=r(6699),m=r(6840),h=r(8227),d=r(6269),v=r(7657),y=o.PROPER,g=o.CONFIGURABLE,x=v.IteratorPrototype,b=v.BUGGY_SAFARI_ITERATORS,w=h(\"iterator\"),D=\"keys\",N=\"values\",E=\"entries\",A=function(){return this};e.exports=function(e,t,r,o,h,v,S){s(r,t,o);var C,M,F,O=function(e){if(e===h&&I)return I;if(!b&&e&&e in B)return B[e];switch(e){case D:case N:case E:return function(){return new r(this,e)}}return function(){return new r(this)}},T=t+\" Iterator\",_=!1,B=e.prototype,k=B[w]||B[\"@@iterator\"]||h&&B[h],I=!b&&k||O(h),z=\"Array\"===t&&B.entries||k;if(z&&(C=c(z.call(new e)))!==Object.prototype&&C.next&&(a||c(C)===x||(f?f(C,x):u(C[w])||m(C,w,A)),l(C,T,!0,!0),a&&(d[T]=A)),y&&h===N&&k&&k.name!==N&&(!a&&g?p(B,\"name\",N):(_=!0,I=function(){return i(k,this)})),h)if(M={values:O(N),keys:v?I:O(D),entries:O(E)},S)for(F in M)(b||_||!(F in B))&&m(B,F,M[F]);else n({target:t,proto:!0,forced:b||_},M);return a&&!S||B[w]===I||m(B,w,I,{name:h}),d[t]=I,M}},7657:(e,t,r)=>{\"use strict\";var n,i,a,o=r(9039),u=r(4901),s=r(34),c=r(2360),f=r(2787),l=r(6840),p=r(8227),m=r(6395),h=p(\"iterator\"),d=!1;[].keys&&(\"next\"in(a=[].keys())?(i=f(f(a)))!==Object.prototype&&(n=i):d=!0),!s(n)||o((function(){var e={};return n[h].call(e)!==e}))?n={}:m&&(n=c(n)),u(n[h])||l(n,h,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:d}},6269:e=>{\"use strict\";e.exports={}},6198:(e,t,r)=>{\"use strict\";var n=r(8014);e.exports=function(e){return n(e.length)}},283:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(9039),a=r(4901),o=r(9297),u=r(3724),s=r(350).CONFIGURABLE,c=r(3706),f=r(1181),l=f.enforce,p=f.get,m=String,h=Object.defineProperty,d=n(\"\".slice),v=n(\"\".replace),y=n([].join),g=u&&!i((function(){return 8!==h((function(){}),\"length\",{value:8}).length})),x=String(String).split(\"String\"),b=e.exports=function(e,t,r){\"Symbol(\"===d(m(t),0,7)&&(t=\"[\"+v(m(t),/^Symbol\\(([^)]*)\\).*$/,\"$1\")+\"]\"),r&&r.getter&&(t=\"get \"+t),r&&r.setter&&(t=\"set \"+t),(!o(e,\"name\")||s&&e.name!==t)&&(u?h(e,\"name\",{value:t,configurable:!0}):e.name=t),g&&r&&o(r,\"arity\")&&e.length!==r.arity&&h(e,\"length\",{value:r.arity});try{r&&o(r,\"constructor\")&&r.constructor?u&&h(e,\"prototype\",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=l(e);return o(n,\"source\")||(n.source=y(x,\"string\"==typeof t?t:\"\")),e};Function.prototype.toString=b((function(){return a(this)&&p(this).source||c(this)}),\"toString\")},3250:e=>{\"use strict\";var t=Math.expm1,r=Math.exp;e.exports=!t||t(10)>22025.465794806718||t(10)<22025.465794806718||-2e-17!==t(-2e-17)?function(e){var t=+e;return 0===t?t:t>-1e-6&&t<1e-6?t+t*t/2:r(t)-1}:t},9340:e=>{\"use strict\";var t=Math.log,r=Math.LOG10E;e.exports=Math.log10||function(e){return t(e)*r}},5359:e=>{\"use strict\";var t=Math.log;e.exports=Math.log1p||function(e){var r=+e;return r>-1e-8&&r<1e-8?r-r*r/2:t(1+r)}},7782:e=>{\"use strict\";e.exports=Math.sign||function(e){var t=+e;return 0===t||t!=t?t:t<0?-1:1}},741:e=>{\"use strict\";var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},1955:(e,t,r)=>{\"use strict\";var n,i,a,o,u,s=r(4475),c=r(3389),f=r(6080),l=r(9225).set,p=r(8265),m=r(8119),h=r(28),d=r(6765),v=r(9088),y=s.MutationObserver||s.WebKitMutationObserver,g=s.document,x=s.process,b=s.Promise,w=c(\"queueMicrotask\");if(!w){var D=new p,N=function(){var e,t;for(v&&(e=x.domain)&&e.exit();t=D.get();)try{t()}catch(e){throw D.head&&n(),e}e&&e.enter()};m||v||d||!y||!g?!h&&b&&b.resolve?((o=b.resolve(void 0)).constructor=b,u=f(o.then,o),n=function(){u(N)}):v?n=function(){x.nextTick(N)}:(l=f(l,s),n=function(){l(N)}):(i=!0,a=g.createTextNode(\"\"),new y(N).observe(a,{characterData:!0}),n=function(){a.data=i=!i}),w=function(e){D.head||n(),D.add(e)}}e.exports=w},6043:(e,t,r)=>{\"use strict\";var n=r(9306),i=TypeError,a=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw new i(\"Bad Promise constructor\");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new a(e)}},511:(e,t,r)=>{\"use strict\";var n=r(788),i=TypeError;e.exports=function(e){if(n(e))throw new i(\"The method doesn't accept regular expressions\");return e}},3904:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(9039),a=r(9504),o=r(655),u=r(3802).trim,s=r(7452),c=a(\"\".charAt),f=n.parseFloat,l=n.Symbol,p=l&&l.iterator,m=1/f(s+\"-0\")!=-1/0||p&&!i((function(){f(Object(p))}));e.exports=m?function(e){var t=u(o(e)),r=f(t);return 0===r&&\"-\"===c(t,0)?-0:r}:f},2703:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(9039),a=r(9504),o=r(655),u=r(3802).trim,s=r(7452),c=n.parseInt,f=n.Symbol,l=f&&f.iterator,p=/^[+-]?0x/i,m=a(p.exec),h=8!==c(s+\"08\")||22!==c(s+\"0x16\")||l&&!i((function(){c(Object(l))}));e.exports=h?function(e,t){var r=u(o(e));return c(r,t>>>0||(m(p,r)?16:10))}:c},2360:(e,t,r)=>{\"use strict\";var n,i=r(8551),a=r(6801),o=r(8727),u=r(421),s=r(397),c=r(4055),f=r(6119),l=\"prototype\",p=\"script\",m=f(\"IE_PROTO\"),h=function(){},d=function(e){return\"<\"+p+\">\"+e+\"\"},v=function(e){e.write(d(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{n=new ActiveXObject(\"htmlfile\")}catch(e){}var e,t,r;y=\"undefined\"!=typeof document?document.domain&&n?v(n):(t=c(\"iframe\"),r=\"java\"+p+\":\",t.style.display=\"none\",s.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(d(\"document.F=Object\")),e.close(),e.F):v(n);for(var i=o.length;i--;)delete y[l][o[i]];return y()};u[m]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(h[l]=i(e),r=new h,h[l]=null,r[m]=e):r=y(),void 0===t?r:a.f(r,t)}},6801:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(8686),a=r(4913),o=r(8551),u=r(5397),s=r(1072);t.f=n&&!i?Object.defineProperties:function(e,t){o(e);for(var r,n=u(t),i=s(t),c=i.length,f=0;c>f;)a.f(e,r=i[f++],n[r]);return e}},4913:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(5917),a=r(8686),o=r(8551),u=r(6969),s=TypeError,c=Object.defineProperty,f=Object.getOwnPropertyDescriptor,l=\"enumerable\",p=\"configurable\",m=\"writable\";t.f=n?a?function(e,t,r){if(o(e),t=u(t),o(r),\"function\"==typeof e&&\"prototype\"===t&&\"value\"in r&&m in r&&!r[m]){var n=f(e,t);n&&n[m]&&(e[t]=r.value,r={configurable:p in r?r[p]:n[p],enumerable:l in r?r[l]:n[l],writable:!1})}return c(e,t,r)}:c:function(e,t,r){if(o(e),t=u(t),o(r),i)try{return c(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw new s(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},7347:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(9565),a=r(8773),o=r(6980),u=r(5397),s=r(6969),c=r(9297),f=r(5917),l=Object.getOwnPropertyDescriptor;t.f=n?l:function(e,t){if(e=u(e),t=s(t),f)try{return l(e,t)}catch(e){}if(c(e,t))return o(!i(a.f,e,t),e[t])}},298:(e,t,r)=>{\"use strict\";var n=r(4576),i=r(5397),a=r(8480).f,o=r(7680),u=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return u&&\"Window\"===n(e)?function(e){try{return a(e)}catch(e){return o(u)}}(e):a(i(e))}},8480:(e,t,r)=>{\"use strict\";var n=r(1828),i=r(8727).concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return n(e,i)}},3717:(e,t)=>{\"use strict\";t.f=Object.getOwnPropertySymbols},2787:(e,t,r)=>{\"use strict\";var n=r(9297),i=r(4901),a=r(8981),o=r(6119),u=r(2211),s=o(\"IE_PROTO\"),c=Object,f=c.prototype;e.exports=u?c.getPrototypeOf:function(e){var t=a(e);if(n(t,s))return t[s];var r=t.constructor;return i(r)&&t instanceof r?r.prototype:t instanceof c?f:null}},4124:(e,t,r)=>{\"use strict\";var n=r(9039),i=r(34),a=r(4576),o=r(5652),u=Object.isExtensible,s=n((function(){u(1)}));e.exports=s||o?function(e){return!!i(e)&&(!o||\"ArrayBuffer\"!==a(e))&&(!u||u(e))}:u},1625:(e,t,r)=>{\"use strict\";var n=r(9504);e.exports=n({}.isPrototypeOf)},1828:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(9297),a=r(5397),o=r(9617).indexOf,u=r(421),s=n([].push);e.exports=function(e,t){var r,n=a(e),c=0,f=[];for(r in n)!i(u,r)&&i(n,r)&&s(f,r);for(;t.length>c;)i(n,r=t[c++])&&(~o(f,r)||s(f,r));return f}},1072:(e,t,r)=>{\"use strict\";var n=r(1828),i=r(8727);e.exports=Object.keys||function(e){return n(e,i)}},8773:(e,t)=>{\"use strict\";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);t.f=i?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},2967:(e,t,r)=>{\"use strict\";var n=r(6706),i=r(34),a=r(7750),o=r(3506);e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,r={};try{(e=n(Object.prototype,\"__proto__\",\"set\"))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),o(n),i(r)?(t?e(r,n):r.__proto__=n,r):r}}():void 0)},2357:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(9039),a=r(9504),o=r(2787),u=r(1072),s=r(5397),c=a(r(8773).f),f=a([].push),l=n&&i((function(){var e=Object.create(null);return e[2]=2,!c(e,2)})),p=function(e){return function(t){for(var r,i=s(t),a=u(i),p=l&&null===o(i),m=a.length,h=0,d=[];m>h;)r=a[h++],n&&!(p?r in i:c(i,r))||f(d,e?[r,i[r]]:i[r]);return d}};e.exports={entries:p(!0),values:p(!1)}},3179:(e,t,r)=>{\"use strict\";var n=r(2140),i=r(6955);e.exports=n?{}.toString:function(){return\"[object \"+i(this)+\"]\"}},4270:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(4901),a=r(34),o=TypeError;e.exports=function(e,t){var r,u;if(\"string\"===t&&i(r=e.toString)&&!a(u=n(r,e)))return u;if(i(r=e.valueOf)&&!a(u=n(r,e)))return u;if(\"string\"!==t&&i(r=e.toString)&&!a(u=n(r,e)))return u;throw new o(\"Can't convert object to primitive value\")}},5031:(e,t,r)=>{\"use strict\";var n=r(7751),i=r(9504),a=r(8480),o=r(3717),u=r(8551),s=i([].concat);e.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=a.f(u(e)),r=o.f;return r?s(t,r(e)):t}},9167:(e,t,r)=>{\"use strict\";var n=r(4475);e.exports=n},1103:e=>{\"use strict\";e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},916:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(550),a=r(4901),o=r(2796),u=r(3706),s=r(8227),c=r(7290),f=r(516),l=r(6395),p=r(7388),m=i&&i.prototype,h=s(\"species\"),d=!1,v=a(n.PromiseRejectionEvent),y=o(\"Promise\",(function(){var e=u(i),t=e!==String(i);if(!t&&66===p)return!0;if(l&&(!m.catch||!m.finally))return!0;if(!p||p<51||!/native code/.test(e)){var r=new i((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};if((r.constructor={})[h]=n,!(d=r.then((function(){}))instanceof n))return!0}return!t&&(c||f)&&!v}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:v,SUBCLASSING:d}},550:(e,t,r)=>{\"use strict\";var n=r(4475);e.exports=n.Promise},3438:(e,t,r)=>{\"use strict\";var n=r(8551),i=r(34),a=r(6043);e.exports=function(e,t){if(n(e),i(t)&&t.constructor===e)return t;var r=a.f(e);return(0,r.resolve)(t),r.promise}},537:(e,t,r)=>{\"use strict\";var n=r(550),i=r(4428),a=r(916).CONSTRUCTOR;e.exports=a||!i((function(e){n.all(e).then(void 0,(function(){}))}))},1056:(e,t,r)=>{\"use strict\";var n=r(4913).f;e.exports=function(e,t,r){r in e||n(e,r,{configurable:!0,get:function(){return t[r]},set:function(e){t[r]=e}})}},8265:e=>{\"use strict\";var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},r=this.tail;r?r.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},6682:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(8551),a=r(4901),o=r(4576),u=r(7323),s=TypeError;e.exports=function(e,t){var r=e.exec;if(a(r)){var c=n(r,e,t);return null!==c&&i(c),c}if(\"RegExp\"===o(e))return n(u,e,t);throw new s(\"RegExp#exec called on incompatible receiver\")}},7323:(e,t,r)=>{\"use strict\";var n,i,a=r(9565),o=r(9504),u=r(655),s=r(7979),c=r(8429),f=r(5745),l=r(2360),p=r(1181).get,m=r(3635),h=r(8814),d=f(\"native-string-replace\",String.prototype.replace),v=RegExp.prototype.exec,y=v,g=o(\"\".charAt),x=o(\"\".indexOf),b=o(\"\".replace),w=o(\"\".slice),D=(i=/b*/g,a(v,n=/a/,\"a\"),a(v,i,\"a\"),0!==n.lastIndex||0!==i.lastIndex),N=c.BROKEN_CARET,E=void 0!==/()??/.exec(\"\")[1];(D||E||N||m||h)&&(y=function(e){var t,r,n,i,o,c,f,m=this,h=p(m),A=u(e),S=h.raw;if(S)return S.lastIndex=m.lastIndex,t=a(y,S,A),m.lastIndex=S.lastIndex,t;var C=h.groups,M=N&&m.sticky,F=a(s,m),O=m.source,T=0,_=A;if(M&&(F=b(F,\"y\",\"\"),-1===x(F,\"g\")&&(F+=\"g\"),_=w(A,m.lastIndex),m.lastIndex>0&&(!m.multiline||m.multiline&&\"\\n\"!==g(A,m.lastIndex-1))&&(O=\"(?: \"+O+\")\",_=\" \"+_,T++),r=new RegExp(\"^(?:\"+O+\")\",F)),E&&(r=new RegExp(\"^\"+O+\"$(?!\\\\s)\",F)),D&&(n=m.lastIndex),i=a(v,M?r:m,_),M?i?(i.input=w(i.input,T),i[0]=w(i[0],T),i.index=m.lastIndex,m.lastIndex+=i[0].length):m.lastIndex=0:D&&i&&(m.lastIndex=m.global?i.index+i[0].length:n),E&&i&&i.length>1&&a(d,i[0],r,(function(){for(o=1;o{\"use strict\";var n=r(8551);e.exports=function(){var e=n(this),t=\"\";return e.hasIndices&&(t+=\"d\"),e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),e.dotAll&&(t+=\"s\"),e.unicode&&(t+=\"u\"),e.unicodeSets&&(t+=\"v\"),e.sticky&&(t+=\"y\"),t}},1034:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(9297),a=r(1625),o=r(7979),u=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||\"flags\"in u||i(e,\"flags\")||!a(u,e)?t:n(o,e)}},8429:(e,t,r)=>{\"use strict\";var n=r(9039),i=r(4475).RegExp,a=n((function(){var e=i(\"a\",\"y\");return e.lastIndex=2,null!==e.exec(\"abcd\")})),o=a||n((function(){return!i(\"a\",\"y\").sticky})),u=a||n((function(){var e=i(\"^r\",\"gy\");return e.lastIndex=2,null!==e.exec(\"str\")}));e.exports={BROKEN_CARET:u,MISSED_STICKY:o,UNSUPPORTED_Y:a}},3635:(e,t,r)=>{\"use strict\";var n=r(9039),i=r(4475).RegExp;e.exports=n((function(){var e=i(\".\",\"s\");return!(e.dotAll&&e.test(\"\\n\")&&\"s\"===e.flags)}))},8814:(e,t,r)=>{\"use strict\";var n=r(9039),i=r(4475).RegExp;e.exports=n((function(){var e=i(\"(?
    b)\",\"g\");return\"b\"!==e.exec(\"b\").groups.a||\"bc\"!==\"b\".replace(e,\"$c\")}))},7750:(e,t,r)=>{\"use strict\";var n=r(4117),i=TypeError;e.exports=function(e){if(n(e))throw new i(\"Can't call method on \"+e);return e}},3389:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(3724),a=Object.getOwnPropertyDescriptor;e.exports=function(e){if(!i)return n[e];var t=a(n,e);return t&&t.value}},7633:(e,t,r)=>{\"use strict\";var n=r(7751),i=r(2106),a=r(8227),o=r(3724),u=a(\"species\");e.exports=function(e){var t=n(e);o&&t&&!t[u]&&i(t,u,{configurable:!0,get:function(){return this}})}},687:(e,t,r)=>{\"use strict\";var n=r(4913).f,i=r(9297),a=r(8227)(\"toStringTag\");e.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!i(e,a)&&n(e,a,{configurable:!0,value:t})}},6119:(e,t,r)=>{\"use strict\";var n=r(5745),i=r(3392),a=n(\"keys\");e.exports=function(e){return a[e]||(a[e]=i(e))}},7629:(e,t,r)=>{\"use strict\";var n=r(6395),i=r(4475),a=r(9433),o=\"__core-js_shared__\",u=e.exports=i[o]||a(o,{});(u.versions||(u.versions=[])).push({version:\"3.37.0\",mode:n?\"pure\":\"global\",copyright:\"© 2014-2024 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.37.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},5745:(e,t,r)=>{\"use strict\";var n=r(7629);e.exports=function(e,t){return n[e]||(n[e]=t||{})}},2293:(e,t,r)=>{\"use strict\";var n=r(8551),i=r(5548),a=r(4117),o=r(8227)(\"species\");e.exports=function(e,t){var r,u=n(e).constructor;return void 0===u||a(r=n(u)[o])?t:i(r)}},3061:(e,t,r)=>{\"use strict\";var n=r(9039);e.exports=function(e){return n((function(){var t=\"\"[e]('\"');return t!==t.toLowerCase()||t.split('\"').length>3}))}},8183:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(1291),a=r(655),o=r(7750),u=n(\"\".charAt),s=n(\"\".charCodeAt),c=n(\"\".slice),f=function(e){return function(t,r){var n,f,l=a(o(t)),p=i(r),m=l.length;return p<0||p>=m?e?\"\":void 0:(n=s(l,p))<55296||n>56319||p+1===m||(f=s(l,p+1))<56320||f>57343?e?u(l,p):n:e?c(l,p,p+2):f-56320+(n-55296<<10)+65536}};e.exports={codeAt:f(!1),charAt:f(!0)}},2333:(e,t,r)=>{\"use strict\";var n=r(1291),i=r(655),a=r(7750),o=RangeError;e.exports=function(e){var t=i(a(this)),r=\"\",u=n(e);if(u<0||u===1/0)throw new o(\"Wrong number of repetitions\");for(;u>0;(u>>>=1)&&(t+=t))1&u&&(r+=t);return r}},706:(e,t,r)=>{\"use strict\";var n=r(350).PROPER,i=r(9039),a=r(7452);e.exports=function(e){return i((function(){return!!a[e]()||\"​…᠎\"!==\"​…᠎\"[e]()||n&&a[e].name!==e}))}},3802:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(7750),a=r(655),o=r(7452),u=n(\"\".replace),s=RegExp(\"^[\"+o+\"]+\"),c=RegExp(\"(^|[^\"+o+\"])[\"+o+\"]+$\"),f=function(e){return function(t){var r=a(i(t));return 1&e&&(r=u(r,s,\"\")),2&e&&(r=u(r,c,\"$1\")),r}};e.exports={start:f(1),end:f(2),trim:f(3)}},4495:(e,t,r)=>{\"use strict\";var n=r(7388),i=r(9039),a=r(4475).String;e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol(\"symbol detection\");return!a(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},8242:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(7751),a=r(8227),o=r(6840);e.exports=function(){var e=i(\"Symbol\"),t=e&&e.prototype,r=t&&t.valueOf,u=a(\"toPrimitive\");t&&!t[u]&&o(t,u,(function(e){return n(r,this)}),{arity:1})}},1296:(e,t,r)=>{\"use strict\";var n=r(4495);e.exports=n&&!!Symbol.for&&!!Symbol.keyFor},9225:(e,t,r)=>{\"use strict\";var n,i,a,o,u=r(4475),s=r(8745),c=r(6080),f=r(4901),l=r(9297),p=r(9039),m=r(397),h=r(7680),d=r(4055),v=r(2812),y=r(8119),g=r(9088),x=u.setImmediate,b=u.clearImmediate,w=u.process,D=u.Dispatch,N=u.Function,E=u.MessageChannel,A=u.String,S=0,C={},M=\"onreadystatechange\";p((function(){n=u.location}));var F=function(e){if(l(C,e)){var t=C[e];delete C[e],t()}},O=function(e){return function(){F(e)}},T=function(e){F(e.data)},_=function(e){u.postMessage(A(e),n.protocol+\"//\"+n.host)};x&&b||(x=function(e){v(arguments.length,1);var t=f(e)?e:N(e),r=h(arguments,1);return C[++S]=function(){s(t,void 0,r)},i(S),S},b=function(e){delete C[e]},g?i=function(e){w.nextTick(O(e))}:D&&D.now?i=function(e){D.now(O(e))}:E&&!y?(o=(a=new E).port2,a.port1.onmessage=T,i=c(o.postMessage,o)):u.addEventListener&&f(u.postMessage)&&!u.importScripts&&n&&\"file:\"!==n.protocol&&!p(_)?(i=_,u.addEventListener(\"message\",T,!1)):i=M in d(\"script\")?function(e){m.appendChild(d(\"script\"))[M]=function(){m.removeChild(this),F(e)}}:function(e){setTimeout(O(e),0)}),e.exports={set:x,clear:b}},1240:(e,t,r)=>{\"use strict\";var n=r(9504);e.exports=n(1..valueOf)},5610:(e,t,r)=>{\"use strict\";var n=r(1291),i=Math.max,a=Math.min;e.exports=function(e,t){var r=n(e);return r<0?i(r+t,0):a(r,t)}},5397:(e,t,r)=>{\"use strict\";var n=r(7055),i=r(7750);e.exports=function(e){return n(i(e))}},1291:(e,t,r)=>{\"use strict\";var n=r(741);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},8014:(e,t,r)=>{\"use strict\";var n=r(1291),i=Math.min;e.exports=function(e){var t=n(e);return t>0?i(t,9007199254740991):0}},8981:(e,t,r)=>{\"use strict\";var n=r(7750),i=Object;e.exports=function(e){return i(n(e))}},2777:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(34),a=r(757),o=r(5966),u=r(4270),s=r(8227),c=TypeError,f=s(\"toPrimitive\");e.exports=function(e,t){if(!i(e)||a(e))return e;var r,s=o(e,f);if(s){if(void 0===t&&(t=\"default\"),r=n(s,e,t),!i(r)||a(r))return r;throw new c(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),u(e,t)}},6969:(e,t,r)=>{\"use strict\";var n=r(2777),i=r(757);e.exports=function(e){var t=n(e,\"string\");return i(t)?t:t+\"\"}},2140:(e,t,r)=>{\"use strict\";var n={};n[r(8227)(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(n)},655:(e,t,r)=>{\"use strict\";var n=r(6955),i=String;e.exports=function(e){if(\"Symbol\"===n(e))throw new TypeError(\"Cannot convert a Symbol value to a string\");return i(e)}},6823:e=>{\"use strict\";var t=String;e.exports=function(e){try{return t(e)}catch(e){return\"Object\"}}},3392:(e,t,r)=>{\"use strict\";var n=r(9504),i=0,a=Math.random(),o=n(1..toString);e.exports=function(e){return\"Symbol(\"+(void 0===e?\"\":e)+\")_\"+o(++i+a,36)}},7040:(e,t,r)=>{\"use strict\";var n=r(4495);e.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},8686:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(9039);e.exports=n&&i((function(){return 42!==Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},2812:e=>{\"use strict\";var t=TypeError;e.exports=function(e,r){if(e{\"use strict\";var n=r(4475),i=r(4901),a=n.WeakMap;e.exports=i(a)&&/native code/.test(String(a))},5749:(e,t,r)=>{\"use strict\";var n=r(9167),i=r(9297),a=r(1951),o=r(4913).f;e.exports=function(e){var t=n.Symbol||(n.Symbol={});i(t,e)||o(t,e,{value:a.f(e)})}},1951:(e,t,r)=>{\"use strict\";var n=r(8227);t.f=n},8227:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(5745),a=r(9297),o=r(3392),u=r(4495),s=r(7040),c=n.Symbol,f=i(\"wks\"),l=s?c.for||c:c&&c.withoutSetter||o;e.exports=function(e){return a(f,e)||(f[e]=u&&a(c,e)?c[e]:l(\"Symbol.\"+e)),f[e]}},7452:e=>{\"use strict\";e.exports=\"\\t\\n\\v\\f\\r                 \\u2028\\u2029\\ufeff\"},8706:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9039),a=r(4376),o=r(34),u=r(8981),s=r(6198),c=r(6837),f=r(4659),l=r(1469),p=r(597),m=r(8227),h=r(7388),d=m(\"isConcatSpreadable\"),v=h>=51||!i((function(){var e=[];return e[d]=!1,e.concat()[0]!==e})),y=function(e){if(!o(e))return!1;var t=e[d];return void 0!==t?!!t:a(e)};n({target:\"Array\",proto:!0,arity:1,forced:!v||!p(\"concat\")},{concat:function(e){var t,r,n,i,a,o=u(this),p=l(o,0),m=0;for(t=-1,n=arguments.length;t{\"use strict\";var n=r(6518),i=r(9213).every;n({target:\"Array\",proto:!0,forced:!r(4598)(\"every\")},{every:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},3771:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(4373),a=r(6469);n({target:\"Array\",proto:!0},{fill:i}),a(\"fill\")},2008:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9213).filter;n({target:\"Array\",proto:!0,forced:!r(597)(\"filter\")},{filter:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},113:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9213).find,a=r(6469),o=\"find\",u=!0;o in[]&&Array(1)[o]((function(){u=!1})),n({target:\"Array\",proto:!0,forced:u},{find:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),a(o)},1629:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(235);n({target:\"Array\",proto:!0,forced:[].forEach!==i},{forEach:i})},3418:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7916);n({target:\"Array\",stat:!0,forced:!r(4428)((function(e){Array.from(e)}))},{from:i})},4423:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9617).includes,a=r(9039),o=r(6469);n({target:\"Array\",proto:!0,forced:a((function(){return!Array(1).includes()}))},{includes:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),o(\"includes\")},5276:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7476),a=r(9617).indexOf,o=r(4598),u=i([].indexOf),s=!!u&&1/u([1],1,-0)<0;n({target:\"Array\",proto:!0,forced:s||!o(\"indexOf\")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return s?u(this,e,t)||0:a(this,e,t)}})},4346:(e,t,r)=>{\"use strict\";r(6518)({target:\"Array\",stat:!0},{isArray:r(4376)})},3792:(e,t,r)=>{\"use strict\";var n=r(5397),i=r(6469),a=r(6269),o=r(1181),u=r(4913).f,s=r(1088),c=r(2529),f=r(6395),l=r(3724),p=\"Array Iterator\",m=o.set,h=o.getterFor(p);e.exports=s(Array,\"Array\",(function(e,t){m(this,{type:p,target:n(e),index:0,kind:t})}),(function(){var e=h(this),t=e.target,r=e.index++;if(!t||r>=t.length)return e.target=void 0,c(void 0,!0);switch(e.kind){case\"keys\":return c(r,!1);case\"values\":return c(t[r],!1)}return c([r,t[r]],!1)}),\"values\");var d=a.Arguments=a.Array;if(i(\"keys\"),i(\"values\"),i(\"entries\"),!f&&l&&\"values\"!==d.name)try{u(d,\"name\",{value:\"values\"})}catch(e){}},8598:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(7055),o=r(5397),u=r(4598),s=i([].join);n({target:\"Array\",proto:!0,forced:a!==Object||!u(\"join\",\",\")},{join:function(e){return s(o(this),void 0===e?\",\":e)}})},2062:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9213).map;n({target:\"Array\",proto:!0,forced:!r(597)(\"map\")},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},2712:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(926).left,a=r(4598),o=r(7388);n({target:\"Array\",proto:!0,forced:!r(9088)&&o>79&&o<83||!a(\"reduce\")},{reduce:function(e){var t=arguments.length;return i(this,e,t,t>1?arguments[1]:void 0)}})},4490:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(4376),o=i([].reverse),u=[1,2];n({target:\"Array\",proto:!0,forced:String(u)===String(u.reverse())},{reverse:function(){return a(this)&&(this.length=this.length),o(this)}})},4782:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(4376),a=r(3517),o=r(34),u=r(5610),s=r(6198),c=r(5397),f=r(4659),l=r(8227),p=r(597),m=r(7680),h=p(\"slice\"),d=l(\"species\"),v=Array,y=Math.max;n({target:\"Array\",proto:!0,forced:!h},{slice:function(e,t){var r,n,l,p=c(this),h=s(p),g=u(e,h),x=u(void 0===t?h:t,h);if(i(p)&&(r=p.constructor,(a(r)&&(r===v||i(r.prototype))||o(r)&&null===(r=r[d]))&&(r=void 0),r===v||void 0===r))return m(p,g,x);for(n=new(void 0===r?v:r)(y(x-g,0)),l=0;g{\"use strict\";var n=r(6518),i=r(9213).some;n({target:\"Array\",proto:!0,forced:!r(4598)(\"some\")},{some:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},6910:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(9306),o=r(8981),u=r(6198),s=r(4606),c=r(655),f=r(9039),l=r(4488),p=r(4598),m=r(8834),h=r(3202),d=r(7388),v=r(9160),y=[],g=i(y.sort),x=i(y.push),b=f((function(){y.sort(void 0)})),w=f((function(){y.sort(null)})),D=p(\"sort\"),N=!f((function(){if(d)return d<70;if(!(m&&m>3)){if(h)return!0;if(v)return v<603;var e,t,r,n,i=\"\";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:r=3;break;case 68:case 71:r=4;break;default:r=2}for(n=0;n<47;n++)y.push({k:t+n,v:r})}for(y.sort((function(e,t){return t.v-e.v})),n=0;nc(r)?1:-1}}(e)),r=u(i),n=0;n{\"use strict\";var n=r(6518),i=r(8981),a=r(5610),o=r(1291),u=r(6198),s=r(4527),c=r(6837),f=r(1469),l=r(4659),p=r(4606),m=r(597)(\"splice\"),h=Math.max,d=Math.min;n({target:\"Array\",proto:!0,forced:!m},{splice:function(e,t){var r,n,m,v,y,g,x=i(this),b=u(x),w=a(e,b),D=arguments.length;for(0===D?r=n=0:1===D?(r=0,n=b-w):(r=D-2,n=d(h(o(t),0),b-w)),c(b+r-n),m=f(x,n),v=0;vb-n+r;v--)p(x,v-1)}else if(r>n)for(v=b-n;v>w;v--)g=v+r-1,(y=v+n-1)in x?x[g]=x[y]:p(x,g);for(v=0;v{\"use strict\";var n=r(6518),i=r(9504),a=Date,o=i(a.prototype.getTime);n({target:\"Date\",stat:!0},{now:function(){return o(new a)}})},739:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9039),a=r(8981),o=r(2777);n({target:\"Date\",proto:!0,arity:1,forced:i((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}))},{toJSON:function(e){var t=a(this),r=o(t,\"number\");return\"number\"!=typeof r||isFinite(r)?t.toISOString():null}})},3288:(e,t,r)=>{\"use strict\";var n=r(9504),i=r(6840),a=Date.prototype,o=\"Invalid Date\",u=\"toString\",s=n(a[u]),c=n(a.getTime);String(new Date(NaN))!==o&&i(a,u,(function(){var e=c(this);return e==e?s(this):o}))},4170:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(566);n({target:\"Function\",proto:!0,forced:Function.bind!==i},{bind:i})},2010:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(350).EXISTS,a=r(9504),o=r(2106),u=Function.prototype,s=a(u.toString),c=/function\\b(?:\\s|\\/\\*[\\S\\s]*?\\*\\/|\\/\\/[^\\n\\r]*[\\n\\r]+)*([^\\s(/]*)/,f=a(c.exec);n&&!i&&o(u,\"name\",{configurable:!0,get:function(){try{return f(c,s(this))[1]}catch(e){return\"\"}}})},3110:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7751),a=r(8745),o=r(9565),u=r(9504),s=r(9039),c=r(4901),f=r(757),l=r(7680),p=r(6933),m=r(4495),h=String,d=i(\"JSON\",\"stringify\"),v=u(/./.exec),y=u(\"\".charAt),g=u(\"\".charCodeAt),x=u(\"\".replace),b=u(1..toString),w=/[\\uD800-\\uDFFF]/g,D=/^[\\uD800-\\uDBFF]$/,N=/^[\\uDC00-\\uDFFF]$/,E=!m||s((function(){var e=i(\"Symbol\")(\"stringify detection\");return\"[null]\"!==d([e])||\"{}\"!==d({a:e})||\"{}\"!==d(Object(e))})),A=s((function(){return'\"\\\\udf06\\\\ud834\"'!==d(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==d(\"\\udead\")})),S=function(e,t){var r=l(arguments),n=p(t);if(c(n)||void 0!==e&&!f(e))return r[1]=function(e,t){if(c(n)&&(t=o(n,this,h(e),t)),!f(t))return t},a(d,null,r)},C=function(e,t,r){var n=y(r,t-1),i=y(r,t+1);return v(D,e)&&!v(N,i)||v(N,e)&&!v(D,n)?\"\\\\u\"+b(g(e,0),16):e};d&&n({target:\"JSON\",stat:!0,arity:3,forced:E||A},{stringify:function(e,t,r){var n=l(arguments),i=a(E?S:d,null,n);return A&&\"string\"==typeof i?x(i,w,C):i}})},8523:(e,t,r)=>{\"use strict\";r(6468)(\"Map\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(6938))},6033:(e,t,r)=>{\"use strict\";r(8523)},3153:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(5359),a=Math.acosh,o=Math.log,u=Math.sqrt,s=Math.LN2;n({target:\"Math\",stat:!0,forced:!a||710!==Math.floor(a(Number.MAX_VALUE))||a(1/0)!==1/0},{acosh:function(e){var t=+e;return t<1?NaN:t>94906265.62425156?o(t)+s:i(t-1+u(t-1)*u(t+1))}})},2326:(e,t,r)=>{\"use strict\";var n=r(6518),i=Math.asinh,a=Math.log,o=Math.sqrt;n({target:\"Math\",stat:!0,forced:!(i&&1/i(0)>0)},{asinh:function e(t){var r=+t;return isFinite(r)&&0!==r?r<0?-e(-r):a(r+o(r*r+1)):r}})},6389:(e,t,r)=>{\"use strict\";var n=r(6518),i=Math.atanh,a=Math.log;n({target:\"Math\",stat:!0,forced:!(i&&1/i(-0)<0)},{atanh:function(e){var t=+e;return 0===t?t:a((1+t)/(1-t))/2}})},4444:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7782),a=Math.abs,o=Math.pow;n({target:\"Math\",stat:!0},{cbrt:function(e){var t=+e;return i(t)*o(a(t),1/3)}})},7762:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3250),a=Math.cosh,o=Math.abs,u=Math.E;n({target:\"Math\",stat:!0,forced:!a||a(710)===1/0},{cosh:function(e){var t=i(o(e)-1)+1;return(t+1/(t*u*u))*(u/2)}})},5070:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3250);n({target:\"Math\",stat:!0,forced:i!==Math.expm1},{expm1:i})},5376:(e,t,r)=>{\"use strict\";r(6518)({target:\"Math\",stat:!0},{log10:r(9340)})},6624:(e,t,r)=>{\"use strict\";r(6518)({target:\"Math\",stat:!0},{log1p:r(5359)})},1367:(e,t,r)=>{\"use strict\";var n=r(6518),i=Math.log,a=Math.LN2;n({target:\"Math\",stat:!0},{log2:function(e){return i(e)/a}})},5914:(e,t,r)=>{\"use strict\";r(6518)({target:\"Math\",stat:!0},{sign:r(7782)})},8553:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9039),a=r(3250),o=Math.abs,u=Math.exp,s=Math.E;n({target:\"Math\",stat:!0,forced:i((function(){return-2e-17!==Math.sinh(-2e-17)}))},{sinh:function(e){var t=+e;return o(t)<1?(a(t)-a(-t))/2:(u(t-1)-u(-t-1))*(s/2)}})},8690:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3250),a=Math.exp;n({target:\"Math\",stat:!0},{tanh:function(e){var t=+e,r=i(t),n=i(-t);return r===1/0?1:n===1/0?-1:(r-n)/(a(t)+a(-t))}})},2892:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(6395),a=r(3724),o=r(4475),u=r(9167),s=r(9504),c=r(2796),f=r(9297),l=r(3167),p=r(1625),m=r(757),h=r(2777),d=r(9039),v=r(8480).f,y=r(7347).f,g=r(4913).f,x=r(1240),b=r(3802).trim,w=\"Number\",D=o[w],N=u[w],E=D.prototype,A=o.TypeError,S=s(\"\".slice),C=s(\"\".charCodeAt),M=c(w,!D(\" 0o1\")||!D(\"0b1\")||D(\"+0x1\")),F=function(e){var t,r=arguments.length<1?0:D(function(e){var t=h(e,\"number\");return\"bigint\"==typeof t?t:function(e){var t,r,n,i,a,o,u,s,c=h(e,\"number\");if(m(c))throw new A(\"Cannot convert a Symbol value to a number\");if(\"string\"==typeof c&&c.length>2)if(c=b(c),43===(t=C(c,0))||45===t){if(88===(r=C(c,2))||120===r)return NaN}else if(48===t){switch(C(c,1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+c}for(o=(a=S(c,2)).length,u=0;ui)return NaN;return parseInt(a,n)}return+c}(t)}(e));return p(E,t=this)&&d((function(){x(t)}))?l(Object(r),this,F):r};F.prototype=E,M&&!i&&(E.constructor=F),n({global:!0,constructor:!0,wrap:!0,forced:M},{Number:F});var O=function(e,t){for(var r,n=a?v(t):\"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range\".split(\",\"),i=0;n.length>i;i++)f(t,r=n[i])&&!f(e,r)&&g(e,r,y(t,r))};i&&N&&O(u[w],N),(M||i)&&O(u[w],D)},5374:(e,t,r)=>{\"use strict\";r(6518)({target:\"Number\",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},150:(e,t,r)=>{\"use strict\";r(6518)({target:\"Number\",stat:!0},{isNaN:function(e){return e!=e}})},9868:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(1291),o=r(1240),u=r(2333),s=r(9039),c=RangeError,f=String,l=Math.floor,p=i(u),m=i(\"\".slice),h=i(1..toFixed),d=function(e,t,r){return 0===t?r:t%2==1?d(e,t-1,r*e):d(e*e,t/2,r)},v=function(e,t,r){for(var n=-1,i=r;++n<6;)i+=t*e[n],e[n]=i%1e7,i=l(i/1e7)},y=function(e,t){for(var r=6,n=0;--r>=0;)n+=e[r],e[r]=l(n/t),n=n%t*1e7},g=function(e){for(var t=6,r=\"\";--t>=0;)if(\"\"!==r||0===t||0!==e[t]){var n=f(e[t]);r=\"\"===r?n:r+p(\"0\",7-n.length)+n}return r};n({target:\"Number\",proto:!0,forced:s((function(){return\"0.000\"!==h(8e-5,3)||\"1\"!==h(.9,0)||\"1.25\"!==h(1.255,2)||\"1000000000000000128\"!==h(0xde0b6b3a7640080,0)}))||!s((function(){h({})}))},{toFixed:function(e){var t,r,n,i,u=o(this),s=a(e),l=[0,0,0,0,0,0],h=\"\",x=\"0\";if(s<0||s>20)throw new c(\"Incorrect fraction digits\");if(u!=u)return\"NaN\";if(u<=-1e21||u>=1e21)return f(u);if(u<0&&(h=\"-\",u=-u),u>1e-21)if(r=(t=function(e){for(var t=0,r=e;r>=4096;)t+=12,r/=4096;for(;r>=2;)t+=1,r/=2;return t}(u*d(2,69,1))-69)<0?u*d(2,-t,1):u/d(2,t,1),r*=4503599627370496,(t=52-t)>0){for(v(l,0,r),n=s;n>=7;)v(l,1e7,0),n-=7;for(v(l,d(10,n,1),0),n=t-1;n>=23;)y(l,1<<23),n-=23;y(l,1<0?h+((i=x.length)<=s?\"0.\"+p(\"0\",s-i)+x:m(x,0,i-s)+\".\"+m(x,i-s)):h+x}})},630:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(9039),o=r(1240),u=i(1..toPrecision);n({target:\"Number\",proto:!0,forced:a((function(){return\"1\"!==u(1,void 0)}))||!a((function(){u({})}))},{toPrecision:function(e){return void 0===e?u(o(this)):u(o(this),e)}})},9904:(e,t,r)=>{\"use strict\";r(6518)({target:\"Object\",stat:!0,sham:!r(3724)},{create:r(2360)})},7945:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3724),a=r(6801).f;n({target:\"Object\",stat:!0,forced:Object.defineProperties!==a,sham:!i},{defineProperties:a})},4185:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3724),a=r(4913).f;n({target:\"Object\",stat:!0,forced:Object.defineProperty!==a,sham:!i},{defineProperty:a})},3851:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9039),a=r(5397),o=r(7347).f,u=r(3724);n({target:\"Object\",stat:!0,forced:!u||i((function(){o(1)})),sham:!u},{getOwnPropertyDescriptor:function(e,t){return o(a(e),t)}})},1278:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3724),a=r(5031),o=r(5397),u=r(7347),s=r(4659);n({target:\"Object\",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(e){for(var t,r,n=o(e),i=u.f,c=a(n),f={},l=0;c.length>l;)void 0!==(r=i(n,t=c[l++]))&&s(f,t,r);return f}})},9773:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(4495),a=r(9039),o=r(3717),u=r(8981);n({target:\"Object\",stat:!0,forced:!i||a((function(){o.f(1)}))},{getOwnPropertySymbols:function(e){var t=o.f;return t?t(u(e)):[]}})},875:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9039),a=r(8981),o=r(2787),u=r(2211);n({target:\"Object\",stat:!0,forced:i((function(){o(1)})),sham:!u},{getPrototypeOf:function(e){return o(a(e))}})},9432:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(8981),a=r(1072);n({target:\"Object\",stat:!0,forced:r(9039)((function(){a(1)}))},{keys:function(e){return a(i(e))}})},6099:(e,t,r)=>{\"use strict\";var n=r(2140),i=r(6840),a=r(3179);n||i(Object.prototype,\"toString\",a,{unsafe:!0})},6034:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(2357).values;n({target:\"Object\",stat:!0},{values:function(e){return i(e)}})},8459:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3904);n({global:!0,forced:parseFloat!==i},{parseFloat:i})},8940:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(2703);n({global:!0,forced:parseInt!==i},{parseInt:i})},6499:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9565),a=r(9306),o=r(6043),u=r(1103),s=r(2652);n({target:\"Promise\",stat:!0,forced:r(537)},{all:function(e){var t=this,r=o.f(t),n=r.resolve,c=r.reject,f=u((function(){var r=a(t.resolve),o=[],u=0,f=1;s(e,(function(e){var a=u++,s=!1;f++,i(r,t,e).then((function(e){s||(s=!0,o[a]=e,--f||n(o))}),c)})),--f||n(o)}));return f.error&&c(f.value),r.promise}})},2003:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(6395),a=r(916).CONSTRUCTOR,o=r(550),u=r(7751),s=r(4901),c=r(6840),f=o&&o.prototype;if(n({target:\"Promise\",proto:!0,forced:a,real:!0},{catch:function(e){return this.then(void 0,e)}}),!i&&s(o)){var l=u(\"Promise\").prototype.catch;f.catch!==l&&c(f,\"catch\",l,{unsafe:!0})}},436:(e,t,r)=>{\"use strict\";var n,i,a,o=r(6518),u=r(6395),s=r(9088),c=r(4475),f=r(9565),l=r(6840),p=r(2967),m=r(687),h=r(7633),d=r(9306),v=r(4901),y=r(34),g=r(679),x=r(2293),b=r(9225).set,w=r(1955),D=r(3138),N=r(1103),E=r(8265),A=r(1181),S=r(550),C=r(916),M=r(6043),F=\"Promise\",O=C.CONSTRUCTOR,T=C.REJECTION_EVENT,_=C.SUBCLASSING,B=A.getterFor(F),k=A.set,I=S&&S.prototype,z=S,R=I,q=c.TypeError,j=c.document,P=c.process,L=M.f,U=L,$=!!(j&&j.createEvent&&c.dispatchEvent),H=\"unhandledrejection\",G=function(e){var t;return!(!y(e)||!v(t=e.then))&&t},V=function(e,t){var r,n,i,a=t.value,o=1===t.state,u=o?e.ok:e.fail,s=e.resolve,c=e.reject,l=e.domain;try{u?(o||(2===t.rejection&&X(t),t.rejection=1),!0===u?r=a:(l&&l.enter(),r=u(a),l&&(l.exit(),i=!0)),r===e.promise?c(new q(\"Promise-chain cycle\")):(n=G(r))?f(n,r,s,c):s(r)):c(a)}catch(e){l&&!i&&l.exit(),c(e)}},Z=function(e,t){e.notified||(e.notified=!0,w((function(){for(var r,n=e.reactions;r=n.get();)V(r,e);e.notified=!1,t&&!e.rejection&&Y(e)})))},W=function(e,t,r){var n,i;$?((n=j.createEvent(\"Event\")).promise=t,n.reason=r,n.initEvent(e,!1,!0),c.dispatchEvent(n)):n={promise:t,reason:r},!T&&(i=c[\"on\"+e])?i(n):e===H&&D(\"Unhandled promise rejection\",r)},Y=function(e){f(b,c,(function(){var t,r=e.facade,n=e.value;if(J(e)&&(t=N((function(){s?P.emit(\"unhandledRejection\",n,r):W(H,r,n)})),e.rejection=s||J(e)?2:1,t.error))throw t.value}))},J=function(e){return 1!==e.rejection&&!e.parent},X=function(e){f(b,c,(function(){var t=e.facade;s?P.emit(\"rejectionHandled\",t):W(\"rejectionhandled\",t,e.value)}))},Q=function(e,t,r){return function(n){e(t,n,r)}},K=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,Z(e,!0))},ee=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw new q(\"Promise can't be resolved itself\");var n=G(t);n?w((function(){var r={done:!1};try{f(n,t,Q(ee,r,e),Q(K,r,e))}catch(t){K(r,t,e)}})):(e.value=t,e.state=1,Z(e,!1))}catch(t){K({done:!1},t,e)}}};if(O&&(R=(z=function(e){g(this,R),d(e),f(n,this);var t=B(this);try{e(Q(ee,t),Q(K,t))}catch(e){K(t,e)}}).prototype,(n=function(e){k(this,{type:F,done:!1,notified:!1,parent:!1,reactions:new E,rejection:!1,state:0,value:void 0})}).prototype=l(R,\"then\",(function(e,t){var r=B(this),n=L(x(this,z));return r.parent=!0,n.ok=!v(e)||e,n.fail=v(t)&&t,n.domain=s?P.domain:void 0,0===r.state?r.reactions.add(n):w((function(){V(n,r)})),n.promise})),i=function(){var e=new n,t=B(e);this.promise=e,this.resolve=Q(ee,t),this.reject=Q(K,t)},M.f=L=function(e){return e===z||void 0===e?new i(e):U(e)},!u&&v(S)&&I!==Object.prototype)){a=I.then,_||l(I,\"then\",(function(e,t){var r=this;return new z((function(e,t){f(a,r,e,t)})).then(e,t)}),{unsafe:!0});try{delete I.constructor}catch(e){}p&&p(I,R)}o({global:!0,constructor:!0,wrap:!0,forced:O},{Promise:z}),m(z,F,!1,!0),h(F)},3362:(e,t,r)=>{\"use strict\";r(436),r(6499),r(2003),r(7743),r(1481),r(280)},7743:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9565),a=r(9306),o=r(6043),u=r(1103),s=r(2652);n({target:\"Promise\",stat:!0,forced:r(537)},{race:function(e){var t=this,r=o.f(t),n=r.reject,c=u((function(){var o=a(t.resolve);s(e,(function(e){i(o,t,e).then(r.resolve,n)}))}));return c.error&&n(c.value),r.promise}})},1481:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(6043);n({target:\"Promise\",stat:!0,forced:r(916).CONSTRUCTOR},{reject:function(e){var t=i.f(this);return(0,t.reject)(e),t.promise}})},280:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7751),a=r(6395),o=r(550),u=r(916).CONSTRUCTOR,s=r(3438),c=i(\"Promise\"),f=a&&!u;n({target:\"Promise\",stat:!0,forced:a||u},{resolve:function(e){return s(f&&this===c?o:this,e)}})},825:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7751),a=r(8745),o=r(566),u=r(5548),s=r(8551),c=r(34),f=r(2360),l=r(9039),p=i(\"Reflect\",\"construct\"),m=Object.prototype,h=[].push,d=l((function(){function e(){}return!(p((function(){}),[],e)instanceof e)})),v=!l((function(){p((function(){}))})),y=d||v;n({target:\"Reflect\",stat:!0,forced:y,sham:y},{construct:function(e,t){u(e),s(t);var r=arguments.length<3?e:u(arguments[2]);if(v&&!d)return p(e,t,r);if(e===r){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var n=[null];return a(h,n,t),new(a(o,e,n))}var i=r.prototype,l=f(c(i)?i:m),y=a(e,l,t);return c(y)?y:l}})},4864:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(4475),a=r(9504),o=r(2796),u=r(3167),s=r(6699),c=r(2360),f=r(8480).f,l=r(1625),p=r(788),m=r(655),h=r(1034),d=r(8429),v=r(1056),y=r(6840),g=r(9039),x=r(9297),b=r(1181).enforce,w=r(7633),D=r(8227),N=r(3635),E=r(8814),A=D(\"match\"),S=i.RegExp,C=S.prototype,M=i.SyntaxError,F=a(C.exec),O=a(\"\".charAt),T=a(\"\".replace),_=a(\"\".indexOf),B=a(\"\".slice),k=/^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/,I=/a/g,z=/a/g,R=new S(I)!==I,q=d.MISSED_STICKY,j=d.UNSUPPORTED_Y;if(o(\"RegExp\",n&&(!R||q||N||E||g((function(){return z[A]=!1,S(I)!==I||S(z)===z||\"/a/i\"!==String(S(I,\"i\"))}))))){for(var P=function(e,t){var r,n,i,a,o,f,d=l(C,this),v=p(e),y=void 0===t,g=[],w=e;if(!d&&v&&y&&e.constructor===P)return e;if((v||l(C,e))&&(e=e.source,y&&(t=h(w))),e=void 0===e?\"\":m(e),t=void 0===t?\"\":m(t),w=e,N&&\"dotAll\"in I&&(n=!!t&&_(t,\"s\")>-1)&&(t=T(t,/s/g,\"\")),r=t,q&&\"sticky\"in I&&(i=!!t&&_(t,\"y\")>-1)&&j&&(t=T(t,/y/g,\"\")),E&&(a=function(e){for(var t,r=e.length,n=0,i=\"\",a=[],o=c(null),u=!1,s=!1,f=0,l=\"\";n<=r;n++){if(\"\\\\\"===(t=O(e,n)))t+=O(e,++n);else if(\"]\"===t)u=!1;else if(!u)switch(!0){case\"[\"===t:u=!0;break;case\"(\"===t:F(k,B(e,n+1))&&(n+=2,s=!0),i+=t,f++;continue;case\">\"===t&&s:if(\"\"===l||x(o,l))throw new M(\"Invalid capture group name\");o[l]=!0,a[a.length]=[l,f],s=!1,l=\"\";continue}s?l+=t:i+=t}return[i,a]}(e),e=a[0],g=a[1]),o=u(S(e,t),d?this:C,P),(n||i||g.length)&&(f=b(o),n&&(f.dotAll=!0,f.raw=P(function(e){for(var t,r=e.length,n=0,i=\"\",a=!1;n<=r;n++)\"\\\\\"!==(t=O(e,n))?a||\".\"!==t?(\"[\"===t?a=!0:\"]\"===t&&(a=!1),i+=t):i+=\"[\\\\s\\\\S]\":i+=t+O(e,++n);return i}(e),r)),i&&(f.sticky=!0),g.length&&(f.groups=g)),e!==w)try{s(o,\"source\",\"\"===w?\"(?:)\":w)}catch(e){}return o},L=f(S),U=0;L.length>U;)v(P,S,L[U++]);C.constructor=P,P.prototype=C,y(i,\"RegExp\",P,{constructor:!0})}w(\"RegExp\")},7465:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(3635),a=r(4576),o=r(2106),u=r(1181).get,s=RegExp.prototype,c=TypeError;n&&i&&o(s,\"dotAll\",{configurable:!0,get:function(){if(this!==s){if(\"RegExp\"===a(this))return!!u(this).dotAll;throw new c(\"Incompatible receiver, RegExp required\")}}})},7495:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7323);n({target:\"RegExp\",proto:!0,forced:/./.exec!==i},{exec:i})},7745:(e,t,r)=>{\"use strict\";var n=r(3724),i=r(8429).MISSED_STICKY,a=r(4576),o=r(2106),u=r(1181).get,s=RegExp.prototype,c=TypeError;n&&i&&o(s,\"sticky\",{configurable:!0,get:function(){if(this!==s){if(\"RegExp\"===a(this))return!!u(this).sticky;throw new c(\"Incompatible receiver, RegExp required\")}}})},906:(e,t,r)=>{\"use strict\";r(7495);var n,i,a=r(6518),o=r(9565),u=r(4901),s=r(8551),c=r(655),f=(n=!1,(i=/[ac]/).exec=function(){return n=!0,/./.exec.apply(this,arguments)},!0===i.test(\"abc\")&&n),l=/./.test;a({target:\"RegExp\",proto:!0,forced:!f},{test:function(e){var t=s(this),r=c(e),n=t.exec;if(!u(n))return o(l,t,r);var i=o(n,t,r);return null!==i&&(s(i),!0)}})},8781:(e,t,r)=>{\"use strict\";var n=r(350).PROPER,i=r(6840),a=r(8551),o=r(655),u=r(9039),s=r(1034),c=\"toString\",f=RegExp.prototype,l=f[c],p=u((function(){return\"/a/b\"!==l.call({source:\"a\",flags:\"b\"})})),m=n&&l.name!==c;(p||m)&&i(f,c,(function(){var e=a(this);return\"/\"+o(e.source)+\"/\"+o(s(e))}),{unsafe:!0})},2405:(e,t,r)=>{\"use strict\";r(6468)(\"Set\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),r(6938))},1415:(e,t,r)=>{\"use strict\";r(2405)},1699:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(511),o=r(7750),u=r(655),s=r(1436),c=i(\"\".indexOf);n({target:\"String\",proto:!0,forced:!s(\"includes\")},{includes:function(e){return!!~c(u(o(this)),u(a(e)),arguments.length>1?arguments[1]:void 0)}})},7764:(e,t,r)=>{\"use strict\";var n=r(8183).charAt,i=r(655),a=r(1181),o=r(1088),u=r(2529),s=\"String Iterator\",c=a.set,f=a.getterFor(s);o(String,\"String\",(function(e){c(this,{type:s,string:i(e),index:0})}),(function(){var e,t=f(this),r=t.string,i=t.index;return i>=r.length?u(void 0,!0):(e=n(r,i),t.index+=e.length,u(e,!1))}))},1761:(e,t,r)=>{\"use strict\";var n=r(9565),i=r(9228),a=r(8551),o=r(4117),u=r(8014),s=r(655),c=r(7750),f=r(5966),l=r(7829),p=r(6682);i(\"match\",(function(e,t,r){return[function(t){var r=c(this),i=o(t)?void 0:f(t,e);return i?n(i,t,r):new RegExp(t)[e](s(r))},function(e){var n=a(this),i=s(e),o=r(t,n,i);if(o.done)return o.value;if(!n.global)return p(n,i);var c=n.unicode;n.lastIndex=0;for(var f,m=[],h=0;null!==(f=p(n,i));){var d=s(f[0]);m[h]=d,\"\"===d&&(n.lastIndex=l(i,u(n.lastIndex),c)),h++}return 0===h?null:m}]}))},2781:(e,t,r)=>{\"use strict\";r(6518)({target:\"String\",proto:!0},{repeat:r(2333)})},5440:(e,t,r)=>{\"use strict\";var n=r(8745),i=r(9565),a=r(9504),o=r(9228),u=r(9039),s=r(8551),c=r(4901),f=r(4117),l=r(1291),p=r(8014),m=r(655),h=r(7750),d=r(7829),v=r(5966),y=r(2478),g=r(6682),x=r(8227)(\"replace\"),b=Math.max,w=Math.min,D=a([].concat),N=a([].push),E=a(\"\".indexOf),A=a(\"\".slice),S=\"$0\"===\"a\".replace(/./,\"$0\"),C=!!/./[x]&&\"\"===/./[x](\"a\",\"$0\");o(\"replace\",(function(e,t,r){var a=C?\"$\":\"$0\";return[function(e,r){var n=h(this),a=f(e)?void 0:v(e,x);return a?i(a,e,n,r):i(t,m(n),e,r)},function(e,i){var o=s(this),u=m(e);if(\"string\"==typeof i&&-1===E(i,a)&&-1===E(i,\"$<\")){var f=r(t,o,u,i);if(f.done)return f.value}var h=c(i);h||(i=m(i));var v,x=o.global;x&&(v=o.unicode,o.lastIndex=0);for(var S,C=[];null!==(S=g(o,u))&&(N(C,S),x);)\"\"===m(S[0])&&(o.lastIndex=d(u,p(o.lastIndex),v));for(var M,F=\"\",O=0,T=0;T=O&&(F+=A(u,O,k)+_,O=k+B.length)}return F+A(u,O)}]}),!!u((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:\"7\"},e},\"7\"!==\"\".replace(e,\"$\")}))||!S||C)},8718:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7240);n({target:\"String\",proto:!0,forced:r(3061)(\"sub\")},{sub:function(){return i(this,\"sub\",\"\",\"\")}})},375:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9504),a=r(7750),o=r(1291),u=r(655),s=i(\"\".slice),c=Math.max,f=Math.min;n({target:\"String\",proto:!0,forced:!\"\".substr||\"b\"!==\"ab\".substr(-1)},{substr:function(e,t){var r,n,i=u(a(this)),l=i.length,p=o(e);return p===1/0&&(p=0),p<0&&(p=c(l+p,0)),(r=void 0===t?l:o(t))<=0||r===1/0||p>=(n=f(p+r,l))?\"\":s(i,p,n)}})},2762:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3802).trim;n({target:\"String\",proto:!0,forced:r(706)(\"trim\")},{trim:function(){return i(this)}})},6761:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(4475),a=r(9565),o=r(9504),u=r(6395),s=r(3724),c=r(4495),f=r(9039),l=r(9297),p=r(1625),m=r(8551),h=r(5397),d=r(6969),v=r(655),y=r(6980),g=r(2360),x=r(1072),b=r(8480),w=r(298),D=r(3717),N=r(7347),E=r(4913),A=r(6801),S=r(8773),C=r(6840),M=r(2106),F=r(5745),O=r(6119),T=r(421),_=r(3392),B=r(8227),k=r(1951),I=r(5749),z=r(8242),R=r(687),q=r(1181),j=r(9213).forEach,P=O(\"hidden\"),L=\"Symbol\",U=\"prototype\",$=q.set,H=q.getterFor(L),G=Object[U],V=i.Symbol,Z=V&&V[U],W=i.RangeError,Y=i.TypeError,J=i.QObject,X=N.f,Q=E.f,K=w.f,ee=S.f,te=o([].push),re=F(\"symbols\"),ne=F(\"op-symbols\"),ie=F(\"wks\"),ae=!J||!J[U]||!J[U].findChild,oe=function(e,t,r){var n=X(G,t);n&&delete G[t],Q(e,t,r),n&&e!==G&&Q(G,t,n)},ue=s&&f((function(){return 7!==g(Q({},\"a\",{get:function(){return Q(this,\"a\",{value:7}).a}})).a}))?oe:Q,se=function(e,t){var r=re[e]=g(Z);return $(r,{type:L,tag:e,description:t}),s||(r.description=t),r},ce=function(e,t,r){e===G&&ce(ne,t,r),m(e);var n=d(t);return m(r),l(re,n)?(r.enumerable?(l(e,P)&&e[P][n]&&(e[P][n]=!1),r=g(r,{enumerable:y(0,!1)})):(l(e,P)||Q(e,P,y(1,g(null))),e[P][n]=!0),ue(e,n,r)):Q(e,n,r)},fe=function(e,t){m(e);var r=h(t),n=x(r).concat(he(r));return j(n,(function(t){s&&!a(le,r,t)||ce(e,t,r[t])})),e},le=function(e){var t=d(e),r=a(ee,this,t);return!(this===G&&l(re,t)&&!l(ne,t))&&(!(r||!l(this,t)||!l(re,t)||l(this,P)&&this[P][t])||r)},pe=function(e,t){var r=h(e),n=d(t);if(r!==G||!l(re,n)||l(ne,n)){var i=X(r,n);return!i||!l(re,n)||l(r,P)&&r[P][n]||(i.enumerable=!0),i}},me=function(e){var t=K(h(e)),r=[];return j(t,(function(e){l(re,e)||l(T,e)||te(r,e)})),r},he=function(e){var t=e===G,r=K(t?ne:h(e)),n=[];return j(r,(function(e){!l(re,e)||t&&!l(G,e)||te(n,re[e])})),n};c||(C(Z=(V=function(){if(p(Z,this))throw new Y(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?v(arguments[0]):void 0,t=_(e),r=function(e){var n=void 0===this?i:this;n===G&&a(r,ne,e),l(n,P)&&l(n[P],t)&&(n[P][t]=!1);var o=y(1,e);try{ue(n,t,o)}catch(e){if(!(e instanceof W))throw e;oe(n,t,o)}};return s&&ae&&ue(G,t,{configurable:!0,set:r}),se(t,e)})[U],\"toString\",(function(){return H(this).tag})),C(V,\"withoutSetter\",(function(e){return se(_(e),e)})),S.f=le,E.f=ce,A.f=fe,N.f=pe,b.f=w.f=me,D.f=he,k.f=function(e){return se(B(e),e)},s&&(M(Z,\"description\",{configurable:!0,get:function(){return H(this).description}}),u||C(G,\"propertyIsEnumerable\",le,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:V}),j(x(ie),(function(e){I(e)})),n({target:L,stat:!0,forced:!c},{useSetter:function(){ae=!0},useSimple:function(){ae=!1}}),n({target:\"Object\",stat:!0,forced:!c,sham:!s},{create:function(e,t){return void 0===t?g(e):fe(g(e),t)},defineProperty:ce,defineProperties:fe,getOwnPropertyDescriptor:pe}),n({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:me}),z(),R(V,L),T[P]=!0},9463:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(3724),a=r(4475),o=r(9504),u=r(9297),s=r(4901),c=r(1625),f=r(655),l=r(2106),p=r(7740),m=a.Symbol,h=m&&m.prototype;if(i&&s(m)&&(!(\"description\"in h)||void 0!==m().description)){var d={},v=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:f(arguments[0]),t=c(h,this)?new m(e):void 0===e?m():m(e);return\"\"===e&&(d[t]=!0),t};p(v,m),v.prototype=h,h.constructor=v;var y=\"Symbol(description detection)\"===String(m(\"description detection\")),g=o(h.valueOf),x=o(h.toString),b=/^Symbol\\((.*)\\)[^)]+$/,w=o(\"\".replace),D=o(\"\".slice);l(h,\"description\",{configurable:!0,get:function(){var e=g(this);if(u(d,e))return\"\";var t=x(e),r=y?D(t,7,-1):w(t,b,\"$1\");return\"\"===r?void 0:r}}),n({global:!0,constructor:!0,forced:!0},{Symbol:v})}},1510:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(7751),a=r(9297),o=r(655),u=r(5745),s=r(1296),c=u(\"string-to-symbol-registry\"),f=u(\"symbol-to-string-registry\");n({target:\"Symbol\",stat:!0,forced:!s},{for:function(e){var t=o(e);if(a(c,t))return c[t];var r=i(\"Symbol\")(t);return c[t]=r,f[r]=t,r}})},2259:(e,t,r)=>{\"use strict\";r(5749)(\"iterator\")},2675:(e,t,r)=>{\"use strict\";r(6761),r(1510),r(7812),r(3110),r(9773)},7812:(e,t,r)=>{\"use strict\";var n=r(6518),i=r(9297),a=r(757),o=r(6823),u=r(5745),s=r(1296),c=u(\"symbol-to-string-registry\");n({target:\"Symbol\",stat:!0,forced:!s},{keyFor:function(e){if(!a(e))throw new TypeError(o(e)+\" is not a symbol\");if(i(c,e))return c[e]}})},3500:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(7400),a=r(9296),o=r(235),u=r(6699),s=function(e){if(e&&e.forEach!==o)try{u(e,\"forEach\",o)}catch(t){e.forEach=o}};for(var c in i)i[c]&&s(n[c]&&n[c].prototype);s(a)},2953:(e,t,r)=>{\"use strict\";var n=r(4475),i=r(7400),a=r(9296),o=r(3792),u=r(6699),s=r(687),c=r(8227)(\"iterator\"),f=o.values,l=function(e,t){if(e){if(e[c]!==f)try{u(e,c,f)}catch(t){e[c]=f}if(s(e,t,!0),i[t])for(var r in o)if(e[r]!==o[r])try{u(e,r,o[r])}catch(t){e[r]=o[r]}}};for(var p in i)l(n[p]&&n[p].prototype,p);l(a,\"DOMTokenList\")},2369:function(e){e.exports=function(){\"use strict\";function e(){return!0}function t(){return!1}function r(){}const n=\"Argument is not a typed-function.\";return function i(){function a(e){return\"object\"==typeof e&&null!==e&&e.constructor===Object}const o=[{name:\"number\",test:function(e){return\"number\"==typeof e}},{name:\"string\",test:function(e){return\"string\"==typeof e}},{name:\"boolean\",test:function(e){return\"boolean\"==typeof e}},{name:\"Function\",test:function(e){return\"function\"==typeof e}},{name:\"Array\",test:Array.isArray},{name:\"Date\",test:function(e){return e instanceof Date}},{name:\"RegExp\",test:function(e){return e instanceof RegExp}},{name:\"Object\",test:a},{name:\"null\",test:function(e){return null===e}},{name:\"undefined\",test:function(e){return void 0===e}}],u={name:\"any\",test:e,isAny:!0};let s,c,f=0,l={createCount:0};function p(e){const t=s.get(e);if(t)return t;let r='Unknown type \"'+e+'\"';const n=e.toLowerCase();let i;for(i of c)if(i.toLowerCase()===n){r+='. Did you mean \"'+i+'\" ?';break}throw new TypeError(r)}function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"any\";const r=t?p(t).index:c.length,n=[];for(let t=0;t{const r=s.get(t);return!r.isAny&&r.test(e)}));return t.length?t:[\"any\"]}function v(e){return e&&\"function\"==typeof e&&\"_typedFunctionData\"in e}function y(e,t,r){if(!v(e))throw new TypeError(n);const i=r&&r.exact,a=D(Array.isArray(t)?t.join(\",\"):t),o=g(a);if(!i||o in e.signatures){const t=e._typedFunctionData.signatureMap.get(o);if(t)return t}const u=a.length;let s,c;if(i){let t;for(t in s=[],e.signatures)s.push(e._typedFunctionData.signatureMap.get(t))}else s=e._typedFunctionData.signatures;for(let e=0;e!e.has(t.name))))continue}r.push(n)}}if(s=r,0===s.length)break}for(c of s)if(c.params.length<=u)return c;throw new TypeError(\"Signature not found (signature: \"+(e.name||\"unnamed\")+\"(\"+g(a,\", \")+\"))\")}function g(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\",\";return e.map((e=>e.name)).join(t)}function x(e){const t=0===e.indexOf(\"...\"),r=(t?e.length>3?e.slice(3):\"any\":e).split(\"|\").map((e=>p(e.trim())));let n=!1,i=t?\"...\":\"\";return{types:r.map((function(e){return n=e.isAny||n,i+=e.name+\"|\",{name:e.name,typeIndex:e.index,test:e.test,isAny:e.isAny,conversion:null,conversionIndex:-1}})),name:i.slice(0,-1),hasAny:n,hasConversion:!1,restParam:t}}function b(e){const t=function(e){if(0===e.length)return[];const t=e.map(p);e.length>1&&t.sort(((e,t)=>e.index-t.index));let r=t[0].conversionsTo;if(1===e.length)return r;r=r.concat([]);const n=new Set(e);for(let e=1;ee.name)));let r=e.hasAny,n=e.name;const i=t.map((function(e){const t=p(e.from);return r=t.isAny||r,n+=\"|\"+e.from,{name:e.from,typeIndex:t.index,test:t.test,isAny:t.isAny,conversion:e,conversionIndex:e.index}}));return{types:e.types.concat(i),name:n,hasAny:r,hasConversion:i.length>0,restParam:e.restParam}}function w(e){return e.typeSet||(e.typeSet=new Set,e.types.forEach((t=>e.typeSet.add(t.name)))),e.typeSet}function D(e){const t=[];if(\"string\"!=typeof e)throw new TypeError(\"Signatures must be strings\");const r=e.trim();if(\"\"===r)return t;const n=r.split(\",\");for(let e=0;e=r+1}}return 0===e.length?function(e){return 0===e.length}:1===e.length?(r=E(e[0]),function(e){return r(e[0])&&1===e.length}):2===e.length?(r=E(e[0]),n=E(e[1]),function(e){return r(e[0])&&n(e[1])&&2===e.length}):(t=e.map(E),function(e){for(let r=0;r{const n=C(e.params,t);let i;for(i of n)r.add(i)})),r.has(\"any\")?[\"any\"]:Array.from(r)}function O(e,t,r){let n,i;const a=e||\"unnamed\";let o,u=r;for(o=0;o{const n=E(S(r.params,o));(o0){const e=d(t[o]);return n=new TypeError(\"Unexpected type of argument in function \"+a+\" (expected: \"+i.join(\" or \")+\", actual: \"+e.join(\" | \")+\", index: \"+o+\")\"),n.data={category:\"wrongType\",fn:a,index:o,actual:e,expected:i},n}}else u=e}const s=u.map((function(e){return N(e.params)?1/0:e.params.length}));if(t.lengthc)return n=new TypeError(\"Too many arguments in function \"+a+\" (expected: \"+c+\", actual: \"+t.length+\")\"),n.data={category:\"tooManyArgs\",fn:a,index:t.length,expectedLength:c},n;const f=[];for(let e=0;e0)return 1;const n=_(e)-_(t);return n<0?-1:n>0?1:0}function k(e,t){const r=e.params,n=t.params,i=H(r),a=H(n),o=N(r),u=N(n);if(o&&i.hasAny){if(!u||!a.hasAny)return 1}else if(u&&a.hasAny)return-1;let s,c=0,f=0;for(s of r)s.hasAny&&++c,s.hasConversion&&++f;let l=0,p=0;for(s of n)s.hasAny&&++l,s.hasConversion&&++p;if(c!==l)return c-l;if(o&&i.hasConversion){if(!u||!a.hasConversion)return 1}else if(u&&a.hasConversion)return-1;if(f!==p)return f-p;if(o){if(!u)return 1}else if(u)return-1;const m=(r.length-n.length)*(o?-1:1);if(0!==m)return m;const h=[];let d,v=0;for(let e=0;ee.hasConversion))){const n=N(e),i=e.map(z);r=function(){const e=[],r=n?arguments.length-1:arguments.length;for(let t=0;te.name)).join(\"|\"),hasAny:e.some((e=>e.isAny)),hasConversion:!1,restParam:!0}),u.push(o)}else u=o.types.map((function(e){return{types:[e],name:e.name,hasAny:e.isAny,hasConversion:e.conversion,restParam:!1}}));return i=u,a=function(i){return e(t,r+1,n.concat([i]))},Array.prototype.concat.apply([],i.map(a))}var i,a;return[n]}(e,0,[])}function q(e,t){const r=Math.max(e.length,t.length);for(let n=0;n=n:o?n>=i:n===i}function j(e,t,r){const n=[];let i;for(i of e){let e=r[i];if(\"number\"!=typeof e)throw new TypeError('No definition for referenced signature \"'+i+'\"');if(e=t[e],\"function\"!=typeof e)return!1;n.push(e)}return n}function P(e,t,r){const n=function(e){return e.map((e=>Y(e)?Z(e.referToSelf.callback):W(e)?V(e.referTo.references,e.referTo.callback):e))}(e),i=new Array(n.length).fill(!1);let a=!0;for(;a;){a=!1;let e=!0;for(let o=0;o{const n=e[r];if(t.test(n.toString()))throw new SyntaxError(\"Using `this` to self-reference a function is deprecated since typed-function@3. Use typed.referTo and typed.referToSelf instead.\")}))}(n);const i=[],a=[],o={},u=[];let s;for(s in n){if(!Object.prototype.hasOwnProperty.call(n,s))continue;const e=D(s);if(!e)continue;i.forEach((function(t){if(q(t,e))throw new TypeError('Conflicting signatures \"'+g(t)+'\" and \"'+g(e)+'\".')})),i.push(e);const t=a.length;a.push(n[s]);const r=e.map(b);let c;for(c of R(r)){const e=g(c);u.push({params:c,name:e,fn:t}),c.every((e=>!e.hasConversion))&&(o[e]=t)}}u.sort(k);const c=P(a,o,ue);let f;for(f in o)Object.prototype.hasOwnProperty.call(o,f)&&(o[f]=c[o[f]]);const p=[],m=new Map;for(f of u)m.has(f.name)||(f.fn=c[f.fn],p.push(f),m.set(f.name,f));const h=p[0]&&p[0].params.length<=2&&!N(p[0].params),d=p[1]&&p[1].params.length<=2&&!N(p[1].params),v=p[2]&&p[2].params.length<=2&&!N(p[2].params),y=p[3]&&p[3].params.length<=2&&!N(p[3].params),x=p[4]&&p[4].params.length<=2&&!N(p[4].params),w=p[5]&&p[5].params.length<=2&&!N(p[5].params),S=h&&d&&v&&y&&x&&w;for(let e=0;ee.test)),ae=p.map((e=>e.implementation)),oe=function(){for(let e=re;eg(D(e)))),t=H(arguments);if(\"function\"!=typeof t)throw new TypeError(\"Callback function expected as last argument\");return V(e,t)},l.referToSelf=Z,l.convert=function(e,t){const r=p(t);if(r.test(e))return e;const n=r.conversionsTo;if(0===n.length)throw new Error(\"There are no conversions to \"+t+\" defined.\");for(let t=0;tt.from===e.from));if(!r)throw new Error(\"Attempt to remove nonexistent conversion from \"+e.from+\" to \"+e.to);if(r.convert!==e.convert)throw new Error(\"Conversion to remove does not match existing conversion\");const n=t.conversionsTo.indexOf(r);t.conversionsTo.splice(n,1)},l.resolve=function(e,t){if(!v(e))throw new TypeError(n);const r=e._typedFunctionData.signatures;for(let e=0;e{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},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.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};return(()=>{\"use strict\";r.d(n,{default:()=>Bg});var e={};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 i(e){return\"number\"==typeof e}function a(e){return!(!e||\"object\"!==t(e)||\"function\"!=typeof e.constructor)&&(!0===e.isBigNumber&&\"object\"===t(e.constructor.prototype)&&!0===e.constructor.prototype.isBigNumber||\"function\"==typeof e.constructor.isDecimal&&!0===e.constructor.isDecimal(e))}function o(e){return e&&\"object\"===t(e)&&!0===Object.getPrototypeOf(e).isComplex||!1}function u(e){return e&&\"object\"===t(e)&&!0===Object.getPrototypeOf(e).isFraction||!1}function s(e){return e&&!0===e.constructor.prototype.isUnit||!1}function c(e){return\"string\"==typeof e}r.r(e),r.d(e,{createAbs:()=>ha,createAccessorNode:()=>Sp,createAcos:()=>zf,createAcosh:()=>tl,createAcot:()=>nl,createAcoth:()=>al,createAcsc:()=>ul,createAcsch:()=>cl,createAdd:()=>op,createAddScalar:()=>xa,createAnd:()=>Tc,createAndTransform:()=>Ng,createApply:()=>va,createApplyTransform:()=>Yy,createArg:()=>au,createArrayNode:()=>Op,createAsec:()=>ll,createAsech:()=>ml,createAsin:()=>dl,createAsinh:()=>vl,createAssignmentNode:()=>Pp,createAtan:()=>yl,createAtan2:()=>xl,createAtanh:()=>wl,createAtomicMass:()=>Sy,createAvogadro:()=>Cy,createBellNumbers:()=>Xd,createBigNumberClass:()=>Lr,createBignumber:()=>Mi,createBin:()=>Us,createBitAnd:()=>Xo,createBitAndTransform:()=>Ag,createBitNot:()=>Ko,createBitOr:()=>tu,createBitOrTransform:()=>Sg,createBitXor:()=>iu,createBlockNode:()=>Hp,createBohrMagneton:()=>oy,createBohrRadius:()=>py,createBoltzmann:()=>My,createBoolean:()=>Ci,createCatalan:()=>Kd,createCbrt:()=>Na,createCeil:()=>Ta,createChain:()=>Ch,createChainClass:()=>bh,createClassicalElectronRadius:()=>my,createClone:()=>$n,createColumn:()=>wu,createColumnTransform:()=>Jy,createCombinations:()=>hd,createCombinationsWithRep:()=>yd,createCompare:()=>Bc,createCompareNatural:()=>Rc,createCompareText:()=>Pc,createCompile:()=>Zm,createComplex:()=>Fi,createComplexClass:()=>$r,createComposition:()=>tv,createConcat:()=>xu,createConcatTransform:()=>lg,createConditionalNode:()=>Wp,createConductanceQuantum:()=>uy,createConj:()=>uu,createConstantNode:()=>am,createCorr:()=>fd,createCos:()=>Nl,createCosh:()=>Al,createCot:()=>Sl,createCoth:()=>Ml,createCoulomb:()=>iy,createCount:()=>Nu,createCreateUnit:()=>kf,createCross:()=>Au,createCsc:()=>Fl,createCsch:()=>Tl,createCtranspose:()=>xs,createCube:()=>Ba,createCumSum:()=>Xh,createCumSumTransform:()=>gg,createDeepEqual:()=>of,createDenseMatrixClass:()=>Ln,createDerivative:()=>xv,createDet:()=>Mh,createDeuteronMass:()=>xy,createDiag:()=>Cu,createDiff:()=>Gu,createDiffTransform:()=>mg,createDistance:()=>Zh,createDivide:()=>Gh,createDivideScalar:()=>ec,createDot:()=>lp,createDotDivide:()=>mc,createDotMultiply:()=>Bo,createDotPow:()=>lc,createE:()=>qv,createEfimovFactor:()=>Ay,createEigs:()=>kh,createElectricConstant:()=>ry,createElectronMass:()=>hy,createElementaryCharge:()=>ay,createEqual:()=>Uc,createEqualScalar:()=>wi,createEqualText:()=>Gc,createErf:()=>Cs,createEvaluate:()=>Ym,createExp:()=>ka,createExpm:()=>zh,createExpm1:()=>za,createFactorial:()=>Od,createFalse:()=>_v,createFaraday:()=>Fy,createFermiCoupling:()=>dy,createFft:()=>Ds,createFibonacciHeapClass:()=>xf,createFilter:()=>Fu,createFilterTransform:()=>Qy,createFineStructure:()=>vy,createFirstRadiation:()=>Oy,createFix:()=>Pa,createFlatten:()=>_u,createFloor:()=>Ha,createForEach:()=>ku,createForEachTransform:()=>eg,createFormat:()=>Ls,createFraction:()=>Oi,createFractionClass:()=>Gr,createFreqz:()=>Av,createFunctionAssignmentNode:()=>fm,createFunctionNode:()=>$m,createGamma:()=>Sd,createGasConstant:()=>_y,createGcd:()=>uo,createGetMatrixDataType:()=>Ru,createGravitationConstant:()=>Qv,createGravity:()=>Ly,createHartreeEnergy:()=>yy,createHasNumericValue:()=>ci,createHelp:()=>Ah,createHelpClass:()=>xh,createHex:()=>Hs,createHypot:()=>sp,createI:()=>Vv,createIdentity:()=>ju,createIfft:()=>Es,createIm:()=>su,createImmutableDenseMatrixClass:()=>vf,createIndex:()=>hp,createIndexClass:()=>yf,createIndexNode:()=>hm,createIndexTransform:()=>tg,createInfinity:()=>kv,createIntersect:()=>Wh,createInv:()=>Fh,createInverseConductanceQuantum:()=>sy,createInvmod:()=>Oo,createIsInteger:()=>Qn,createIsNaN:()=>di,createIsNegative:()=>ai,createIsNumeric:()=>ui,createIsPositive:()=>li,createIsPrime:()=>Xs,createIsZero:()=>mi,createKldivergence:()=>_d,createKlitzing:()=>ly,createKron:()=>Lu,createLN10:()=>Lv,createLN2:()=>Pv,createLOG10E:()=>$v,createLOG2E:()=>Uv,createLarger:()=>Kc,createLargerEq:()=>rf,createLcm:()=>co,createLeafCount:()=>nv,createLeftShift:()=>Sc,createLgamma:()=>Md,createLog:()=>ac,createLog10:()=>lo,createLog1p:()=>uc,createLog2:()=>mo,createLoschmidt:()=>Ty,createLsolve:()=>vc,createLsolveAll:()=>bc,createLup:()=>Km,createLusolve:()=>vh,createLyap:()=>Hh,createMad:()=>rd,createMagneticConstant:()=>ty,createMagneticFluxQuantum:()=>cy,createMap:()=>Uu,createMapTransform:()=>rg,createMatrix:()=>_i,createMatrixClass:()=>Zr,createMatrixFromColumns:()=>Pi,createMatrixFromFunction:()=>ki,createMatrixFromRows:()=>Ri,createMax:()=>hf,createMaxTransform:()=>ag,createMean:()=>Kh,createMeanTransform:()=>og,createMedian:()=>td,createMin:()=>df,createMinTransform:()=>ug,createMod:()=>Qa,createMode:()=>zs,createMolarMass:()=>jy,createMolarMassC12:()=>Py,createMolarPlanckConstant:()=>By,createMolarVolume:()=>ky,createMultinomial:()=>kd,createMultiply:()=>yo,createMultiplyScalar:()=>ho,createNaN:()=>Iv,createNeutronMass:()=>by,createNode:()=>vp,createNorm:()=>fp,createNot:()=>du,createNthRoot:()=>xo,createNthRoots:()=>cc,createNuclearMagneton:()=>fy,createNull:()=>Bv,createNumber:()=>Ni,createNumeric:()=>Qs,createObjectNode:()=>gm,createOct:()=>$s,createOnes:()=>Vu,createOperatorNode:()=>Nm,createOr:()=>vu,createOrTransform:()=>Eg,createParenthesisNode:()=>Cm,createParse:()=>Gm,createParser:()=>Qm,createParserClass:()=>Jm,createPartitionSelect:()=>lf,createPermutations:()=>zd,createPhi:()=>jv,createPi:()=>zv,createPickRandom:()=>Ud,createPinv:()=>Th,createPlanckCharge:()=>Gy,createPlanckConstant:()=>Kv,createPlanckLength:()=>Uy,createPlanckMass:()=>$y,createPlanckTemperature:()=>Vy,createPlanckTime:()=>Hy,createPolynomialRoot:()=>gh,createPow:()=>tc,createPrint:()=>Zs,createPrintTransform:()=>Dg,createProd:()=>js,createProtonMass:()=>gy,createQr:()=>eh,createQuantileSeq:()=>ud,createQuantileSeqTransform:()=>vg,createQuantumOfCirculation:()=>wy,createRandom:()=>Gd,createRandomInt:()=>Zd,createRange:()=>Xu,createRangeClass:()=>Vr,createRangeNode:()=>Tm,createRangeTransform:()=>sg,createRationalize:()=>wv,createRe:()=>cu,createReducedPlanckConstant:()=>ey,createRelationalNode:()=>Im,createReplacer:()=>Cv,createReshape:()=>Ku,createResize:()=>es,createResolve:()=>dv,createResultSet:()=>it,createReviver:()=>Sv,createRightArithShift:()=>Mc,createRightLogShift:()=>Oc,createRotate:()=>rs,createRotationMatrix:()=>is,createRound:()=>ic,createRow:()=>as,createRowTransform:()=>cg,createRydberg:()=>Dy,createSQRT1_2:()=>Hv,createSQRT2:()=>Gv,createSackurTetrode:()=>Iy,createSchur:()=>Uh,createSec:()=>_l,createSech:()=>kl,createSecondRadiation:()=>zy,createSetCartesian:()=>Ll,createSetDifference:()=>$l,createSetDistinct:()=>Gl,createSetIntersect:()=>Zl,createSetIsSubset:()=>Yl,createSetMultiplicity:()=>Xl,createSetPowerset:()=>Kl,createSetSize:()=>tp,createSetSymDifference:()=>np,createSetUnion:()=>ap,createSign:()=>wo,createSimplify:()=>cv,createSimplifyConstant:()=>pv,createSimplifyCore:()=>hv,createSin:()=>Il,createSinh:()=>Rl,createSize:()=>us,createSlu:()=>mh,createSmaller:()=>Zc,createSmallerEq:()=>Jc,createSolveODE:()=>Ss,createSort:()=>mf,createSpaClass:()=>bf,createSparse:()=>_f,createSparseMatrixClass:()=>Di,createSpeedOfLight:()=>Xv,createSplitUnit:()=>Ui,createSqrt:()=>Do,createSqrtm:()=>qh,createSquare:()=>Eo,createSqueeze:()=>cs,createStd:()=>sd,createStdTransform:()=>hg,createStefanBoltzmann:()=>Ry,createStirlingS2:()=>Yd,createString:()=>Ai,createSubset:()=>ls,createSubsetTransform:()=>fg,createSubtract:()=>So,createSubtractScalar:()=>wa,createSum:()=>Yh,createSumTransform:()=>dg,createSylvester:()=>Ph,createSymbolNode:()=>qm,createSymbolicEqual:()=>yv,createTan:()=>ql,createTanh:()=>jl,createTau:()=>Rv,createThomsonCrossSection:()=>Ny,createTo:()=>Ys,createTrace:()=>pp,createTranspose:()=>ys,createTrue:()=>Tv,createTypeOf:()=>yi,createTyped:()=>Qe,createUnaryMinus:()=>la,createUnaryPlus:()=>ma,createUnequal:()=>sf,createUnitClass:()=>Mf,createUnitFunction:()=>Of,createUppercaseE:()=>Wv,createUppercasePi:()=>Zv,createUsolve:()=>gc,createUsolveAll:()=>Dc,createVacuumImpedance:()=>ny,createVariance:()=>ad,createVarianceTransform:()=>bg,createVersion:()=>Yv,createWeakMixingAngle:()=>Ey,createWienDisplacement:()=>qy,createXgcd:()=>Mo,createXor:()=>yu,createZeros:()=>ws,createZeta:()=>ks,createZpk2tf:()=>Nv}),r(4423),r(5086),r(2892),r(6099),r(7495),r(906),r(1699),r(4346),r(3288),r(2010),r(875),r(4864),r(7465),r(7745),r(8781);var f=Array.isArray;function l(e){return e&&!0===e.constructor.prototype.isMatrix||!1}function p(e){return Array.isArray(e)||l(e)}function m(e){return e&&e.isDenseMatrix&&!0===e.constructor.prototype.isMatrix||!1}function h(e){return e&&e.isSparseMatrix&&!0===e.constructor.prototype.isMatrix||!1}function d(e){return e&&!0===e.constructor.prototype.isRange||!1}function v(e){return e&&!0===e.constructor.prototype.isIndex||!1}function y(e){return\"boolean\"==typeof e}function g(e){return e&&!0===e.constructor.prototype.isResultSet||!1}function x(e){return e&&!0===e.constructor.prototype.isHelp||!1}function b(e){return\"function\"==typeof e}function w(e){return e instanceof Date}function D(e){return e instanceof RegExp}function N(e){return!(!e||\"object\"!==t(e)||e.constructor!==Object||o(e)||u(e))}function E(e){return null===e}function A(e){return void 0===e}function S(e){return e&&!0===e.isAccessorNode&&!0===e.constructor.prototype.isNode||!1}function C(e){return e&&!0===e.isArrayNode&&!0===e.constructor.prototype.isNode||!1}function M(e){return e&&!0===e.isAssignmentNode&&!0===e.constructor.prototype.isNode||!1}function F(e){return e&&!0===e.isBlockNode&&!0===e.constructor.prototype.isNode||!1}function O(e){return e&&!0===e.isConditionalNode&&!0===e.constructor.prototype.isNode||!1}function T(e){return e&&!0===e.isConstantNode&&!0===e.constructor.prototype.isNode||!1}function _(e){return T(e)||q(e)&&1===e.args.length&&T(e.args[0])&&\"-+~\".includes(e.op)}function B(e){return e&&!0===e.isFunctionAssignmentNode&&!0===e.constructor.prototype.isNode||!1}function k(e){return e&&!0===e.isFunctionNode&&!0===e.constructor.prototype.isNode||!1}function I(e){return e&&!0===e.isIndexNode&&!0===e.constructor.prototype.isNode||!1}function z(e){return e&&!0===e.isNode&&!0===e.constructor.prototype.isNode||!1}function R(e){return e&&!0===e.isObjectNode&&!0===e.constructor.prototype.isNode||!1}function q(e){return e&&!0===e.isOperatorNode&&!0===e.constructor.prototype.isNode||!1}function j(e){return e&&!0===e.isParenthesisNode&&!0===e.constructor.prototype.isNode||!1}function P(e){return e&&!0===e.isRangeNode&&!0===e.constructor.prototype.isNode||!1}function L(e){return e&&!0===e.isRelationalNode&&!0===e.constructor.prototype.isNode||!1}function U(e){return e&&!0===e.isSymbolNode&&!0===e.constructor.prototype.isNode||!1}function $(e){return e&&!0===e.constructor.prototype.isChain||!1}function H(e){var r=t(e);return\"object\"===r?null===e?\"null\":a(e)?\"BigNumber\":e.constructor&&e.constructor.name?e.constructor.name:\"Object\":r}var G=r(2369);function V(e){return\"boolean\"==typeof e||!!isFinite(e)&&e===Math.round(e)}r(8706),r(5276),r(8598),r(2062),r(4782),r(4554),r(3153),r(2326),r(6389),r(4444),r(7762),r(5070),r(5376),r(6624),r(1367),r(5914),r(8553),r(8690),r(5374),r(8459),r(8940),r(1761),r(5440);var Z=Math.sign||function(e){return e>0?1:e<0?-1:0},W=Math.log2||function(e){return Math.log(e)/Math.LN2},Y=Math.log10||function(e){return Math.log(e)/Math.LN10},J=Math.log1p||function(e){return Math.log(e+1)},X=Math.cbrt||function(e){if(0===e)return e;var t,r=e<0;return r&&(e=-e),t=isFinite(e)?(e/((t=Math.exp(Math.log(e)/3))*t)+2*t)/3:e,r?-t:t},Q=Math.expm1||function(e){return e>=2e-4||e<=-2e-4?Math.exp(e)-1:e+e*e/2+e*e*e/6};function K(e,t,r){var n={2:\"0b\",8:\"0o\",16:\"0x\"}[t],i=\"\";if(r){if(r<1)throw new Error(\"size must be in greater than 0\");if(!V(r))throw new Error(\"size must be an integer\");if(e>Math.pow(2,r-1)-1||e<-Math.pow(2,r-1))throw new Error(\"Value must be in range [-2^\".concat(r-1,\", 2^\").concat(r-1,\"-1]\"));if(!V(e))throw new Error(\"Value must be an integer\");e<0&&(e+=Math.pow(2,r)),i=\"i\".concat(r)}var a=\"\";return e<0&&(e=-e,a=\"-\"),\"\".concat(a).concat(n).concat(e.toString(t)).concat(i)}function ee(e,t){if(\"function\"==typeof t)return t(e);if(e===1/0)return\"Infinity\";if(e===-1/0)return\"-Infinity\";if(isNaN(e))return\"NaN\";var r=te(t),n=r.notation,a=r.precision,o=r.wordSize;switch(n){case\"fixed\":return ne(e,a);case\"exponential\":return ie(e,a);case\"engineering\":return function(e,t){if(isNaN(e)||!isFinite(e))return String(e);var r=ae(re(e),t),n=r.exponent,a=r.coefficients,o=n%3==0?n:n<0?n-3-n%3:n-n%3;if(i(t))for(;t>a.length||n-o+1>a.length;)a.push(0);else for(var u=Math.abs(n-o)-(a.length-1),s=0;s0;)f++,c--;var l=a.slice(f).join(\"\"),p=i(t)&&l.length||l.match(/[1-9]/)?\".\"+l:\"\",m=a.slice(0,f).join(\"\")+p+\"e\"+(n>=0?\"+\":\"\")+o.toString();return r.sign+m}(e,a);case\"bin\":return K(e,2,o);case\"oct\":return K(e,8,o);case\"hex\":return K(e,16,o);case\"auto\":return function(e,t,r){if(isNaN(e)||!isFinite(e))return String(e);var n=ve(null==r?void 0:r.lowerExp,-3),i=ve(null==r?void 0:r.upperExp,5),a=re(e),o=t?ae(a,t):a;if(o.exponent=i)return ie(e,t);var u=o.coefficients,s=o.exponent;u.length0?s:0;return c<(u=oe(-s).concat(u)).length-1&&u.splice(c+1,0,\".\"),o.sign+u.join(\"\")}(e,a,t).replace(/((\\.\\d*?)(0+))($|e)/,(function(){var e=arguments[2],t=arguments[4];return\".\"!==e?e+t:t}));default:throw new Error('Unknown notation \"'+n+'\". Choose \"auto\", \"exponential\", \"fixed\", \"bin\", \"oct\", or \"hex.')}}function te(e){var t,r,n=\"auto\";if(void 0!==e)if(i(e))t=e;else if(a(e))t=e.toNumber();else{if(!N(e))throw new Error(\"Unsupported type of options, number, BigNumber, or object expected\");void 0!==e.precision&&(t=de(e.precision,(function(){throw new Error('Option \"precision\" must be a number or BigNumber')}))),void 0!==e.wordSize&&(r=de(e.wordSize,(function(){throw new Error('Option \"wordSize\" must be a number or BigNumber')}))),e.notation&&(n=e.notation)}return{notation:n,precision:t,wordSize:r}}function re(e){var t=String(e).toLowerCase().match(/^(-?)(\\d+\\.?\\d*)(e([+-]?\\d+))?$/);if(!t)throw new SyntaxError(\"Invalid number \"+e);var r=t[1],n=t[2],i=parseFloat(t[4]||\"0\"),a=n.indexOf(\".\");i+=-1!==a?a-1:n.length-1;var o=n.replace(\".\",\"\").replace(/^0*/,(function(e){return i-=e.length,\"\"})).replace(/0*$/,\"\").split(\"\").map((function(e){return parseInt(e)}));return 0===o.length&&(o.push(0),i++),{sign:r,coefficients:o,exponent:i}}function ne(e,t){if(isNaN(e)||!isFinite(e))return String(e);var r=re(e),n=\"number\"==typeof t?ae(r,r.exponent+1+t):r,i=n.coefficients,a=n.exponent+1,o=a+(t||0);return i.length0?\".\"+i.join(\"\"):\"\")+\"e\"+(a>=0?\"+\":\"\")+a}function ae(e,t){for(var r={sign:e.sign,coefficients:e.coefficients,exponent:e.exponent},n=r.coefficients;t<=0;)n.unshift(0),r.exponent++,t++;if(n.length>t&&n.splice(t,n.length-t)[0]>=5){var i=t-1;for(n[i]++;10===n[i];)n.pop(),0===i&&(n.unshift(0),r.exponent++,i++),n[--i]++}return r}function oe(e){for(var t=[],r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}function He(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r15)throw new TypeError(\"Cannot implicitly convert a number with >15 significant digits to BigNumber (value: \"+e+\"). Use function bignumber(x) to convert to BigNumber.\");return new t(e)}},{from:\"number\",to:\"Complex\",convert:function(e){return r||et(e),new r(e,0)}},{from:\"BigNumber\",to:\"Complex\",convert:function(e){return r||et(e),new r(e.toNumber(),0)}},{from:\"Fraction\",to:\"BigNumber\",convert:function(e){throw new TypeError(\"Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.\")}},{from:\"Fraction\",to:\"Complex\",convert:function(e){return r||et(e),new r(e.valueOf(),0)}},{from:\"number\",to:\"Fraction\",convert:function(e){_||tt(e);var t=new _(e);if(t.valueOf()!==e)throw new TypeError(\"Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: \"+e+\"). Use function fraction(x) to convert to Fraction.\");return t}},{from:\"string\",to:\"number\",convert:function(e){var t=Number(e);if(isNaN(t))throw new Error('Cannot convert \"'+e+'\" to a number');return t}},{from:\"string\",to:\"BigNumber\",convert:function(e){t||Ke(e);try{return new t(e)}catch(t){throw new Error('Cannot convert \"'+e+'\" to BigNumber')}}},{from:\"string\",to:\"Fraction\",convert:function(e){_||tt(e);try{return new _(e)}catch(t){throw new Error('Cannot convert \"'+e+'\" to Fraction')}}},{from:\"string\",to:\"Complex\",convert:function(e){r||et(e);try{return new r(e)}catch(t){throw new Error('Cannot convert \"'+e+'\" to Complex')}}},{from:\"boolean\",to:\"number\",convert:function(e){return+e}},{from:\"boolean\",to:\"BigNumber\",convert:function(e){return t||Ke(e),new t(+e)}},{from:\"boolean\",to:\"Fraction\",convert:function(e){return _||tt(e),new _(+e)}},{from:\"boolean\",to:\"string\",convert:function(e){return String(e)}},{from:\"Array\",to:\"Matrix\",convert:function(e){return n||function(){throw new Error(\"Cannot convert array into a Matrix: no class 'DenseMatrix' provided\")}(),new n(e)}},{from:\"Matrix\",to:\"Array\",convert:function(e){return e.valueOf()}}]),H.onMismatch=function(e,t,r){var n=H.createError(e,t,r);if([\"wrongType\",\"mismatch\"].includes(n.data.category)&&1===t.length&&p(t[0])&&r.some((function(e){return!e.params.includes(\",\")}))){var i=new TypeError(\"Function '\".concat(e,\"' doesn't apply to matrices. To call it \")+\"elementwise on a matrix 'M', try 'map(M, \".concat(e,\")'.\"));throw i.data=n.data,i}throw n},H.onMismatch=function(e,t,r){var n=H.createError(e,t,r);if([\"wrongType\",\"mismatch\"].includes(n.data.category)&&1===t.length&&p(t[0])&&r.some((function(e){return!e.params.includes(\",\")}))){var i=new TypeError(\"Function '\".concat(e,\"' doesn't apply to matrices. To call it \")+\"elementwise on a matrix 'M', try 'map(M, \".concat(e,\")'.\"));throw i.data=n.data,i}throw n},H}));function Ke(e){throw new Error(\"Cannot convert value \".concat(e,\" into a BigNumber: no class 'BigNumber' provided\"))}function et(e){throw new Error(\"Cannot convert value \".concat(e,\" into a Complex number: no class 'Complex' provided\"))}function tt(e){throw new Error(\"Cannot convert value \".concat(e,\" into a Fraction, no class 'Fraction' provided.\"))}r(739);var rt,nt,it=Se(\"ResultSet\",[],(function(){function e(t){if(!(this instanceof e))throw new SyntaxError(\"Constructor must be called with the new operator\");this.entries=t||[]}return e.prototype.type=\"ResultSet\",e.prototype.isResultSet=!0,e.prototype.valueOf=function(){return this.entries},e.prototype.toString=function(){return\"[\"+this.entries.join(\", \")+\"]\"},e.prototype.toJSON=function(){return{mathjs:\"ResultSet\",entries:this.entries}},e.fromJSON=function(t){return new e(t.entries)},e}),{isClass:!0}),at=(r(9904),9e15),ot=1e9,ut=\"0123456789abcdef\",st=\"2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058\",ct=\"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789\",ft={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-at,maxE:at,crypto:!1},lt=!0,pt=\"[DecimalError] \",mt=pt+\"Invalid argument: \",ht=pt+\"Precision limit exceeded\",dt=pt+\"crypto unavailable\",vt=\"[object Decimal]\",yt=Math.floor,gt=Math.pow,xt=/^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,bt=/^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,wt=/^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,Dt=/^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,Nt=1e7,Et=7,At=st.length-1,St=ct.length-1,Ct={toStringTag:vt};function Mt(e){var t,r,n,i=e.length-1,a=\"\",o=e[0];if(i>0){for(a+=o,t=1;tr)throw Error(mt+e)}function Ot(e,t,r,n){var i,a,o,u;for(a=e[0];a>=10;a/=10)--t;return--t<0?(t+=Et,i=0):(i=Math.ceil((t+1)/Et),t%=Et),a=gt(10,Et-t),u=e[i]%a|0,null==n?t<3?(0==t?u=u/100|0:1==t&&(u=u/10|0),o=r<4&&99999==u||r>3&&49999==u||5e4==u||0==u):o=(r<4&&u+1==a||r>3&&u+1==a/2)&&(e[i+1]/a/100|0)==gt(10,t-2)-1||(u==a/2||0==u)&&0==(e[i+1]/a/100|0):t<4?(0==t?u=u/1e3|0:1==t?u=u/100|0:2==t&&(u=u/10|0),o=(n||r<4)&&9999==u||!n&&r>3&&4999==u):o=((n||r<4)&&u+1==a||!n&&r>3&&u+1==a/2)&&(e[i+1]/a/1e3|0)==gt(10,t-3)-1,o}function Tt(e,t,r){for(var n,i,a=[0],o=0,u=e.length;or-1&&(void 0===a[n+1]&&(a[n+1]=0),a[n+1]+=a[n]/r|0,a[n]%=r)}return a.reverse()}Ct.absoluteValue=Ct.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),Bt(e)},Ct.ceil=function(){return Bt(new this.constructor(this),this.e+1,2)},Ct.clampedTo=Ct.clamp=function(e,t){var r=this,n=r.constructor;if(e=new n(e),t=new n(t),!e.s||!t.s)return new n(NaN);if(e.gt(t))throw Error(mt+t);return r.cmp(e)<0?e:r.cmp(t)>0?t:new n(r)},Ct.comparedTo=Ct.cmp=function(e){var t,r,n,i,a=this,o=a.d,u=(e=new a.constructor(e)).d,s=a.s,c=e.s;if(!o||!u)return s&&c?s!==c?s:o===u?0:!o^s<0?1:-1:NaN;if(!o[0]||!u[0])return o[0]?s:u[0]?-c:0;if(s!==c)return s;if(a.e!==e.e)return a.e>e.e^s<0?1:-1;for(t=0,r=(n=o.length)<(i=u.length)?n:i;tu[t]^s<0?1:-1;return n===i?0:n>i^s<0?1:-1},Ct.cosine=Ct.cos=function(){var e,t,r=this,n=r.constructor;return r.d?r.d[0]?(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+Et,n.rounding=1,r=function(e,t){var r,n,i;if(t.isZero())return t;(n=t.d.length)<32?i=(1/Yt(4,r=Math.ceil(n/3))).toString():(r=16,i=\"2.3283064365386962890625e-10\"),e.precision+=r,t=Wt(e,1,t.times(i),new e(1));for(var a=r;a--;){var o=t.times(t);t=o.times(o).minus(o).times(8).plus(1)}return e.precision-=r,t}(n,Jt(n,r)),n.precision=e,n.rounding=t,Bt(2==nt||3==nt?r.neg():r,e,t,!0)):new n(1):new n(NaN)},Ct.cubeRoot=Ct.cbrt=function(){var e,t,r,n,i,a,o,u,s,c,f=this,l=f.constructor;if(!f.isFinite()||f.isZero())return new l(f);for(lt=!1,(a=f.s*gt(f.s*f,1/3))&&Math.abs(a)!=1/0?n=new l(a.toString()):(r=Mt(f.d),(a=((e=f.e)-r.length+1)%3)&&(r+=1==a||-2==a?\"0\":\"00\"),a=gt(r,1/3),e=yt((e+1)/3)-(e%3==(e<0?-1:2)),(n=new l(r=a==1/0?\"5e\"+e:(r=a.toExponential()).slice(0,r.indexOf(\"e\")+1)+e)).s=f.s),o=(e=l.precision)+3;;)if(c=(s=(u=n).times(u).times(u)).plus(f),n=_t(c.plus(f).times(u),c.plus(s),o+2,1),Mt(u.d).slice(0,o)===(r=Mt(n.d)).slice(0,o)){if(\"9999\"!=(r=r.slice(o-3,o+1))&&(i||\"4999\"!=r)){+r&&(+r.slice(1)||\"5\"!=r.charAt(0))||(Bt(n,e+1,1),t=!n.times(n).times(n).eq(f));break}if(!i&&(Bt(u,e+1,0),u.times(u).times(u).eq(f))){n=u;break}o+=4,i=1}return lt=!0,Bt(n,e,l.rounding,t)},Ct.decimalPlaces=Ct.dp=function(){var e,t=this.d,r=NaN;if(t){if(r=((e=t.length-1)-yt(this.e/Et))*Et,e=t[e])for(;e%10==0;e/=10)r--;r<0&&(r=0)}return r},Ct.dividedBy=Ct.div=function(e){return _t(this,new this.constructor(e))},Ct.dividedToIntegerBy=Ct.divToInt=function(e){var t=this.constructor;return Bt(_t(this,new t(e),0,1,1),t.precision,t.rounding)},Ct.equals=Ct.eq=function(e){return 0===this.cmp(e)},Ct.floor=function(){return Bt(new this.constructor(this),this.e+1,3)},Ct.greaterThan=Ct.gt=function(e){return this.cmp(e)>0},Ct.greaterThanOrEqualTo=Ct.gte=function(e){var t=this.cmp(e);return 1==t||0===t},Ct.hyperbolicCosine=Ct.cosh=function(){var e,t,r,n,i,a=this,o=a.constructor,u=new o(1);if(!a.isFinite())return new o(a.s?1/0:NaN);if(a.isZero())return u;r=o.precision,n=o.rounding,o.precision=r+Math.max(a.e,a.sd())+4,o.rounding=1,(i=a.d.length)<32?t=(1/Yt(4,e=Math.ceil(i/3))).toString():(e=16,t=\"2.3283064365386962890625e-10\"),a=Wt(o,1,a.times(t),new o(1),!0);for(var s,c=e,f=new o(8);c--;)s=a.times(a),a=u.minus(s.times(f.minus(s.times(f))));return Bt(a,o.precision=r,o.rounding=n,!0)},Ct.hyperbolicSine=Ct.sinh=function(){var e,t,r,n,i=this,a=i.constructor;if(!i.isFinite()||i.isZero())return new a(i);if(t=a.precision,r=a.rounding,a.precision=t+Math.max(i.e,i.sd())+4,a.rounding=1,(n=i.d.length)<3)i=Wt(a,2,i,i,!0);else{e=(e=1.4*Math.sqrt(n))>16?16:0|e,i=Wt(a,2,i=i.times(1/Yt(5,e)),i,!0);for(var o,u=new a(5),s=new a(16),c=new a(20);e--;)o=i.times(i),i=i.times(u.plus(o.times(s.times(o).plus(c))))}return a.precision=t,a.rounding=r,Bt(i,t,r,!0)},Ct.hyperbolicTangent=Ct.tanh=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+7,n.rounding=1,_t(r.sinh(),r.cosh(),n.precision=e,n.rounding=t)):new n(r.s)},Ct.inverseCosine=Ct.acos=function(){var e,t=this,r=t.constructor,n=t.abs().cmp(1),i=r.precision,a=r.rounding;return-1!==n?0===n?t.isNeg()?Rt(r,i,a):new r(0):new r(NaN):t.isZero()?Rt(r,i+4,a).times(.5):(r.precision=i+6,r.rounding=1,t=t.asin(),e=Rt(r,i+4,a).times(.5),r.precision=i,r.rounding=a,e.minus(t))},Ct.inverseHyperbolicCosine=Ct.acosh=function(){var e,t,r=this,n=r.constructor;return r.lte(1)?new n(r.eq(1)?0:NaN):r.isFinite()?(e=n.precision,t=n.rounding,n.precision=e+Math.max(Math.abs(r.e),r.sd())+4,n.rounding=1,lt=!1,r=r.times(r).minus(1).sqrt().plus(r),lt=!0,n.precision=e,n.rounding=t,r.ln()):new n(r)},Ct.inverseHyperbolicSine=Ct.asinh=function(){var e,t,r=this,n=r.constructor;return!r.isFinite()||r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+2*Math.max(Math.abs(r.e),r.sd())+6,n.rounding=1,lt=!1,r=r.times(r).plus(1).sqrt().plus(r),lt=!0,n.precision=e,n.rounding=t,r.ln())},Ct.inverseHyperbolicTangent=Ct.atanh=function(){var e,t,r,n,i=this,a=i.constructor;return i.isFinite()?i.e>=0?new a(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(e=a.precision,t=a.rounding,n=i.sd(),Math.max(n,e)<2*-i.e-1?Bt(new a(i),e,t,!0):(a.precision=r=n-i.e,i=_t(i.plus(1),new a(1).minus(i),r+e,1),a.precision=e+4,a.rounding=1,i=i.ln(),a.precision=e,a.rounding=t,i.times(.5))):new a(NaN)},Ct.inverseSine=Ct.asin=function(){var e,t,r,n,i=this,a=i.constructor;return i.isZero()?new a(i):(t=i.abs().cmp(1),r=a.precision,n=a.rounding,-1!==t?0===t?((e=Rt(a,r+4,n).times(.5)).s=i.s,e):new a(NaN):(a.precision=r+6,a.rounding=1,i=i.div(new a(1).minus(i.times(i)).sqrt().plus(1)).atan(),a.precision=r,a.rounding=n,i.times(2)))},Ct.inverseTangent=Ct.atan=function(){var e,t,r,n,i,a,o,u,s,c=this,f=c.constructor,l=f.precision,p=f.rounding;if(c.isFinite()){if(c.isZero())return new f(c);if(c.abs().eq(1)&&l+4<=St)return(o=Rt(f,l+4,p).times(.25)).s=c.s,o}else{if(!c.s)return new f(NaN);if(l+4<=St)return(o=Rt(f,l+4,p).times(.5)).s=c.s,o}for(f.precision=u=l+10,f.rounding=1,e=r=Math.min(28,u/Et+2|0);e;--e)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(lt=!1,t=Math.ceil(u/Et),n=1,s=c.times(c),o=new f(c),i=c;-1!==e;)if(i=i.times(s),a=o.minus(i.div(n+=2)),i=i.times(s),void 0!==(o=a.plus(i.div(n+=2))).d[t])for(e=t;o.d[e]===a.d[e]&&e--;);return r&&(o=o.times(2<this.d.length-2},Ct.isNaN=function(){return!this.s},Ct.isNegative=Ct.isNeg=function(){return this.s<0},Ct.isPositive=Ct.isPos=function(){return this.s>0},Ct.isZero=function(){return!!this.d&&0===this.d[0]},Ct.lessThan=Ct.lt=function(e){return this.cmp(e)<0},Ct.lessThanOrEqualTo=Ct.lte=function(e){return this.cmp(e)<1},Ct.logarithm=Ct.log=function(e){var t,r,n,i,a,o,u,s,c=this,f=c.constructor,l=f.precision,p=f.rounding;if(null==e)e=new f(10),t=!0;else{if(r=(e=new f(e)).d,e.s<0||!r||!r[0]||e.eq(1))return new f(NaN);t=e.eq(10)}if(r=c.d,c.s<0||!r||!r[0]||c.eq(1))return new f(r&&!r[0]?-1/0:1!=c.s?NaN:r?0:1/0);if(t)if(r.length>1)a=!0;else{for(i=r[0];i%10==0;)i/=10;a=1!==i}if(lt=!1,o=Ht(c,u=l+5),n=t?zt(f,u+10):Ht(e,u),Ot((s=_t(o,n,u,1)).d,i=l,p))do{if(o=Ht(c,u+=10),n=t?zt(f,u+10):Ht(e,u),s=_t(o,n,u,1),!a){+Mt(s.d).slice(i+1,i+15)+1==1e14&&(s=Bt(s,l+1,0));break}}while(Ot(s.d,i+=10,p));return lt=!0,Bt(s,l,p)},Ct.minus=Ct.sub=function(e){var t,r,n,i,a,o,u,s,c,f,l,p,m=this,h=m.constructor;if(e=new h(e),!m.d||!e.d)return m.s&&e.s?m.d?e.s=-e.s:e=new h(e.d||m.s!==e.s?m:NaN):e=new h(NaN),e;if(m.s!=e.s)return e.s=-e.s,m.plus(e);if(c=m.d,p=e.d,u=h.precision,s=h.rounding,!c[0]||!p[0]){if(p[0])e.s=-e.s;else{if(!c[0])return new h(3===s?-0:0);e=new h(m)}return lt?Bt(e,u,s):e}if(r=yt(e.e/Et),f=yt(m.e/Et),c=c.slice(),a=f-r){for((l=a<0)?(t=c,a=-a,o=p.length):(t=p,r=f,o=c.length),a>(n=Math.max(Math.ceil(u/Et),o)+2)&&(a=n,t.length=1),t.reverse(),n=a;n--;)t.push(0);t.reverse()}else{for((l=(n=c.length)<(o=p.length))&&(o=n),n=0;n0;--n)c[o++]=0;for(n=p.length;n>a;){if(c[--n](o=(a=Math.ceil(u/Et))>o?a+1:o+1)&&(i=o,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for((o=c.length)-(i=f.length)<0&&(i=o,r=f,f=c,c=r),t=0;i;)t=(c[--i]=c[i]+f[i]+t)/Nt|0,c[i]%=Nt;for(t&&(c.unshift(t),++n),o=c.length;0==c[--o];)c.pop();return e.d=c,e.e=It(c,n),lt?Bt(e,u,s):e},Ct.precision=Ct.sd=function(e){var t,r=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(mt+e);return r.d?(t=qt(r.d),e&&r.e+1>t&&(t=r.e+1)):t=NaN,t},Ct.round=function(){var e=this,t=e.constructor;return Bt(new t(e),e.e+1,t.rounding)},Ct.sine=Ct.sin=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+Math.max(r.e,r.sd())+Et,n.rounding=1,r=function(e,t){var r,n=t.d.length;if(n<3)return t.isZero()?t:Wt(e,2,t,t);r=(r=1.4*Math.sqrt(n))>16?16:0|r,t=Wt(e,2,t=t.times(1/Yt(5,r)),t);for(var i,a=new e(5),o=new e(16),u=new e(20);r--;)i=t.times(t),t=t.times(a.plus(i.times(o.times(i).minus(u))));return t}(n,Jt(n,r)),n.precision=e,n.rounding=t,Bt(nt>2?r.neg():r,e,t,!0)):new n(NaN)},Ct.squareRoot=Ct.sqrt=function(){var e,t,r,n,i,a,o=this,u=o.d,s=o.e,c=o.s,f=o.constructor;if(1!==c||!u||!u[0])return new f(!c||c<0&&(!u||u[0])?NaN:u?o:1/0);for(lt=!1,0==(c=Math.sqrt(+o))||c==1/0?(((t=Mt(u)).length+s)%2==0&&(t+=\"0\"),c=Math.sqrt(t),s=yt((s+1)/2)-(s<0||s%2),n=new f(t=c==1/0?\"5e\"+s:(t=c.toExponential()).slice(0,t.indexOf(\"e\")+1)+s)):n=new f(c.toString()),r=(s=f.precision)+3;;)if(n=(a=n).plus(_t(o,a,r+2,1)).times(.5),Mt(a.d).slice(0,r)===(t=Mt(n.d)).slice(0,r)){if(\"9999\"!=(t=t.slice(r-3,r+1))&&(i||\"4999\"!=t)){+t&&(+t.slice(1)||\"5\"!=t.charAt(0))||(Bt(n,s+1,1),e=!n.times(n).eq(o));break}if(!i&&(Bt(a,s+1,0),a.times(a).eq(o))){n=a;break}r+=4,i=1}return lt=!0,Bt(n,s,f.rounding,e)},Ct.tangent=Ct.tan=function(){var e,t,r=this,n=r.constructor;return r.isFinite()?r.isZero()?new n(r):(e=n.precision,t=n.rounding,n.precision=e+10,n.rounding=1,(r=r.sin()).s=1,r=_t(r,new n(1).minus(r.times(r)).sqrt(),e+10,0),n.precision=e,n.rounding=t,Bt(2==nt||4==nt?r.neg():r,e,t,!0)):new n(NaN)},Ct.times=Ct.mul=function(e){var t,r,n,i,a,o,u,s,c,f=this,l=f.constructor,p=f.d,m=(e=new l(e)).d;if(e.s*=f.s,!(p&&p[0]&&m&&m[0]))return new l(!e.s||p&&!p[0]&&!m||m&&!m[0]&&!p?NaN:p&&m?0*e.s:e.s/0);for(r=yt(f.e/Et)+yt(e.e/Et),(s=p.length)<(c=m.length)&&(a=p,p=m,m=a,o=s,s=c,c=o),a=[],n=o=s+c;n--;)a.push(0);for(n=c;--n>=0;){for(t=0,i=s+n;i>n;)u=a[i]+m[n]*p[i-n-1]+t,a[i--]=u%Nt|0,t=u/Nt|0;a[i]=(a[i]+t)%Nt|0}for(;!a[--o];)a.pop();return t?++r:a.shift(),e.d=a,e.e=It(a,r),lt?Bt(e,l.precision,l.rounding):e},Ct.toBinary=function(e,t){return Xt(this,2,e,t)},Ct.toDecimalPlaces=Ct.toDP=function(e,t){var r=this,n=r.constructor;return r=new n(r),void 0===e?r:(Ft(e,0,ot),void 0===t?t=n.rounding:Ft(t,0,8),Bt(r,e+r.e+1,t))},Ct.toExponential=function(e,t){var r,n=this,i=n.constructor;return void 0===e?r=kt(n,!0):(Ft(e,0,ot),void 0===t?t=i.rounding:Ft(t,0,8),r=kt(n=Bt(new i(n),e+1,t),!0,e+1)),n.isNeg()&&!n.isZero()?\"-\"+r:r},Ct.toFixed=function(e,t){var r,n,i=this,a=i.constructor;return void 0===e?r=kt(i):(Ft(e,0,ot),void 0===t?t=a.rounding:Ft(t,0,8),r=kt(n=Bt(new a(i),e+i.e+1,t),!1,e+n.e+1)),i.isNeg()&&!i.isZero()?\"-\"+r:r},Ct.toFraction=function(e){var t,r,n,i,a,o,u,s,c,f,l,p,m=this,h=m.d,d=m.constructor;if(!h)return new d(m);if(c=r=new d(1),n=s=new d(0),o=(a=(t=new d(n)).e=qt(h)-m.e-1)%Et,t.d[0]=gt(10,o<0?Et+o:o),null==e)e=a>0?t:c;else{if(!(u=new d(e)).isInt()||u.lt(c))throw Error(mt+u);e=u.gt(t)?a>0?t:c:u}for(lt=!1,u=new d(Mt(h)),f=d.precision,d.precision=a=h.length*Et*2;l=_t(u,t,0,1,1),1!=(i=r.plus(l.times(n))).cmp(e);)r=n,n=i,i=c,c=s.plus(l.times(i)),s=i,i=t,t=u.minus(l.times(i)),u=i;return i=_t(e.minus(r),n,0,1,1),s=s.plus(i.times(c)),r=r.plus(i.times(n)),s.s=c.s=m.s,p=_t(c,n,a,1).minus(m).abs().cmp(_t(s,r,a,1).minus(m).abs())<1?[c,n]:[s,r],d.precision=f,lt=!0,p},Ct.toHexadecimal=Ct.toHex=function(e,t){return Xt(this,16,e,t)},Ct.toNearest=function(e,t){var r=this,n=r.constructor;if(r=new n(r),null==e){if(!r.d)return r;e=new n(1),t=n.rounding}else{if(e=new n(e),void 0===t?t=n.rounding:Ft(t,0,8),!r.d)return e.s?r:e;if(!e.d)return e.s&&(e.s=r.s),e}return e.d[0]?(lt=!1,r=_t(r,e,0,t,1).times(e),lt=!0,Bt(r)):(e.s=r.s,r=e),r},Ct.toNumber=function(){return+this},Ct.toOctal=function(e,t){return Xt(this,8,e,t)},Ct.toPower=Ct.pow=function(e){var t,r,n,i,a,o,u=this,s=u.constructor,c=+(e=new s(e));if(!(u.d&&e.d&&u.d[0]&&e.d[0]))return new s(gt(+u,c));if((u=new s(u)).eq(1))return u;if(n=s.precision,a=s.rounding,e.eq(1))return Bt(u,n,a);if((t=yt(e.e/Et))>=e.d.length-1&&(r=c<0?-c:c)<=9007199254740991)return i=Pt(s,u,r,n),e.s<0?new s(1).div(i):Bt(i,n,a);if((o=u.s)<0){if(ts.maxE+1||t0?o/0:0):(lt=!1,s.rounding=u.s=1,r=Math.min(12,(t+\"\").length),(i=$t(e.times(Ht(u,n+r)),n)).d&&Ot((i=Bt(i,n+5,1)).d,n,a)&&(t=n+10,+Mt((i=Bt($t(e.times(Ht(u,t+r)),t),t+5,1)).d).slice(n+1,n+15)+1==1e14&&(i=Bt(i,n+1,0))),i.s=o,lt=!0,s.rounding=a,Bt(i,n,a))},Ct.toPrecision=function(e,t){var r,n=this,i=n.constructor;return void 0===e?r=kt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(Ft(e,1,ot),void 0===t?t=i.rounding:Ft(t,0,8),r=kt(n=Bt(new i(n),e,t),e<=n.e||n.e<=i.toExpNeg,e)),n.isNeg()&&!n.isZero()?\"-\"+r:r},Ct.toSignificantDigits=Ct.toSD=function(e,t){var r=this.constructor;return void 0===e?(e=r.precision,t=r.rounding):(Ft(e,1,ot),void 0===t?t=r.rounding:Ft(t,0,8)),Bt(new r(this),e,t)},Ct.toString=function(){var e=this,t=e.constructor,r=kt(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()&&!e.isZero()?\"-\"+r:r},Ct.truncated=Ct.trunc=function(){return Bt(new this.constructor(this),this.e+1,1)},Ct.valueOf=Ct.toJSON=function(){var e=this,t=e.constructor,r=kt(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()?\"-\"+r:r};var _t=function(){function e(e,t,r){var n,i=0,a=e.length;for(e=e.slice();a--;)n=e[a]*t+i,e[a]=n%r|0,i=n/r|0;return i&&e.unshift(i),e}function t(e,t,r,n){var i,a;if(r!=n)a=r>n?1:-1;else for(i=a=0;it[i]?1:-1;break}return a}function r(e,t,r,n){for(var i=0;r--;)e[r]-=i,i=e[r]1;)e.shift()}return function(n,i,a,o,u,s){var c,f,l,p,m,h,d,v,y,g,x,b,w,D,N,E,A,S,C,M,F=n.constructor,O=n.s==i.s?1:-1,T=n.d,_=i.d;if(!(T&&T[0]&&_&&_[0]))return new F(n.s&&i.s&&(T?!_||T[0]!=_[0]:_)?T&&0==T[0]||!_?0*O:O/0:NaN);for(s?(m=1,f=n.e-i.e):(s=Nt,m=Et,f=yt(n.e/m)-yt(i.e/m)),C=_.length,A=T.length,g=(y=new F(O)).d=[],l=0;_[l]==(T[l]||0);l++);if(_[l]>(T[l]||0)&&f--,null==a?(D=a=F.precision,o=F.rounding):D=u?a+(n.e-i.e)+1:a,D<0)g.push(1),h=!0;else{if(D=D/m+2|0,l=0,1==C){for(p=0,_=_[0],D++;(l1&&(_=e(_,p,s),T=e(T,p,s),C=_.length,A=T.length),E=C,b=(x=T.slice(0,C)).length;b=s/2&&++S;do{p=0,(c=t(_,x,C,b))<0?(w=x[0],C!=b&&(w=w*s+(x[1]||0)),(p=w/S|0)>1?(p>=s&&(p=s-1),1==(c=t(d=e(_,p,s),x,v=d.length,b=x.length))&&(p--,r(d,C=10;p/=10)l++;y.e=l+f*m-1,Bt(y,u?a+y.e+1:a,o,h)}return y}}();function Bt(e,t,r,n){var i,a,o,u,s,c,f,l,p,m=e.constructor;e:if(null!=t){if(!(l=e.d))return e;for(i=1,u=l[0];u>=10;u/=10)i++;if((a=t-i)<0)a+=Et,o=t,s=(f=l[p=0])/gt(10,i-o-1)%10|0;else if((p=Math.ceil((a+1)/Et))>=(u=l.length)){if(!n)break e;for(;u++<=p;)l.push(0);f=s=0,i=1,o=(a%=Et)-Et+1}else{for(f=u=l[p],i=1;u>=10;u/=10)i++;s=(o=(a%=Et)-Et+i)<0?0:f/gt(10,i-o-1)%10|0}if(n=n||t<0||void 0!==l[p+1]||(o<0?f:f%gt(10,i-o-1)),c=r<4?(s||n)&&(0==r||r==(e.s<0?3:2)):s>5||5==s&&(4==r||n||6==r&&(a>0?o>0?f/gt(10,i-o):0:l[p-1])%10&1||r==(e.s<0?8:7)),t<1||!l[0])return l.length=0,c?(t-=e.e+1,l[0]=gt(10,(Et-t%Et)%Et),e.e=-t||0):l[0]=e.e=0,e;if(0==a?(l.length=p,u=1,p--):(l.length=p+1,u=gt(10,Et-a),l[p]=o>0?(f/gt(10,i-o)%gt(10,o)|0)*u:0),c)for(;;){if(0==p){for(a=1,o=l[0];o>=10;o/=10)a++;for(o=l[0]+=u,u=1;o>=10;o/=10)u++;a!=u&&(e.e++,l[0]==Nt&&(l[0]=1));break}if(l[p]+=u,l[p]!=Nt)break;l[p--]=0,u=1}for(a=l.length;0===l[--a];)l.pop()}return lt&&(e.e>m.maxE?(e.d=null,e.e=NaN):e.e0?a=a.charAt(0)+\".\"+a.slice(1)+jt(n):o>1&&(a=a.charAt(0)+\".\"+a.slice(1)),a=a+(e.e<0?\"e\":\"e+\")+e.e):i<0?(a=\"0.\"+jt(-i-1)+a,r&&(n=r-o)>0&&(a+=jt(n))):i>=o?(a+=jt(i+1-o),r&&(n=r-i-1)>0&&(a=a+\".\"+jt(n))):((n=i+1)0&&(i+1===o&&(a+=\".\"),a+=jt(n))),a}function It(e,t){var r=e[0];for(t*=Et;r>=10;r/=10)t++;return t}function zt(e,t,r){if(t>At)throw lt=!0,r&&(e.precision=r),Error(ht);return Bt(new e(st),t,1,!0)}function Rt(e,t,r){if(t>St)throw Error(ht);return Bt(new e(ct),t,r,!0)}function qt(e){var t=e.length-1,r=t*Et+1;if(t=e[t]){for(;t%10==0;t/=10)r--;for(t=e[0];t>=10;t/=10)r++}return r}function jt(e){for(var t=\"\";e--;)t+=\"0\";return t}function Pt(e,t,r,n){var i,a=new e(1),o=Math.ceil(n/Et+4);for(lt=!1;;){if(r%2&&Qt((a=a.times(t)).d,o)&&(i=!0),0===(r=yt(r/2))){r=a.d.length-1,i&&0===a.d[r]&&++a.d[r];break}Qt((t=t.times(t)).d,o)}return lt=!0,a}function Lt(e){return 1&e.d[e.d.length-1]}function Ut(e,t,r){for(var n,i=new e(t[0]),a=0;++a17)return new p(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(null==t?(lt=!1,s=h):s=t,u=new p(.03125);e.e>-2;)e=e.times(u),l+=5;for(s+=n=Math.log(gt(2,l))/Math.LN10*2+5|0,r=a=o=new p(1),p.precision=s;;){if(a=Bt(a.times(e),s,1),r=r.times(++f),Mt((u=o.plus(_t(a,r,s,1))).d).slice(0,s)===Mt(o.d).slice(0,s)){for(i=l;i--;)o=Bt(o.times(o),s,1);if(null!=t)return p.precision=h,o;if(!(c<3&&Ot(o.d,s-n,m,c)))return Bt(o,p.precision=h,m,lt=!0);p.precision=s+=10,r=a=u=new p(1),f=0,c++}o=u}}function Ht(e,t){var r,n,i,a,o,u,s,c,f,l,p,m=1,h=e,d=h.d,v=h.constructor,y=v.rounding,g=v.precision;if(h.s<0||!d||!d[0]||!h.e&&1==d[0]&&1==d.length)return new v(d&&!d[0]?-1/0:1!=h.s?NaN:d?0:h);if(null==t?(lt=!1,f=g):f=t,v.precision=f+=10,n=(r=Mt(d)).charAt(0),!(Math.abs(a=h.e)<15e14))return c=zt(v,f+2,g).times(a+\"\"),h=Ht(new v(n+\".\"+r.slice(1)),f-10).plus(c),v.precision=g,null==t?Bt(h,g,y,lt=!0):h;for(;n<7&&1!=n||1==n&&r.charAt(1)>3;)n=(r=Mt((h=h.times(e)).d)).charAt(0),m++;for(a=h.e,n>1?(h=new v(\"0.\"+r),a++):h=new v(n+\".\"+r.slice(1)),l=h,s=o=h=_t(h.minus(1),h.plus(1),f,1),p=Bt(h.times(h),f,1),i=3;;){if(o=Bt(o.times(p),f,1),Mt((c=s.plus(_t(o,new v(i),f,1))).d).slice(0,f)===Mt(s.d).slice(0,f)){if(s=s.times(2),0!==a&&(s=s.plus(zt(v,f+2,g).times(a+\"\"))),s=_t(s,new v(m),f,1),null!=t)return v.precision=g,s;if(!Ot(s.d,f-10,y,u))return Bt(s,v.precision=g,y,lt=!0);v.precision=f+=10,c=o=h=_t(l.minus(1),l.plus(1),f,1),p=Bt(h.times(h),f,1),i=u=1}s=c,i+=2}}function Gt(e){return String(e.s*e.s/0)}function Vt(e,t){var r,n,i;for((r=t.indexOf(\".\"))>-1&&(t=t.replace(\".\",\"\")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;48===t.charCodeAt(n);n++);for(i=t.length;48===t.charCodeAt(i-1);--i);if(t=t.slice(n,i)){if(i-=n,e.e=r=r-n-1,e.d=[],n=(r+1)%Et,r<0&&(n+=Et),ne.constructor.maxE?(e.d=null,e.e=NaN):e.e-1){if(t=t.replace(/(\\d)_(?=\\d)/g,\"$1\"),Dt.test(t))return Vt(e,t)}else if(\"Infinity\"===t||\"NaN\"===t)return+t||(e.s=NaN),e.e=NaN,e.d=null,e;if(bt.test(t))r=16,t=t.toLowerCase();else if(xt.test(t))r=2;else{if(!wt.test(t))throw Error(mt+t);r=8}for((a=t.search(/p/i))>0?(s=+t.slice(a+1),t=t.substring(2,a)):t=t.slice(2),o=(a=t.indexOf(\".\"))>=0,n=e.constructor,o&&(a=(u=(t=t.replace(\".\",\"\")).length)-a,i=Pt(n,new n(r),a,2*a)),a=f=(c=Tt(t,r,Nt)).length-1;0===c[a];--a)c.pop();return a<0?new n(0*e.s):(e.e=It(c,f),e.d=c,lt=!1,o&&(e=_t(e,i,4*u)),s&&(e=e.times(Math.abs(s)<54?gt(2,s):jr.pow(2,s))),lt=!0,e)}function Wt(e,t,r,n,i){var a,o,u,s,c=e.precision,f=Math.ceil(c/Et);for(lt=!1,s=r.times(r),u=new e(n);;){if(o=_t(u.times(s),new e(t++*t++),c,1),u=i?n.plus(o):n.minus(o),n=_t(o.times(s),new e(t++*t++),c,1),void 0!==(o=u.plus(n)).d[f]){for(a=f;o.d[a]===u.d[a]&&a--;);if(-1==a)break}a=u,u=n,n=o,o=a}return lt=!0,o.d.length=f+1,o}function Yt(e,t){for(var r=e;--t;)r*=e;return r}function Jt(e,t){var r,n=t.s<0,i=Rt(e,e.precision,1),a=i.times(.5);if((t=t.abs()).lte(a))return nt=n?4:1,t;if((r=t.divToInt(i)).isZero())nt=n?3:2;else{if((t=t.minus(r.times(i))).lte(a))return nt=Lt(r)?n?2:3:n?4:1,t;nt=Lt(r)?n?1:4:n?3:2}return t.minus(i).abs()}function Xt(e,t,r,n){var i,a,o,u,s,c,f,l,p,m=e.constructor,h=void 0!==r;if(h?(Ft(r,1,ot),void 0===n?n=m.rounding:Ft(n,0,8)):(r=m.precision,n=m.rounding),e.isFinite()){for(h?(i=2,16==t?r=4*r-3:8==t&&(r=3*r-2)):i=t,(o=(f=kt(e)).indexOf(\".\"))>=0&&(f=f.replace(\".\",\"\"),(p=new m(1)).e=f.length-o,p.d=Tt(kt(p),10,i),p.e=p.d.length),a=s=(l=Tt(f,10,i)).length;0==l[--s];)l.pop();if(l[0]){if(o<0?a--:((e=new m(e)).d=l,e.e=a,l=(e=_t(e,p,r,n,0,i)).d,a=e.e,c=rt),o=l[r],u=i/2,c=c||void 0!==l[r+1],c=n<4?(void 0!==o||c)&&(0===n||n===(e.s<0?3:2)):o>u||o===u&&(4===n||c||6===n&&1&l[r-1]||n===(e.s<0?8:7)),l.length=r,c)for(;++l[--r]>i-1;)l[r]=0,r||(++a,l.unshift(1));for(s=l.length;!l[s-1];--s);for(o=0,f=\"\";o1)if(16==t||8==t){for(o=16==t?4:3,--s;s%o;s++)f+=\"0\";for(s=(l=Tt(f,i,t)).length;!l[s-1];--s);for(o=1,f=\"1.\";os)for(a-=s;a--;)f+=\"0\";else at)return e.length=t,!0}function Kt(e){return new this(e).abs()}function er(e){return new this(e).acos()}function tr(e){return new this(e).acosh()}function rr(e,t){return new this(e).plus(t)}function nr(e){return new this(e).asin()}function ir(e){return new this(e).asinh()}function ar(e){return new this(e).atan()}function or(e){return new this(e).atanh()}function ur(e,t){e=new this(e),t=new this(t);var r,n=this.precision,i=this.rounding,a=n+4;return e.s&&t.s?e.d||t.d?!t.d||e.isZero()?(r=t.s<0?Rt(this,n,i):new this(0)).s=e.s:!e.d||t.isZero()?(r=Rt(this,a,1).times(.5)).s=e.s:t.s<0?(this.precision=a,this.rounding=1,r=this.atan(_t(e,t,a,1)),t=Rt(this,a,1),this.precision=n,this.rounding=i,r=e.s<0?r.minus(t):r.plus(t)):r=this.atan(_t(e,t,a,1)):(r=Rt(this,a,1).times(t.s>0?.25:.75)).s=e.s:r=new this(NaN),r}function sr(e){return new this(e).cbrt()}function cr(e){return Bt(e=new this(e),e.e+1,2)}function fr(e,t,r){return new this(e).clamp(t,r)}function lr(e){if(!e||\"object\"!=typeof e)throw Error(pt+\"Object expected\");var t,r,n,i=!0===e.defaults,a=[\"precision\",1,ot,\"rounding\",0,8,\"toExpNeg\",-at,0,\"toExpPos\",0,at,\"maxE\",0,at,\"minE\",-at,0,\"modulo\",0,9];for(t=0;t=a[t+1]&&n<=a[t+2]))throw Error(mt+r+\": \"+n);this[r]=n}if(r=\"crypto\",i&&(this[r]=ft[r]),void 0!==(n=e[r])){if(!0!==n&&!1!==n&&0!==n&&1!==n)throw Error(mt+r+\": \"+n);if(n){if(\"undefined\"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw Error(dt);this[r]=!0}else this[r]=!1}return this}function pr(e){return new this(e).cos()}function mr(e){return new this(e).cosh()}function hr(e,t){return new this(e).div(t)}function dr(e){return new this(e).exp()}function vr(e){return Bt(e=new this(e),e.e+1,3)}function yr(){var e,t,r=new this(0);for(lt=!1,e=0;e=429e7?t[a]=crypto.getRandomValues(new Uint32Array(1))[0]:u[a++]=i%1e7;else{if(!crypto.randomBytes)throw Error(dt);for(t=crypto.randomBytes(n*=4);a=214e7?crypto.randomBytes(4).copy(t,a):(u.push(i%1e7),a+=4);a=n/4}else for(;a=10;i/=10)n++;na.maxE?(i.e=NaN,i.d=null):e.e=10;r/=10)t++;return void(lt?t>a.maxE?(i.e=NaN,i.d=null):tt.re?1:e.ret.im?1:e.im0?this.step>0?this.start:this.start+(e-1)*this.step:void 0},e.prototype.max=function(){var e=this.size()[0];return e>0?this.step>0?this.start+(e-1)*this.step:this.start:void 0},e.prototype.forEach=function(e){var t=this.start,r=this.step,n=this.end,i=0;if(r>0)for(;tn;)e(t,[i],this),t+=r,i++},e.prototype.map=function(e){var t=[];return this.forEach((function(r,n,i){t[n[0]]=e(r,n,i)})),t},e.prototype.toArray=function(){var e=[];return this.forEach((function(t,r){e[r[0]]=t})),e},e.prototype.valueOf=function(){return this.toArray()},e.prototype.format=function(e){var t=ee(this.start,e);return 1!==this.step&&(t+=\":\"+ee(this.step,e)),t+\":\"+ee(this.end,e)},e.prototype.toString=function(){return this.format()},e.prototype.toJSON=function(){return{mathjs:\"Range\",start:this.start,end:this.end,step:this.step}},e.fromJSON=function(t){return new e(t.start,t.end,t.step)},e}),{isClass:!0})),Zr=Se(\"Matrix\",[],(function(){function e(){if(!(this instanceof e))throw new SyntaxError(\"Constructor must be called with the new operator\")}return e.prototype.type=\"Matrix\",e.prototype.isMatrix=!0,e.prototype.storage=function(){throw new Error(\"Cannot invoke storage on a Matrix interface\")},e.prototype.datatype=function(){throw new Error(\"Cannot invoke datatype on a Matrix interface\")},e.prototype.create=function(e,t){throw new Error(\"Cannot invoke create on a Matrix interface\")},e.prototype.subset=function(e,t,r){throw new Error(\"Cannot invoke subset on a Matrix interface\")},e.prototype.get=function(e){throw new Error(\"Cannot invoke get on a Matrix interface\")},e.prototype.set=function(e,t,r){throw new Error(\"Cannot invoke set on a Matrix interface\")},e.prototype.resize=function(e,t){throw new Error(\"Cannot invoke resize on a Matrix interface\")},e.prototype.reshape=function(e,t){throw new Error(\"Cannot invoke reshape on a Matrix interface\")},e.prototype.clone=function(){throw new Error(\"Cannot invoke clone on a Matrix interface\")},e.prototype.size=function(){throw new Error(\"Cannot invoke size on a Matrix interface\")},e.prototype.map=function(e,t){throw new Error(\"Cannot invoke map on a Matrix interface\")},e.prototype.forEach=function(e){throw new Error(\"Cannot invoke forEach on a Matrix interface\")},e.prototype[Symbol.iterator]=function(){throw new Error(\"Cannot iterate a Matrix interface\")},e.prototype.toArray=function(){throw new Error(\"Cannot invoke toArray on a Matrix interface\")},e.prototype.valueOf=function(){throw new Error(\"Cannot invoke valueOf on a Matrix interface\")},e.prototype.format=function(e){throw new Error(\"Cannot invoke format on a Matrix interface\")},e.prototype.toString=function(){throw new Error(\"Cannot invoke toString on a Matrix interface\")},e}),{isClass:!0}),Wr=r(4756);function Yr(){return Yr=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0?\"+\":\"\")+n.toString()}(e,i);case\"bin\":return Jr(e,2,a);case\"oct\":return Jr(e,8,a);case\"hex\":return Jr(e,16,a);case\"auto\":var o=Qr(null==t?void 0:t.lowerExp,-3),u=Qr(null==t?void 0:t.upperExp,5);if(e.isZero())return\"0\";var s=e.toSignificantDigits(i),c=s.e;return(c>=o&&cr.truncate?n.substring(0,r.truncate-3)+\"...\":n}function tn(e){for(var t=String(e),r=\"\",n=0;n/g,\">\")}function an(e,t){if(Array.isArray(e)){for(var r=\"[\",n=e.length,i=0;it?1:-1}function un(e,t,r){if(!(this instanceof un))throw new SyntaxError(\"Constructor must be called with the new operator\");this.actual=e,this.expected=t,this.relation=r,this.message=\"Dimension mismatch (\"+(Array.isArray(e)?\"[\"+e.join(\", \")+\"]\":e)+\" \"+(this.relation||\"!=\")+\" \"+(Array.isArray(t)?\"[\"+t.join(\", \")+\"]\":t)+\")\",this.stack=(new Error).stack}function sn(e,t,r){if(!(this instanceof sn))throw new SyntaxError(\"Constructor must be called with the new operator\");this.index=e,arguments.length<3?(this.min=0,this.max=t):(this.min=t,this.max=r),void 0!==this.min&&this.index=this.max?this.message=\"Index out of range (\"+this.index+\" > \"+(this.max-1)+\")\":this.message=\"Index out of range (\"+this.index+\")\",this.stack=(new Error).stack}function cn(e){for(var t=[];Array.isArray(e);)t.push(e.length),e=e[0];return t}function fn(e,t,r){var n,i=e.length;if(i!==t[r])throw new un(i,t[r]);if(r\")}function ln(e,t){if(0===t.length){if(Array.isArray(e))throw new un(e.length,0)}else fn(e,t,0)}function pn(e,t){var r=e.isMatrix?e._size:cn(e);t._sourceSize.forEach((function(e,t){if(null!==e&&e!==r[t])throw new un(e,r[t])}))}function mn(e,t){if(void 0!==e){if(!i(e)||!V(e))throw new TypeError(\"Index must be an integer (value: \"+e+\")\");if(e<0||\"number\"==typeof t&&e>=t)throw new sn(e,t)}}function hn(e){for(var t=0;t0;i--){var a=t[i];r=[];for(var o=n.length/a,u=0;u=0)throw new Error(\"More than one wildcard in sizes\");if(i>=0){if(t%r!=0)throw new Error(\"Could not replace wildcard, since \"+t+\" is no multiple of \"+-r);n[i]=-t/r}return n}function xn(e){return e.reduce((function(e,t){return e*t}),1)}function bn(e,t){for(var r=t||cn(e);Array.isArray(e)&&1===e.length;)e=e[0],r.shift();for(var n=r.length;1===r[n-1];)n--;return n1)return e.slice(1).reduce((function(e,r){return Bn(e,r,t,0)}),e[0]);throw new Error(\"Wrong number of arguments in function concat\")}function In(e,t){for(var r=t.length,n=e.length,i=0;i1||e[i]>t[a])throw new Error(\"shape missmatch: missmatch is found in arg with shape (\".concat(e,\") not possible to broadcast dimension \").concat(n,\" with size \").concat(e[i],\" to size \").concat(t[a]))}}function zn(e,t){var r=cn(e);if(we(r,t))return e;In(r,t);var n,i,a,o=function(){for(var e=arguments.length,t=new Array(e),r=0;ra[f]&&(a[f]=u[c])}for(var l=0;l1&&void 0!==arguments[1]?arguments[1]:{},n=r.hasher,i=r.limit;return i=null==i?Number.POSITIVE_INFINITY:i,n=null==n?JSON.stringify:n,function r(){\"object\"!==t(r.cache)&&(r.cache={values:new Map,lru:Rn(i||Number.POSITIVE_INFINITY)});for(var a=[],o=0;oe.length)&&(t=e.length);for(var r=0,n=new Array(t);rn[a]&&(n[a]=t[a],i=!0);i&&u(e,n,r)}function m(e){return l(e)?m(e.valueOf()):f(e)?e.map(m):e}return r.prototype=new t,r.prototype.createDenseMatrix=function(e,t){return new r(e,t)},Object.defineProperty(r,\"name\",{value:\"DenseMatrix\"}),r.prototype.constructor=r,r.prototype.type=\"DenseMatrix\",r.prototype.isDenseMatrix=!0,r.prototype.getDataType=function(){return _n(this._data,H)},r.prototype.storage=function(){return\"dense\"},r.prototype.datatype=function(){return this._datatype},r.prototype.create=function(e,t){return new r(e,t)},r.prototype.subset=function(e,t,i){switch(arguments.length){case 1:return function(e,t){if(!v(t))throw new TypeError(\"Invalid index\");if(t.isScalar())return e.get(t.min());var i=t.size();if(i.length!==e._size.length)throw new un(i.length,e._size.length);for(var a=t.min(),o=t.max(),u=0,s=e._size.length;u\");var p=t.max().map((function(e){return e+1}));s(e,p,n);var m=a.length;o(e._data,t,r,m,0)}return e}(this,e,t,i);default:throw new SyntaxError(\"Wrong number of arguments\")}},r.prototype.get=function(e){if(!f(e))throw new TypeError(\"Array expected\");if(e.length!==this._size.length)throw new un(e.length,this._size.length);for(var t=0;t=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(this._data);try{for(n.s();!(t=n.n()).done;){var i=t.value;e.push(new r([i],this._datatype))}}catch(e){n.e(e)}finally{n.f()}return e},r.prototype.columns=function(){var e=this,t=[],n=this.size();if(2!==n.length)throw new TypeError(\"Rows can only be returned for a 2D matrix.\");for(var i=this._data,a=function(n){var a=i.map((function(e){return[e[n]]}));t.push(new r(a,e._datatype))},o=0;o0?e:0,n=e<0?-e:0,o=this._size[0],u=this._size[1],s=Math.min(o-n,u-t),c=[],f=0;f0?n:0,c=n<0?-n:0,p=e[0],m=e[1],h=Math.min(p-c,m-s);if(f(t)){if(t.length!==h)throw new Error(\"Invalid value array length\");u=function(e){return t[e]}}else if(l(t)){var d=t.size();if(1!==d.length||d[0]!==h)throw new Error(\"Invalid matrix length\");u=function(e){return t.get([e])}}else u=function(){return t};o||(o=a(u(0))?u(0).mul(0):0);var v=[];if(e.length>0){v=dn(v,e,o);for(var y=0;y=n.length)throw new sn(t,n.length);return l(e)?e.create(Yn(e.valueOf(),t,r)):Yn(e,t,r)}function Yn(e,t,r){var n,i,a,o;if(t<=0){if(Array.isArray(e[0])){for(o=Hn(e),i=[],n=0;n0}function ri(e){return 0===e}function ni(e){return Number.isNaN(e)}ei.signature=Kn,ti.signature=Kn,ri.signature=Kn,ni.signature=Kn;var ii=\"isNegative\",ai=Se(ii,[\"typed\"],(function(e){var t=e.typed;return t(ii,{number:ei,BigNumber:function(e){return e.isNeg()&&!e.isZero()&&!e.isNaN()},Fraction:function(e){return e.s<0},Unit:t.referToSelf((function(e){return function(r){return t.find(e,r.valueType())(r.value)}})),\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),oi=\"isNumeric\",ui=Se(oi,[\"typed\"],(function(e){var t=e.typed;return t(oi,{\"number | BigNumber | Fraction | boolean\":function(){return!0},\"Complex | Unit | string | null | undefined | Node\":function(){return!1},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),si=(r(2762),\"hasNumericValue\"),ci=Se(si,[\"typed\",\"isNumeric\"],(function(e){var t=e.typed,r=e.isNumeric;return t(si,{boolean:function(){return!0},string:function(e){return e.trim().length>0&&!isNaN(Number(e))},any:function(e){return r(e)}})})),fi=\"isPositive\",li=Se(fi,[\"typed\"],(function(e){var t=e.typed;return t(fi,{number:ti,BigNumber:function(e){return!e.isNeg()&&!e.isZero()&&!e.isNaN()},Fraction:function(e){return e.s>0&&e.n>0},Unit:t.referToSelf((function(e){return function(r){return t.find(e,r.valueType())(r.value)}})),\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),pi=\"isZero\",mi=Se(pi,[\"typed\"],(function(e){var t=e.typed;return t(pi,{number:ri,BigNumber:function(e){return e.isZero()},Complex:function(e){return 0===e.re&&0===e.im},Fraction:function(e){return 1===e.d&&0===e.n},Unit:t.referToSelf((function(e){return function(r){return t.find(e,r.valueType())(r.value)}})),\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),hi=\"isNaN\",di=Se(hi,[\"typed\"],(function(e){var t=e.typed;return t(hi,{number:ni,BigNumber:function(e){return e.isNaN()},Fraction:function(e){return!1},Complex:function(e){return e.isNaN()},Unit:function(e){return Number.isNaN(e.value)},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),vi=\"typeOf\",yi=Se(vi,[\"typed\"],(function(e){return(0,e.typed)(vi,{any:H})}));function gi(e,t,r){if(null==r)return e.eq(t);if(e.eq(t))return!0;if(e.isNaN()||t.isNaN())return!1;if(e.isFinite()&&t.isFinite()){var n=e.minus(t).abs();if(n.isZero())return!0;var i=e.constructor.max(e.abs(),t.abs());return n.lte(i.times(r))}return!1}var xi=Se(\"compareUnits\",[\"typed\"],(function(e){var t=e.typed;return{\"Unit, Unit\":t.referToSelf((function(e){return function(r,n){if(!r.equalBase(n))throw new Error(\"Cannot compare units with different base\");return t.find(e,[r.valueType(),n.valueType()])(r.value,n.value)}}))}})),bi=\"equalScalar\",wi=Se(bi,[\"typed\",\"config\"],(function(e){var t=e.typed,r=e.config,n=xi({typed:t});return t(bi,{\"boolean, boolean\":function(e,t){return e===t},\"number, number\":function(e,t){return se(e,t,r.epsilon)},\"BigNumber, BigNumber\":function(e,t){return e.eq(t)||gi(e,t,r.epsilon)},\"Fraction, Fraction\":function(e,t){return e.equals(t)},\"Complex, Complex\":function(e,t){return function(e,t,r){return se(e.re,t.re,r)&&se(e.im,t.im,r)}(e,t,r.epsilon)}},n)})),Di=(Se(bi,[\"typed\",\"config\"],(function(e){var t=e.typed,r=e.config;return t(bi,{\"number, number\":function(e,t){return se(e,t,r.epsilon)}})})),Se(\"SparseMatrix\",[\"typed\",\"equalScalar\",\"Matrix\"],(function(e){var t=e.typed,r=e.equalScalar,n=e.Matrix;function o(e,t){if(!(this instanceof o))throw new SyntaxError(\"Constructor must be called with the new operator\");if(t&&!c(t))throw new Error(\"Invalid datatype: \"+t);if(l(e))!function(e,t,r){\"SparseMatrix\"===t.type?(e._values=t._values?ye(t._values):void 0,e._index=ye(t._index),e._ptr=ye(t._ptr),e._size=ye(t._size),e._datatype=r||t._datatype):u(e,t.valueOf(),r||t._datatype)}(this,e,t);else if(e&&f(e.index)&&f(e.ptr)&&f(e.size))this._values=e.values,this._index=e.index,this._ptr=e.ptr,this._size=e.size,this._datatype=t||e.datatype;else if(f(e))u(this,e,t);else{if(e)throw new TypeError(\"Unsupported type of data (\"+H(e)+\")\");this._values=[],this._index=[],this._ptr=[0],this._size=[0,0],this._datatype=t}}function u(e,n,i){e._values=[],e._index=[],e._ptr=[],e._datatype=i;var a=n.length,o=0,u=r,s=0;if(c(i)&&(u=t.find(r,[i,i])||r,s=t.convert(0,i)),a>0){var l=0;do{e._ptr.push(e._index.length);for(var p=0;pd){for(l=d;lh){if(m){var v=0;for(l=0;ln-1&&(e._values.splice(p,1),e._index.splice(p,1),g++)}e._ptr[l]=e._values.length}return e._size[0]=n,e._size[1]=i,e}function d(e,t,r,n,i){var a,o,u=n[0],s=n[1],c=[];for(a=0;a\");if(1===a.length)t.dimension(0).forEach((function(t,i){mn(t),e.set([t,0],r[i[0]],n)}));else{var c=t.dimension(0),f=t.dimension(1);c.forEach((function(t,i){mn(t),f.forEach((function(a,o){mn(a),e.set([t,a],r[i[0]][o[0]],n)}))}))}}return e}(this,e,t,r);default:throw new SyntaxError(\"Wrong number of arguments\")}},o.prototype.get=function(e){if(!f(e))throw new TypeError(\"Array expected\");if(e.length!==this._size.length)throw new un(e.length,this._size.length);if(!this._values)throw new Error(\"Cannot invoke get on a Pattern only matrix\");var t=e[0],r=e[1];mn(t,this._size[0]),mn(r,this._size[1]);var n=s(t,this._ptr[r],this._ptr[r+1],this._index);return nu-1||o>l-1)&&(h(this,Math.max(a+1,u),Math.max(o+1,l),i),u=this._size[0],l=this._size[1]),mn(a,u),mn(o,l);var v=s(a,this._ptr[o],this._ptr[o+1],this._index);return v=0&&w<=i&&v(e._values[b],w-0,y-0)}else{for(var D={},N=g;N \"+(this._values?en(this._values[s],e):\"X\");return i},o.prototype.toString=function(){return en(this.toArray())},o.prototype.toJSON=function(){return{mathjs:\"SparseMatrix\",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},o.prototype.diagonal=function(e){if(e){if(a(e)&&(e=e.toNumber()),!i(e)||!V(e))throw new TypeError(\"The parameter k must be an integer number\")}else e=0;var t=e>0?e:0,r=e<0?-e:0,n=this._size[0],u=this._size[1],s=Math.min(n-r,u-t),c=[],f=[],l=[];l[0]=0;for(var p=t;p0?u:0,y=u<0?-u:0,g=e[0],x=e[1],b=Math.min(g-y,x-v);if(f(n)){if(n.length!==b)throw new Error(\"Invalid value array length\");d=function(e){return n[e]}}else if(l(n)){var w=n.size();if(1!==w.length||w[0]!==b)throw new Error(\"Invalid matrix length\");d=function(e){return n.get([e])}}else d=function(){return n};for(var D=[],N=[],E=[],A=0;A=0&&S=c||i[l]!==t)){var m=n?n[f]:void 0;i.splice(l,0,t),n&&n.splice(l,0,m),i.splice(l<=f?f+1:f,1),n&&n.splice(l<=f?f+1:f,1)}else if(l=c||i[f]!==e)){var h=n?n[l]:void 0;i.splice(f,0,e),n&&n.splice(f,0,h),i.splice(f<=l?l+1:l,1),n&&n.splice(f<=l?l+1:l,1)}}},o}),{isClass:!0})),Ni=Se(\"number\",[\"typed\"],(function(e){var t=e.typed,r=t(\"number\",{\"\":function(){return 0},number:function(e){return e},string:function(e){if(\"NaN\"===e)return NaN;var t,r,n=(r=(t=e).match(/(0[box])([0-9a-fA-F]*)\\.([0-9a-fA-F]*)/))?{input:t,radix:{\"0b\":2,\"0o\":8,\"0x\":16}[r[1]],integerPart:r[2],fractionalPart:r[3]}:null;if(n)return function(e){for(var t=parseInt(e.integerPart,e.radix),r=0,n=0;nMath.pow(2,i)-1)throw new SyntaxError('String \"'.concat(e,'\" is out of range'));o>=Math.pow(2,i-1)&&(o-=Math.pow(2,i))}return o},BigNumber:function(e){return e.toNumber()},Fraction:function(e){return e.valueOf()},Unit:t.referToSelf((function(e){return function(t){var r=t.clone();return r.value=e(t.value),r}})),null:function(e){return 0},\"Unit, string | Unit\":function(e,t){return e.toNumber(t)},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))});return r.fromJSON=function(e){return parseFloat(e.value)},r})),Ei=\"string\",Ai=Se(Ei,[\"typed\"],(function(e){var t=e.typed;return t(Ei,{\"\":function(){return\"\"},number:ee,null:function(e){return\"null\"},boolean:function(e){return e+\"\"},string:function(e){return e},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}})),any:function(e){return String(e)}})})),Si=\"boolean\",Ci=Se(Si,[\"typed\"],(function(e){var t=e.typed;return t(Si,{\"\":function(){return!1},boolean:function(e){return e},number:function(e){return!!e},null:function(e){return!1},BigNumber:function(e){return!e.isZero()},string:function(e){var t=e.toLowerCase();if(\"true\"===t)return!0;if(\"false\"===t)return!1;var r=Number(e);if(\"\"!==e&&!isNaN(r))return!!r;throw new Error('Cannot convert \"'+e+'\" to a boolean')},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Mi=Se(\"bignumber\",[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(\"bignumber\",{\"\":function(){return new r(0)},number:function(e){return new r(e+\"\")},string:function(e){var t=e.match(/(0[box][0-9a-fA-F]*)i([0-9]*)/);if(t){var n=t[2],i=r(t[1]),a=new r(2).pow(Number(n));if(i.gt(a.sub(1)))throw new SyntaxError('String \"'.concat(e,'\" is out of range'));var o=new r(2).pow(Number(n)-1);return i.gte(o)?i.sub(a):i}return new r(e)},BigNumber:function(e){return e},Unit:t.referToSelf((function(e){return function(t){var r=t.clone();return r.value=e(t.value),r}})),Fraction:function(e){return new r(e.n).div(e.d).times(e.s)},null:function(e){return new r(0)},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Fi=Se(\"complex\",[\"typed\",\"Complex\"],(function(e){var t=e.typed,r=e.Complex;return t(\"complex\",{\"\":function(){return r.ZERO},number:function(e){return new r(e,0)},\"number, number\":function(e,t){return new r(e,t)},\"BigNumber, BigNumber\":function(e,t){return new r(e.toNumber(),t.toNumber())},Fraction:function(e){return new r(e.valueOf(),0)},Complex:function(e){return e.clone()},string:function(e){return r(e)},null:function(e){return r(0)},Object:function(e){if(\"re\"in e&&\"im\"in e)return new r(e.re,e.im);if(\"r\"in e&&\"phi\"in e||\"abs\"in e&&\"arg\"in e)return new r(e);throw new Error(\"Expected object with properties (re and im) or (r and phi) or (abs and arg)\")},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Oi=Se(\"fraction\",[\"typed\",\"Fraction\"],(function(e){var t=e.typed,r=e.Fraction;return t(\"fraction\",{number:function(e){if(!isFinite(e)||isNaN(e))throw new Error(e+\" cannot be represented as a fraction\");return new r(e)},string:function(e){return new r(e)},\"number, number\":function(e,t){return new r(e,t)},null:function(e){return new r(0)},BigNumber:function(e){return new r(e.toString())},Fraction:function(e){return e},Unit:t.referToSelf((function(e){return function(t){var r=t.clone();return r.value=e(t.value),r}})),Object:function(e){return new r(e)},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Ti=\"matrix\",_i=Se(Ti,[\"typed\",\"Matrix\",\"DenseMatrix\",\"SparseMatrix\"],(function(e){var t=e.typed,r=(e.Matrix,e.DenseMatrix),n=e.SparseMatrix;return t(Ti,{\"\":function(){return i([])},string:function(e){return i([],e)},\"string, string\":function(e,t){return i([],e,t)},Array:function(e){return i(e)},Matrix:function(e){return i(e,e.storage())},\"Array | Matrix, string\":i,\"Array | Matrix, string, string\":i});function i(e,t,i){if(\"dense\"===t||\"default\"===t||void 0===t)return new r(e,i);if(\"sparse\"===t)return new n(e,i);throw new TypeError(\"Unknown matrix type \"+JSON.stringify(t)+\".\")}})),Bi=\"matrixFromFunction\",ki=Se(Bi,[\"typed\",\"matrix\",\"isZero\"],(function(e){var t=e.typed,r=e.matrix,n=e.isZero;return t(Bi,{\"Array | Matrix, function, string, string\":function(e,t,r,n){return i(e,t,r,n)},\"Array | Matrix, function, string\":function(e,t,r){return i(e,t,r)},\"Matrix, function\":function(e,t){return i(e,t,\"dense\")},\"Array, function\":function(e,t){return i(e,t,\"dense\").toArray()},\"Array | Matrix, string, function\":function(e,t,r){return i(e,r,t)},\"Array | Matrix, string, string, function\":function(e,t,r,n){return i(e,n,t,r)}});function i(e,t,i,a){var o;return(o=void 0!==a?r(i,a):r(i)).resize(e),o.forEach((function(e,r){var i=t(r);n(i)||o.set(r,i)})),o}}));function Ii(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(e);try{for(a.s();!(t=a.n()).done;){var u=t.value,s=o(u);if(s!==r)throw new TypeError(\"The vectors had different length: \"+(0|r)+\" ≠ \"+(0|s));i.push(n(u))}}catch(e){a.e(e)}finally{a.f()}return i}function o(e){var t=i(e);if(1===t.length)return t[0];if(2===t.length){if(1===t[0])return t[1];if(1===t[1])return t[0];throw new TypeError(\"At least one of the arguments is not a vector.\")}throw new TypeError(\"Only one- or two-dimensional vectors are supported.\")}}));function qi(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(e);try{for(u.s();!(a=u.n()).done;){var s=a.value,c=o(s);if(c!==t)throw new TypeError(\"The vectors had different length: \"+(0|t)+\" ≠ \"+(0|c));for(var f=n(s),l=0;l1&&void 0!==arguments[1]?arguments[1]:2,r=t<0;if(r&&(t=-t),0===t)throw new Error(\"Root must be non-zero\");if(e<0&&Math.abs(t)%2!=1)throw new Error(\"Root must be odd when a is negative.\");if(0===e)return r?1/0:0;if(!isFinite(e))return r?0:e;var n=Math.pow(Math.abs(e),1/t);return n=e<0?-n:n,r?1/n:n}function aa(e){return Z(e)}function oa(e){return e*e}function ua(e,t){var r,n,i,a=0,o=1,u=1,s=0;if(!V(e)||!V(t))throw new Error(\"Parameters in function xgcd must be integer numbers\");for(;t;)i=e-(n=Math.floor(e/t))*t,r=a,a=o-n*a,o=r,r=u,u=s-n*u,s=r,e=t,t=i;return e<0?[-e,-o,-s]:[e,e?o:0,s]}function sa(e,t){return e*e<1&&t===1/0||e*e>1&&t===-1/0?0:Math.pow(e,t)}function ca(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!V(t)||t<0||t>15)throw new Error(\"Number of decimals in function round must be an integer from 0 to 15 inclusive\");return parseFloat(ne(e,t))}Gi.signature=$i,Vi.signature=Hi,Zi.signature=Hi,Wi.signature=Hi,Yi.signature=$i,Ji.signature=$i,Xi.signature=$i,Qi.signature=$i,Ki.signature=$i,ea.signature=$i,ta.signature=Hi,ra.signature=$i,na.signature=$i,aa.signature=$i,oa.signature=$i,ua.signature=Hi,sa.signature=Hi;var fa=\"unaryMinus\",la=Se(fa,[\"typed\"],(function(e){var t=e.typed;return t(fa,{number:Yi,\"Complex | BigNumber | Fraction\":function(e){return e.neg()},Unit:t.referToSelf((function(e){return function(r){var n=r.clone();return n.value=t.find(e,n.valueType())(r.value),n}})),\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}}))})})),pa=\"unaryPlus\",ma=Se(pa,[\"typed\",\"config\",\"BigNumber\"],(function(e){var t=e.typed,r=e.config,n=e.BigNumber;return t(pa,{number:Ji,Complex:function(e){return e},BigNumber:function(e){return e},Fraction:function(e){return e},Unit:function(e){return e.clone()},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),\"boolean | string\":function(e){return\"BigNumber\"===r.number?new n(+e):+e}})})),ha=Se(\"abs\",[\"typed\"],(function(e){var t=e.typed;return t(\"abs\",{number:Gi,\"Complex | BigNumber | Fraction | Unit\":function(e){return e.abs()},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}}))})})),da=\"apply\",va=Se(da,[\"typed\",\"isInteger\"],(function(e){var t=e.typed,r=e.isInteger;return t(da,{\"Array | Matrix, number | BigNumber, function\":function(e,t,n){if(!r(t))throw new TypeError(\"Integer number expected for dimension\");var i=Array.isArray(e)?cn(e):e.size();if(t<0||t>=i.length)throw new sn(t,i.length);return l(e)?e.create(ya(e.valueOf(),t,n)):ya(e,t,n)}})}));function ya(e,t,r){var n,i,a;if(t<=0){if(Array.isArray(e[0])){for(a=function(e){var t,r,n=e.length,i=e[0].length,a=[];for(r=0;r0?r(f,0,s,s[0],u,n,a):[];return e.createDenseMatrix({data:l,size:ye(s),datatype:o})};function r(e,t,n,i,a,o,u){var s=[];if(t===n.length-1)for(var c=0;c0?n(e):r(e)},\"number, number\":function(e,t){return e>0?n(e,t):r(e,t)}})})),Pa=Se(Ra,qa,(function(e){var t=e.typed,r=e.Complex,n=e.matrix,i=e.ceil,a=e.floor,o=e.equalScalar,u=e.zeros,s=e.DenseMatrix,c=Sa({typed:t,DenseMatrix:s}),f=Ca({typed:t}),l=ja({typed:t,ceil:i,floor:a});return t(\"fix\",{number:l.signatures.number,\"number, number | BigNumber\":l.signatures[\"number,number\"],Complex:function(e){return new r(e.re>0?Math.floor(e.re):Math.ceil(e.re),e.im>0?Math.floor(e.im):Math.ceil(e.im))},\"Complex, number\":function(e,t){return new r(e.re>0?a(e.re,t):i(e.re,t),e.im>0?a(e.im,t):i(e.im,t))},\"Complex, BigNumber\":function(e,t){var n=t.toNumber();return new r(e.re>0?a(e.re,n):i(e.re,n),e.im>0?a(e.im,n):i(e.im,n))},BigNumber:function(e){return e.isNegative()?i(e):a(e)},\"BigNumber, number | BigNumber\":function(e,t){return e.isNegative()?i(e,t):a(e,t)},Fraction:function(e){return e.s<0?e.ceil():e.floor()},\"Fraction, number | BigNumber\":function(e,t){return e.s<0?i(e,t):a(e,t)},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),\"Array | Matrix, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return Zn(t,(function(t){return e(t,r)}),!0)}})),\"number | Complex | Fraction | BigNumber, Array\":t.referToSelf((function(e){return function(t,r){return f(n(r),t,e,!0).valueOf()}})),\"number | Complex | Fraction | BigNumber, Matrix\":t.referToSelf((function(e){return function(t,r){return o(t,0)?u(r.size(),r.storage()):\"dense\"===r.storage()?f(r,t,e,!0):c(r,t,e,!0)}}))})})),La=\"floor\",Ua=[\"typed\",\"config\",\"round\",\"matrix\",\"equalScalar\",\"zeros\",\"DenseMatrix\"],$a=Se(La,[\"typed\",\"config\",\"round\"],(function(e){var t=e.typed,r=e.config,n=e.round;return t(La,{number:function(e){return se(e,n(e),r.epsilon)?n(e):Math.floor(e)},\"number, number\":function(e,t){if(se(e,n(e,t),r.epsilon))return n(e,t);var i=Ea(\"\".concat(e,\"e\").split(\"e\"),2),a=i[0],o=i[1],u=Math.floor(Number(\"\".concat(a,\"e\").concat(Number(o)+t))),s=Ea(\"\".concat(u,\"e\").split(\"e\"),2);return a=s[0],o=s[1],Number(\"\".concat(a,\"e\").concat(Number(o)-t))}})})),Ha=Se(La,Ua,(function(e){var t=e.typed,r=e.config,n=e.round,i=e.matrix,a=e.equalScalar,o=e.zeros,u=e.DenseMatrix,s=Aa({typed:t,equalScalar:a}),c=Sa({typed:t,DenseMatrix:u}),f=Ca({typed:t}),l=$a({typed:t,config:r,round:n});return t(\"floor\",{number:l.signatures.number,\"number,number\":l.signatures[\"number,number\"],Complex:function(e){return e.floor()},\"Complex, number\":function(e,t){return e.floor(t)},\"Complex, BigNumber\":function(e,t){return e.floor(t.toNumber())},BigNumber:function(e){return gi(e,n(e),r.epsilon)?n(e):e.floor()},\"BigNumber, BigNumber\":function(e,t){return gi(e,n(e,t),r.epsilon)?n(e,t):e.toDecimalPlaces(t.toNumber(),Pr.ROUND_FLOOR)},Fraction:function(e){return e.floor()},\"Fraction, number\":function(e,t){return e.floor(t)},\"Fraction, BigNumber\":function(e,t){return e.floor(t.toNumber())},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),\"Array, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return Zn(t,(function(t){return e(t,r)}),!0)}})),\"SparseMatrix, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return s(t,r,e,!1)}})),\"DenseMatrix, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return f(t,r,e,!1)}})),\"number | Complex | Fraction | BigNumber, Array\":t.referToSelf((function(e){return function(t,r){return f(i(r),t,e,!0).valueOf()}})),\"number | Complex | Fraction | BigNumber, Matrix\":t.referToSelf((function(e){return function(t,r){return a(t,0)?o(r.size(),r.storage()):\"dense\"===r.storage()?f(r,t,e,!0):c(r,t,e,!0)}}))})}));function Ga(e,t,r){return(t=Be(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var Va=Se(\"matAlgo02xDS0\",[\"typed\",\"equalScalar\"],(function(e){var t=e.typed,r=e.equalScalar;return function(e,n,i,a){var o=e._data,u=e._size,s=e._datatype||e.getDataType(),c=n._values,f=n._index,l=n._ptr,p=n._size,m=n._datatype||void 0===n._data?n._datatype:n.getDataType();if(u.length!==p.length)throw new un(u.length,p.length);if(u[0]!==p[0]||u[1]!==p[1])throw new RangeError(\"Dimension mismatch. Matrix A (\"+u+\") must match Matrix B (\"+p+\")\");if(!c)throw new Error(\"Cannot perform operation on Dense Matrix and Pattern Sparse Matrix\");var h,d=u[0],v=u[1],y=r,g=0,x=i;\"string\"==typeof s&&s===m&&\"mixed\"!==s&&(h=s,y=t.find(r,[h,h]),g=t.convert(0,h),x=t.find(i,[h,h]));for(var b=[],w=[],D=[],N=0;N0?r(h,0,p,p[0],o,c):[];return e.createDenseMatrix({data:d,size:p,datatype:a})};function r(e,t,n,i,a,o){var u=[];if(t===n.length-1)for(var s=0;s=0||r.predictable?ra(e):new n(e,0).log().div(Math.LN10)},Complex:function(e){return new n(e).log().div(Math.LN10)},BigNumber:function(e){return!e.isNegative()||r.predictable?e.log():new n(e.toNumber(),0).log().div(Math.LN10)},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),po=\"log2\",mo=Se(po,[\"typed\",\"config\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(po,{number:function(e){return e>=0||r.predictable?na(e):i(new n(e,0))},Complex:i,BigNumber:function(e){return!e.isNegative()||r.predictable?e.log(2):i(new n(e.toNumber(),0))},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))});function i(e){var t=Math.sqrt(e.re*e.re+e.im*e.im);return new n(Math.log2?Math.log2(t):Math.log(t)/Math.LN2,Math.atan2(e.im,e.re)/Math.LN2)}})),ho=Se(\"multiplyScalar\",[\"typed\"],(function(e){return(0,e.typed)(\"multiplyScalar\",{\"number, number\":Wi,\"Complex, Complex\":function(e,t){return e.mul(t)},\"BigNumber, BigNumber\":function(e,t){return e.times(t)},\"Fraction, Fraction\":function(e,t){return e.mul(t)},\"number | Fraction | BigNumber | Complex, Unit\":function(e,t){return t.multiply(e)},\"Unit, number | Fraction | BigNumber | Complex | Unit\":function(e,t){return e.multiply(t)}})})),vo=\"multiply\",yo=Se(vo,[\"typed\",\"matrix\",\"addScalar\",\"multiplyScalar\",\"equalScalar\",\"dot\"],(function(e){var t=e.typed,r=e.matrix,n=e.addScalar,i=e.multiplyScalar,a=e.equalScalar,o=e.dot,u=Aa({typed:t,equalScalar:a}),s=Ca({typed:t});function c(e,t){switch(e.length){case 1:switch(t.length){case 1:if(e[0]!==t[0])throw new RangeError(\"Dimension mismatch in multiplication. Vectors must have the same length\");break;case 2:if(e[0]!==t[0])throw new RangeError(\"Dimension mismatch in multiplication. Vector length (\"+e[0]+\") must match Matrix rows (\"+t[0]+\")\");break;default:throw new Error(\"Can only multiply a 1 or 2 dimensional matrix (Matrix B has \"+t.length+\" dimensions)\")}break;case 2:switch(t.length){case 1:if(e[1]!==t[0])throw new RangeError(\"Dimension mismatch in multiplication. Matrix columns (\"+e[1]+\") must match Vector length (\"+t[0]+\")\");break;case 2:if(e[1]!==t[0])throw new RangeError(\"Dimension mismatch in multiplication. Matrix A columns (\"+e[1]+\") must match Matrix B rows (\"+t[0]+\")\");break;default:throw new Error(\"Can only multiply a 1 or 2 dimensional matrix (Matrix B has \"+t.length+\" dimensions)\")}break;default:throw new Error(\"Can only multiply a 1 or 2 dimensional matrix (Matrix A has \"+e.length+\" dimensions)\")}}var f=t(\"_multiplyMatrixVector\",{\"DenseMatrix, any\":function(e,r){var a,o=e._data,u=e._size,s=e._datatype||e.getDataType(),c=r._data,f=r._datatype||r.getDataType(),l=u[0],p=u[1],m=n,h=i;s&&f&&s===f&&\"string\"==typeof s&&\"mixed\"!==s&&(a=s,m=t.find(n,[a,a]),h=t.find(i,[a,a]));for(var d=[],v=0;vS)for(var M=0,F=0;F=0||t.predictable?Math.sqrt(e):new n(e,0).sqrt()}})),No=\"square\",Eo=Se(No,[\"typed\"],(function(e){return(0,e.typed)(No,{number:oa,Complex:function(e){return e.mul(e)},BigNumber:function(e){return e.times(e)},Fraction:function(e){return e.mul(e)},Unit:function(e){return e.pow(2)}})})),Ao=\"subtract\",So=Se(Ao,[\"typed\",\"matrix\",\"equalScalar\",\"subtractScalar\",\"unaryMinus\",\"DenseMatrix\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.subtractScalar,a=(e.unaryMinus,e.DenseMatrix),o=e.concat,u=Ka({typed:t}),s=Za({typed:t}),c=Wa({typed:t,equalScalar:n}),f=to({typed:t,DenseMatrix:a}),l=Sa({typed:t,DenseMatrix:a}),p=Xa({typed:t,matrix:r,concat:o});return t(Ao,{\"any, any\":i},p({elop:i,SS:c,DS:u,SD:s,Ss:l,sS:f}))})),Co=\"xgcd\",Mo=Se(Co,[\"typed\",\"config\",\"matrix\",\"BigNumber\"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.BigNumber;return t(Co,{\"number, number\":function(e,t){var i=ua(e,t);return\"Array\"===r.matrix?i:n(i)},\"BigNumber, BigNumber\":function(e,t){var a,o,u,s,c=new i(0),f=new i(1),l=c,p=f,m=f,h=c;if(!e.isInt()||!t.isInt())throw new Error(\"Parameters in function xgcd must be integer numbers\");for(;!t.isZero();)o=e.div(t).floor(),u=e.mod(t),a=l,l=p.minus(o.times(l)),p=a,a=m,m=h.minus(o.times(m)),h=a,e=t,t=u;return s=e.lt(c)?[e.neg(),p.neg(),h.neg()]:[e,e.isZero()?0:p,h],\"Array\"===r.matrix?s:n(s)}})})),Fo=\"invmod\",Oo=Se(Fo,[\"typed\",\"config\",\"BigNumber\",\"xgcd\",\"equal\",\"smaller\",\"mod\",\"add\",\"isInteger\"],(function(e){var t=e.typed,r=(e.config,e.BigNumber),n=e.xgcd,i=e.equal,a=e.smaller,o=e.mod,u=e.add,s=e.isInteger;return t(Fo,{\"number, number\":c,\"BigNumber, BigNumber\":c});function c(e,t){if(!s(e)||!s(t))throw new Error(\"Parameters in function invmod must be integer numbers\");if(e=o(e,t),i(t,0))throw new Error(\"Divisor must be non zero\");var c=n(e,t),f=Ea(c=c.valueOf(),2),l=f[0],p=f[1];return i(l,r(1))?(p=o(p,t),a(p,r(0))&&(p=u(p,t)),p):NaN}})),To=Se(\"matAlgo09xS0Sf\",[\"typed\",\"equalScalar\"],(function(e){var t=e.typed,r=e.equalScalar;return function(e,n,i){var a=e._values,o=e._index,u=e._ptr,s=e._size,c=e._datatype||void 0===e._data?e._datatype:e.getDataType(),f=n._values,l=n._index,p=n._ptr,m=n._size,h=n._datatype||void 0===n._data?n._datatype:n.getDataType();if(s.length!==m.length)throw new un(s.length,m.length);if(s[0]!==m[0]||s[1]!==m[1])throw new RangeError(\"Dimension mismatch. Matrix A (\"+s+\") must match Matrix B (\"+m+\")\");var d,v=s[0],y=s[1],g=r,x=0,b=i;\"string\"==typeof c&&c===h&&\"mixed\"!==c&&(d=c,g=t.find(r,[d,d]),x=t.convert(0,d),b=t.find(i,[d,d]));var w,D,N,E,A,S=a&&f?[]:void 0,C=[],M=[],F=S?[]:void 0,O=[];for(D=0;D0;)r(a[--m],o[--h])===d&&(v=v.plus(y)),y=y.times(g);for(;h>0;)r(u,o[--h])===d&&(v=v.plus(y)),y=y.times(g);return s.config({precision:x}),0===d&&(v.s=-v.s),v}function qo(e){for(var t=e.d,r=t[0]+\"\",n=1;n0)if(++u>c)for(u-=c;u--;)s+=\"0\";else u1&&(null!==f[m+1]&&void 0!==f[m+1]||(f[m+1]=0),f[m+1]+=f[m]>>1,f[m]&=1)}return f.reverse()}function jo(e,t){if(e.isFinite()&&!e.isInteger()||t.isFinite()&&!t.isInteger())throw new Error(\"Integers expected in function bitXor\");var r=e.constructor;if(e.isNaN()||t.isNaN())return new r(NaN);if(e.isZero())return t;if(t.isZero())return e;if(e.eq(t))return new r(0);var n=new r(-1);return e.eq(n)?Io(t):t.eq(n)?Io(e):e.isFinite()&&t.isFinite()?Ro(e,t,(function(e,t){return e^t})):e.isFinite()||t.isFinite()?new r(e.isNegative()===t.isNegative()?1/0:-1/0):n}function Po(e,t){if(e.isFinite()&&!e.isInteger()||t.isFinite()&&!t.isInteger())throw new Error(\"Integers expected in function leftShift\");var r=e.constructor;return e.isNaN()||t.isNaN()||t.isNegative()&&!t.isZero()?new r(NaN):e.isZero()||t.isZero()?e:e.isFinite()||t.isFinite()?t.lt(55)?e.times(Math.pow(2,t.toNumber())+\"\"):e.times(new r(2).pow(t)):new r(NaN)}function Lo(e,t){if(e.isFinite()&&!e.isInteger()||t.isFinite()&&!t.isInteger())throw new Error(\"Integers expected in function rightArithShift\");var r=e.constructor;return e.isNaN()||t.isNaN()||t.isNegative()&&!t.isZero()?new r(NaN):e.isZero()||t.isZero()?e:t.isFinite()?t.lt(55)?e.div(Math.pow(2,t.toNumber())+\"\").floor():e.div(new r(2).pow(t)).floor():e.isNegative()?new r(-1):e.isFinite()?new r(0):new r(NaN)}r(4490);var Uo=\"number, number\";function $o(e,t){if(!V(e)||!V(t))throw new Error(\"Integers expected in function bitAnd\");return e&t}function Ho(e){if(!V(e))throw new Error(\"Integer expected in function bitNot\");return~e}function Go(e,t){if(!V(e)||!V(t))throw new Error(\"Integers expected in function bitOr\");return e|t}function Vo(e,t){if(!V(e)||!V(t))throw new Error(\"Integers expected in function bitXor\");return e^t}function Zo(e,t){if(!V(e)||!V(t))throw new Error(\"Integers expected in function leftShift\");return e<>t}function Yo(e,t){if(!V(e)||!V(t))throw new Error(\"Integers expected in function rightLogShift\");return e>>>t}$o.signature=Uo,Ho.signature=\"number\",Go.signature=Uo,Vo.signature=Uo,Zo.signature=Uo,Wo.signature=Uo,Yo.signature=Uo;var Jo=\"bitAnd\",Xo=Se(Jo,[\"typed\",\"matrix\",\"equalScalar\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.concat,a=Va({typed:t,equalScalar:n}),o=so({typed:t,equalScalar:n}),u=Aa({typed:t,equalScalar:n}),s=Xa({typed:t,matrix:r,concat:i});return t(Jo,{\"number, number\":$o,\"BigNumber, BigNumber\":ko},s({SS:o,DS:a,Ss:u}))})),Qo=\"bitNot\",Ko=Se(Qo,[\"typed\"],(function(e){var t=e.typed;return t(Qo,{number:Ho,BigNumber:Io,\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),eu=\"bitOr\",tu=Se(eu,[\"typed\",\"matrix\",\"equalScalar\",\"DenseMatrix\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.DenseMatrix,a=e.concat,o=Ka({typed:t}),u=eo({typed:t,equalScalar:n}),s=to({typed:t,DenseMatrix:i}),c=Xa({typed:t,matrix:r,concat:a});return t(eu,{\"number, number\":Go,\"BigNumber, BigNumber\":zo},c({SS:u,DS:o,Ss:s}))})),ru=Se(\"matAlgo07xSSf\",[\"typed\",\"DenseMatrix\"],(function(e){var t=e.typed,r=e.DenseMatrix;return function(e,i,a){var o=e._size,u=e._datatype||void 0===e._data?e._datatype:e.getDataType(),s=i._size,c=i._datatype||void 0===i._data?i._datatype:i.getDataType();if(o.length!==s.length)throw new un(o.length,s.length);if(o[0]!==s[0]||o[1]!==s[1])throw new RangeError(\"Dimension mismatch. Matrix A (\"+o+\") must match Matrix B (\"+s+\")\");var f,l,p,m=o[0],h=o[1],d=0,v=a;\"string\"==typeof u&&u===c&&\"mixed\"!==u&&(f=u,d=t.convert(0,f),v=t.find(a,[f,f]));var y=[];for(l=0;l0&&s>o)throw new sn(s,o+1)}else{var m=ye(p).valueOf(),h=cn(m);if(f[t]=m,o=s,s=h.length-1,t>0&&s!==o)throw new un(o+1,s+1)}}if(0===f.length)throw new SyntaxError(\"At least one matrix expected\");for(var d=f.shift();f.length;)d=kn(d,f.shift(),s);return c?r(d):d},\"...string\":function(e){return e.join(\"\")}})})),bu=\"column\",wu=Se(bu,[\"typed\",\"Index\",\"matrix\",\"range\"],(function(e){var t=e.typed,r=e.Index,n=e.matrix,i=e.range;return t(bu,{\"Matrix, number\":a,\"Array, number\":function(e,t){return a(n(ye(e)),t).valueOf()}});function a(e,t){if(2!==e.size().length)throw new Error(\"Only two dimensional matrix is supported\");mn(t,e.size()[1]);var a=i(0,e.size()[0]),o=new r(a,t),u=e.subset(o);return l(u)?u:n([[u]])}})),Du=\"count\",Nu=Se(Du,[\"typed\",\"size\",\"prod\"],(function(e){var t=e.typed,r=e.size,n=e.prod;return t(Du,{string:function(e){return e.length},\"Matrix | Array\":function(e){return n(r(e))}})})),Eu=\"cross\",Au=Se(Eu,[\"typed\",\"matrix\",\"subtract\",\"multiply\"],(function(e){var t=e.typed,r=e.matrix,n=e.subtract,i=e.multiply;return t(Eu,{\"Matrix, Matrix\":function(e,t){return r(a(e.toArray(),t.toArray()))},\"Matrix, Array\":function(e,t){return r(a(e.toArray(),t))},\"Array, Matrix\":function(e,t){return r(a(e,t.toArray()))},\"Array, Array\":a});function a(e,t){var r=Math.max(cn(e).length,cn(t).length);e=bn(e),t=bn(t);var a=cn(e),o=cn(t);if(1!==a.length||1!==o.length||3!==a[0]||3!==o[0])throw new RangeError(\"Vectors with length 3 expected (Size A = [\"+a.join(\", \")+\"], B = [\"+o.join(\", \")+\"])\");var u=[n(i(e[1],t[2]),i(e[2],t[1])),n(i(e[2],t[0]),i(e[0],t[2])),n(i(e[0],t[1]),i(e[1],t[0]))];return r>1?[u]:u}})),Su=\"diag\",Cu=Se(Su,[\"typed\",\"matrix\",\"DenseMatrix\",\"SparseMatrix\"],(function(e){var t=e.typed,r=e.matrix,n=e.DenseMatrix,i=e.SparseMatrix;return t(Su,{Array:function(e){return a(e,0,cn(e),null)},\"Array, number\":function(e,t){return a(e,t,cn(e),null)},\"Array, BigNumber\":function(e,t){return a(e,t.toNumber(),cn(e),null)},\"Array, string\":function(e,t){return a(e,0,cn(e),t)},\"Array, number, string\":function(e,t,r){return a(e,t,cn(e),r)},\"Array, BigNumber, string\":function(e,t,r){return a(e,t.toNumber(),cn(e),r)},Matrix:function(e){return a(e,0,e.size(),e.storage())},\"Matrix, number\":function(e,t){return a(e,t,e.size(),e.storage())},\"Matrix, BigNumber\":function(e,t){return a(e,t.toNumber(),e.size(),e.storage())},\"Matrix, string\":function(e,t){return a(e,0,e.size(),t)},\"Matrix, number, string\":function(e,t,r){return a(e,t,e.size(),r)},\"Matrix, BigNumber, string\":function(e,t,r){return a(e,t.toNumber(),e.size(),r)}});function a(e,t,a,o){if(!V(t))throw new TypeError(\"Second parameter in function diag must be an integer\");var u=t>0?t:0,s=t<0?-t:0;switch(a.length){case 1:return function(e,t,r,a,o,u){var s=[a+o,a+u];if(r&&\"sparse\"!==r&&\"dense\"!==r)throw new TypeError(\"Unknown matrix type \".concat(r,'\"'));var c=\"sparse\"===r?i.diagonal(s,e,t):n.diagonal(s,e,t);return null!==r?c:c.valueOf()}(e,t,o,a[0],s,u);case 2:return function(e,t,n,i,a,o){if(l(e)){var u=e.diagonal(t);return null!==n?n!==u.storage()?r(u,n):u:u.valueOf()}for(var s=Math.min(i[0]-a,i[1]-o),c=[],f=0;f=2&&s.push(\"index: \".concat(H(r))),o.length>=3&&s.push(\"array: \".concat(H(n))),new TypeError(\"Function \".concat(i,\" cannot apply callback arguments \")+\"\".concat(e.name,\"(\").concat(s.join(\", \"),\") at index \").concat(JSON.stringify(r)))}throw new TypeError(\"Function \".concat(i,\" cannot apply callback arguments \")+\"to function \".concat(e.name,\": \").concat(a.message))}}}var Fu=Se(\"filter\",[\"typed\"],(function(e){return(0,e.typed)(\"filter\",{\"Array, function\":Ou,\"Matrix, function\":function(e,t){return e.create(Ou(e.toArray(),t))},\"Array, RegExp\":Mn,\"Matrix, RegExp\":function(e,t){return e.create(Mn(e.toArray(),t))}})}));function Ou(e,t){return Cn(e,(function(e,r,n){return Mu(t,e,[r],n,\"filter\")}))}var Tu=\"flatten\",_u=Se(Tu,[\"typed\",\"matrix\"],(function(e){var t=e.typed,r=e.matrix;return t(Tu,{Array:function(e){return En(e)},Matrix:function(e){var t=En(e.toArray());return r(t)}})})),Bu=\"forEach\",ku=Se(Bu,[\"typed\"],(function(e){return(0,e.typed)(Bu,{\"Array, function\":Iu,\"Matrix, function\":function(e,t){e.forEach(t)}})}));function Iu(e,t){!function r(n,i){if(!Array.isArray(n))return Mu(t,n,i,e,\"forEach\");Sn(n,(function(e,t){r(e,i.concat(t))}))}(e,[])}var zu=\"getMatrixDataType\",Ru=Se(zu,[\"typed\"],(function(e){return(0,e.typed)(zu,{Array:function(e){return _n(e,H)},Matrix:function(e){return e.getDataType()}})})),qu=\"identity\",ju=Se(qu,[\"typed\",\"config\",\"matrix\",\"BigNumber\",\"DenseMatrix\",\"SparseMatrix\"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.BigNumber,o=e.DenseMatrix,u=e.SparseMatrix;return t(qu,{\"\":function(){return\"Matrix\"===r.matrix?n([]):[]},string:function(e){return n(e)},\"number | BigNumber\":function(e){return c(e,e,\"Matrix\"===r.matrix?\"dense\":void 0)},\"number | BigNumber, string\":function(e,t){return c(e,e,t)},\"number | BigNumber, number | BigNumber\":function(e,t){return c(e,t,\"Matrix\"===r.matrix?\"dense\":void 0)},\"number | BigNumber, number | BigNumber, string\":function(e,t,r){return c(e,t,r)},Array:function(e){return s(e)},\"Array, string\":function(e,t){return s(e,t)},Matrix:function(e){return s(e.valueOf(),e.storage())},\"Matrix, string\":function(e,t){return s(e.valueOf(),t)}});function s(e,t){switch(e.length){case 0:return t?n(t):[];case 1:return c(e[0],e[0],t);case 2:return c(e[0],e[1],t);default:throw new Error(\"Vector containing two values expected\")}}function c(e,t,r){var n=a(e)||a(t)?i:null;if(a(e)&&(e=e.toNumber()),a(t)&&(t=t.toNumber()),!V(e)||e<1)throw new Error(\"Parameters in function identity must be positive integers\");if(!V(t)||t<1)throw new Error(\"Parameters in function identity must be positive integers\");var s=n?new i(1):1,c=n?new n(0):0,f=[e,t];if(r){if(\"sparse\"===r)return u.diagonal(f,s,0,c);if(\"dense\"===r)return o.diagonal(f,s,0,c);throw new TypeError('Unknown matrix type \"'.concat(r,'\"'))}for(var l=dn([],f,c),p=e2||cn(t).length>2)throw new RangeError(\"Vectors with dimensions greater then 2 are not supported expected (Size x = \"+JSON.stringify(e.length)+\", y = \"+JSON.stringify(t.length)+\")\");var r=[],i=[];return e.map((function(e){return t.map((function(t){return i=[],r.push(i),e.map((function(e){return t.map((function(t){return i.push(n(e,t))}))}))}))}))&&r}})),Uu=Se(\"map\",[\"typed\"],(function(e){return(0,e.typed)(\"map\",{\"Array, function\":$u,\"Matrix, function\":function(e,t){return e.map(t)}})}));function $u(e,t){return function r(n,i){return Array.isArray(n)?n.map((function(e,t){return r(e,i.concat(t))})):Mu(t,n,i,e,\"map\")}(e,[])}var Hu=\"diff\",Gu=Se(Hu,[\"typed\",\"matrix\",\"subtract\",\"number\"],(function(e){var t=e.typed,r=e.matrix,n=e.subtract,i=e.number;return t(Hu,{\"Array | Matrix\":function(e){return l(e)?r(o(e.toArray())):o(e)},\"Array | Matrix, number\":function(e,t){if(!V(t))throw new RangeError(\"Dimension must be a whole number\");return l(e)?r(a(e.toArray(),t)):a(e,t)},\"Array, BigNumber\":t.referTo(\"Array,number\",(function(e){return function(t,r){return e(t,i(r))}})),\"Matrix, BigNumber\":t.referTo(\"Matrix,number\",(function(e){return function(t,r){return e(t,i(r))}}))});function a(e,t){if(l(e)&&(e=e.toArray()),!Array.isArray(e))throw RangeError(\"Array/Matrix does not have that many dimensions\");if(t>0){var r=[];return e.forEach((function(e){r.push(a(e,t-1))})),r}if(0===t)return o(e);throw RangeError(\"Cannot have negative dimension\")}function o(e){for(var t=[],r=e.length,n=1;n0?u.resize(e,o):u}var s=[];return e.length>0?dn(s,e,o):s}}));function Zu(){throw new Error('No \"bignumber\" implementation available')}function Wu(){throw new Error('No \"fraction\" implementation available')}function Yu(){throw new Error('No \"matrix\" implementation available')}var Ju=\"range\",Xu=Se(Ju,[\"typed\",\"config\",\"?matrix\",\"?bignumber\",\"smaller\",\"smallerEq\",\"larger\",\"largerEq\",\"add\",\"isPositive\"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.bignumber,a=e.smaller,o=e.smallerEq,u=e.larger,s=e.largerEq,c=e.add,f=e.isPositive;return t(Ju,{string:p,\"string, boolean\":p,\"number, number\":function(e,t){return l(m(e,t,1,!1))},\"number, number, number\":function(e,t,r){return l(m(e,t,r,!1))},\"number, number, boolean\":function(e,t,r){return l(m(e,t,1,r))},\"number, number, number, boolean\":function(e,t,r,n){return l(m(e,t,r,n))},\"BigNumber, BigNumber\":function(e,t){return l(m(e,t,new(0,e.constructor)(1),!1))},\"BigNumber, BigNumber, BigNumber\":function(e,t,r){return l(m(e,t,r,!1))},\"BigNumber, BigNumber, boolean\":function(e,t,r){return l(m(e,t,new(0,e.constructor)(1),r))},\"BigNumber, BigNumber, BigNumber, boolean\":function(e,t,r,n){return l(m(e,t,r,n))},\"Unit, Unit, Unit\":function(e,t,r){return l(m(e,t,r,!1))},\"Unit, Unit, Unit, boolean\":function(e,t,r,n){return l(m(e,t,r,n))}});function l(e){return\"Matrix\"===r.matrix?n?n(e):Yu():e}function p(e,t){var n=function(e){var t=e.split(\":\").map((function(e){return Number(e)}));if(t.some((function(e){return isNaN(e)})))return null;switch(t.length){case 2:return{start:t[0],end:t[1],step:1};case 3:return{start:t[0],end:t[2],step:t[1]};default:return null}}(e);if(!n)throw new SyntaxError('String \"'+e+'\" is no valid range');return\"BigNumber\"===r.number?(void 0===i&&Zu(),l(m(i(n.start),i(n.end),i(n.step)))):l(m(n.start,n.end,n.step,t))}function m(e,t,r,n){for(var i=[],l=f(r)?n?o:a:n?s:u,p=e;l(p,t);)i.push(p),p=c(p,r);return i}})),Qu=\"reshape\",Ku=Se(Qu,[\"typed\",\"isInteger\",\"matrix\"],(function(e){var t=e.typed,r=e.isInteger;return t(Qu,{\"Matrix, Array\":function(e,t){return e.reshape(t,!0)},\"Array, Array\":function(e,t){return t.forEach((function(e){if(!r(e))throw new TypeError(\"Invalid size for dimension: \"+e)})),yn(e,t)}})})),es=Se(\"resize\",[\"config\",\"matrix\"],(function(e){var t=e.config,r=e.matrix;return function(e,n,i){if(2!==arguments.length&&3!==arguments.length)throw new ro(\"resize\",arguments.length,2,3);if(l(n)&&(n=n.valueOf()),a(n[0])&&(n=n.map((function(e){return a(e)?e.toNumber():e}))),l(e))return e.resize(n,i,!0);if(\"string\"==typeof e)return function(e,t,r){if(void 0!==r){if(\"string\"!=typeof r||1!==r.length)throw new TypeError(\"Single character expected as defaultValue\")}else r=\" \";if(1!==t.length)throw new un(t.length,1);var n=t[0];if(\"number\"!=typeof n||!V(n))throw new TypeError(\"Invalid size, must contain positive integers (size: \"+en(t)+\")\");if(e.length>n)return e.substring(0,n);if(e.length2)throw new RangeError(\"Vector must be of dimensions 1x\".concat(t));if(2===r.length&&1!==r[1])throw new RangeError(\"Vector must be of dimensions 1x\".concat(t));if(r[0]!==t)throw new RangeError(\"Vector must be of dimensions 1x\".concat(t))}})),ns=\"rotationMatrix\",is=Se(ns,[\"typed\",\"config\",\"multiplyScalar\",\"addScalar\",\"unaryMinus\",\"norm\",\"matrix\",\"BigNumber\",\"DenseMatrix\",\"SparseMatrix\",\"cos\",\"sin\"],(function(e){var t=e.typed,r=e.config,n=e.multiplyScalar,i=e.addScalar,o=e.unaryMinus,u=e.norm,s=e.BigNumber,c=e.matrix,f=e.DenseMatrix,l=e.SparseMatrix,p=e.cos,m=e.sin;return t(ns,{\"\":function(){return\"Matrix\"===r.matrix?c([]):[]},string:function(e){return c(e)},\"number | BigNumber | Complex | Unit\":function(e){return h(e,\"Matrix\"===r.matrix?\"dense\":void 0)},\"number | BigNumber | Complex | Unit, string\":function(e,t){return h(e,t)},\"number | BigNumber | Complex | Unit, Array\":function(e,t){var r=c(t);return d(r),g(e,r,void 0)},\"number | BigNumber | Complex | Unit, Matrix\":function(e,t){d(t);var n=t.storage()||(\"Matrix\"===r.matrix?\"dense\":void 0);return g(e,t,n)},\"number | BigNumber | Complex | Unit, Array, string\":function(e,t,r){var n=c(t);return d(n),g(e,n,r)},\"number | BigNumber | Complex | Unit, Matrix, string\":function(e,t,r){return d(t),g(e,t,r)}});function h(e,t){var r=a(e)?new s(-1):-1,i=p(e),o=m(e);return y([[i,n(r,o)],[o,i]],t)}function d(e){var t=e.size();if(t.length<1||3!==t[0])throw new RangeError(\"Vector must be of dimensions 1x3\")}function v(e){return e.reduce((function(e,t){return n(e,t)}))}function y(e,t){if(t){if(\"sparse\"===t)return new l(e);if(\"dense\"===t)return new f(e);throw new TypeError('Unknown matrix type \"'.concat(t,'\"'))}return e}function g(e,t,r){var n=u(t);if(0===n)throw new RangeError(\"Rotation around zero vector\");var c=a(e)?s:null,f=c?new c(1):1,l=c?new c(-1):-1,h=c?new c(t.get([0])/n):t.get([0])/n,d=c?new c(t.get([1])/n):t.get([1])/n,g=c?new c(t.get([2])/n):t.get([2])/n,x=p(e),b=i(f,o(x)),w=m(e);return y([[i(x,v([h,h,b])),i(v([h,d,b]),v([l,g,w])),i(v([h,g,b]),v([d,w]))],[i(v([h,d,b]),v([g,w])),i(x,v([d,d,b])),i(v([d,g,b]),v([l,h,w]))],[i(v([h,g,b]),v([l,d,w])),i(v([d,g,b]),v([h,w])),i(x,v([g,g,b]))]],r)}})),as=Se(\"row\",[\"typed\",\"Index\",\"matrix\",\"range\"],(function(e){var t=e.typed,r=e.Index,n=e.matrix,i=e.range;return t(\"row\",{\"Matrix, number\":a,\"Array, number\":function(e,t){return a(n(ye(e)),t).valueOf()}});function a(e,t){if(2!==e.size().length)throw new Error(\"Only two dimensional matrix is supported\");mn(t,e.size()[0]);var a=i(0,e.size()[1]),o=new r(t,a),u=e.subset(o);return l(u)?u:n([[u]])}})),os=\"size\",us=Se(os,[\"typed\",\"config\",\"?matrix\"],(function(e){var t=e.typed,r=e.config,n=e.matrix;return t(os,{Matrix:function(e){return e.create(e.size())},Array:cn,string:function(e){return\"Array\"===r.matrix?[e.length]:n([e.length])},\"number | Complex | BigNumber | Unit | boolean | null\":function(e){return\"Array\"===r.matrix?[]:n?n([]):Yu()}})})),ss=\"squeeze\",cs=Se(ss,[\"typed\",\"matrix\"],(function(e){var t=e.typed,r=e.matrix;return t(ss,{Array:function(e){return bn(ye(e))},Matrix:function(e){var t=bn(e.toArray());return Array.isArray(t)?r(t):t},any:function(e){return ye(e)}})})),fs=\"subset\",ls=Se(fs,[\"typed\",\"matrix\",\"zeros\",\"add\"],(function(e){var t=e.typed,r=e.matrix,n=e.zeros,i=e.add;return t(fs,{\"Matrix, Index\":function(e,t){return hn(t)?r():(pn(e,t),e.subset(t))},\"Array, Index\":t.referTo(\"Matrix, Index\",(function(e){return function(t,n){var i=e(r(t),n);return n.isScalar()?i:i.valueOf()}})),\"Object, Index\":hs,\"string, Index\":ps,\"Matrix, Index, any, any\":function(e,t,r,a){return hn(t)?e:(pn(e,t),e.clone().subset(t,function(e,t){if(\"string\"==typeof e)throw new Error(\"can't boradcast a string\");if(t._isScalar)return e;var r=t.size();if(!r.every((function(e){return e>0})))return e;try{return i(e,n(r))}catch(t){return e}}(r,t),a))},\"Array, Index, any, any\":t.referTo(\"Matrix, Index, any, any\",(function(e){return function(t,n,i,a){var o=e(r(t),n,i,a);return o.isMatrix?o.valueOf():o}})),\"Array, Index, any\":t.referTo(\"Matrix, Index, any, any\",(function(e){return function(t,n,i){return e(r(t),n,i,void 0).valueOf()}})),\"Matrix, Index, any\":t.referTo(\"Matrix, Index, any, any\",(function(e){return function(t,r,n){return e(t,r,n,void 0)}})),\"string, Index, string\":ms,\"string, Index, string, string\":ms,\"Object, Index, any\":ds})}));function ps(e,t){if(!v(t))throw new TypeError(\"Index expected\");if(hn(t))return\"\";if(pn(Array.from(e),t),1!==t.size().length)throw new un(t.size().length,1);var r=e.length;mn(t.min()[0],r),mn(t.max()[0],r);var n=t.dimension(0),i=\"\";return n.forEach((function(t){i+=e.charAt(t)})),i}function ms(e,t,r,n){if(!t||!0!==t.isIndex)throw new TypeError(\"Index expected\");if(hn(t))return e;if(pn(Array.from(e),t),1!==t.size().length)throw new un(t.size().length,1);if(void 0!==n){if(\"string\"!=typeof n||1!==n.length)throw new TypeError(\"Single character expected as defaultValue\")}else n=\" \";var i=t.dimension(0);if(i.size()[0]!==r.length)throw new un(i.size()[0],r.length);var a=e.length;mn(t.min()[0]),mn(t.max()[0]);for(var o=[],u=0;ua)for(var s=a-1,c=o.length;s0?u.resize(e,o):u}var s=[];return e.length>0?dn(s,e,o):s}})),Ds=Se(\"fft\",[\"typed\",\"matrix\",\"addScalar\",\"multiplyScalar\",\"divideScalar\",\"exp\",\"tau\",\"i\",\"dotDivide\",\"conj\",\"pow\",\"ceil\",\"log2\"],(function(e){var t=e.typed,r=(e.matrix,e.addScalar),n=e.multiplyScalar,i=e.divideScalar,a=e.exp,o=e.tau,u=e.i,s=e.dotDivide,c=e.conj,f=e.pow,l=e.ceil,p=e.log2;return t(\"fft\",{Array:m,Matrix:function(e){return e.create(m(e.toArray()))}});function m(e){var t=cn(e);return 1===t.length?d(e,t[0]):h(e.map((function(e){return m(e,t.slice(1))})),0)}function h(e,t){var r=cn(e);if(0!==t)return new Array(r[0]).fill(0).map((function(r,n){return h(e[n],t-1)}));if(1===r.length)return d(e);function n(e){var t=cn(e);return new Array(t[1]).fill(0).map((function(r,n){return new Array(t[0]).fill(0).map((function(t,r){return e[r][n]}))}))}return n(h(n(e),1))}function d(e){var t=e.length;if(1===t)return[e[0]];if(t%2==0){for(var h=[].concat(Te(d(e.filter((function(e,t){return t%2==0})))),Te(d(e.filter((function(e,t){return t%2==1}))))),v=0;v1/4&&(j.push(r(j[U],q)),P.push(r(P[U],o(q,z,V))),U++);var Y=.84*Math.pow(M/W,.2);if(d(Y,F)?Y=F:h(Y,O)&&(Y=O),Y=_?y(Y):Y,q=o(q,Y),A&&h(l(q),A)?q=D?A:g(A):S&&d(l(q),S)&&(q=D?S:g(S)),++$>T)throw new Error(\"Maximum number of iterations reached, try changing options\")}return{t:j,y:P}}}function b(e,t,r,n){return x({a:[[],[.5],[0,3/4],[2/9,1/3,4/9]],c:[null,.5,3/4,1],b:[2/9,1/3,4/9,0],bp:[7/24,1/4,1/3,1/8]})(e,t,r,n)}function w(e,t,r,n){return x({a:[[],[.2],[3/40,9/40],[44/45,-56/15,32/9],[19372/6561,-25360/2187,64448/6561,-212/729],[9017/3168,-355/33,46732/5247,49/176,-5103/18656],[35/384,0,500/1113,125/192,-2187/6784,11/84]],c:[null,.2,.3,.8,8/9,1,1],b:[35/384,0,500/1113,125/192,-2187/6784,11/84,0],bp:[5179/57600,0,7571/16695,393/640,-92097/339200,187/2100,1/40]})(e,t,r,n)}function D(e,t,r,n){var i=n.method?n.method:\"RK45\",a={RK23:b,RK45:w};if(i.toUpperCase()in a){var o=function(e){for(var t=1;t=_s?Z(e):t<=Ms?Z(e)*function(e){var t,r=e*e,n=Os[0][4]*r,i=r;for(t=0;t<3;t+=1)n=(n+Os[0][t])*r,i=(i+Ts[0][t])*r;return e*(n+Os[0][3])/(i+Ts[0][3])}(t):t<=4?Z(e)*(1-function(e){var t,r=Os[1][8]*e,n=e;for(t=0;t<7;t+=1)r=(r+Os[1][t])*e,n=(n+Ts[1][t])*e;var i=(r+Os[1][7])/(n+Ts[1][7]),a=parseInt(16*e)/16,o=(e-a)*(e+a);return Math.exp(-a*a)*Math.exp(-o)*i}(t)):Z(e)*(1-function(e){var t,r=1/(e*e),n=Os[2][5]*r,i=r;for(t=0;t<4;t+=1)n=(n+Os[2][t])*r,i=(i+Ts[2][t])*r;var a=r*(n+Os[2][4])/(i+Ts[2][4]);a=(Fs-a)/e;var o=(e-(r=parseInt(16*e)/16))*(e+r);return Math.exp(-r*r)*Math.exp(-o)*a}(t))},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Ms=.46875,Fs=.5641895835477563,Os=[[3.1611237438705655,113.86415415105016,377.485237685302,3209.3775891384694,.18577770618460315],[.5641884969886701,8.883149794388377,66.11919063714163,298.6351381974001,881.952221241769,1712.0476126340707,2051.0783778260716,1230.3393547979972,2.1531153547440383e-8],[.30532663496123236,.36034489994980445,.12578172611122926,.016083785148742275,.0006587491615298378,.016315387137302097]],Ts=[[23.601290952344122,244.02463793444417,1282.6165260773723,2844.236833439171],[15.744926110709835,117.6939508913125,537.1811018620099,1621.3895745666903,3290.7992357334597,4362.619090143247,3439.3676741437216,1230.3393548037495],[2.568520192289822,1.8729528499234604,.5279051029514285,.06051834131244132,.0023352049762686918]],_s=Math.pow(2,53),Bs=\"zeta\",ks=Se(Bs,[\"typed\",\"config\",\"multiply\",\"pow\",\"divide\",\"factorial\",\"equal\",\"smallerEq\",\"isNegative\",\"gamma\",\"sin\",\"subtract\",\"add\",\"?Complex\",\"?BigNumber\",\"pi\"],(function(e){var t=e.typed,r=e.config,n=e.multiply,i=e.pow,a=e.divide,o=e.factorial,u=e.equal,s=e.smallerEq,c=e.isNegative,f=e.gamma,l=e.sin,p=e.subtract,m=e.add,h=e.Complex,d=e.BigNumber,v=e.pi;return t(Bs,{number:function(e){return y(e,(function(e){return e}),(function(){return 20}))},BigNumber:function(e){return y(e,(function(e){return new d(e)}),(function(){return Math.abs(Math.log10(r.epsilon))}))},Complex:function(e){return 0===e.re&&0===e.im?new h(-.5):1===e.re?new h(NaN,NaN):e.re===1/0&&0===e.im?new h(1):e.im===1/0||e.re===-1/0?new h(NaN,NaN):g(e,(function(e){return e}),(function(e){return Math.round(19.5+.9*Math.abs(e.im))}),(function(e){return e.re}))}});function y(e,t,r){return u(e,0)?t(-.5):u(e,1)?t(NaN):isFinite(e)?g(e,t,r,(function(e){return e})):c(e)?t(NaN):t(1)}function g(e,t,r,o){var u=r(e);if(o(e)>-(u-1)/2)return function(e,t,r){for(var o=a(1,n(x(r(0),t),p(1,i(2,p(1,e))))),u=r(0),c=r(1);s(c,t);c=m(c,1))u=m(u,a(n(Math.pow(-1,c-1),x(c,t)),i(c,e)));return n(o,u)}(e,t(u),t);var c=n(i(2,e),i(t(v),p(e,1)));return c=n(c,l(n(a(t(v),2),e))),c=n(c,f(p(1,e))),n(c,g(p(1,e),t,r,o))}function x(e,t){for(var r=e,u=e;s(u,t);u=m(u,1)){var c=a(n(o(m(t,p(u,1))),i(4,u)),n(o(p(t,u)),o(n(2,u))));r=m(r,c)}return n(t,r)}})),Is=\"mode\",zs=Se(Is,[\"typed\",\"isNaN\",\"isNumeric\"],(function(e){var t=e.typed,r=e.isNaN,n=e.isNumeric;return t(Is,{\"Array | Matrix\":i,\"...\":function(e){return i(e)}});function i(e){if(0===(e=En(e.valueOf())).length)throw new Error(\"Cannot calculate mode of an empty array\");for(var t={},i=[],a=0,o=0;oa&&(a=t[u],i=[u])}return i}}));function Rs(e,t,r){var n;return String(e).includes(\"Unexpected type\")?(n=arguments.length>2?\" (type: \"+H(r)+\", value: \"+JSON.stringify(r)+\")\":\" (type: \"+e.data.actual+\")\",new TypeError(\"Cannot calculate \"+t+\", unexpected type of argument\"+n)):String(e).includes(\"complex numbers\")?(n=arguments.length>2?\" (type: \"+H(r)+\", value: \"+JSON.stringify(r)+\")\":\"\",new TypeError(\"Cannot calculate \"+t+\", no ordering relation is defined for complex numbers\"+n)):e}var qs=\"prod\",js=Se(qs,[\"typed\",\"config\",\"multiplyScalar\",\"numeric\"],(function(e){var t=e.typed,r=e.config,n=e.multiplyScalar,i=e.numeric;return t(qs,{\"Array | Matrix\":a,\"Array | Matrix, number | BigNumber\":function(e,t){throw new Error(\"prod(A, dim) is not yet supported\")},\"...\":function(e){return a(e)}});function a(e){var t;if(Vn(e,(function(e){try{t=void 0===t?e:n(t,e)}catch(t){throw Rs(t,\"prod\",e)}})),\"string\"==typeof t&&(t=i(t,r.number)),void 0===t)throw new Error(\"Cannot calculate prod of an empty array\");return t}})),Ps=\"format\",Ls=Se(Ps,[\"typed\"],(function(e){return(0,e.typed)(Ps,{any:en,\"any, Object | function | number | BigNumber\":en})})),Us=Se(\"bin\",[\"typed\",\"format\"],(function(e){var t=e.typed,r=e.format;return t(\"bin\",{\"number | BigNumber\":function(e){return r(e,{notation:\"bin\"})},\"number | BigNumber, number | BigNumber\":function(e,t){return r(e,{notation:\"bin\",wordSize:t})}})})),$s=Se(\"oct\",[\"typed\",\"format\"],(function(e){var t=e.typed,r=e.format;return t(\"oct\",{\"number | BigNumber\":function(e){return r(e,{notation:\"oct\"})},\"number | BigNumber, number | BigNumber\":function(e,t){return r(e,{notation:\"oct\",wordSize:t})}})})),Hs=Se(\"hex\",[\"typed\",\"format\"],(function(e){var t=e.typed,r=e.format;return t(\"hex\",{\"number | BigNumber\":function(e){return r(e,{notation:\"hex\"})},\"number | BigNumber, number | BigNumber\":function(e,t){return r(e,{notation:\"hex\",wordSize:t})}})})),Gs=/\\$([\\w.]+)/g,Vs=\"print\",Zs=Se(Vs,[\"typed\"],(function(e){return(0,e.typed)(Vs,{\"string, Object | Array\":Ws,\"string, Object | Array, number | Object\":Ws})}));function Ws(e,t,r){return e.replace(Gs,(function(e,n){var i=n.split(\".\"),a=t[i.shift()];for(void 0!==a&&a.isMatrix&&(a=a.toArray());i.length&&void 0!==a;){var o=i.shift();a=o?a[o]:a+\".\"}return void 0!==a?c(a)?a:en(a,r):e}))}var Ys=Se(\"to\",[\"typed\",\"matrix\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.concat;return t(\"to\",{\"Unit, Unit | string\":function(e,t){return e.to(t)}},Xa({typed:t,matrix:r,concat:n})({Ds:!0}))})),Js=\"isPrime\",Xs=Se(Js,[\"typed\"],(function(e){var t=e.typed;return t(Js,{number:function(e){if(0*e!=0)return!1;if(e<=3)return e>1;if(e%2==0||e%3==0)return!1;for(var t=5;t*t<=e;t+=6)if(e%t==0||e%(t+2)==0)return!1;return!0},BigNumber:function(e){if(0*e.toNumber()!=0)return!1;if(e.lte(3))return e.gt(1);if(e.mod(2).eq(0)||e.mod(3).eq(0))return!1;if(e.lt(Math.pow(2,32))){for(var t=e.toNumber(),r=5;r*r<=t;r+=6)if(t%r==0||t%(r+2)==0)return!1;return!0}function n(e,t,r){for(var n=1;!t.eq(0);)t.mod(2).eq(0)?(t=t.div(2),e=e.mul(e).mod(r)):(t=t.sub(1),n=e.mul(n).mod(r));return n}for(var i=e.constructor.clone({precision:2*e.toFixed(0).length}),a=0,o=(e=new i(e)).sub(1);o.mod(2).eq(0);)o=o.div(2),a+=1;var u=null;if(e.lt(\"3317044064679887385961981\"))u=[2,3,5,7,11,13,17,19,23,29,31,37,41].filter((function(t){return t1&&void 0!==arguments[1]?arguments[1]:\"number\";if(void 0!==(arguments.length>2?arguments[2]:void 0))throw new SyntaxError(\"numeric() takes one or two arguments\");var r=H(e);if(!(r in i))throw new TypeError(\"Cannot convert \"+e+' of type \"'+r+'\"; valid input types are '+Object.keys(i).join(\", \"));if(!(t in a))throw new TypeError(\"Cannot convert \"+e+' to type \"'+t+'\"; valid output types are '+Object.keys(a).join(\", \"));return t===r?e:a[t](e)}})),Ks=\"divideScalar\",ec=Se(Ks,[\"typed\",\"numeric\"],(function(e){var t=e.typed;return e.numeric,t(Ks,{\"number, number\":function(e,t){return e/t},\"Complex, Complex\":function(e,t){return e.div(t)},\"BigNumber, BigNumber\":function(e,t){return e.div(t)},\"Fraction, Fraction\":function(e,t){return e.div(t)},\"Unit, number | Complex | Fraction | BigNumber | Unit\":function(e,t){return e.divide(t)},\"number | Fraction | Complex | BigNumber, Unit\":function(e,t){return t.divideInto(e)}})})),tc=Se(\"pow\",[\"typed\",\"config\",\"identity\",\"multiply\",\"matrix\",\"inv\",\"fraction\",\"number\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.identity,i=e.multiply,a=e.matrix,o=e.inv,u=e.number,s=e.fraction,c=e.Complex;return t(\"pow\",{\"number, number\":f,\"Complex, Complex\":function(e,t){return e.pow(t)},\"BigNumber, BigNumber\":function(e,t){return t.isInteger()||e>=0||r.predictable?e.pow(t):new c(e.toNumber(),0).pow(t.toNumber(),0)},\"Fraction, Fraction\":function(e,t){var n=e.pow(t);if(null!=n)return n;if(r.predictable)throw new Error(\"Result of pow is non-rational and cannot be expressed as a fraction\");return f(e.valueOf(),t.valueOf())},\"Array, number\":l,\"Array, BigNumber\":function(e,t){return l(e,t.toNumber())},\"Matrix, number\":p,\"Matrix, BigNumber\":function(e,t){return p(e,t.toNumber())},\"Unit, number | BigNumber\":function(e,t){return e.pow(t)}});function f(e,t){if(r.predictable&&!V(t)&&e<0)try{var n=s(t),i=u(n);if((t===i||Math.abs((t-i)/t)<1e-14)&&n.d%2==1)return(n.n%2==0?1:-1)*Math.pow(-e,t)}catch(e){}return r.predictable&&(e<-1&&t===1/0||e>-1&&e<0&&t===-1/0)?NaN:V(t)||e>=0||r.predictable?sa(e,t):e*e<1&&t===1/0||e*e>1&&t===-1/0?0:new c(e,0).pow(t,0)}function l(e,t){if(!V(t))throw new TypeError(\"For A^b, b must be an integer (value is \"+t+\")\");var r=cn(e);if(2!==r.length)throw new Error(\"For A^b, A must be 2 dimensional (A has \"+r.length+\" dimensions)\");if(r[0]!==r[1])throw new Error(\"For A^b, A must be square (size is \"+r[0]+\"x\"+r[1]+\")\");if(t<0)try{return l(o(e),-t)}catch(e){if(\"Cannot calculate inverse, determinant is zero\"===e.message)throw new TypeError(\"For A^b, when A is not invertible, b must be a positive integer (value is \"+t+\")\");throw e}for(var a=n(r[0]).valueOf(),u=e;t>=1;)1==(1&t)&&(a=i(u,a)),t>>=1,u=i(u,u);return a}function p(e,t){return a(l(e.valueOf(),t))}})),rc=\"Number of decimals in function round must be an integer\",nc=\"round\",ic=Se(nc,[\"typed\",\"config\",\"matrix\",\"equalScalar\",\"zeros\",\"BigNumber\",\"DenseMatrix\"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.equalScalar,a=e.zeros,o=e.BigNumber,u=e.DenseMatrix,s=Aa({typed:t,equalScalar:i}),c=Sa({typed:t,DenseMatrix:u}),f=Ca({typed:t});function l(e){return Math.abs(re(e).exponent)}return t(nc,{number:function(e){var t=ca(e,l(r.epsilon));return ca(se(e,t,r.epsilon)?t:e)},\"number, number\":function(e,t){var n=l(r.epsilon);if(t>=n)return ca(e,t);var i=ca(e,n);return ca(se(e,i,r.epsilon)?i:e,t)},\"number, BigNumber\":function(e,t){if(!t.isInteger())throw new TypeError(rc);return new o(e).toDecimalPlaces(t.toNumber())},Complex:function(e){return e.round()},\"Complex, number\":function(e,t){if(t%1)throw new TypeError(rc);return e.round(t)},\"Complex, BigNumber\":function(e,t){if(!t.isInteger())throw new TypeError(rc);var r=t.toNumber();return e.round(r)},BigNumber:function(e){var t=new o(e).toDecimalPlaces(l(r.epsilon));return(gi(e,t,r.epsilon)?t:e).toDecimalPlaces(0)},\"BigNumber, BigNumber\":function(e,t){if(!t.isInteger())throw new TypeError(rc);var n=l(r.epsilon);if(t>=n)return e.toDecimalPlaces(t.toNumber());var i=e.toDecimalPlaces(n);return(gi(e,i,r.epsilon)?i:e).toDecimalPlaces(t.toNumber())},Fraction:function(e){return e.round()},\"Fraction, number\":function(e,t){if(t%1)throw new TypeError(rc);return e.round(t)},\"Fraction, BigNumber\":function(e,t){if(!t.isInteger())throw new TypeError(rc);return e.round(t.toNumber())},\"Unit, number, Unit\":t.referToSelf((function(e){return function(t,r,n){var i=t.toNumeric(n);return n.multiply(e(i,r))}})),\"Unit, BigNumber, Unit\":t.referToSelf((function(e){return function(t,r,n){return e(t,r.toNumber(),n)}})),\"Unit, Unit\":t.referToSelf((function(e){return function(t,r){return e(t,0,r)}})),\"Array | Matrix, number, Unit\":t.referToSelf((function(e){return function(t,r,n){return Zn(t,(function(t){return e(t,r,n)}),!0)}})),\"Array | Matrix, BigNumber, Unit\":t.referToSelf((function(e){return function(t,r,n){return e(t,r.toNumber(),n)}})),\"Array | Matrix, Unit\":t.referToSelf((function(e){return function(t,r){return e(t,0,r)}})),\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e,!0)}})),\"SparseMatrix, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return s(t,r,e,!1)}})),\"DenseMatrix, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return f(t,r,e,!1)}})),\"Array, number | BigNumber\":t.referToSelf((function(e){return function(t,r){return f(n(t),r,e,!1).valueOf()}})),\"number | Complex | BigNumber | Fraction, SparseMatrix\":t.referToSelf((function(e){return function(t,r){return i(t,0)?a(r.size(),r.storage()):c(r,t,e,!0)}})),\"number | Complex | BigNumber | Fraction, DenseMatrix\":t.referToSelf((function(e){return function(t,r){return i(t,0)?a(r.size(),r.storage()):f(r,t,e,!0)}})),\"number | Complex | BigNumber | Fraction, Array\":t.referToSelf((function(e){return function(t,r){return f(n(r),t,e,!0).valueOf()}}))})})),ac=Se(\"log\",[\"config\",\"typed\",\"divideScalar\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.divideScalar,i=e.Complex;return t(\"log\",{number:function(e){return e>=0||r.predictable?function(e,t){return Math.log(e)}(e):new i(e,0).log()},Complex:function(e){return e.log()},BigNumber:function(e){return!e.isNegative()||r.predictable?e.ln():new i(e.toNumber(),0).log()},\"any, any\":t.referToSelf((function(e){return function(t,r){return n(e(t),e(r))}}))})})),oc=\"log1p\",uc=Se(oc,[\"typed\",\"config\",\"divideScalar\",\"log\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.divideScalar,i=e.log,a=e.Complex;return t(oc,{number:function(e){return e>=-1||r.predictable?J(e):o(new a(e,0))},Complex:o,BigNumber:function(e){var t=e.plus(1);return!t.isNegative()||r.predictable?t.ln():o(new a(e.toNumber(),0))},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}})),\"any, any\":t.referToSelf((function(e){return function(t,r){return n(e(t),i(r))}}))});function o(e){var t=e.re+1;return new a(Math.log(Math.sqrt(t*t+e.im*e.im)),Math.atan2(e.im,t))}})),sc=\"nthRoots\",cc=Se(sc,[\"config\",\"typed\",\"divideScalar\",\"Complex\"],(function(e){var t=e.typed,r=(e.config,e.divideScalar,e.Complex),n=[function(e){return new r(e,0)},function(e){return new r(0,e)},function(e){return new r(-e,0)},function(e){return new r(0,-e)}];function i(e,t){if(t<0)throw new Error(\"Root must be greater than zero\");if(0===t)throw new Error(\"Root must be non-zero\");if(t%1!=0)throw new Error(\"Root must be an integer\");if(0===e||0===e.abs())return[new r(0,0)];var i,a=\"number\"==typeof e;(a||0===e.re||0===e.im)&&(i=a?2*+(e<0):0===e.im?2*+(e.re<0):2*+(e.im<0)+1);for(var o=e.arg(),u=e.abs(),s=[],c=Math.pow(u,1/t),f=0;fd&&(g.push(l[D]),x.push(N))}if(o(y,0))throw new Error(\"Linear system cannot be solved since matrix is singular\");for(var E=n(v,y),A=0,S=x.length;A=0;d--){var v=r[d][0]||0;if(o(v,0))h[d]=[0];else{for(var y=0,g=[],x=[],b=m[d],w=m[d+1]-1;w>=b;w--){var D=p[w];D===d?y=l[w]:D=0;m--){var h=r[m][0]||0,d=void 0;if(o(h,0))d=0;else{var v=p[m][m];if(o(v,0))throw new Error(\"Linear system cannot be solved since matrix is singular\");d=n(h,v);for(var y=m-1;y>=0;y--)r[y]=[a(r[y][0]||0,i(d,p[y][m]))]}l[m]=[d]}return new u({data:l,size:[c,1]})}})),xc=\"lsolveAll\",bc=Se(xc,[\"typed\",\"matrix\",\"divideScalar\",\"multiplyScalar\",\"subtractScalar\",\"equalScalar\",\"DenseMatrix\"],(function(e){var t=e.typed,r=e.matrix,n=e.divideScalar,i=e.multiplyScalar,a=e.subtractScalar,o=e.equalScalar,u=e.DenseMatrix,s=hc({DenseMatrix:u});return t(xc,{\"SparseMatrix, Array | Matrix\":function(e,t){return function(e,t){for(var r=[s(e,t,!0)._data.map((function(e){return e[0]}))],c=e._size[0],f=e._size[1],l=e._values,p=e._index,m=e._ptr,h=0;hh&&(g.push(l[N]),x.push(E))}if(o(D,0))if(o(y[h],0)){if(0===v){var A=Te(y);A[h]=1;for(var S=0,C=x.length;S=0;h--)for(var d=r.length,v=0;v=b;D--){var N=p[D];N===h?w=l[D]:N=0;l--)for(var p=r.length,m=0;m=0;v--)d[v]=a(d[v],c[v][l]);r.push(d)}}else{if(0===m)return[];r.splice(m,1),m-=1,p-=1}else{h[l]=n(h[l],c[l][l]);for(var y=l-1;y>=0;y--)h[y]=a(h[y],i(h[l],c[y][l]))}}return r.map((function(e){return new u({data:e.map((function(e){return[e]})),size:[f,1]})}))}})),Nc=Se(\"matAlgo08xS0Sid\",[\"typed\",\"equalScalar\"],(function(e){var t=e.typed,r=e.equalScalar;return function(e,n,i){var a=e._values,o=e._index,u=e._ptr,s=e._size,c=e._datatype||void 0===e._data?e._datatype:e.getDataType(),f=n._values,l=n._index,p=n._ptr,m=n._size,h=n._datatype||void 0===n._data?n._datatype:n.getDataType();if(s.length!==m.length)throw new un(s.length,m.length);if(s[0]!==m[0]||s[1]!==m[1])throw new RangeError(\"Dimension mismatch. Matrix A (\"+s+\") must match Matrix B (\"+m+\")\");if(!a||!f)throw new Error(\"Cannot perform operation on Pattern Sparse Matrices\");var d,v=s[0],y=s[1],g=r,x=0,b=i;\"string\"==typeof c&&c===h&&\"mixed\"!==c&&(d=c,g=t.find(r,[d,d]),x=t.convert(0,d),b=t.find(i,[d,d]));for(var w,D,N,E,A=[],S=[],C=[],M=[],F=[],O=0;Ot?1:-1},\"BigNumber, BigNumber\":function(e,t){return gi(e,t,r.epsilon)?new a(0):new a(e.cmp(t))},\"Fraction, Fraction\":function(e,t){return new o(e.compare(t))},\"Complex, Complex\":function(){throw new TypeError(\"No ordering relation is defined for complex numbers\")}},m,p({SS:f,DS:c,Ss:l}))})),kc=Se(_c,[\"typed\",\"config\"],(function(e){var t=e.typed,r=e.config;return t(_c,{\"number, number\":function(e,t){return se(e,t,r.epsilon)?0:e>t?1:-1}})})),Ic=r(1880),zc=\"compareNatural\",Rc=Se(zc,[\"typed\",\"compare\"],(function(e){var t=e.typed,r=e.compare,n=r.signatures[\"boolean,boolean\"];return t(zc,{\"any, any\":function e(t,o){var u,s=H(t),c=H(o);if(!(\"number\"!==s&&\"BigNumber\"!==s&&\"Fraction\"!==s||\"number\"!==c&&\"BigNumber\"!==c&&\"Fraction\"!==c))return\"0\"!==(u=r(t,o)).toString()?u>0?1:-1:Ic(s,c);var f=[\"Array\",\"DenseMatrix\",\"SparseMatrix\"];if(f.includes(s)||f.includes(c))return 0!==(u=i(e,t,o))?u:Ic(s,c);if(s!==c)return Ic(s,c);if(\"Complex\"===s)return function(e,t){return e.re>t.re?1:e.ret.im?1:e.imr.length?1:t.lengtht},\"BigNumber, BigNumber\":function(e,t){return e.gt(t)&&!gi(e,t,r.epsilon)},\"Fraction, Fraction\":function(e,t){return 1===e.compare(t)},\"Complex, Complex\":function(){throw new TypeError(\"No ordering relation is defined for complex numbers\")}},f,c({SS:u,DS:o,Ss:s}))})),ef=Se(Qc,[\"typed\",\"config\"],(function(e){var t=e.typed,r=e.config;return t(Qc,{\"number, number\":function(e,t){return e>t&&!se(e,t,r.epsilon)}})})),tf=\"largerEq\",rf=Se(tf,[\"typed\",\"config\",\"matrix\",\"DenseMatrix\",\"concat\"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.DenseMatrix,a=e.concat,o=Za({typed:t}),u=ru({typed:t,DenseMatrix:i}),s=Sa({typed:t,DenseMatrix:i}),c=Xa({typed:t,matrix:n,concat:a}),f=xi({typed:t});return t(tf,nf({typed:t,config:r}),{\"boolean, boolean\":function(e,t){return e>=t},\"BigNumber, BigNumber\":function(e,t){return e.gte(t)||gi(e,t,r.epsilon)},\"Fraction, Fraction\":function(e,t){return-1!==e.compare(t)},\"Complex, Complex\":function(){throw new TypeError(\"No ordering relation is defined for complex numbers\")}},f,c({SS:u,DS:o,Ss:s}))})),nf=Se(tf,[\"typed\",\"config\"],(function(e){var t=e.typed,r=e.config;return t(tf,{\"number, number\":function(e,t){return e>=t||se(e,t,r.epsilon)}})})),af=\"deepEqual\",of=Se(af,[\"typed\",\"equal\"],(function(e){var t=e.typed,r=e.equal;return t(af,{\"any, any\":function(e,t){return n(e.valueOf(),t.valueOf())}});function n(e,t){if(Array.isArray(e)){if(Array.isArray(t)){var i=e.length;if(i!==t.length)return!1;for(var a=0;a1)throw new Error(\"Only one dimensional matrices supported\");return s(e.valueOf(),t,r)}if(Array.isArray(e))return s(e,t,r)}function s(e,t,i){if(t>=e.length)throw new Error(\"k out of bounds\");for(var a=0;a=0){var l=e[c];e[c]=e[s],e[s]=l,--c}else++s;i(e[s],f)>0&&--s,t<=s?u=s:o=s+1}return e[t]}})),pf=\"sort\",mf=Se(pf,[\"typed\",\"matrix\",\"compare\",\"compareNatural\"],(function(e){var t=e.typed,r=e.matrix,n=e.compare,i=e.compareNatural,a=n,o=function(e,t){return-n(e,t)};return t(pf,{Array:function(e){return s(e),e.sort(a)},Matrix:function(e){return c(e),r(e.toArray().sort(a),e.storage())},\"Array, function\":function(e,t){return s(e),e.sort(t)},\"Matrix, function\":function(e,t){return c(e),r(e.toArray().sort(t),e.storage())},\"Array, string\":function(e,t){return s(e),e.sort(u(t))},\"Matrix, string\":function(e,t){return c(e),r(e.toArray().sort(u(t)),e.storage())}});function u(e){if(\"asc\"===e)return a;if(\"desc\"===e)return o;if(\"natural\"===e)return i;throw new Error('String \"asc\", \"desc\", or \"natural\" expected')}function s(e){if(1!==cn(e).length)throw new Error(\"One dimensional array expected\")}function c(e){if(1!==e.size().length)throw new Error(\"One dimensional matrix expected\")}})),hf=Se(\"max\",[\"typed\",\"config\",\"numeric\",\"larger\"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.larger;return t(\"max\",{\"Array | Matrix\":o,\"Array | Matrix, number | BigNumber\":function(e,t){return Wn(e,t.valueOf(),a)},\"...\":function(e){if(Gn(e))throw new TypeError(\"Scalar values expected in function max\");return o(e)}});function a(e,t){try{return i(e,t)?e:t}catch(e){throw Rs(e,\"max\",t)}}function o(e){var t;if(Vn(e,(function(e){try{isNaN(e)&&\"number\"==typeof e?t=NaN:(void 0===t||i(e,t))&&(t=e)}catch(t){throw Rs(t,\"max\",e)}})),void 0===t)throw new Error(\"Cannot calculate max of an empty array\");return\"string\"==typeof t&&(t=n(t,r.number)),t}})),df=Se(\"min\",[\"typed\",\"config\",\"numeric\",\"smaller\"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.smaller;return t(\"min\",{\"Array | Matrix\":o,\"Array | Matrix, number | BigNumber\":function(e,t){return Wn(e,t.valueOf(),a)},\"...\":function(e){if(Gn(e))throw new TypeError(\"Scalar values expected in function min\");return o(e)}});function a(e,t){try{return i(e,t)?e:t}catch(e){throw Rs(e,\"min\",t)}}function o(e){var t;if(Vn(e,(function(e){try{isNaN(e)&&\"number\"==typeof e?t=NaN:(void 0===t||i(e,t))&&(t=e)}catch(t){throw Rs(t,\"min\",e)}})),void 0===t)throw new Error(\"Cannot calculate min of an empty array\");return\"string\"==typeof t&&(t=n(t,r.number)),t}})),vf=Se(\"ImmutableDenseMatrix\",[\"smaller\",\"DenseMatrix\"],(function(e){var t=e.smaller,r=e.DenseMatrix;function n(e,t){if(!(this instanceof n))throw new SyntaxError(\"Constructor must be called with the new operator\");if(t&&!c(t))throw new Error(\"Invalid datatype: \"+t);if(l(e)||f(e)){var i=new r(e,t);this._data=i._data,this._size=i._size,this._datatype=i._datatype,this._min=null,this._max=null}else if(e&&f(e.data)&&f(e.size))this._data=e.data,this._size=e.size,this._datatype=e.datatype,this._min=void 0!==e.min?e.min:null,this._max=void 0!==e.max?e.max:null;else{if(e)throw new TypeError(\"Unsupported type of data (\"+H(e)+\")\");this._data=[],this._size=[0],this._datatype=t,this._min=null,this._max=null}}return n.prototype=new r,n.prototype.type=\"ImmutableDenseMatrix\",n.prototype.isImmutableDenseMatrix=!0,n.prototype.subset=function(e){switch(arguments.length){case 1:var t=r.prototype.subset.call(this,e);return l(t)?new n({data:t._data,size:t._size,datatype:t._datatype}):t;case 2:case 3:throw new Error(\"Cannot invoke set subset on an Immutable Matrix instance\");default:throw new SyntaxError(\"Wrong number of arguments\")}},n.prototype.set=function(){throw new Error(\"Cannot invoke set on an Immutable Matrix instance\")},n.prototype.resize=function(){throw new Error(\"Cannot invoke resize on an Immutable Matrix instance\")},n.prototype.reshape=function(){throw new Error(\"Cannot invoke reshape on an Immutable Matrix instance\")},n.prototype.clone=function(){return new n({data:ye(this._data),size:ye(this._size),datatype:this._datatype})},n.prototype.toJSON=function(){return{mathjs:\"ImmutableDenseMatrix\",data:this._data,size:this._size,datatype:this._datatype}},n.fromJSON=function(e){return new n(e)},n.prototype.swapRows=function(){throw new Error(\"Cannot invoke swapRows on an Immutable Matrix instance\")},n.prototype.min=function(){if(null===this._min){var e=null;this.forEach((function(r){(null===e||t(r,e))&&(e=r)})),this._min=null!==e?e:void 0}return this._min},n.prototype.max=function(){if(null===this._max){var e=null;this.forEach((function(r){(null===e||t(e,r))&&(e=r)})),this._max=null!==e?e:void 0}return this._max},n}),{isClass:!0}),yf=Se(\"Index\",[\"ImmutableDenseMatrix\",\"getMatrixDataType\"],(function(e){var t=e.ImmutableDenseMatrix,r=e.getMatrixDataType;function n(e){if(!(this instanceof n))throw new SyntaxError(\"Constructor must be called with the new operator\");this._dimensions=[],this._sourceSize=[],this._isScalar=!0;for(var t=0,a=arguments.length;t0;){var s=o.right;o.left.right=o.right,o.right.left=o.left,o.left=i,o.right=i.right,i.right=o,o.right.left=o,o.parent=null,o=s,a--}return e.left.right=e.right,e.right.left=e.left,i=e===e.right?null:function(e,i){var a,o=Math.floor(Math.log(i)*n)+1,s=new Array(o),c=0,f=e;if(f)for(c++,f=f.right;f!==e;)c++,f=f.right;for(;c>0;){for(var l=f.degree,p=f.right;a=s[l];){if(r(f.key,a.key)){var m=a;a=f,f=m}u(a,f),s[l]=null,l++}s[l]=f,f=p,c--}e=null;for(var h=0;h=e&&(r(u.value,0)||n(u.key,u.value,this)),(u=i.extractMinimum())&&o.push(u);for(var s=0;s=\"0\"&&e<=\"9\"}function M(){n++,i=r.charAt(n)}function F(e){n=e,i=r.charAt(n)}function O(){var e=\"\",t=n;if(\"+\"===i?M():\"-\"===i&&(e+=i,M()),!function(e){return e>=\"0\"&&e<=\"9\"||\".\"===e}(i))return F(t),null;if(\".\"===i){if(e+=i,M(),!C(i))return F(t),null}else{for(;C(i);)e+=i,M();\".\"===i&&(e+=i,M())}for(;C(i);)e+=i,M();if(\"E\"===i||\"e\"===i){var r=\"\",a=n;if(r+=i,M(),\"+\"!==i&&\"-\"!==i||(r+=i,M()),!C(i))return F(a),e;for(e+=r;C(i);)e+=i,M()}return e}function T(){for(var e=\"\";C(i)||A.isValidAlpha(i);)e+=i,M();var t=e.charAt(0);return A.isValidAlpha(t)?e:null}function _(e){return i===e?(M(),e):null}Object.defineProperty(A,\"name\",{value:\"Unit\"}),A.prototype.constructor=A,A.prototype.type=\"Unit\",A.prototype.isUnit=!0,A.parse=function(e,t){if(t=t||{},n=-1,i=\"\",\"string\"!=typeof(r=e))throw new TypeError(\"Invalid argument in Unit.parse, string expected\");var a=new A;a.units=[];var o=1,s=!1;M(),S();var c=O(),f=null;if(c){if(\"BigNumber\"===u.number)f=new D(c);else if(\"Fraction\"===u.number)try{f=new N(c)}catch(e){f=parseFloat(c)}else f=parseFloat(c);S(),_(\"*\")?(o=1,s=!0):_(\"/\")&&(o=-1,s=!0)}for(var l=[],p=1;;){for(S();\"(\"===i;)l.push(o),p*=o,o=1,M(),S();var m;if(!i)break;var h=i;if(null===(m=T()))throw new SyntaxError('Unexpected \"'+h+'\" in \"'+r+'\" at index '+n.toString());var d=B(m);if(null===d)throw new SyntaxError('Unit \"'+m+'\" not found.');var v=o*p;if(S(),_(\"^\")){S();var y=O();if(null===y)throw new SyntaxError('In \"'+e+'\", \"^\" must be followed by a floating-point number');v*=y}a.units.push({unit:d.unit,prefix:d.prefix,power:v});for(var g=0;g1||Math.abs(this.units[0].power-1)>1e-15)},A.prototype._normalize=function(e){if(null==e||0===this.units.length)return e;for(var t=e,r=A._getNumberConverter(H(e)),n=0;n1e-12)return!1;return!0},A.prototype.equalBase=function(e){for(var t=0;t1e-12)return!1;return!0},A.prototype.equals=function(e){return this.equalBase(e)&&y(this.value,e.value)},A.prototype.multiply=function(e){for(var t=this.clone(),r=s(e)?e:new A(e),n=0;n0?this.formatUnits():null,fixPrefix:this.fixPrefix}},A.fromJSON=function(e){var t,r=new A(e.value,null!==(t=e.unit)&&void 0!==t?t:void 0);return r.fixPrefix=e.fixPrefix||!1,r},A.prototype.valueOf=A.prototype.toString,A.prototype.simplify=function(){var e,t,r=this.clone(),n=[];for(var i in G)if(Ae(G,i)&&r.hasBase(R[i])){e=i;break}if(\"NONE\"===e)r.units=[];else if(e&&Ae(G,e)&&(t=G[e]),t)r.units=[{unit:t.unit,prefix:t.prefix,power:1}];else{for(var a=!1,o=0;o1e-12&&(Ae(G,u)?n.push({unit:G[u].unit,prefix:G[u].prefix,power:r.dimensions[o]||0}):a=!0)}n.length1e-12){if(!Ae($.si,n))throw new Error(\"Cannot express custom unit \"+n+\" in SI units\");t.push({unit:$.si[n].unit,prefix:$.si[n].prefix,power:e.dimensions[r]||0})}}return e.units=t,e.fixPrefix=!0,e.skipAutomaticSimplification=!0,null!==this.value?(e.value=null,this.to(e)):e},A.prototype.formatUnits=function(){for(var e=\"\",t=\"\",r=0,n=0,i=0;i0?(r++,e+=\" \"+this.units[i].prefix.name+this.units[i].unit.name,Math.abs(this.units[i].power-1)>1e-15&&(e+=\"^\"+this.units[i].power)):this.units[i].power<0&&n++;if(n>0)for(var a=0;a0?(t+=\" \"+this.units[a].prefix.name+this.units[a].unit.name,Math.abs(this.units[a].power+1)>1e-15&&(t+=\"^\"+-this.units[a].power)):(t+=\" \"+this.units[a].prefix.name+this.units[a].unit.name,t+=\"^\"+this.units[a].power));e=e.substr(1),t=t.substr(1),r>1&&n>0&&(e=\"(\"+e+\")\"),n>1&&r>0&&(t=\"(\"+t+\")\");var o=e;return r>0&&n>0&&(o+=\" / \"),o+t},A.prototype.format=function(e){var t=this.skipAutomaticSimplification||null===this.value?this.clone():this.simplify(),r=!1;for(var n in void 0!==t.value&&null!==t.value&&o(t.value)&&(r=Math.abs(t.value.re)<1e-14),t.units)Ae(t.units,n)&&t.units[n].unit&&(\"VA\"===t.units[n].unit.name&&r?t.units[n].unit=P.VAR:\"VAR\"!==t.units[n].unit.name||r||(t.units[n].unit=P.VA));1!==t.units.length||t.fixPrefix||Math.abs(t.units[0].power-Math.round(t.units[0].power))<1e-14&&(t.units[0].prefix=t._bestPrefix());var i=t._denormalize(t.value),a=null!==t.value?x(i,e||{}):\"\",u=t.formatUnits();return t.value&&o(t.value)&&(a=\"(\"+a+\")\"),u.length>0&&a.length>0&&(a+=\" \"),a+u},A.prototype._bestPrefix=function(){if(1!==this.units.length)throw new Error(\"Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!\");if(Math.abs(this.units[0].power-Math.round(this.units[0].power))>=1e-14)throw new Error(\"Can only compute the best prefix for single units with integer powers, like kg, s^2, N^-1, and so forth!\");var e=null!==this.value?h(this.value):0,t=h(this.units[0].unit.value),r=this.units[0].prefix;if(0===e)return r;var n=this.units[0].power,i=Math.log(e/Math.pow(r.value*t,n))/Math.LN10-1.2;if(i>-2.200001&&i<1.800001)return r;i=Math.abs(i);var a=this.units[0].unit.prefixes;for(var o in a)if(Ae(a,o)){var u=a[o];if(u.scientific){var s=Math.abs(Math.log(e/Math.pow(u.value*t,n))/Math.LN10-1.2);(s0&&!A.isValidAlpha(i)&&!C(i))throw new Error('Invalid unit name (only alphanumeric characters are allowed): \"'+e+'\"')}}(e);var n,a,o,u=null,s=[],c=0;if(r&&\"Unit\"===r.type)u=r.clone();else if(\"string\"==typeof r)\"\"!==r&&(n=r);else{if(\"object\"!==t(r))throw new TypeError('Cannot create unit \"'+e+'\" from \"'+r.toString()+'\": expecting \"string\" or \"Unit\" or \"Object\"');n=r.definition,a=r.prefixes,c=r.offset,o=r.baseName,r.aliases&&(s=r.aliases.valueOf())}if(s)for(var f=0;f1e-12){h=!1;break}if(h){p=!0,l.base=R[m];break}}if(!p){o=o||e+\"_STUFF\";var v={dimensions:u.dimensions.slice(0)};v.key=o,R[o]=v,G[o]={unit:l,prefix:I.NONE[\"\"]},l.base=R[o]}}else{if(o=o||e+\"_STUFF\",z.indexOf(o)>=0)throw new Error('Cannot create new base unit \"'+e+'\": a base unit with that name already exists (and cannot be overridden)');for(var y in z.push(o),R)Ae(R,y)&&(R[y].dimensions[z.length-1]=0);for(var g={dimensions:[]},x=0;x=-1&&e<=1||r.predictable?Math.acos(e):new n(e,0).acos()},Complex:function(e){return e.acos()},BigNumber:function(e){return e.acos()}})})),Rf=\"number\";function qf(e){return ce(e)}function jf(e){return Math.atan(1/e)}function Pf(e){return isFinite(e)?(Math.log((e+1)/e)+Math.log(e/(e-1)))/2:0}function Lf(e){return Math.asin(1/e)}function Uf(e){var t=1/e;return Math.log(t+Math.sqrt(t*t+1))}function $f(e){return Math.acos(1/e)}function Hf(e){var t=1/e,r=Math.sqrt(t*t-1);return Math.log(r+t)}function Gf(e){return fe(e)}function Vf(e){return le(e)}function Zf(e){return 1/Math.tan(e)}function Wf(e){var t=Math.exp(2*e);return(t+1)/(t-1)}function Yf(e){return 1/Math.sin(e)}function Jf(e){return 0===e?Number.POSITIVE_INFINITY:Math.abs(2/(Math.exp(e)-Math.exp(-e)))*Z(e)}function Xf(e){return 1/Math.cos(e)}function Qf(e){return 2/(Math.exp(e)+Math.exp(-e))}function Kf(e){return me(e)}qf.signature=Rf,jf.signature=Rf,Pf.signature=Rf,Lf.signature=Rf,Uf.signature=Rf,$f.signature=Rf,Hf.signature=Rf,Gf.signature=Rf,Vf.signature=Rf,Zf.signature=Rf,Wf.signature=Rf,Yf.signature=Rf,Jf.signature=Rf,Xf.signature=Rf,Qf.signature=Rf,Kf.signature=Rf;var el=\"acosh\",tl=Se(el,[\"typed\",\"config\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(el,{number:function(e){return e>=1||r.predictable?qf(e):e<=-1?new n(Math.log(Math.sqrt(e*e-1)-e),Math.PI):new n(e,0).acosh()},Complex:function(e){return e.acosh()},BigNumber:function(e){return e.acosh()}})})),rl=\"acot\",nl=Se(rl,[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(rl,{number:jf,Complex:function(e){return e.acot()},BigNumber:function(e){return new r(1).div(e).atan()}})})),il=\"acoth\",al=Se(il,[\"typed\",\"config\",\"Complex\",\"BigNumber\"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(il,{number:function(e){return e>=1||e<=-1||r.predictable?Pf(e):new n(e,0).acoth()},Complex:function(e){return e.acoth()},BigNumber:function(e){return new i(1).div(e).atanh()}})})),ol=\"acsc\",ul=Se(ol,[\"typed\",\"config\",\"Complex\",\"BigNumber\"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(ol,{number:function(e){return e<=-1||e>=1||r.predictable?Lf(e):new n(e,0).acsc()},Complex:function(e){return e.acsc()},BigNumber:function(e){return new i(1).div(e).asin()}})})),sl=\"acsch\",cl=Se(sl,[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(sl,{number:Uf,Complex:function(e){return e.acsch()},BigNumber:function(e){return new r(1).div(e).asinh()}})})),fl=\"asec\",ll=Se(fl,[\"typed\",\"config\",\"Complex\",\"BigNumber\"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(fl,{number:function(e){return e<=-1||e>=1||r.predictable?$f(e):new n(e,0).asec()},Complex:function(e){return e.asec()},BigNumber:function(e){return new i(1).div(e).acos()}})})),pl=\"asech\",ml=Se(pl,[\"typed\",\"config\",\"Complex\",\"BigNumber\"],(function(e){var t=e.typed,r=e.config,n=e.Complex,i=e.BigNumber;return t(pl,{number:function(e){if(e<=1&&e>=-1||r.predictable){var t=1/e;if(t>0||r.predictable)return Hf(e);var i=Math.sqrt(t*t-1);return new n(Math.log(i-t),Math.PI)}return new n(e,0).asech()},Complex:function(e){return e.asech()},BigNumber:function(e){return new i(1).div(e).acosh()}})})),hl=\"asin\",dl=Se(hl,[\"typed\",\"config\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(hl,{number:function(e){return e>=-1&&e<=1||r.predictable?Math.asin(e):new n(e,0).asin()},Complex:function(e){return e.asin()},BigNumber:function(e){return e.asin()}})})),vl=Se(\"asinh\",[\"typed\"],(function(e){return(0,e.typed)(\"asinh\",{number:Gf,Complex:function(e){return e.asinh()},BigNumber:function(e){return e.asinh()}})})),yl=Se(\"atan\",[\"typed\"],(function(e){return(0,e.typed)(\"atan\",{number:function(e){return Math.atan(e)},Complex:function(e){return e.atan()},BigNumber:function(e){return e.atan()}})})),gl=\"atan2\",xl=Se(gl,[\"typed\",\"matrix\",\"equalScalar\",\"BigNumber\",\"DenseMatrix\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.BigNumber,a=e.DenseMatrix,o=e.concat,u=Va({typed:t,equalScalar:n}),s=Za({typed:t}),c=To({typed:t,equalScalar:n}),f=Aa({typed:t,equalScalar:n}),l=Sa({typed:t,DenseMatrix:a}),p=Xa({typed:t,matrix:r,concat:o});return t(gl,{\"number, number\":Math.atan2,\"BigNumber, BigNumber\":function(e,t){return i.atan2(e,t)}},p({scalar:\"number | BigNumber\",SS:c,DS:s,SD:u,Ss:f,sS:l}))})),bl=\"atanh\",wl=Se(bl,[\"typed\",\"config\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=e.Complex;return t(bl,{number:function(e){return e<=1&&e>=-1||r.predictable?Vf(e):new n(e,0).atanh()},Complex:function(e){return e.atanh()},BigNumber:function(e){return e.atanh()}})})),Dl=Se(\"trigUnit\",[\"typed\"],(function(e){var t=e.typed;return{Unit:t.referToSelf((function(e){return function(r){if(!r.hasBase(r.constructor.BASE_UNITS.ANGLE))throw new TypeError(\"Unit in function cot is no angle\");return t.find(e,r.valueType())(r.value)}}))}})),Nl=Se(\"cos\",[\"typed\"],(function(e){var t=e.typed,r=Dl({typed:t});return t(\"cos\",{number:Math.cos,\"Complex | BigNumber\":function(e){return e.cos()}},r)})),El=\"cosh\",Al=Se(El,[\"typed\"],(function(e){return(0,e.typed)(El,{number:pe,\"Complex | BigNumber\":function(e){return e.cosh()}})})),Sl=Se(\"cot\",[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(\"cot\",{number:Zf,Complex:function(e){return e.cot()},BigNumber:function(e){return new r(1).div(e.tan())}},Dl({typed:t}))})),Cl=\"coth\",Ml=Se(Cl,[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(Cl,{number:Wf,Complex:function(e){return e.coth()},BigNumber:function(e){return new r(1).div(e.tanh())}})})),Fl=Se(\"csc\",[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(\"csc\",{number:Yf,Complex:function(e){return e.csc()},BigNumber:function(e){return new r(1).div(e.sin())}},Dl({typed:t}))})),Ol=\"csch\",Tl=Se(Ol,[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(Ol,{number:Jf,Complex:function(e){return e.csch()},BigNumber:function(e){return new r(1).div(e.sinh())}})})),_l=Se(\"sec\",[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(\"sec\",{number:Xf,Complex:function(e){return e.sec()},BigNumber:function(e){return new r(1).div(e.cos())}},Dl({typed:t}))})),Bl=\"sech\",kl=Se(Bl,[\"typed\",\"BigNumber\"],(function(e){var t=e.typed,r=e.BigNumber;return t(Bl,{number:Qf,Complex:function(e){return e.sech()},BigNumber:function(e){return new r(1).div(e.cosh())}})})),Il=Se(\"sin\",[\"typed\"],(function(e){var t=e.typed,r=Dl({typed:t});return t(\"sin\",{number:Math.sin,\"Complex | BigNumber\":function(e){return e.sin()}},r)})),zl=\"sinh\",Rl=Se(zl,[\"typed\"],(function(e){return(0,e.typed)(zl,{number:Kf,\"Complex | BigNumber\":function(e){return e.sinh()}})})),ql=Se(\"tan\",[\"typed\"],(function(e){var t=e.typed,r=Dl({typed:t});return t(\"tan\",{number:Math.tan,\"Complex | BigNumber\":function(e){return e.tan()}},r)})),jl=Se(\"tanh\",[\"typed\"],(function(e){return(0,e.typed)(\"tanh\",{number:he,\"Complex | BigNumber\":function(e){return e.tanh()}})})),Pl=\"setCartesian\",Ll=Se(Pl,[\"typed\",\"size\",\"subset\",\"compareNatural\",\"Index\",\"DenseMatrix\"],(function(e){var t=e.typed,r=e.size,n=e.subset,i=e.compareNatural,a=e.Index,o=e.DenseMatrix;return t(Pl,{\"Array | Matrix, Array | Matrix\":function(e,t){var u=[];if(0!==n(r(e),new a(0))&&0!==n(r(t),new a(0))){var s=En(Array.isArray(e)?e:e.toArray()).sort(i),c=En(Array.isArray(t)?t:t.toArray()).sort(i);u=[];for(var f=0;f0;r--)for(var n=0;ne[n+1].length&&(t=e[n],e[n]=e[n+1],e[n+1]=t);return e}(u)}});function o(e,t){for(var r=[],n=0;nd?m++:h===d&&(c=f(c,l(a[p],s[m])),p++,m++)}return c}});function o(e,t){var r,n,i=u(e),a=u(t);if(1===i.length)r=i[0];else{if(2!==i.length||1!==i[1])throw new RangeError(\"Expected a column vector, instead got a matrix of size (\"+i.join(\", \")+\")\");r=i[0]}if(1===a.length)n=a[0];else{if(2!==a.length||1!==a[1])throw new RangeError(\"Expected a column vector, instead got a matrix of size (\"+a.join(\", \")+\")\");n=a[0]}if(r!==n)throw new RangeError(\"Vectors must have equal length (\"+r+\" != \"+n+\")\");if(0===r)throw new RangeError(\"Cannot calculate the dot product of empty vectors\");return r}function u(e){return l(e)?e.size():a(e)}})),pp=Se(\"trace\",[\"typed\",\"matrix\",\"add\"],(function(e){var t=e.typed,r=e.matrix,n=e.add;return t(\"trace\",{Array:function(e){return i(r(e))},SparseMatrix:function(e){var t=e._values,r=e._index,i=e._ptr,a=e._size,o=a[0],u=a[1];if(o===u){var s=0;if(t.length>0)for(var c=0;cc)break}return s}throw new RangeError(\"Matrix must be square (size: \"+en(a)+\")\")},DenseMatrix:i,any:ye});function i(e){var t=e._size,r=e._data;switch(t.length){case 1:if(1===t[0])return ye(r[0]);throw new RangeError(\"Matrix must be square (size: \"+en(t)+\")\");case 2:var i=t[0];if(i===t[1]){for(var a=0,o=0;o)'),t+this.index.toHTML(e)}},{key:\"_toTex\",value:function(e){var t=this.object.toTex(e);return i(this.object)&&(t=\"\\\\left(' + object + '\\\\right)\"),t+this.index.toTex(e)}},{key:\"toJSON\",value:function(){return{mathjs:Ap,object:this.object,index:this.index}}}],[{key:\"fromJSON\",value:function(e){return new t(e.object,e.index)}}])}(r);return Ga(a,\"name\",Ap),a}),{isClass:!0,isNode:!0});function Cp(e,t,r){return t=gp(t),yp(e,Mp()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Mp(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Mp=function(){return!!e})()}var Fp=\"ArrayNode\",Op=Se(Fp,[\"Node\"],(function(e){var t=function(e){function t(e){var r;if(_e(this,t),(r=Cp(this,t)).items=e||[],!Array.isArray(r.items)||!r.items.every(z))throw new TypeError(\"Array containing Nodes expected\");return r}return bp(t,e),Ie(t,[{key:\"type\",get:function(){return Fp}},{key:\"isArrayNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var r=An(this.items,(function(r){return r._compile(e,t)}));if(\"Array\"!==e.config.matrix){var n=e.matrix;return function(e,t,i){return n(An(r,(function(r){return r(e,t,i)})))}}return function(e,t,n){return An(r,(function(r){return r(e,t,n)}))}}},{key:\"forEach\",value:function(e){for(var t=0;t['+this.items.map((function(t){return t.toHTML(e)})).join(',')+']'}},{key:\"_toTex\",value:function(e){return function t(r,n){var i=r.some(C)&&!r.every(C),a=n||i,o=a?\"&\":\"\\\\\\\\\",u=r.map((function(r){return r.items?t(r.items,!n):r.toTex(e)})).join(o);return i||!a||a&&!n?\"\\\\begin{bmatrix}\"+u+\"\\\\end{bmatrix}\":u}(this.items,!1)}}],[{key:\"fromJSON\",value:function(e){return new t(e.items)}}])}(e.Node);return Ga(t,\"name\",Fp),t}),{isClass:!0,isNode:!0});function Tp(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r\",associativity:\"left\",associativeWith:[]},\"OperatorNode:smallerEq\":{op:\"<=\",associativity:\"left\",associativeWith:[]},\"OperatorNode:largerEq\":{op:\">=\",associativity:\"left\",associativeWith:[]},RelationalNode:{associativity:\"left\",associativeWith:[]}},{\"OperatorNode:leftShift\":{op:\"<<\",associativity:\"left\",associativeWith:[]},\"OperatorNode:rightArithShift\":{op:\">>\",associativity:\"left\",associativeWith:[]},\"OperatorNode:rightLogShift\":{op:\">>>\",associativity:\"left\",associativeWith:[]}},{\"OperatorNode:to\":{op:\"to\",associativity:\"left\",associativeWith:[]}},{RangeNode:{}},{\"OperatorNode:add\":{op:\"+\",associativity:\"left\",associativeWith:[\"OperatorNode:add\",\"OperatorNode:subtract\"]},\"OperatorNode:subtract\":{op:\"-\",associativity:\"left\",associativeWith:[]}},{\"OperatorNode:multiply\":{op:\"*\",associativity:\"left\",associativeWith:[\"OperatorNode:multiply\",\"OperatorNode:divide\",\"Operator:dotMultiply\",\"Operator:dotDivide\"]},\"OperatorNode:divide\":{op:\"/\",associativity:\"left\",associativeWith:[],latexLeftParens:!1,latexRightParens:!1,latexParens:!1},\"OperatorNode:dotMultiply\":{op:\".*\",associativity:\"left\",associativeWith:[\"OperatorNode:multiply\",\"OperatorNode:divide\",\"OperatorNode:dotMultiply\",\"OperatorNode:doDivide\"]},\"OperatorNode:dotDivide\":{op:\"./\",associativity:\"left\",associativeWith:[]},\"OperatorNode:mod\":{op:\"mod\",associativity:\"left\",associativeWith:[]}},{\"OperatorNode:multiply\":{associativity:\"left\",associativeWith:[\"OperatorNode:multiply\",\"OperatorNode:divide\",\"Operator:dotMultiply\",\"Operator:dotDivide\"]}},{\"OperatorNode:unaryPlus\":{op:\"+\",associativity:\"right\"},\"OperatorNode:unaryMinus\":{op:\"-\",associativity:\"right\"},\"OperatorNode:bitNot\":{op:\"~\",associativity:\"right\"},\"OperatorNode:not\":{op:\"not\",associativity:\"right\"}},{\"OperatorNode:pow\":{op:\"^\",associativity:\"right\",associativeWith:[],latexRightParens:!1},\"OperatorNode:dotPow\":{op:\".^\",associativity:\"right\",associativeWith:[]}},{\"OperatorNode:factorial\":{op:\"!\",associativity:\"left\"}},{\"OperatorNode:ctranspose\":{op:\"'\",associativity:\"left\"}}];function Bp(e,t){if(!t||\"auto\"!==t)return e;for(var r=e;j(r);)r=r.content;return r}function kp(e,t,r,n){var i=e;\"keep\"!==t&&(i=e.getContent());for(var a=i.getIdentifier(),o=null,u=0;u<_p.length;u++)if(a in _p[u]){o=u;break}if(\"OperatorNode:multiply\"===a&&i.implicit&&\"show\"!==r){var s=Bp(i.args[0],t);T(s)&&n&&\"OperatorNode:divide\"===n.getIdentifier()&&_(Bp(n.args[0],t))||\"OperatorNode:divide\"===s.getIdentifier()&&_(Bp(s.args[0],t))&&T(Bp(s.args[1]))||(o+=1)}return o}function Ip(e,t){var r=e;\"keep\"!==t&&(r=e.getContent());var n=r.getIdentifier(),i=kp(r,t);if(null===i)return null;var a=_p[i][n];if(Ae(a,\"associativity\")){if(\"left\"===a.associativity)return\"left\";if(\"right\"===a.associativity)return\"right\";throw Error(\"'\"+n+\"' has the invalid associativity '\"+a.associativity+\"'.\")}return null}function zp(e,t,r){var n=\"keep\"!==r?e.getContent():e,i=\"keep\"!==r?e.getContent():t,a=n.getIdentifier(),o=i.getIdentifier(),u=kp(n,r);if(null===u)return null;var s=_p[u][a];if(Ae(s,\"associativeWith\")&&s.associativeWith instanceof Array){for(var c=0;c)'),t+r+'='+n}},{key:\"_toTex\",value:function(e){var t=this.object.toTex(e),r=this.index?this.index.toTex(e):\"\",n=this.value.toTex(e);return u(this,e&&e.parenthesis,e&&e.implicit)&&(n=\"\\\\left(\".concat(n,\"\\\\right)\")),t+r+\"=\"+n}}],[{key:\"fromJSON\",value:function(e){return new t(e.object,e.index,e.value)}}])}(i);return Ga(s,\"name\",jp),s}),{isClass:!0,isNode:!0});function Lp(e,t,r){return t=gp(t),yp(e,Up()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Up(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Up=function(){return!!e})()}var $p=\"BlockNode\",Hp=Se($p,[\"ResultSet\",\"Node\"],(function(e){var t=e.ResultSet,r=function(e){function r(e){var t;if(_e(this,r),t=Lp(this,r),!Array.isArray(e))throw new Error(\"Array expected\");return t.blocks=e.map((function(e){var t=e&&e.node,r=!e||void 0===e.visible||e.visible;if(!z(t))throw new TypeError('Property \"node\" must be a Node');if(\"boolean\"!=typeof r)throw new TypeError('Property \"visible\" must be a boolean');return{node:t,visible:r}})),t}return bp(r,e),Ie(r,[{key:\"type\",get:function(){return $p}},{key:\"isBlockNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,r){var n=An(this.blocks,(function(t){return{evaluate:t.node._compile(e,r),visible:t.visible}}));return function(e,r,i){var a=[];return Sn(n,(function(t){var n=t.evaluate(e,r,i);t.visible&&a.push(n)})),new t(a)}}},{key:\"forEach\",value:function(e){for(var t=0;t;')})).join('
    ')}},{key:\"_toTex\",value:function(e){return this.blocks.map((function(t){return t.node.toTex(e)+(t.visible?\"\":\";\")})).join(\"\\\\;\\\\;\\n\")}}],[{key:\"fromJSON\",value:function(e){return new r(e.blocks)}}])}(e.Node);return Ga(r,\"name\",$p),r}),{isClass:!0,isNode:!0});function Gp(e,t,r){return t=gp(t),yp(e,Vp()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Vp(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Vp=function(){return!!e})()}var Zp=\"ConditionalNode\",Wp=Se(Zp,[\"Node\"],(function(e){var t=function(e){function t(e,r,n){var i;if(_e(this,t),i=Gp(this,t),!z(e))throw new TypeError(\"Parameter condition must be a Node\");if(!z(r))throw new TypeError(\"Parameter trueExpr must be a Node\");if(!z(n))throw new TypeError(\"Parameter falseExpr must be a Node\");return i.condition=e,i.trueExpr=r,i.falseExpr=n,i}return bp(t,e),Ie(t,[{key:\"type\",get:function(){return Zp}},{key:\"isConditionalNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var r=this.condition._compile(e,t),n=this.trueExpr._compile(e,t),i=this.falseExpr._compile(e,t);return function(e,t,u){return function(e){if(\"number\"==typeof e||\"boolean\"==typeof e||\"string\"==typeof e)return!!e;if(e){if(a(e))return!e.isZero();if(o(e))return!(!e.re&&!e.im);if(s(e))return!!e.value}if(null==e)return!1;throw new TypeError('Unsupported type of condition \"'+H(e)+'\"')}(r(e,t,u))?n(e,t,u):i(e,t,u)}}},{key:\"forEach\",value:function(e){e(this.condition,\"condition\",this),e(this.trueExpr,\"trueExpr\",this),e(this.falseExpr,\"falseExpr\",this)}},{key:\"map\",value:function(e){return new t(this._ifNode(e(this.condition,\"condition\",this)),this._ifNode(e(this.trueExpr,\"trueExpr\",this)),this._ifNode(e(this.falseExpr,\"falseExpr\",this)))}},{key:\"clone\",value:function(){return new t(this.condition,this.trueExpr,this.falseExpr)}},{key:\"_toString\",value:function(e){var t=e&&e.parenthesis?e.parenthesis:\"keep\",r=kp(this,t,e&&e.implicit),n=this.condition.toString(e),i=kp(this.condition,t,e&&e.implicit);(\"all\"===t||\"OperatorNode\"===this.condition.type||null!==i&&i<=r)&&(n=\"(\"+n+\")\");var a=this.trueExpr.toString(e),o=kp(this.trueExpr,t,e&&e.implicit);(\"all\"===t||\"OperatorNode\"===this.trueExpr.type||null!==o&&o<=r)&&(a=\"(\"+a+\")\");var u=this.falseExpr.toString(e),s=kp(this.falseExpr,t,e&&e.implicit);return(\"all\"===t||\"OperatorNode\"===this.falseExpr.type||null!==s&&s<=r)&&(u=\"(\"+u+\")\"),n+\" ? \"+a+\" : \"+u}},{key:\"toJSON\",value:function(){return{mathjs:Zp,condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}}},{key:\"_toHTML\",value:function(e){var t=e&&e.parenthesis?e.parenthesis:\"keep\",r=kp(this,t,e&&e.implicit),n=this.condition.toHTML(e),i=kp(this.condition,t,e&&e.implicit);(\"all\"===t||\"OperatorNode\"===this.condition.type||null!==i&&i<=r)&&(n='('+n+')');var a=this.trueExpr.toHTML(e),o=kp(this.trueExpr,t,e&&e.implicit);(\"all\"===t||\"OperatorNode\"===this.trueExpr.type||null!==o&&o<=r)&&(a='('+a+')');var u=this.falseExpr.toHTML(e),s=kp(this.falseExpr,t,e&&e.implicit);return(\"all\"===t||\"OperatorNode\"===this.falseExpr.type||null!==s&&s<=r)&&(u='('+u+')'),n+'?'+a+':'+u}},{key:\"_toTex\",value:function(e){return\"\\\\begin{cases} {\"+this.trueExpr.toTex(e)+\"}, &\\\\quad{\\\\text{if }\\\\;\"+this.condition.toTex(e)+\"}\\\\\\\\{\"+this.falseExpr.toTex(e)+\"}, &\\\\quad{\\\\text{otherwise}}\\\\end{cases}\"}}],[{key:\"fromJSON\",value:function(e){return new t(e.condition,e.trueExpr,e.falseExpr)}}])}(e.Node);return Ga(t,\"name\",Zp),t}),{isClass:!0,isNode:!0}),Yp=r(3144),Jp={Alpha:\"A\",alpha:\"\\\\alpha\",Beta:\"B\",beta:\"\\\\beta\",Gamma:\"\\\\Gamma\",gamma:\"\\\\gamma\",Delta:\"\\\\Delta\",delta:\"\\\\delta\",Epsilon:\"E\",epsilon:\"\\\\epsilon\",varepsilon:\"\\\\varepsilon\",Zeta:\"Z\",zeta:\"\\\\zeta\",Eta:\"H\",eta:\"\\\\eta\",Theta:\"\\\\Theta\",theta:\"\\\\theta\",vartheta:\"\\\\vartheta\",Iota:\"I\",iota:\"\\\\iota\",Kappa:\"K\",kappa:\"\\\\kappa\",varkappa:\"\\\\varkappa\",Lambda:\"\\\\Lambda\",lambda:\"\\\\lambda\",Mu:\"M\",mu:\"\\\\mu\",Nu:\"N\",nu:\"\\\\nu\",Xi:\"\\\\Xi\",xi:\"\\\\xi\",Omicron:\"O\",omicron:\"o\",Pi:\"\\\\Pi\",pi:\"\\\\pi\",varpi:\"\\\\varpi\",Rho:\"P\",rho:\"\\\\rho\",varrho:\"\\\\varrho\",Sigma:\"\\\\Sigma\",sigma:\"\\\\sigma\",varsigma:\"\\\\varsigma\",Tau:\"T\",tau:\"\\\\tau\",Upsilon:\"\\\\Upsilon\",upsilon:\"\\\\upsilon\",Phi:\"\\\\Phi\",phi:\"\\\\phi\",varphi:\"\\\\varphi\",Chi:\"X\",chi:\"\\\\chi\",Psi:\"\\\\Psi\",psi:\"\\\\psi\",Omega:\"\\\\Omega\",omega:\"\\\\omega\",true:\"\\\\mathrm{True}\",false:\"\\\\mathrm{False}\",i:\"i\",inf:\"\\\\infty\",Inf:\"\\\\infty\",infinity:\"\\\\infty\",Infinity:\"\\\\infty\",oo:\"\\\\infty\",lim:\"\\\\lim\",undefined:\"\\\\mathbf{?}\"},Xp={transpose:\"^\\\\top\",ctranspose:\"^H\",factorial:\"!\",pow:\"^\",dotPow:\".^\\\\wedge\",unaryPlus:\"+\",unaryMinus:\"-\",bitNot:\"\\\\~\",not:\"\\\\neg\",multiply:\"\\\\cdot\",divide:\"\\\\frac\",dotMultiply:\".\\\\cdot\",dotDivide:\".:\",mod:\"\\\\mod\",add:\"+\",subtract:\"-\",to:\"\\\\rightarrow\",leftShift:\"<<\",rightArithShift:\">>\",rightLogShift:\">>>\",equal:\"=\",unequal:\"\\\\neq\",smaller:\"<\",larger:\">\",smallerEq:\"\\\\leq\",largerEq:\"\\\\geq\",bitAnd:\"\\\\&\",bitXor:\"\\\\underline{|}\",bitOr:\"|\",and:\"\\\\wedge\",xor:\"\\\\veebar\",or:\"\\\\vee\"},Qp={abs:{1:\"\\\\left|${args[0]}\\\\right|\"},add:{2:\"\\\\left(${args[0]}\".concat(Xp.add,\"${args[1]}\\\\right)\")},cbrt:{1:\"\\\\sqrt[3]{${args[0]}}\"},ceil:{1:\"\\\\left\\\\lceil${args[0]}\\\\right\\\\rceil\"},cube:{1:\"\\\\left(${args[0]}\\\\right)^3\"},divide:{2:\"\\\\frac{${args[0]}}{${args[1]}}\"},dotDivide:{2:\"\\\\left(${args[0]}\".concat(Xp.dotDivide,\"${args[1]}\\\\right)\")},dotMultiply:{2:\"\\\\left(${args[0]}\".concat(Xp.dotMultiply,\"${args[1]}\\\\right)\")},dotPow:{2:\"\\\\left(${args[0]}\".concat(Xp.dotPow,\"${args[1]}\\\\right)\")},exp:{1:\"\\\\exp\\\\left(${args[0]}\\\\right)\"},expm1:\"\\\\left(e\".concat(Xp.pow,\"{${args[0]}}-1\\\\right)\"),fix:{1:\"\\\\mathrm{${name}}\\\\left(${args[0]}\\\\right)\"},floor:{1:\"\\\\left\\\\lfloor${args[0]}\\\\right\\\\rfloor\"},gcd:\"\\\\gcd\\\\left(${args}\\\\right)\",hypot:\"\\\\hypot\\\\left(${args}\\\\right)\",log:{1:\"\\\\ln\\\\left(${args[0]}\\\\right)\",2:\"\\\\log_{${args[1]}}\\\\left(${args[0]}\\\\right)\"},log10:{1:\"\\\\log_{10}\\\\left(${args[0]}\\\\right)\"},log1p:{1:\"\\\\ln\\\\left(${args[0]}+1\\\\right)\",2:\"\\\\log_{${args[1]}}\\\\left(${args[0]}+1\\\\right)\"},log2:\"\\\\log_{2}\\\\left(${args[0]}\\\\right)\",mod:{2:\"\\\\left(${args[0]}\".concat(Xp.mod,\"${args[1]}\\\\right)\")},multiply:{2:\"\\\\left(${args[0]}\".concat(Xp.multiply,\"${args[1]}\\\\right)\")},norm:{1:\"\\\\left\\\\|${args[0]}\\\\right\\\\|\",2:void 0},nthRoot:{2:\"\\\\sqrt[${args[1]}]{${args[0]}}\"},nthRoots:{2:\"\\\\{y : $y^{args[1]} = {${args[0]}}\\\\}\"},pow:{2:\"\\\\left(${args[0]}\\\\right)\".concat(Xp.pow,\"{${args[1]}}\")},round:{1:\"\\\\left\\\\lfloor${args[0]}\\\\right\\\\rceil\",2:void 0},sign:{1:\"\\\\mathrm{${name}}\\\\left(${args[0]}\\\\right)\"},sqrt:{1:\"\\\\sqrt{${args[0]}}\"},square:{1:\"\\\\left(${args[0]}\\\\right)^2\"},subtract:{2:\"\\\\left(${args[0]}\".concat(Xp.subtract,\"${args[1]}\\\\right)\")},unaryMinus:{1:\"\".concat(Xp.unaryMinus,\"\\\\left(${args[0]}\\\\right)\")},unaryPlus:{1:\"\".concat(Xp.unaryPlus,\"\\\\left(${args[0]}\\\\right)\")},bitAnd:{2:\"\\\\left(${args[0]}\".concat(Xp.bitAnd,\"${args[1]}\\\\right)\")},bitNot:{1:Xp.bitNot+\"\\\\left(${args[0]}\\\\right)\"},bitOr:{2:\"\\\\left(${args[0]}\".concat(Xp.bitOr,\"${args[1]}\\\\right)\")},bitXor:{2:\"\\\\left(${args[0]}\".concat(Xp.bitXor,\"${args[1]}\\\\right)\")},leftShift:{2:\"\\\\left(${args[0]}\".concat(Xp.leftShift,\"${args[1]}\\\\right)\")},rightArithShift:{2:\"\\\\left(${args[0]}\".concat(Xp.rightArithShift,\"${args[1]}\\\\right)\")},rightLogShift:{2:\"\\\\left(${args[0]}\".concat(Xp.rightLogShift,\"${args[1]}\\\\right)\")},bellNumbers:{1:\"\\\\mathrm{B}_{${args[0]}}\"},catalan:{1:\"\\\\mathrm{C}_{${args[0]}}\"},stirlingS2:{2:\"\\\\mathrm{S}\\\\left(${args}\\\\right)\"},arg:{1:\"\\\\arg\\\\left(${args[0]}\\\\right)\"},conj:{1:\"\\\\left(${args[0]}\\\\right)^*\"},im:{1:\"\\\\Im\\\\left\\\\lbrace${args[0]}\\\\right\\\\rbrace\"},re:{1:\"\\\\Re\\\\left\\\\lbrace${args[0]}\\\\right\\\\rbrace\"},and:{2:\"\\\\left(${args[0]}\".concat(Xp.and,\"${args[1]}\\\\right)\")},not:{1:Xp.not+\"\\\\left(${args[0]}\\\\right)\"},or:{2:\"\\\\left(${args[0]}\".concat(Xp.or,\"${args[1]}\\\\right)\")},xor:{2:\"\\\\left(${args[0]}\".concat(Xp.xor,\"${args[1]}\\\\right)\")},cross:{2:\"\\\\left(${args[0]}\\\\right)\\\\times\\\\left(${args[1]}\\\\right)\"},ctranspose:{1:\"\\\\left(${args[0]}\\\\right)\".concat(Xp.ctranspose)},det:{1:\"\\\\det\\\\left(${args[0]}\\\\right)\"},dot:{2:\"\\\\left(${args[0]}\\\\cdot${args[1]}\\\\right)\"},expm:{1:\"\\\\exp\\\\left(${args[0]}\\\\right)\"},inv:{1:\"\\\\left(${args[0]}\\\\right)^{-1}\"},pinv:{1:\"\\\\left(${args[0]}\\\\right)^{+}\"},sqrtm:{1:\"{${args[0]}}\".concat(Xp.pow,\"{\\\\frac{1}{2}}\")},trace:{1:\"\\\\mathrm{tr}\\\\left(${args[0]}\\\\right)\"},transpose:{1:\"\\\\left(${args[0]}\\\\right)\".concat(Xp.transpose)},combinations:{2:\"\\\\binom{${args[0]}}{${args[1]}}\"},combinationsWithRep:{2:\"\\\\left(\\\\!\\\\!{\\\\binom{${args[0]}}{${args[1]}}}\\\\!\\\\!\\\\right)\"},factorial:{1:\"\\\\left(${args[0]}\\\\right)\".concat(Xp.factorial)},gamma:{1:\"\\\\Gamma\\\\left(${args[0]}\\\\right)\"},lgamma:{1:\"\\\\ln\\\\Gamma\\\\left(${args[0]}\\\\right)\"},equal:{2:\"\\\\left(${args[0]}\".concat(Xp.equal,\"${args[1]}\\\\right)\")},larger:{2:\"\\\\left(${args[0]}\".concat(Xp.larger,\"${args[1]}\\\\right)\")},largerEq:{2:\"\\\\left(${args[0]}\".concat(Xp.largerEq,\"${args[1]}\\\\right)\")},smaller:{2:\"\\\\left(${args[0]}\".concat(Xp.smaller,\"${args[1]}\\\\right)\")},smallerEq:{2:\"\\\\left(${args[0]}\".concat(Xp.smallerEq,\"${args[1]}\\\\right)\")},unequal:{2:\"\\\\left(${args[0]}\".concat(Xp.unequal,\"${args[1]}\\\\right)\")},erf:{1:\"erf\\\\left(${args[0]}\\\\right)\"},max:\"\\\\max\\\\left(${args}\\\\right)\",min:\"\\\\min\\\\left(${args}\\\\right)\",variance:\"\\\\mathrm{Var}\\\\left(${args}\\\\right)\",acos:{1:\"\\\\cos^{-1}\\\\left(${args[0]}\\\\right)\"},acosh:{1:\"\\\\cosh^{-1}\\\\left(${args[0]}\\\\right)\"},acot:{1:\"\\\\cot^{-1}\\\\left(${args[0]}\\\\right)\"},acoth:{1:\"\\\\coth^{-1}\\\\left(${args[0]}\\\\right)\"},acsc:{1:\"\\\\csc^{-1}\\\\left(${args[0]}\\\\right)\"},acsch:{1:\"\\\\mathrm{csch}^{-1}\\\\left(${args[0]}\\\\right)\"},asec:{1:\"\\\\sec^{-1}\\\\left(${args[0]}\\\\right)\"},asech:{1:\"\\\\mathrm{sech}^{-1}\\\\left(${args[0]}\\\\right)\"},asin:{1:\"\\\\sin^{-1}\\\\left(${args[0]}\\\\right)\"},asinh:{1:\"\\\\sinh^{-1}\\\\left(${args[0]}\\\\right)\"},atan:{1:\"\\\\tan^{-1}\\\\left(${args[0]}\\\\right)\"},atan2:{2:\"\\\\mathrm{atan2}\\\\left(${args}\\\\right)\"},atanh:{1:\"\\\\tanh^{-1}\\\\left(${args[0]}\\\\right)\"},cos:{1:\"\\\\cos\\\\left(${args[0]}\\\\right)\"},cosh:{1:\"\\\\cosh\\\\left(${args[0]}\\\\right)\"},cot:{1:\"\\\\cot\\\\left(${args[0]}\\\\right)\"},coth:{1:\"\\\\coth\\\\left(${args[0]}\\\\right)\"},csc:{1:\"\\\\csc\\\\left(${args[0]}\\\\right)\"},csch:{1:\"\\\\mathrm{csch}\\\\left(${args[0]}\\\\right)\"},sec:{1:\"\\\\sec\\\\left(${args[0]}\\\\right)\"},sech:{1:\"\\\\mathrm{sech}\\\\left(${args[0]}\\\\right)\"},sin:{1:\"\\\\sin\\\\left(${args[0]}\\\\right)\"},sinh:{1:\"\\\\sinh\\\\left(${args[0]}\\\\right)\"},tan:{1:\"\\\\tan\\\\left(${args[0]}\\\\right)\"},tanh:{1:\"\\\\tanh\\\\left(${args[0]}\\\\right)\"},to:{2:\"\\\\left(${args[0]}\".concat(Xp.to,\"${args[1]}\\\\right)\")},numeric:function(e,t){return e.args[0].toTex()},number:{0:\"0\",1:\"\\\\left(${args[0]}\\\\right)\",2:\"\\\\left(\\\\left(${args[0]}\\\\right)${args[1]}\\\\right)\"},string:{0:'\\\\mathtt{\"\"}',1:\"\\\\mathrm{string}\\\\left(${args[0]}\\\\right)\"},bignumber:{0:\"0\",1:\"\\\\left(${args[0]}\\\\right)\"},complex:{0:\"0\",1:\"\\\\left(${args[0]}\\\\right)\",2:\"\\\\left(\\\\left(${args[0]}\\\\right)+\".concat(Jp.i,\"\\\\cdot\\\\left(${args[1]}\\\\right)\\\\right)\")},matrix:{0:\"\\\\begin{bmatrix}\\\\end{bmatrix}\",1:\"\\\\left(${args[0]}\\\\right)\",2:\"\\\\left(${args[0]}\\\\right)\"},sparse:{0:\"\\\\begin{bsparse}\\\\end{bsparse}\",1:\"\\\\left(${args[0]}\\\\right)\"},unit:{1:\"\\\\left(${args[0]}\\\\right)\",2:\"\\\\left(\\\\left(${args[0]}\\\\right)${args[1]}\\\\right)\"}},Kp={deg:\"^\\\\circ\"};function em(e){return Yp(e,{preserveFormatting:!0})}function tm(e,t){return(t=void 0!==t&&t)?Ae(Kp,e)?Kp[e]:\"\\\\mathrm{\"+em(e)+\"}\":Ae(Jp,e)?Jp[e]:em(e)}function rm(e,t,r){return t=gp(t),yp(e,nm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function nm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(nm=function(){return!!e})()}var im=\"ConstantNode\",am=Se(im,[\"Node\"],(function(e){var t=function(e){function t(e){var r;return _e(this,t),(r=rm(this,t)).value=e,r}return bp(t,e),Ie(t,[{key:\"type\",get:function(){return im}},{key:\"isConstantNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var r=this.value;return function(){return r}}},{key:\"forEach\",value:function(e){}},{key:\"map\",value:function(e){return this.clone()}},{key:\"clone\",value:function(){return new t(this.value)}},{key:\"_toString\",value:function(e){return en(this.value,e)}},{key:\"_toHTML\",value:function(e){var t=this._toString(e);switch(H(this.value)){case\"number\":case\"BigNumber\":case\"Fraction\":return''+t+\"\";case\"string\":return''+t+\"\";case\"boolean\":return''+t+\"\";case\"null\":return''+t+\"\";case\"undefined\":return''+t+\"\";default:return''+t+\"\"}}},{key:\"toJSON\",value:function(){return{mathjs:im,value:this.value}}},{key:\"_toTex\",value:function(e){var t=this._toString(e),r=H(this.value);switch(r){case\"string\":return\"\\\\mathtt{\"+em(t)+\"}\";case\"number\":case\"BigNumber\":if(!(\"BigNumber\"===r?this.value.isFinite():isFinite(this.value)))return this.value.valueOf()<0?\"-\\\\infty\":\"\\\\infty\";var n=t.toLowerCase().indexOf(\"e\");return-1!==n?t.substring(0,n)+\"\\\\cdot10^{\"+t.substring(n+1)+\"}\":t;case\"Fraction\":return this.value.toLatex();default:return t}}}],[{key:\"fromJSON\",value:function(e){return new t(e.value)}}])}(e.Node);return Ga(t,\"name\",im),t}),{isClass:!0,isNode:!0});function om(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(t);try{for(u.s();!(a=u.n()).done;){var s=a.value,c=\"string\"==typeof s?s:s.name;if(o.has(c))throw new Error('Duplicate parameter name \"'.concat(c,'\"'));o.add(c)}}catch(e){u.e(e)}finally{u.f()}return i.name=e,i.params=t.map((function(e){return e&&e.name||e})),i.types=t.map((function(e){return e&&e.type||\"any\"})),i.expr=r,i}return bp(n,e),Ie(n,[{key:\"type\",get:function(){return cm}},{key:\"isFunctionAssignmentNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,r){var n=Object.create(r);Sn(this.params,(function(e){n[e]=!0}));var i=this.expr._compile(e,n),a=this.name,o=this.params,u=Fn(this.types,\",\"),s=a+\"(\"+Fn(this.params,\", \")+\")\";return function(e,r,n){var c={};c[u]=function(){for(var t=Object.create(r),a=0;a'+nn(this.params[i])+\"\");var a=this.expr.toHTML(e);return r(this,t,e&&e.implicit)&&(a='('+a+')'),''+nn(this.name)+'('+n.join(',')+')='+a}},{key:\"_toTex\",value:function(e){var t=e&&e.parenthesis?e.parenthesis:\"keep\",n=this.expr.toTex(e);return r(this,t,e&&e.implicit)&&(n=\"\\\\left(\".concat(n,\"\\\\right)\")),\"\\\\mathrm{\"+this.name+\"}\\\\left(\"+this.params.map(tm).join(\",\")+\"\\\\right)=\"+n}}],[{key:\"fromJSON\",value:function(e){return new n(e.name,e.params,e.expr)}}])}(e.Node);return Ga(n,\"name\",cm),n}),{isClass:!0,isNode:!0});function lm(e,t,r){return t=gp(t),yp(e,pm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function pm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(pm=function(){return!!e})()}var mm=\"IndexNode\",hm=Se(mm,[\"Node\",\"size\"],(function(e){var t=e.Node,r=e.size,n=function(e){function t(e,r){var n;if(_e(this,t),(n=lm(this,t)).dimensions=e,n.dotNotation=r||!1,!Array.isArray(e)||!e.every(z))throw new TypeError('Array containing Nodes expected for parameter \"dimensions\"');if(n.dotNotation&&!n.isObjectProperty())throw new Error(\"dotNotation only applicable for object properties\");return n}return bp(t,e),Ie(t,[{key:\"type\",get:function(){return mm}},{key:\"isIndexNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var n=An(this.dimensions,(function(n,i){if(n.filter((function(e){return e.isSymbolNode&&\"end\"===e.name})).length>0){var a=Object.create(t);a.end=!0;var o=n._compile(e,a);return function(e,t,n){if(!l(n)&&!f(n)&&!c(n))throw new TypeError('Cannot resolve \"end\": context must be a Matrix, Array, or string but is '+H(n));var a=r(n).valueOf(),u=Object.create(t);return u.end=a[i],o(e,u,n)}}return n._compile(e,t)})),i=ze(e,\"index\");return function(e,t,r){var a=An(n,(function(n){return n(e,t,r)}));return i.apply(void 0,Te(a))}}},{key:\"forEach\",value:function(e){for(var t=0;t.'+nn(this.getObjectProperty())+\"\":'['+t.join(',')+']'}},{key:\"_toTex\",value:function(e){var t=this.dimensions.map((function(t){return t.toTex(e)}));return this.dotNotation?\".\"+this.getObjectProperty():\"_{\"+t.join(\",\")+\"}\"}}],[{key:\"fromJSON\",value:function(e){return new t(e.dimensions,e.dotNotation)}}])}(t);return Ga(n,\"name\",mm),n}),{isClass:!0,isNode:!0});function dm(e,t,r){return t=gp(t),yp(e,vm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function vm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(vm=function(){return!!e})()}var ym=\"ObjectNode\",gm=Se(ym,[\"Node\"],(function(e){var r=function(e){function r(e){var n;if(_e(this,r),(n=dm(this,r)).properties=e||{},e&&(\"object\"!==t(e)||!Object.keys(e).every((function(t){return z(e[t])}))))throw new TypeError(\"Object containing Nodes expected\");return n}return bp(r,e),Ie(r,[{key:\"type\",get:function(){return ym}},{key:\"isObjectNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var r={};for(var n in this.properties)if(Ae(this.properties,n)){var i=tn(n),a=JSON.parse(i),o=ze(this.properties,n);r[a]=o._compile(e,t)}return function(e,t,n){var i={};for(var a in r)Ae(r,a)&&(i[a]=r[a](e,t,n));return i}}},{key:\"forEach\",value:function(e){for(var t in this.properties)Ae(this.properties,t)&&e(this.properties[t],\"properties[\"+tn(t)+\"]\",this)}},{key:\"map\",value:function(e){var t={};for(var n in this.properties)Ae(this.properties,n)&&(t[n]=this._ifNode(e(this.properties[n],\"properties[\"+tn(n)+\"]\",this)));return new r(t)}},{key:\"clone\",value:function(){var e={};for(var t in this.properties)Ae(this.properties,t)&&(e[t]=this.properties[t]);return new r(e)}},{key:\"_toString\",value:function(e){var t=[];for(var r in this.properties)Ae(this.properties,r)&&t.push(tn(r)+\": \"+this.properties[r].toString(e));return\"{\"+t.join(\", \")+\"}\"}},{key:\"toJSON\",value:function(){return{mathjs:ym,properties:this.properties}}},{key:\"_toHTML\",value:function(e){var t=[];for(var r in this.properties)Ae(this.properties,r)&&t.push(''+nn(r)+':'+this.properties[r].toHTML(e));return'{'+t.join(',')+'}'}},{key:\"_toTex\",value:function(e){var t=[];for(var r in this.properties)Ae(this.properties,r)&&t.push(\"\\\\mathbf{\"+r+\":} & \"+this.properties[r].toTex(e)+\"\\\\\\\\\");return\"\\\\left\\\\{\\\\begin{array}{ll}\"+t.join(\"\\n\")+\"\\\\end{array}\\\\right\\\\}\"}}],[{key:\"fromJSON\",value:function(e){return new r(e.properties)}}])}(e.Node);return Ga(r,\"name\",ym),r}),{isClass:!0,isNode:!0});function xm(e,t){return new Ve(e,new Ge(t),new Set(Object.keys(t)))}function bm(e,t,r){return t=gp(t),yp(e,wm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function wm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(wm=function(){return!!e})()}var Dm=\"OperatorNode\",Nm=Se(Dm,[\"Node\"],(function(e){function t(e,r){var n=e;if(\"auto\"===r)for(;j(n);)n=n.content;return!!T(n)||!!q(n)&&t(n.args[0],r)}function r(e,r,n,i,a){var o,u=kp(e,r,n),s=Ip(e,r);if(\"all\"===r||i.length>2&&\"OperatorNode:add\"!==e.getIdentifier()&&\"OperatorNode:multiply\"!==e.getIdentifier())return i.map((function(e){switch(e.getContent().type){case\"ArrayNode\":case\"ConstantNode\":case\"SymbolNode\":case\"ParenthesisNode\":return!1;default:return!0}}));switch(i.length){case 0:o=[];break;case 1:var c=kp(i[0],r,n,e);if(a&&null!==c){var f,l;if(\"keep\"===r?(f=i[0].getIdentifier(),l=e.getIdentifier()):(f=i[0].getContent().getIdentifier(),l=e.getContent().getIdentifier()),!1===_p[u][l].latexLeftParens){o=[!1];break}if(!1===_p[c][f].latexParens){o=[!1];break}}if(null===c){o=[!1];break}if(c<=u){o=[!0];break}o=[!1];break;case 2:var p,m,h=kp(i[0],r,n,e),d=zp(e,i[0],r);p=null!==h&&(h===u&&\"right\"===s&&!d||h=2&&\"OperatorNode:multiply\"===e.getIdentifier()&&e.implicit&&\"all\"!==r&&\"hide\"===n)for(var w=1;w2&&(\"OperatorNode:add\"===this.getIdentifier()||\"OperatorNode:multiply\"===this.getIdentifier())){var l=i.map((function(t,r){return t=t.toString(e),a[r]&&(t=\"(\"+t+\")\"),t}));return this.implicit&&\"OperatorNode:multiply\"===this.getIdentifier()&&\"hide\"===n?l.join(\" \"):l.join(\" \"+this.op+\" \")}return this.fn+\"(\"+this.args.join(\", \")+\")\"}},{key:\"toJSON\",value:function(){return{mathjs:Dm,op:this.op,fn:this.fn,args:this.args,implicit:this.implicit,isPercentage:this.isPercentage}}},{key:\"_toHTML\",value:function(e){var t=e&&e.parenthesis?e.parenthesis:\"keep\",n=e&&e.implicit?e.implicit:\"hide\",i=this.args,a=r(this,t,n,i,!1);if(1===i.length){var o=Ip(this,t),u=i[0].toHTML(e);return a[0]&&(u='('+u+')'),\"right\"===o?''+nn(this.op)+\"\"+u:u+''+nn(this.op)+\"\"}if(2===i.length){var s=i[0].toHTML(e),c=i[1].toHTML(e);return a[0]&&(s='('+s+')'),a[1]&&(c='('+c+')'),this.implicit&&\"OperatorNode:multiply\"===this.getIdentifier()&&\"hide\"===n?s+''+c:s+''+nn(this.op)+\"\"+c}var f=i.map((function(t,r){return t=t.toHTML(e),a[r]&&(t='('+t+')'),t}));return i.length>2&&(\"OperatorNode:add\"===this.getIdentifier()||\"OperatorNode:multiply\"===this.getIdentifier())?this.implicit&&\"OperatorNode:multiply\"===this.getIdentifier()&&\"hide\"===n?f.join(''):f.join(''+nn(this.op)+\"\"):''+nn(this.fn)+'('+f.join(',')+')'}},{key:\"_toTex\",value:function(e){var t=e&&e.parenthesis?e.parenthesis:\"keep\",n=e&&e.implicit?e.implicit:\"hide\",i=this.args,a=r(this,t,n,i,!0),o=Xp[this.fn];if(o=void 0===o?this.op:o,1===i.length){var u=Ip(this,t),s=i[0].toTex(e);return a[0]&&(s=\"\\\\left(\".concat(s,\"\\\\right)\")),\"right\"===u?o+s:s+o}if(2===i.length){var c=i[0],f=c.toTex(e);a[0]&&(f=\"\\\\left(\".concat(f,\"\\\\right)\"));var l,p=i[1].toTex(e);switch(a[1]&&(p=\"\\\\left(\".concat(p,\"\\\\right)\")),l=\"keep\"===t?c.getIdentifier():c.getContent().getIdentifier(),this.getIdentifier()){case\"OperatorNode:divide\":return o+\"{\"+f+\"}{\"+p+\"}\";case\"OperatorNode:pow\":switch(f=\"{\"+f+\"}\",p=\"{\"+p+\"}\",l){case\"ConditionalNode\":case\"OperatorNode:divide\":f=\"\\\\left(\".concat(f,\"\\\\right)\")}break;case\"OperatorNode:multiply\":if(this.implicit&&\"hide\"===n)return f+\"~\"+p}return f+o+p}if(i.length>2&&(\"OperatorNode:add\"===this.getIdentifier()||\"OperatorNode:multiply\"===this.getIdentifier())){var m=i.map((function(t,r){return t=t.toTex(e),a[r]&&(t=\"\\\\left(\".concat(t,\"\\\\right)\")),t}));return\"OperatorNode:multiply\"===this.getIdentifier()&&this.implicit&&\"hide\"===n?m.join(\"~\"):m.join(o)}return\"\\\\mathrm{\"+this.fn+\"}\\\\left(\"+i.map((function(t){return t.toTex(e)})).join(\",\")+\"\\\\right)\"}},{key:\"getIdentifier\",value:function(){return this.type+\":\"+this.fn}}],[{key:\"fromJSON\",value:function(e){return new t(e.op,e.fn,e.args,e.implicit,e.isPercentage)}}])}(e.Node);return Ga(n,\"name\",Dm),n}),{isClass:!0,isNode:!0});function Em(e,t,r){return t=gp(t),yp(e,Am()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Am(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Am=function(){return!!e})()}var Sm=\"ParenthesisNode\",Cm=Se(Sm,[\"Node\"],(function(e){var t=function(e){function t(e){var r;if(_e(this,t),r=Em(this,t),!z(e))throw new TypeError('Node expected for parameter \"content\"');return r.content=e,r}return bp(t,e),Ie(t,[{key:\"type\",get:function(){return Sm}},{key:\"isParenthesisNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){return this.content._compile(e,t)}},{key:\"getContent\",value:function(){return this.content.getContent()}},{key:\"forEach\",value:function(e){e(this.content,\"content\",this)}},{key:\"map\",value:function(e){return new t(e(this.content,\"content\",this))}},{key:\"clone\",value:function(){return new t(this.content)}},{key:\"_toString\",value:function(e){return!e||e&&!e.parenthesis||e&&\"keep\"===e.parenthesis?\"(\"+this.content.toString(e)+\")\":this.content.toString(e)}},{key:\"toJSON\",value:function(){return{mathjs:Sm,content:this.content}}},{key:\"_toHTML\",value:function(e){return!e||e&&!e.parenthesis||e&&\"keep\"===e.parenthesis?'('+this.content.toHTML(e)+')':this.content.toHTML(e)}},{key:\"_toTex\",value:function(e){return!e||e&&!e.parenthesis||e&&\"keep\"===e.parenthesis?\"\\\\left(\".concat(this.content.toTex(e),\"\\\\right)\"):this.content.toTex(e)}}],[{key:\"fromJSON\",value:function(e){return new t(e.content)}}])}(e.Node);return Ga(t,\"name\",Sm),t}),{isClass:!0,isNode:!0});function Mm(e,t,r){return t=gp(t),yp(e,Fm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Fm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Fm=function(){return!!e})()}var Om=\"RangeNode\",Tm=Se(Om,[\"Node\"],(function(e){function t(e,t,r){var n=kp(e,t,r),i={},a=kp(e.start,t,r);if(i.start=null!==a&&a<=n||\"all\"===t,e.step){var o=kp(e.step,t,r);i.step=null!==o&&o<=n||\"all\"===t}var u=kp(e.end,t,r);return i.end=null!==u&&u<=n||\"all\"===t,i}var r=function(e){function r(e,t,n){var i;if(_e(this,r),i=Mm(this,r),!z(e))throw new TypeError(\"Node expected\");if(!z(t))throw new TypeError(\"Node expected\");if(n&&!z(n))throw new TypeError(\"Node expected\");if(arguments.length>3)throw new Error(\"Too many arguments\");return i.start=e,i.end=t,i.step=n||null,i}return bp(r,e),Ie(r,[{key:\"type\",get:function(){return Om}},{key:\"isRangeNode\",get:function(){return!0}},{key:\"needsEnd\",value:function(){return this.filter((function(e){return U(e)&&\"end\"===e.name})).length>0}},{key:\"_compile\",value:function(e,t){var r=e.range,n=this.start._compile(e,t),i=this.end._compile(e,t);if(this.step){var a=this.step._compile(e,t);return function(e,t,o){return r(n(e,t,o),i(e,t,o),a(e,t,o))}}return function(e,t,a){return r(n(e,t,a),i(e,t,a))}}},{key:\"forEach\",value:function(e){e(this.start,\"start\",this),e(this.end,\"end\",this),this.step&&e(this.step,\"step\",this)}},{key:\"map\",value:function(e){return new r(this._ifNode(e(this.start,\"start\",this)),this._ifNode(e(this.end,\"end\",this)),this.step&&this._ifNode(e(this.step,\"step\",this)))}},{key:\"clone\",value:function(){return new r(this.start,this.end,this.step&&this.step)}},{key:\"_toString\",value:function(e){var r,n=t(this,e&&e.parenthesis?e.parenthesis:\"keep\",e&&e.implicit),i=this.start.toString(e);if(n.start&&(i=\"(\"+i+\")\"),r=i,this.step){var a=this.step.toString(e);n.step&&(a=\"(\"+a+\")\"),r+=\":\"+a}var o=this.end.toString(e);return n.end&&(o=\"(\"+o+\")\"),r+\":\"+o}},{key:\"toJSON\",value:function(){return{mathjs:Om,start:this.start,end:this.end,step:this.step}}},{key:\"_toHTML\",value:function(e){var r,n=t(this,e&&e.parenthesis?e.parenthesis:\"keep\",e&&e.implicit),i=this.start.toHTML(e);if(n.start&&(i='('+i+')'),r=i,this.step){var a=this.step.toHTML(e);n.step&&(a='('+a+')'),r+=':'+a}var o=this.end.toHTML(e);return n.end&&(o='('+o+')'),r+':'+o}},{key:\"_toTex\",value:function(e){var r=t(this,e&&e.parenthesis?e.parenthesis:\"keep\",e&&e.implicit),n=this.start.toTex(e);if(r.start&&(n=\"\\\\left(\".concat(n,\"\\\\right)\")),this.step){var i=this.step.toTex(e);r.step&&(i=\"\\\\left(\".concat(i,\"\\\\right)\")),n+=\":\"+i}var a=this.end.toTex(e);return r.end&&(a=\"\\\\left(\".concat(a,\"\\\\right)\")),n+\":\"+a}}],[{key:\"fromJSON\",value:function(e){return new r(e.start,e.end,e.step)}}])}(e.Node);return Ga(r,\"name\",Om),r}),{isClass:!0,isNode:!0});function _m(e,t,r){return t=gp(t),yp(e,Bm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Bm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Bm=function(){return!!e})()}var km=\"RelationalNode\",Im=Se(km,[\"Node\"],(function(e){var t=e.Node,r={equal:\"==\",unequal:\"!=\",smaller:\"<\",larger:\">\",smallerEq:\"<=\",largerEq:\">=\"},n=function(e){function t(e,r){var n;if(_e(this,t),n=_m(this,t),!Array.isArray(e))throw new TypeError(\"Parameter conditionals must be an array\");if(!Array.isArray(r))throw new TypeError(\"Parameter params must be an array\");if(e.length!==r.length-1)throw new TypeError(\"Parameter params must contain exactly one more element than parameter conditionals\");return n.conditionals=e,n.params=r,n}return bp(t,e),Ie(t,[{key:\"type\",get:function(){return km}},{key:\"isRelationalNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var r=this,n=this.params.map((function(r){return r._compile(e,t)}));return function(t,i,a){for(var o,u=n[0](t,i,a),s=0;s('+r.toHTML(e)+')':r.toHTML(e)})),a=i[0],o=0;o'+nn(r[this.conditionals[o]])+\"\"+i[o+1];return a}},{key:\"_toTex\",value:function(e){for(var t=e&&e.parenthesis?e.parenthesis:\"keep\",r=kp(this,t,e&&e.implicit),n=this.params.map((function(n,i){var a=kp(n,t,e&&e.implicit);return\"all\"===t||null!==a&&a<=r?\"\\\\left(\"+n.toTex(e)+\"\\right)\":n.toTex(e)})),i=n[0],a=0;a'+t+\"\":\"i\"===t?''+t+\"\":\"Infinity\"===t?''+t+\"\":\"NaN\"===t?''+t+\"\":\"null\"===t?''+t+\"\":\"undefined\"===t?''+t+\"\":''+t+\"\"}},{key:\"toJSON\",value:function(){return{mathjs:\"SymbolNode\",name:this.name}}},{key:\"_toTex\",value:function(e){var r=!1;void 0===t[this.name]&&n(this.name)&&(r=!0);var i=tm(this.name,r);return\"\\\\\"===i[0]?i:\" \"+i}}],[{key:\"onUndefinedSymbol\",value:function(e){throw new Error(\"Undefined symbol \"+e)}},{key:\"fromJSON\",value:function(e){return new i(e.name)}}])}(e.Node);return i}),{isClass:!0,isNode:!0});function jm(){return jm=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=gp(e)););return e}(e,t);if(n){var i=Object.getOwnPropertyDescriptor(n,t);return i.get?i.get.call(arguments.length<3?e:r):i.value}},jm.apply(this,arguments)}function Pm(e,t,r){return t=gp(t),yp(e,Lm()?Reflect.construct(t,r||[],gp(e).constructor):t.apply(e,r))}function Lm(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Lm=function(){return!!e})()}var Um=\"FunctionNode\",$m=Se(Um,[\"math\",\"Node\",\"SymbolNode\"],(function(e){var r,n=e.math,i=e.Node,a=e.SymbolNode,o=function(e){return en(e,{truncate:78})};function u(e,r,n){for(var i,a=\"\",o=/\\$(?:\\{([a-z_][a-z_0-9]*)(?:\\[([0-9]+)\\])?\\}|\\$)/gi,u=0;null!==(i=o.exec(e));)if(a+=e.substring(u,i.index),u=i.index,\"$$\"===i[0])a+=\"$\",u++;else{u+=i[0].length;var s=r[i[1]];if(!s)throw new ReferenceError(\"Template: Property \"+i[1]+\" does not exist.\");if(void 0===i[2])switch(t(s)){case\"string\":a+=s;break;case\"object\":if(z(s))a+=s.toTex(n);else{if(!Array.isArray(s))throw new TypeError(\"Template: \"+i[1]+\" has to be a Node, String or array of Nodes\");a+=s.map((function(e,t){if(z(e))return e.toTex(n);throw new TypeError(\"Template: \"+i[1]+\"[\"+t+\"] is not a Node.\")})).join(\",\")}break;default:throw new TypeError(\"Template: \"+i[1]+\" has to be a Node, String or array of Nodes\")}else{if(!z(s[i[2]]&&s[i[2]]))throw new TypeError(\"Template: \"+i[1]+\"[\"+i[2]+\"] is not a Node.\");a+=s[i[2]].toTex(n)}}return a+e.slice(u)}var s=function(e){function r(e,t){var n;if(_e(this,r),n=Pm(this,r),\"string\"==typeof e&&(e=new a(e)),!z(e))throw new TypeError('Node expected as parameter \"fn\"');if(!Array.isArray(t)||!t.every(z))throw new TypeError('Array containing Nodes expected for parameter \"args\"');return n.fn=e,n.args=t||[],n}return bp(r,e),Ie(r,[{key:\"name\",get:function(){return this.fn.name||\"\"}},{key:\"type\",get:function(){return Um}},{key:\"isFunctionNode\",get:function(){return!0}},{key:\"_compile\",value:function(e,t){var n=this.args.map((function(r){return r._compile(e,t)}));if(!U(this.fn)){if(S(this.fn)&&I(this.fn.index)&&this.fn.index.isObjectProperty()){var i=this.fn.object._compile(e,t),a=this.fn.index.getObjectProperty(),u=this.args;return function(t,r,o){var s=i(t,r,o),c=function(e,t){if(!je(e,t))throw new Error('No access to method \"'+t+'\"');return e[t]}(s,a);if(null!=c&&c.rawArgs)return c(u,e,xm(t,r));var f=n.map((function(e){return e(t,r,o)}));return c.apply(s,f)}}var s=this.fn.toString(),c=this.fn._compile(e,t),f=this.args;return function(t,r,i){var a=c(t,r,i);if(\"function\"!=typeof a)throw new TypeError(\"Expression '\".concat(s,\"' did not evaluate to a function; value is:\")+\"\\n \".concat(o(a)));if(a.rawArgs)return a(f,e,xm(t,r));var u=n.map((function(e){return e(t,r,i)}));return a.apply(a,u)}}var l=this.fn.name;if(t[l]){var p=this.args;return function(t,r,i){var a=ze(r,l);if(\"function\"!=typeof a)throw new TypeError(\"Argument '\".concat(l,\"' was not a function; received: \").concat(o(a)));if(a.rawArgs)return a(p,e,xm(t,r));var u=n.map((function(e){return e(t,r,i)}));return a.apply(a,u)}}var m=l in e?ze(e,l):void 0,h=\"function\"==typeof m&&!0===m.rawArgs,d=function(t){var n;if(t.has(l))n=t.get(l);else{if(!(l in e))return r.onUndefinedFunction(l);n=ze(e,l)}if(\"function\"==typeof n)return n;throw new TypeError(\"'\".concat(l,\"' is not a function; its value is:\\n \").concat(o(n)))};if(h){var v=this.args;return function(t,r,n){return d(t)(v,e,xm(t,r))}}switch(n.length){case 0:return function(e,t,r){return d(e)()};case 1:return function(e,t,r){return d(e)((0,n[0])(e,t,r))};case 2:return function(e,t,r){var i=d(e),a=n[0],o=n[1];return i(a(e,t,r),o(e,t,r))};default:return function(e,t,r){var i=d(e),a=n.map((function(n){return n(e,t,r)}));return i.apply(void 0,Te(a))}}}},{key:\"forEach\",value:function(e){e(this.fn,\"fn\",this);for(var t=0;t'+nn(this.fn)+'('+t.join(',')+')'}},{key:\"toTex\",value:function(e){var n;return e&&\"object\"===t(e.handler)&&Ae(e.handler,this.name)&&(n=e.handler[this.name](this,e)),void 0!==n?n:jm(gp(r.prototype),\"toTex\",this).call(this,e)}},{key:\"_toTex\",value:function(e){var r,i,a=this.args.map((function(t){return t.toTex(e)}));switch(Qp[this.name]&&(r=Qp[this.name]),!n[this.name]||\"function\"!=typeof n[this.name].toTex&&\"object\"!==t(n[this.name].toTex)&&\"string\"!=typeof n[this.name].toTex||(r=n[this.name].toTex),t(r)){case\"function\":i=r(this,e);break;case\"string\":i=u(r,this,e);break;case\"object\":switch(t(r[a.length])){case\"function\":i=r[a.length](this,e);break;case\"string\":i=u(r[a.length],this,e)}}return void 0!==i?i:u(\"\\\\mathrm{${name}}\\\\left(${args}\\\\right)\",this,e)}},{key:\"getIdentifier\",value:function(){return this.type+\":\"+this.name}}])}(i);return r=s,Ga(s,\"name\",Um),Ga(s,\"onUndefinedFunction\",(function(e){throw new Error(\"Undefined function \"+e)})),Ga(s,\"fromJSON\",(function(e){return new r(e.fn,e.args)})),s}),{isClass:!0,isNode:!0}),Hm=\"parse\",Gm=Se(Hm,[\"typed\",\"numeric\",\"config\",\"AccessorNode\",\"ArrayNode\",\"AssignmentNode\",\"BlockNode\",\"ConditionalNode\",\"ConstantNode\",\"FunctionAssignmentNode\",\"FunctionNode\",\"IndexNode\",\"ObjectNode\",\"OperatorNode\",\"ParenthesisNode\",\"RangeNode\",\"RelationalNode\",\"SymbolNode\"],(function(e){var t=e.typed,r=e.numeric,n=e.config,i=e.AccessorNode,a=e.ArrayNode,o=e.AssignmentNode,u=e.BlockNode,s=e.ConditionalNode,c=e.ConstantNode,f=e.FunctionAssignmentNode,l=e.FunctionNode,p=e.IndexNode,m=e.ObjectNode,h=e.OperatorNode,d=e.ParenthesisNode,v=e.RangeNode,y=e.RelationalNode,g=e.SymbolNode,x=t(Hm,{string:function(e){return L(e,{})},\"Array | Matrix\":function(e){return b(e,{})},\"string, Object\":function(e,t){return L(e,void 0!==t.nodes?t.nodes:{})},\"Array | Matrix, Object\":b});function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=void 0!==t.nodes?t.nodes:{};return Zn(e,(function(e){if(\"string\"!=typeof e)throw new TypeError(\"String expected\");return L(e,r)}))}var w={NULL:0,DELIMITER:1,NUMBER:2,SYMBOL:3,UNKNOWN:4},D={\",\":!0,\"(\":!0,\")\":!0,\"[\":!0,\"]\":!0,\"{\":!0,\"}\":!0,'\"':!0,\"'\":!0,\";\":!0,\"+\":!0,\"-\":!0,\"*\":!0,\".*\":!0,\"/\":!0,\"./\":!0,\"%\":!0,\"^\":!0,\".^\":!0,\"~\":!0,\"!\":!0,\"&\":!0,\"|\":!0,\"^|\":!0,\"=\":!0,\":\":!0,\"?\":!0,\"==\":!0,\"!=\":!0,\"<\":!0,\">\":!0,\"<=\":!0,\">=\":!0,\"<<\":!0,\">>\":!0,\">>>\":!0},N={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},E={true:!0,false:!1,null:null,undefined:void 0},A=[\"NaN\",\"Infinity\"],C={'\"':'\"',\"'\":\"'\",\"\\\\\":\"\\\\\",\"/\":\"/\",b:\"\\b\",f:\"\\f\",n:\"\\n\",r:\"\\r\",t:\"\\t\"};function M(e,t){return e.expression.substr(e.index,t)}function F(e){return M(e,1)}function O(e){e.index++}function B(e){return e.expression.charAt(e.index-1)}function I(e){return e.expression.charAt(e.index+1)}function z(e){for(e.tokenType=w.NULL,e.token=\"\",e.comment=\"\";;){if(\"#\"===F(e))for(;\"\\n\"!==F(e)&&\"\"!==F(e);)e.comment+=F(e),O(e);if(!x.isWhitespace(F(e),e.nestingLevel))break;O(e)}if(\"\"!==F(e)){if(\"\\n\"===F(e)&&!e.nestingLevel)return e.tokenType=w.DELIMITER,e.token=F(e),void O(e);var t=F(e),r=M(e,2),n=M(e,3);if(3===n.length&&D[n])return e.tokenType=w.DELIMITER,e.token=n,O(e),O(e),void O(e);if(2===r.length&&D[r])return e.tokenType=w.DELIMITER,e.token=r,O(e),void O(e);if(D[t])return e.tokenType=w.DELIMITER,e.token=t,void O(e);if(x.isDigitDot(t)){e.tokenType=w.NUMBER;var i=M(e,2);if(\"0b\"===i||\"0o\"===i||\"0x\"===i){for(e.token+=F(e),O(e),e.token+=F(e),O(e);x.isHexDigit(F(e));)e.token+=F(e),O(e);if(\".\"===F(e))for(e.token+=\".\",O(e);x.isHexDigit(F(e));)e.token+=F(e),O(e);else if(\"i\"===F(e))for(e.token+=\"i\",O(e);x.isDigit(F(e));)e.token+=F(e),O(e);return}if(\".\"===F(e)){if(e.token+=F(e),O(e),!x.isDigit(F(e)))return void(e.tokenType=w.DELIMITER)}else{for(;x.isDigit(F(e));)e.token+=F(e),O(e);x.isDecimalMark(F(e),I(e))&&(e.token+=F(e),O(e))}for(;x.isDigit(F(e));)e.token+=F(e),O(e);if(\"E\"===F(e)||\"e\"===F(e))if(x.isDigit(I(e))||\"-\"===I(e)||\"+\"===I(e)){if(e.token+=F(e),O(e),\"+\"!==F(e)&&\"-\"!==F(e)||(e.token+=F(e),O(e)),!x.isDigit(F(e)))throw ce(e,'Digit expected, got \"'+F(e)+'\"');for(;x.isDigit(F(e));)e.token+=F(e),O(e);if(x.isDecimalMark(F(e),I(e)))throw ce(e,'Digit expected, got \"'+F(e)+'\"')}else if(\".\"===I(e))throw O(e),ce(e,'Digit expected, got \"'+F(e)+'\"')}else{if(!x.isAlpha(F(e),B(e),I(e))){for(e.tokenType=w.UNKNOWN;\"\"!==F(e);)e.token+=F(e),O(e);throw ce(e,'Syntax error in part \"'+e.token+'\"')}for(;x.isAlpha(F(e),B(e),I(e))||x.isDigit(F(e));)e.token+=F(e),O(e);Ae(N,e.token)?e.tokenType=w.DELIMITER:e.tokenType=w.SYMBOL}}else e.tokenType=w.DELIMITER}function R(e){do{z(e)}while(\"\\n\"===e.token)}function j(e){e.nestingLevel++}function P(e){e.nestingLevel--}function L(e,t){var r={extraNodes:{},expression:\"\",comment:\"\",index:0,token:\"\",tokenType:w.NULL,nestingLevel:0,conditionalLevel:null};Yr(r,{expression:e,extraNodes:t}),z(r);var n=function(e){var t,r,n=[];for(\"\"!==e.token&&\"\\n\"!==e.token&&\";\"!==e.token&&(t=$(e),e.comment&&(t.comment=e.comment));\"\\n\"===e.token||\";\"===e.token;)0===n.length&&t&&(r=\";\"!==e.token,n.push({node:t,visible:r})),z(e),\"\\n\"!==e.token&&\";\"!==e.token&&\"\"!==e.token&&(t=$(e),e.comment&&(t.comment=e.comment),r=\";\"!==e.token,n.push({node:t,visible:r}));return n.length>0?new u(n):(t||(t=new c(void 0),e.comment&&(t.comment=e.comment)),t)}(r);if(\"\"!==r.token)throw r.tokenType===w.DELIMITER?fe(r,\"Unexpected operator \"+r.token):ce(r,'Unexpected part \"'+r.token+'\"');return n}function $(e){var t,r,n,i,a=function(e){for(var t=function(e){for(var t=H(e);\"or\"===e.token;)R(e),t=new h(\"or\",\"or\",[t,H(e)]);return t}(e);\"?\"===e.token;){var r=e.conditionalLevel;e.conditionalLevel=e.nestingLevel,R(e);var n=t,i=$(e);if(\":\"!==e.token)throw ce(e,\"False part of conditional expression expected\");e.conditionalLevel=null,R(e);var a=$(e);t=new s(n,i,a),e.conditionalLevel=r}return t}(e);if(\"=\"===e.token){if(U(a))return t=a.name,R(e),n=$(e),new o(new g(t),n);if(S(a))return R(e),n=$(e),new o(a.object,a.index,n);if(k(a)&&U(a.fn)&&(i=!0,r=[],t=a.name,a.args.forEach((function(e,t){U(e)?r[t]=e.name:i=!1})),i))return R(e),n=$(e),new f(t,r,n);throw ce(e,\"Invalid left hand side of assignment operator =\")}return a}function H(e){for(var t=G(e);\"xor\"===e.token;)R(e),t=new h(\"xor\",\"xor\",[t,G(e)]);return t}function G(e){for(var t=V(e);\"and\"===e.token;)R(e),t=new h(\"and\",\"and\",[t,V(e)]);return t}function V(e){for(var t=Z(e);\"|\"===e.token;)R(e),t=new h(\"|\",\"bitOr\",[t,Z(e)]);return t}function Z(e){for(var t=W(e);\"^|\"===e.token;)R(e),t=new h(\"^|\",\"bitXor\",[t,W(e)]);return t}function W(e){for(var t=Y(e);\"&\"===e.token;)R(e),t=new h(\"&\",\"bitAnd\",[t,Y(e)]);return t}function Y(e){for(var t=[J(e)],r=[],n={\"==\":\"equal\",\"!=\":\"unequal\",\"<\":\"smaller\",\">\":\"larger\",\"<=\":\"smallerEq\",\">=\":\"largerEq\"};Ae(n,e.token);){var i={name:e.token,fn:n[e.token]};r.push(i),R(e),t.push(J(e))}return 1===t.length?t[0]:2===t.length?new h(r[0].name,r[0].fn,t):new y(r.map((function(e){return e.fn})),t)}function J(e){var t,r,n,i;t=X(e);for(var a={\"<<\":\"leftShift\",\">>\":\"rightArithShift\",\">>>\":\"rightLogShift\"};Ae(a,e.token);)n=a[r=e.token],R(e),i=[t,X(e)],t=new h(r,n,i);return t}function X(e){var t,r,n,i;t=Q(e);for(var a={to:\"to\",in:\"to\"};Ae(a,e.token);)n=a[r=e.token],R(e),\"in\"===r&&\"\"===e.token?t=new h(\"*\",\"multiply\",[t,new g(\"in\")],!0):(i=[t,Q(e)],t=new h(r,n,i));return t}function Q(e){var t,r=[];if(t=\":\"===e.token?new c(1):K(e),\":\"===e.token&&e.conditionalLevel!==e.nestingLevel){for(r.push(t);\":\"===e.token&&r.length<3;)R(e),\")\"===e.token||\"]\"===e.token||\",\"===e.token||\"\"===e.token?r.push(new g(\"end\")):r.push(K(e));t=3===r.length?new v(r[0],r[2],r[1]):new v(r[0],r[1])}return t}function K(e){var t,r,n,i;t=ee(e);for(var a={\"+\":\"add\",\"-\":\"subtract\"};Ae(a,e.token);){n=a[r=e.token],R(e);var o=ee(e);i=o.isPercentage?[t,new h(\"*\",\"multiply\",[t,o])]:[t,o],t=new h(r,n,i)}return t}function ee(e){var t,r,n,i;r=t=te(e);for(var a={\"*\":\"multiply\",\".*\":\"dotMultiply\",\"/\":\"divide\",\"./\":\"dotDivide\"};Ae(a,e.token);)i=a[n=e.token],R(e),r=te(e),t=new h(n,i,[t,r]);return t}function te(e){var t,r;for(r=t=re(e);e.tokenType===w.SYMBOL||\"in\"===e.token&&T(t)||!(e.tokenType!==w.NUMBER||T(r)||q(r)&&\"!\"!==r.op)||\"(\"===e.token;)r=re(e),t=new h(\"*\",\"multiply\",[t,r],!0);return t}function re(e){for(var t=ne(e),r=t,n=[];\"/\"===e.token&&_(r);){if(n.push(Yr({},e)),R(e),e.tokenType!==w.NUMBER){Yr(e,n.pop());break}if(n.push(Yr({},e)),R(e),e.tokenType!==w.SYMBOL&&\"(\"!==e.token){n.pop(),Yr(e,n.pop());break}Yr(e,n.pop()),n.pop(),r=ne(e),t=new h(\"/\",\"divide\",[t,r])}return t}function ne(e){var t,r,n,i;t=ie(e);for(var a={\"%\":\"mod\",mod:\"mod\"};Ae(a,e.token);)n=a[r=e.token],R(e),\"%\"===r&&e.tokenType===w.DELIMITER&&\"(\"!==e.token?t=new h(\"/\",\"divide\",[t,new c(100)],!1,!0):(i=[t,ie(e)],t=new h(r,n,i));return t}function ie(e){var t,i,o,u={\"-\":\"unaryMinus\",\"+\":\"unaryPlus\",\"~\":\"bitNot\",not:\"not\"};return Ae(u,e.token)?(o=u[e.token],t=e.token,R(e),i=[ie(e)],new h(t,o,i)):function(e){var t,i,o,u;return t=function(e){var t,i,o;t=function(e){var t=[];if(e.tokenType===w.SYMBOL&&Ae(e.extraNodes,e.token)){var i=e.extraNodes[e.token];if(z(e),\"(\"===e.token){if(t=[],j(e),z(e),\")\"!==e.token)for(t.push($(e));\",\"===e.token;)z(e),t.push($(e));if(\")\"!==e.token)throw ce(e,\"Parenthesis ) expected\");P(e),z(e)}return new i(t)}return function(e){var t;return e.tokenType===w.SYMBOL||e.tokenType===w.DELIMITER&&e.token in N?(t=e.token,z(e),ae(e,Ae(E,t)?new c(E[t]):A.includes(t)?new c(r(t,\"number\")):new g(t))):function(e){var t;return'\"'===e.token||\"'\"===e.token?(t=oe(e,e.token),ae(e,new c(t))):function(e){var t,i,o,u;if(\"[\"===e.token){if(j(e),z(e),\"]\"!==e.token){var s=ue(e);if(\";\"===e.token){for(o=1,i=[s];\";\"===e.token;)z(e),\"]\"!==e.token&&(i[o]=ue(e),o++);if(\"]\"!==e.token)throw ce(e,\"End of matrix ] expected\");P(e),z(e),u=i[0].items.length;for(var f=1;f0},x.isDecimalMark=function(e,t){return\".\"===e&&\"/\"!==t&&\"*\"!==t&&\"^\"!==t},x.isDigitDot=function(e){return e>=\"0\"&&e<=\"9\"||\".\"===e},x.isDigit=function(e){return e>=\"0\"&&e<=\"9\"},x.isHexDigit=function(e){return e>=\"0\"&&e<=\"9\"||e>=\"a\"&&e<=\"f\"||e>=\"A\"&&e<=\"F\"},t.addConversion({from:\"string\",to:\"Node\",convert:x}),x})),Vm=\"compile\",Zm=Se(Vm,[\"typed\",\"parse\"],(function(e){var t=e.typed,r=e.parse;return t(Vm,{string:function(e){return r(e).compile()},\"Array | Matrix\":function(e){return Zn(e,(function(e){return r(e).compile()}))}})})),Wm=\"evaluate\",Ym=Se(Wm,[\"typed\",\"parse\"],(function(e){var t=e.typed,r=e.parse;return t(Wm,{string:function(e){var t=We();return r(e).compile().evaluate(t)},\"string, Map | Object\":function(e,t){return r(e).compile().evaluate(t)},\"Array | Matrix\":function(e){var t=We();return Zn(e,(function(e){return r(e).compile().evaluate(t)}))},\"Array | Matrix, Map | Object\":function(e,t){return Zn(e,(function(e){return r(e).compile().evaluate(t)}))}})})),Jm=Se(\"Parser\",[\"evaluate\"],(function(e){var t=e.evaluate;function r(){if(!(this instanceof r))throw new SyntaxError(\"Constructor must be called with the new operator\");Object.defineProperty(this,\"scope\",{value:We(),writable:!1})}return r.prototype.type=\"Parser\",r.prototype.isParser=!0,r.prototype.evaluate=function(e){return t(e,this.scope)},r.prototype.get=function(e){if(this.scope.has(e))return this.scope.get(e)},r.prototype.getAll=function(){return function(e){if(e instanceof Ge)return e.wrappedObject;var t,r={},n=$e(e.keys());try{for(n.s();!(t=n.n()).done;){var i=t.value;Re(r,i,e.get(i))}}catch(e){n.e(e)}finally{n.f()}return r}(this.scope)},r.prototype.getAllAsMap=function(){return this.scope},r.prototype.set=function(e,t){return this.scope.set(e,t),t},r.prototype.remove=function(e){this.scope.delete(e)},r.prototype.clear=function(){this.scope.clear()},r}),{isClass:!0}),Xm=\"parser\",Qm=Se(Xm,[\"typed\",\"Parser\"],(function(e){var t=e.typed,r=e.Parser;return t(Xm,{\"\":function(){return new r}})})),Km=Se(\"lup\",[\"typed\",\"matrix\",\"abs\",\"addScalar\",\"divideScalar\",\"multiplyScalar\",\"subtractScalar\",\"larger\",\"equalScalar\",\"unaryMinus\",\"DenseMatrix\",\"SparseMatrix\",\"Spa\"],(function(e){var t=e.typed,r=e.matrix,n=e.abs,i=e.addScalar,a=e.divideScalar,o=e.multiplyScalar,u=e.subtractScalar,s=e.larger,c=e.equalScalar,f=e.unaryMinus,l=e.DenseMatrix,p=e.SparseMatrix,m=e.Spa;return t(\"lup\",{DenseMatrix:function(e){return h(e)},SparseMatrix:function(e){return function(e){var t,r,i,u=e._size[0],l=e._size[1],h=Math.min(u,l),d=e._values,v=e._index,y=e._ptr,g=[],x=[],b=[],w=[u,h],D=[],N=[],E=[],A=[h,l],S=[],C=[];for(t=0;t0&&e.forEach(0,r-1,(function(t,r){p._forEachRow(t,g,x,b,(function(n,i){n>t&&e.accumulate(n,f(o(i,r)))}))}));var M,F,O,T,_=r,B=e.get(r),k=n(B);e.forEach(r+1,u-1,(function(e,t){var r=n(t);s(r,k)&&(_=e,k=r,B=t)})),r!==_&&(p._swapRows(r,_,w[1],g,x,b),p._swapRows(r,_,A[1],D,N,E),e.swap(r,_),F=_,O=C[M=r],T=C[F],S[O]=F,S[T]=M,C[M]=T,C[F]=O),e.forEach(0,u-1,(function(e,t){e<=r?(D.push(t),N.push(e)):(t=a(t,B),c(t,0)||(g.push(t),x.push(e)))}))};for(r=0;r0)for(t=0;t0)for(var n=\"Complex\"===r[0][0].type?d(0):0,i=0;i=0;){var s=r[o+u],c=r[n+s];-1===c?(u--,a[t++]=s):(r[n+s]=r[i+c],r[o+ ++u]=c)}return t}function rh(e){return-e-2}var nh=Se(\"csAmd\",[\"add\",\"multiply\",\"transpose\"],(function(e){var t=e.add,r=e.multiply,n=e.transpose;return function(e,o){if(!o||e<=0||e>3)return null;var u=o._size,s=u[0],c=u[1],f=0,l=Math.max(16,10*Math.sqrt(c)),p=function(e,i,a,o,u){var s=n(i);if(1===e&&o===a)return t(i,s);if(2===e){for(var c=s._index,f=s._ptr,l=0,p=0;pu))for(var h=f[p+1];mo)r[u+p]=0,r[i+p]=-1,l++,t[p]=rh(e),r[u+e]++;else{var h=r[s+m];-1!==h&&(c[h]=p),r[f+p]=r[s+m],r[s+m]=p}}return l}(c,O,B,q,R,j,l,k,z,L,I),H=0;$G?(g=d,x=W,b=B[0+d]-G):(x=O[g=F[W++]],b=B[0+g]),y=1;y<=b;y++)(w=B[k+(m=F[x++])])<=0||(Z+=w,B[k+m]=-w,F[J++]=m,-1!==B[I+m]&&(L[B[I+m]]=L[m]),-1!==L[m]?B[I+L[m]]=B[I+m]:B[z+B[q+m]]=B[I+m]);g!==d&&(O[g]=rh(d),B[j+g]=0)}for(0!==G&&(T=J),B[q+d]=Z,O[d]=Y,B[0+d]=J-Y,B[R+d]=-2,U=i(U,f,B,j,c),D=Y;D=U?B[j+g]-=w:0!==B[j+g]&&(B[j+g]=B[q+g]+X)}for(D=Y;D0?(M+=Q,F[S++]=g,C+=g):(O[g]=rh(d),B[j+g]=0)}B[R+m]=S-E+1;var K=S,ee=E+B[0+m];for(W=A+1;W=0))for(m=B[P+(C=L[m])],B[P+C]=-1;-1!==m&&-1!==B[I+m];m=B[I+m],U++){for(b=B[0+m],N=B[R+m],W=O[m]+1;W<=O[m]+b-1;W++)B[j+F[W]]=U;var re=m;for(h=B[I+m];-1!==h;){var ne=B[0+h]===b&&B[R+h]===N;for(W=O[h]+1;ne&&W<=O[h]+b-1;W++)B[j+F[W]]!==U&&(ne=0);ne?(O[h]=rh(m),B[k+m]+=B[k+h],B[k+h]=0,B[R+h]=-1,h=B[I+h],B[I+re]=h):(re=h,h=B[I+h])}}for(W=Y,D=Y;D=0;h--)B[k+h]>0||(B[I+h]=B[z+O[h]],B[z+O[h]]=h);for(g=c;g>=0;g--)B[k+g]<=0||-1!==O[g]&&(B[I+g]=B[z+O[g]],B[z+O[g]]=g);for(d=0,m=0;m<=c;m++)-1===O[m]&&(d=th(m,d,B,z,I,_,j));return _.splice(_.length-1,1),_};function i(e,t,r,n,i){if(e<2||e+t<0){for(var a=0;a=1&&D[o]++,2===S.jleaf&&D[S.q]--}-1!==r[o]&&(v[0+o]=r[o])}for(o=0;o=0;r--)-1!==e[r]&&(a[o+r]=a[0+e[r]],a[0+e[r]]=r);for(r=0;r=0;s--)for(f=r[s],l=r[s+1],c=f;c=0;u--)m[u]=-1,-1!==(s=h[u])&&(0==d[g+s]++&&(d[y+s]=u),d[0+u]=d[v+s],d[v+s]=u);for(t.lnz=0,t.m2=a,s=0;s=0;){e=n[l];var p=i?i[e]:e;uh(c,e)||(sh(c,e),n[f+l]=p<0?0:ch(c[p]));var m=1;for(o=n[f+l],u=p<0?0:ch(c[p+1]);o3)throw new Error(\"Symbolic Ordering and Analysis order must be an integer number in the interval [0, 3]\");if(r<0||r>1)throw new Error(\"Partial pivoting threshold must be a number from 0 to 1\");var n=l(t,e,!1),i=p(e,n,r);return{L:i.L,U:i.U,p:i.pinv,q:n.q,toString:function(){return\"L: \"+this.L.toString()+\"\\nU: \"+this.U.toString()+\"\\np: \"+this.p.toString()+(this.q?\"\\nq: \"+this.q.toString():\"\")+\"\\n\"}}}})}));function hh(e,t){var r,n=t.length,i=[];if(e)for(r=0;r0&&r(h[h.length-1]);)h.pop();if(h.length<2)throw new RangeError(\"Polynomial [\".concat(e,\", \").concat(t,\"] must have a non-zero non-constant coefficient\"));switch(h.length){case 2:return[c(u(h[0],h[1]))];case 3:var d=Ea(h,3),v=d[0],y=d[1],g=d[2],x=o(2,g),b=o(y,y),w=o(4,g,v);if(n(b,w))return[u(c(y),x)];var D=s(a(b,w));return[u(a(D,y),x),u(a(c(D),y),x)];case 4:var N=Ea(h,4),E=N[0],A=N[1],S=N[2],C=N[3],M=c(o(3,C)),F=o(S,S),O=o(3,C,A),T=i(o(2,S,S,S),o(27,C,C,E)),_=o(9,C,S,A);if(n(F,O)&&n(T,_))return[u(S,M)];var B,k=a(F,O),I=a(T,_),z=i(o(18,C,S,A,E),o(S,S,A,A)),R=i(o(4,S,S,S,E),o(4,C,A,A,A),o(27,C,C,E,E));return n(z,R)?[u(a(o(4,C,S,A),i(o(9,C,C,E),o(S,S,S))),o(C,k)),u(a(o(9,C,E),o(S,A)),o(2,k))]:(B=n(F,O)?I:u(i(I,s(a(o(I,I),o(4,k,k,k)))),2),f(B,!0).toArray().map((function(e){return u(i(S,e,u(k,e)),M)})).map((function(e){return\"Complex\"===l(e)&&n(m(e),m(e)+p(e))?m(e):e})));default:throw new RangeError(\"only implemented for cubic or lower-order polynomials, not \".concat(h))}}})})),xh=Se(\"Help\",[\"evaluate\"],(function(e){var t=e.evaluate;function r(e){if(!(this instanceof r))throw new SyntaxError(\"Constructor must be called with the new operator\");if(!e)throw new Error('Argument \"doc\" missing');this.doc=e}return r.prototype.type=\"Help\",r.prototype.isHelp=!0,r.prototype.toString=function(){var e=this.doc||{},r=\"\\n\";if(e.name&&(r+=\"Name: \"+e.name+\"\\n\\n\"),e.category&&(r+=\"Category: \"+e.category+\"\\n\\n\"),e.description&&(r+=\"Description:\\n \"+e.description+\"\\n\\n\"),e.syntax&&(r+=\"Syntax:\\n \"+e.syntax.join(\"\\n \")+\"\\n\\n\"),e.examples){r+=\"Examples:\\n\";for(var n=!1,i=t(\"config()\"),a={config:function(e){return n=!0,t(\"config(newConfig)\",{newConfig:e})}},o=0;o1 and B<3]\"],seealso:[\"bignumber\",\"boolean\",\"complex\",\"matrix,\",\"number\",\"range\",\"string\",\"unit\"]},matrix:{name:\"matrix\",category:\"Construction\",syntax:[\"[]\",\"[a1, b1, ...; a2, b2, ...]\",\"matrix()\",'matrix(\"dense\")',\"matrix([...])\"],description:\"Create a matrix.\",examples:[\"[]\",\"[1, 2, 3]\",\"[1, 2, 3; 4, 5, 6]\",\"matrix()\",\"matrix([3, 4])\",'matrix([3, 4; 5, 6], \"sparse\")','matrix([3, 4; 5, 6], \"sparse\", \"number\")'],seealso:[\"bignumber\",\"boolean\",\"complex\",\"index\",\"number\",\"string\",\"unit\",\"sparse\"]},number:{name:\"number\",category:\"Construction\",syntax:[\"x\",\"number(x)\",\"number(unit, valuelessUnit)\"],description:\"Create a number or convert a string or boolean into a number.\",examples:[\"2\",\"2e3\",\"4.05\",\"number(2)\",'number(\"7.2\")',\"number(true)\",\"number([true, false, true, true])\",'number(unit(\"52cm\"), \"m\")'],seealso:[\"bignumber\",\"boolean\",\"complex\",\"fraction\",\"index\",\"matrix\",\"string\",\"unit\"]},sparse:{name:\"sparse\",category:\"Construction\",syntax:[\"sparse()\",\"sparse([a1, b1, ...; a1, b2, ...])\",'sparse([a1, b1, ...; a1, b2, ...], \"number\")'],description:\"Create a sparse matrix.\",examples:[\"sparse()\",\"sparse([3, 4; 5, 6])\",'sparse([3, 0; 5, 0], \"number\")'],seealso:[\"bignumber\",\"boolean\",\"complex\",\"index\",\"number\",\"string\",\"unit\",\"matrix\"]},splitUnit:{name:\"splitUnit\",category:\"Construction\",syntax:[\"splitUnit(unit: Unit, parts: Unit[])\"],description:\"Split a unit in an array of units whose sum is equal to the original unit.\",examples:['splitUnit(1 m, [\"feet\", \"inch\"])'],seealso:[\"unit\",\"createUnit\"]},string:{name:\"string\",category:\"Construction\",syntax:['\"text\"',\"string(x)\"],description:\"Create a string or convert a value to a string\",examples:['\"Hello World!\"',\"string(4.2)\",\"string(3 + 2i)\"],seealso:[\"bignumber\",\"boolean\",\"complex\",\"index\",\"matrix\",\"number\",\"unit\"]},unit:{name:\"unit\",category:\"Construction\",syntax:[\"value unit\",\"unit(value, unit)\",\"unit(string)\"],description:\"Create a unit.\",examples:[\"5.5 mm\",\"3 inch\",'unit(7.1, \"kilogram\")','unit(\"23 deg\")'],seealso:[\"bignumber\",\"boolean\",\"complex\",\"index\",\"matrix\",\"number\",\"string\"]},e:wh,E:wh,false:{name:\"false\",category:\"Constants\",syntax:[\"false\"],description:\"Boolean value false\",examples:[\"false\"],seealso:[\"true\"]},i:{name:\"i\",category:\"Constants\",syntax:[\"i\"],description:\"Imaginary unit, defined as i*i=-1. A complex number is described as a + b*i, where a is the real part, and b is the imaginary part.\",examples:[\"i\",\"i * i\",\"sqrt(-1)\"],seealso:[]},Infinity:{name:\"Infinity\",category:\"Constants\",syntax:[\"Infinity\"],description:\"Infinity, a number which is larger than the maximum number that can be handled by a floating point number.\",examples:[\"Infinity\",\"1 / 0\"],seealso:[]},LN2:{name:\"LN2\",category:\"Constants\",syntax:[\"LN2\"],description:\"Returns the natural logarithm of 2, approximately equal to 0.693\",examples:[\"LN2\",\"log(2)\"],seealso:[]},LN10:{name:\"LN10\",category:\"Constants\",syntax:[\"LN10\"],description:\"Returns the natural logarithm of 10, approximately equal to 2.302\",examples:[\"LN10\",\"log(10)\"],seealso:[]},LOG2E:{name:\"LOG2E\",category:\"Constants\",syntax:[\"LOG2E\"],description:\"Returns the base-2 logarithm of E, approximately equal to 1.442\",examples:[\"LOG2E\",\"log(e, 2)\"],seealso:[]},LOG10E:{name:\"LOG10E\",category:\"Constants\",syntax:[\"LOG10E\"],description:\"Returns the base-10 logarithm of E, approximately equal to 0.434\",examples:[\"LOG10E\",\"log(e, 10)\"],seealso:[]},NaN:{name:\"NaN\",category:\"Constants\",syntax:[\"NaN\"],description:\"Not a number\",examples:[\"NaN\",\"0 / 0\"],seealso:[]},null:{name:\"null\",category:\"Constants\",syntax:[\"null\"],description:\"Value null\",examples:[\"null\"],seealso:[\"true\",\"false\"]},pi:Dh,PI:Dh,phi:{name:\"phi\",category:\"Constants\",syntax:[\"phi\"],description:\"Phi is the golden ratio. Two quantities are in the golden ratio if their ratio is the same as the ratio of their sum to the larger of the two quantities. Phi is defined as `(1 + sqrt(5)) / 2` and is approximately 1.618034...\",examples:[\"phi\"],seealso:[]},SQRT1_2:{name:\"SQRT1_2\",category:\"Constants\",syntax:[\"SQRT1_2\"],description:\"Returns the square root of 1/2, approximately equal to 0.707\",examples:[\"SQRT1_2\",\"sqrt(1/2)\"],seealso:[]},SQRT2:{name:\"SQRT2\",category:\"Constants\",syntax:[\"SQRT2\"],description:\"Returns the square root of 2, approximately equal to 1.414\",examples:[\"SQRT2\",\"sqrt(2)\"],seealso:[]},tau:{name:\"tau\",category:\"Constants\",syntax:[\"tau\"],description:\"Tau is the ratio constant of a circle's circumference to radius, equal to 2 * pi, approximately 6.2832.\",examples:[\"tau\",\"2 * pi\"],seealso:[\"pi\"]},true:{name:\"true\",category:\"Constants\",syntax:[\"true\"],description:\"Boolean value true\",examples:[\"true\"],seealso:[\"false\"]},version:{name:\"version\",category:\"Constants\",syntax:[\"version\"],description:\"A string with the version number of math.js\",examples:[\"version\"],seealso:[]},speedOfLight:{description:\"Speed of light in vacuum\",examples:[\"speedOfLight\"]},gravitationConstant:{description:\"Newtonian constant of gravitation\",examples:[\"gravitationConstant\"]},planckConstant:{description:\"Planck constant\",examples:[\"planckConstant\"]},reducedPlanckConstant:{description:\"Reduced Planck constant\",examples:[\"reducedPlanckConstant\"]},magneticConstant:{description:\"Magnetic constant (vacuum permeability)\",examples:[\"magneticConstant\"]},electricConstant:{description:\"Electric constant (vacuum permeability)\",examples:[\"electricConstant\"]},vacuumImpedance:{description:\"Characteristic impedance of vacuum\",examples:[\"vacuumImpedance\"]},coulomb:{description:\"Coulomb's constant\",examples:[\"coulomb\"]},elementaryCharge:{description:\"Elementary charge\",examples:[\"elementaryCharge\"]},bohrMagneton:{description:\"Borh magneton\",examples:[\"bohrMagneton\"]},conductanceQuantum:{description:\"Conductance quantum\",examples:[\"conductanceQuantum\"]},inverseConductanceQuantum:{description:\"Inverse conductance quantum\",examples:[\"inverseConductanceQuantum\"]},magneticFluxQuantum:{description:\"Magnetic flux quantum\",examples:[\"magneticFluxQuantum\"]},nuclearMagneton:{description:\"Nuclear magneton\",examples:[\"nuclearMagneton\"]},klitzing:{description:\"Von Klitzing constant\",examples:[\"klitzing\"]},bohrRadius:{description:\"Borh radius\",examples:[\"bohrRadius\"]},classicalElectronRadius:{description:\"Classical electron radius\",examples:[\"classicalElectronRadius\"]},electronMass:{description:\"Electron mass\",examples:[\"electronMass\"]},fermiCoupling:{description:\"Fermi coupling constant\",examples:[\"fermiCoupling\"]},fineStructure:{description:\"Fine-structure constant\",examples:[\"fineStructure\"]},hartreeEnergy:{description:\"Hartree energy\",examples:[\"hartreeEnergy\"]},protonMass:{description:\"Proton mass\",examples:[\"protonMass\"]},deuteronMass:{description:\"Deuteron Mass\",examples:[\"deuteronMass\"]},neutronMass:{description:\"Neutron mass\",examples:[\"neutronMass\"]},quantumOfCirculation:{description:\"Quantum of circulation\",examples:[\"quantumOfCirculation\"]},rydberg:{description:\"Rydberg constant\",examples:[\"rydberg\"]},thomsonCrossSection:{description:\"Thomson cross section\",examples:[\"thomsonCrossSection\"]},weakMixingAngle:{description:\"Weak mixing angle\",examples:[\"weakMixingAngle\"]},efimovFactor:{description:\"Efimov factor\",examples:[\"efimovFactor\"]},atomicMass:{description:\"Atomic mass constant\",examples:[\"atomicMass\"]},avogadro:{description:\"Avogadro's number\",examples:[\"avogadro\"]},boltzmann:{description:\"Boltzmann constant\",examples:[\"boltzmann\"]},faraday:{description:\"Faraday constant\",examples:[\"faraday\"]},firstRadiation:{description:\"First radiation constant\",examples:[\"firstRadiation\"]},loschmidt:{description:\"Loschmidt constant at T=273.15 K and p=101.325 kPa\",examples:[\"loschmidt\"]},gasConstant:{description:\"Gas constant\",examples:[\"gasConstant\"]},molarPlanckConstant:{description:\"Molar Planck constant\",examples:[\"molarPlanckConstant\"]},molarVolume:{description:\"Molar volume of an ideal gas at T=273.15 K and p=101.325 kPa\",examples:[\"molarVolume\"]},sackurTetrode:{description:\"Sackur-Tetrode constant at T=1 K and p=101.325 kPa\",examples:[\"sackurTetrode\"]},secondRadiation:{description:\"Second radiation constant\",examples:[\"secondRadiation\"]},stefanBoltzmann:{description:\"Stefan-Boltzmann constant\",examples:[\"stefanBoltzmann\"]},wienDisplacement:{description:\"Wien displacement law constant\",examples:[\"wienDisplacement\"]},molarMass:{description:\"Molar mass constant\",examples:[\"molarMass\"]},molarMassC12:{description:\"Molar mass constant of carbon-12\",examples:[\"molarMassC12\"]},gravity:{description:\"Standard acceleration of gravity (standard acceleration of free-fall on Earth)\",examples:[\"gravity\"]},planckLength:{description:\"Planck length\",examples:[\"planckLength\"]},planckMass:{description:\"Planck mass\",examples:[\"planckMass\"]},planckTime:{description:\"Planck time\",examples:[\"planckTime\"]},planckCharge:{description:\"Planck charge\",examples:[\"planckCharge\"]},planckTemperature:{description:\"Planck temperature\",examples:[\"planckTemperature\"]},derivative:{name:\"derivative\",category:\"Algebra\",syntax:[\"derivative(expr, variable)\",\"derivative(expr, variable, {simplify: boolean})\"],description:\"Takes the derivative of an expression expressed in parser Nodes. The derivative will be taken over the supplied variable in the second parameter. If there are multiple variables in the expression, it will return a partial derivative.\",examples:['derivative(\"2x^3\", \"x\")','derivative(\"2x^3\", \"x\", {simplify: false})','derivative(\"2x^2 + 3x + 4\", \"x\")','derivative(\"sin(2x)\", \"x\")','f = parse(\"x^2 + x\")','x = parse(\"x\")',\"df = derivative(f, x)\",\"df.evaluate({x: 3})\"],seealso:[\"simplify\",\"parse\",\"evaluate\"]},lsolve:{name:\"lsolve\",category:\"Algebra\",syntax:[\"x=lsolve(L, b)\"],description:\"Finds one solution of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.\",examples:[\"a = [-2, 3; 2, 1]\",\"b = [11, 9]\",\"x = lsolve(a, b)\"],seealso:[\"lsolveAll\",\"lup\",\"lusolve\",\"usolve\",\"matrix\",\"sparse\"]},lsolveAll:{name:\"lsolveAll\",category:\"Algebra\",syntax:[\"x=lsolveAll(L, b)\"],description:\"Finds all solutions of the linear system L * x = b where L is an [n x n] lower triangular matrix and b is a [n] column vector.\",examples:[\"a = [-2, 3; 2, 1]\",\"b = [11, 9]\",\"x = lsolve(a, b)\"],seealso:[\"lsolve\",\"lup\",\"lusolve\",\"usolve\",\"matrix\",\"sparse\"]},lup:{name:\"lup\",category:\"Algebra\",syntax:[\"lup(m)\"],description:\"Calculate the Matrix LU decomposition with partial pivoting. Matrix A is decomposed in three matrices (L, U, P) where P * A = L * U\",examples:[\"lup([[2, 1], [1, 4]])\",\"lup(matrix([[2, 1], [1, 4]]))\",\"lup(sparse([[2, 1], [1, 4]]))\"],seealso:[\"lusolve\",\"lsolve\",\"usolve\",\"matrix\",\"sparse\",\"slu\",\"qr\"]},lusolve:{name:\"lusolve\",category:\"Algebra\",syntax:[\"x=lusolve(A, b)\",\"x=lusolve(lu, b)\"],description:\"Solves the linear system A * x = b where A is an [n x n] matrix and b is a [n] column vector.\",examples:[\"a = [-2, 3; 2, 1]\",\"b = [11, 9]\",\"x = lusolve(a, b)\"],seealso:[\"lup\",\"slu\",\"lsolve\",\"usolve\",\"matrix\",\"sparse\"]},leafCount:{name:\"leafCount\",category:\"Algebra\",syntax:[\"leafCount(expr)\"],description:\"Computes the number of leaves in the parse tree of the given expression\",examples:['leafCount(\"e^(i*pi)-1\")','leafCount(parse(\"{a: 22/7, b: 10^(1/2)}\"))'],seealso:[\"simplify\"]},polynomialRoot:{name:\"polynomialRoot\",category:\"Algebra\",syntax:[\"x=polynomialRoot(-6, 3)\",\"x=polynomialRoot(4, -4, 1)\",\"x=polynomialRoot(-8, 12, -6, 1)\"],description:\"Finds the roots of a univariate polynomial given by its coefficients starting from constant, linear, and so on, increasing in degree.\",examples:[\"a = polynomialRoot(-6, 11, -6, 1)\"],seealso:[\"cbrt\",\"sqrt\"]},resolve:{name:\"resolve\",category:\"Algebra\",syntax:[\"resolve(node, scope)\"],description:\"Recursively substitute variables in an expression tree.\",examples:['resolve(parse(\"1 + x\"), { x: 7 })','resolve(parse(\"size(text)\"), { text: \"Hello World\" })','resolve(parse(\"x + y\"), { x: parse(\"3z\") })','resolve(parse(\"3x\"), { x: parse(\"y+z\"), z: parse(\"w^y\") })'],seealso:[\"simplify\",\"evaluate\"],mayThrow:[\"ReferenceError\"]},simplify:{name:\"simplify\",category:\"Algebra\",syntax:[\"simplify(expr)\",\"simplify(expr, rules)\"],description:\"Simplify an expression tree.\",examples:['simplify(\"3 + 2 / 4\")','simplify(\"2x + x\")','f = parse(\"x * (x + 2 + x)\")',\"simplified = simplify(f)\",\"simplified.evaluate({x: 2})\"],seealso:[\"simplifyCore\",\"derivative\",\"evaluate\",\"parse\",\"rationalize\",\"resolve\"]},simplifyConstant:{name:\"simplifyConstant\",category:\"Algebra\",syntax:[\"simplifyConstant(expr)\",\"simplifyConstant(expr, options)\"],description:\"Replace constant subexpressions of node with their values.\",examples:['simplifyConstant(\"(3-3)*x\")','simplifyConstant(parse(\"z-cos(tau/8)\"))'],seealso:[\"simplify\",\"simplifyCore\",\"evaluate\"]},simplifyCore:{name:\"simplifyCore\",category:\"Algebra\",syntax:[\"simplifyCore(node)\"],description:\"Perform simple one-pass simplifications on an expression tree.\",examples:['simplifyCore(parse(\"0*x\"))','simplifyCore(parse(\"(x+0)*2\"))'],seealso:[\"simplify\",\"simplifyConstant\",\"evaluate\"]},symbolicEqual:{name:\"symbolicEqual\",category:\"Algebra\",syntax:[\"symbolicEqual(expr1, expr2)\",\"symbolicEqual(expr1, expr2, options)\"],description:\"Returns true if the difference of the expressions simplifies to 0\",examples:['symbolicEqual(\"x*y\",\"y*x\")','symbolicEqual(\"abs(x^2)\", \"x^2\")','symbolicEqual(\"abs(x)\", \"x\", {context: {abs: {trivial: true}}})'],seealso:[\"simplify\",\"evaluate\"]},rationalize:{name:\"rationalize\",category:\"Algebra\",syntax:[\"rationalize(expr)\",\"rationalize(expr, scope)\",\"rationalize(expr, scope, detailed)\"],description:\"Transform a rationalizable expression in a rational fraction. If rational fraction is one variable polynomial then converts the numerator and denominator in canonical form, with decreasing exponents, returning the coefficients of numerator.\",examples:['rationalize(\"2x/y - y/(x+1)\")','rationalize(\"2x/y - y/(x+1)\", true)'],seealso:[\"simplify\"]},slu:{name:\"slu\",category:\"Algebra\",syntax:[\"slu(A, order, threshold)\"],description:\"Calculate the Matrix LU decomposition with full pivoting. Matrix A is decomposed in two matrices (L, U) and two permutation vectors (pinv, q) where P * A * Q = L * U\",examples:[\"slu(sparse([4.5, 0, 3.2, 0; 3.1, 2.9, 0, 0.9; 0, 1.7, 3, 0; 3.5, 0.4, 0, 1]), 1, 0.001)\"],seealso:[\"lusolve\",\"lsolve\",\"usolve\",\"matrix\",\"sparse\",\"lup\",\"qr\"]},usolve:{name:\"usolve\",category:\"Algebra\",syntax:[\"x=usolve(U, b)\"],description:\"Finds one solution of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.\",examples:[\"x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])\"],seealso:[\"usolveAll\",\"lup\",\"lusolve\",\"lsolve\",\"matrix\",\"sparse\"]},usolveAll:{name:\"usolveAll\",category:\"Algebra\",syntax:[\"x=usolve(U, b)\"],description:\"Finds all solutions of the linear system U * x = b where U is an [n x n] upper triangular matrix and b is a [n] column vector.\",examples:[\"x=usolve(sparse([1, 1, 1, 1; 0, 1, 1, 1; 0, 0, 1, 1; 0, 0, 0, 1]), [1; 2; 3; 4])\"],seealso:[\"usolve\",\"lup\",\"lusolve\",\"lsolve\",\"matrix\",\"sparse\"]},qr:{name:\"qr\",category:\"Algebra\",syntax:[\"qr(A)\"],description:\"Calculates the Matrix QR decomposition. Matrix `A` is decomposed in two matrices (`Q`, `R`) where `Q` is an orthogonal matrix and `R` is an upper triangular matrix.\",examples:[\"qr([[1, -1, 4], [1, 4, -2], [1, 4, 2], [1, -1, 0]])\"],seealso:[\"lup\",\"slu\",\"matrix\"]},abs:{name:\"abs\",category:\"Arithmetic\",syntax:[\"abs(x)\"],description:\"Compute the absolute value.\",examples:[\"abs(3.5)\",\"abs(-4.2)\"],seealso:[\"sign\"]},add:{name:\"add\",category:\"Operators\",syntax:[\"x + y\",\"add(x, y)\"],description:\"Add two values.\",examples:[\"a = 2.1 + 3.6\",\"a - 3.6\",\"3 + 2i\",\"3 cm + 2 inch\",'\"2.3\" + \"4\"'],seealso:[\"subtract\"]},cbrt:{name:\"cbrt\",category:\"Arithmetic\",syntax:[\"cbrt(x)\",\"cbrt(x, allRoots)\"],description:\"Compute the cubic root value. If x = y * y * y, then y is the cubic root of x. When `x` is a number or complex number, an optional second argument `allRoots` can be provided to return all three cubic roots. If not provided, the principal root is returned\",examples:[\"cbrt(64)\",\"cube(4)\",\"cbrt(-8)\",\"cbrt(2 + 3i)\",\"cbrt(8i)\",\"cbrt(8i, true)\",\"cbrt(27 m^3)\"],seealso:[\"square\",\"sqrt\",\"cube\",\"multiply\"]},ceil:{name:\"ceil\",category:\"Arithmetic\",syntax:[\"ceil(x)\"],description:\"Round a value towards plus infinity. If x is complex, both real and imaginary part are rounded towards plus infinity.\",examples:[\"ceil(3.2)\",\"ceil(3.8)\",\"ceil(-4.2)\"],seealso:[\"floor\",\"fix\",\"round\"]},cube:{name:\"cube\",category:\"Arithmetic\",syntax:[\"cube(x)\"],description:\"Compute the cube of a value. The cube of x is x * x * x.\",examples:[\"cube(2)\",\"2^3\",\"2 * 2 * 2\"],seealso:[\"multiply\",\"square\",\"pow\"]},divide:{name:\"divide\",category:\"Operators\",syntax:[\"x / y\",\"divide(x, y)\"],description:\"Divide two values.\",examples:[\"a = 2 / 3\",\"a * 3\",\"4.5 / 2\",\"3 + 4 / 2\",\"(3 + 4) / 2\",\"18 km / 4.5\"],seealso:[\"multiply\"]},dotDivide:{name:\"dotDivide\",category:\"Operators\",syntax:[\"x ./ y\",\"dotDivide(x, y)\"],description:\"Divide two values element wise.\",examples:[\"a = [1, 2, 3; 4, 5, 6]\",\"b = [2, 1, 1; 3, 2, 5]\",\"a ./ b\"],seealso:[\"multiply\",\"dotMultiply\",\"divide\"]},dotMultiply:{name:\"dotMultiply\",category:\"Operators\",syntax:[\"x .* y\",\"dotMultiply(x, y)\"],description:\"Multiply two values element wise.\",examples:[\"a = [1, 2, 3; 4, 5, 6]\",\"b = [2, 1, 1; 3, 2, 5]\",\"a .* b\"],seealso:[\"multiply\",\"divide\",\"dotDivide\"]},dotPow:{name:\"dotPow\",category:\"Operators\",syntax:[\"x .^ y\",\"dotPow(x, y)\"],description:\"Calculates the power of x to y element wise.\",examples:[\"a = [1, 2, 3; 4, 5, 6]\",\"a .^ 2\"],seealso:[\"pow\"]},exp:{name:\"exp\",category:\"Arithmetic\",syntax:[\"exp(x)\"],description:\"Calculate the exponent of a value.\",examples:[\"exp(1.3)\",\"e ^ 1.3\",\"log(exp(1.3))\",\"x = 2.4\",\"(exp(i*x) == cos(x) + i*sin(x)) # Euler's formula\"],seealso:[\"expm\",\"expm1\",\"pow\",\"log\"]},expm:{name:\"expm\",category:\"Arithmetic\",syntax:[\"exp(x)\"],description:\"Compute the matrix exponential, expm(A) = e^A. The matrix must be square. Not to be confused with exp(a), which performs element-wise exponentiation.\",examples:[\"expm([[0,2],[0,0]])\"],seealso:[\"exp\"]},expm1:{name:\"expm1\",category:\"Arithmetic\",syntax:[\"expm1(x)\"],description:\"Calculate the value of subtracting 1 from the exponential value.\",examples:[\"expm1(2)\",\"pow(e, 2) - 1\",\"log(expm1(2) + 1)\"],seealso:[\"exp\",\"pow\",\"log\"]},fix:{name:\"fix\",category:\"Arithmetic\",syntax:[\"fix(x)\"],description:\"Round a value towards zero. If x is complex, both real and imaginary part are rounded towards zero.\",examples:[\"fix(3.2)\",\"fix(3.8)\",\"fix(-4.2)\",\"fix(-4.8)\"],seealso:[\"ceil\",\"floor\",\"round\"]},floor:{name:\"floor\",category:\"Arithmetic\",syntax:[\"floor(x)\"],description:\"Round a value towards minus infinity.If x is complex, both real and imaginary part are rounded towards minus infinity.\",examples:[\"floor(3.2)\",\"floor(3.8)\",\"floor(-4.2)\"],seealso:[\"ceil\",\"fix\",\"round\"]},gcd:{name:\"gcd\",category:\"Arithmetic\",syntax:[\"gcd(a, b)\",\"gcd(a, b, c, ...)\"],description:\"Compute the greatest common divisor.\",examples:[\"gcd(8, 12)\",\"gcd(-4, 6)\",\"gcd(25, 15, -10)\"],seealso:[\"lcm\",\"xgcd\"]},hypot:{name:\"hypot\",category:\"Arithmetic\",syntax:[\"hypot(a, b, c, ...)\",\"hypot([a, b, c, ...])\"],description:\"Calculate the hypotenusa of a list with values. \",examples:[\"hypot(3, 4)\",\"sqrt(3^2 + 4^2)\",\"hypot(-2)\",\"hypot([3, 4, 5])\"],seealso:[\"abs\",\"norm\"]},lcm:{name:\"lcm\",category:\"Arithmetic\",syntax:[\"lcm(x, y)\"],description:\"Compute the least common multiple.\",examples:[\"lcm(4, 6)\",\"lcm(6, 21)\",\"lcm(6, 21, 5)\"],seealso:[\"gcd\"]},log:{name:\"log\",category:\"Arithmetic\",syntax:[\"log(x)\",\"log(x, base)\"],description:\"Compute the logarithm of a value. If no base is provided, the natural logarithm of x is calculated. If base if provided, the logarithm is calculated for the specified base. log(x, base) is defined as log(x) / log(base).\",examples:[\"log(3.5)\",\"a = log(2.4)\",\"exp(a)\",\"10 ^ 4\",\"log(10000, 10)\",\"log(10000) / log(10)\",\"b = log(1024, 2)\",\"2 ^ b\"],seealso:[\"exp\",\"log1p\",\"log2\",\"log10\"]},log2:{name:\"log2\",category:\"Arithmetic\",syntax:[\"log2(x)\"],description:\"Calculate the 2-base of a value. This is the same as calculating `log(x, 2)`.\",examples:[\"log2(0.03125)\",\"log2(16)\",\"log2(16) / log2(2)\",\"pow(2, 4)\"],seealso:[\"exp\",\"log1p\",\"log\",\"log10\"]},log1p:{name:\"log1p\",category:\"Arithmetic\",syntax:[\"log1p(x)\",\"log1p(x, base)\"],description:\"Calculate the logarithm of a `value+1`\",examples:[\"log1p(2.5)\",\"exp(log1p(1.4))\",\"pow(10, 4)\",\"log1p(9999, 10)\",\"log1p(9999) / log(10)\"],seealso:[\"exp\",\"log\",\"log2\",\"log10\"]},log10:{name:\"log10\",category:\"Arithmetic\",syntax:[\"log10(x)\"],description:\"Compute the 10-base logarithm of a value.\",examples:[\"log10(0.00001)\",\"log10(10000)\",\"10 ^ 4\",\"log(10000) / log(10)\",\"log(10000, 10)\"],seealso:[\"exp\",\"log\"]},mod:{name:\"mod\",category:\"Operators\",syntax:[\"x % y\",\"x mod y\",\"mod(x, y)\"],description:\"Calculates the modulus, the remainder of an integer division.\",examples:[\"7 % 3\",\"11 % 2\",\"10 mod 4\",\"isOdd(x) = x % 2\",\"isOdd(2)\",\"isOdd(3)\"],seealso:[\"divide\"]},multiply:{name:\"multiply\",category:\"Operators\",syntax:[\"x * y\",\"multiply(x, y)\"],description:\"multiply two values.\",examples:[\"a = 2.1 * 3.4\",\"a / 3.4\",\"2 * 3 + 4\",\"2 * (3 + 4)\",\"3 * 2.1 km\"],seealso:[\"divide\"]},norm:{name:\"norm\",category:\"Arithmetic\",syntax:[\"norm(x)\",\"norm(x, p)\"],description:\"Calculate the norm of a number, vector or matrix.\",examples:[\"abs(-3.5)\",\"norm(-3.5)\",\"norm(3 - 4i)\",\"norm([1, 2, -3], Infinity)\",\"norm([1, 2, -3], -Infinity)\",\"norm([3, 4], 2)\",\"norm([[1, 2], [3, 4]], 1)\",'norm([[1, 2], [3, 4]], \"inf\")','norm([[1, 2], [3, 4]], \"fro\")']},nthRoot:{name:\"nthRoot\",category:\"Arithmetic\",syntax:[\"nthRoot(a)\",\"nthRoot(a, root)\"],description:'Calculate the nth root of a value. The principal nth root of a positive real number A, is the positive real solution of the equation \"x^root = A\".',examples:[\"4 ^ 3\",\"nthRoot(64, 3)\",\"nthRoot(9, 2)\",\"sqrt(9)\"],seealso:[\"nthRoots\",\"pow\",\"sqrt\"]},nthRoots:{name:\"nthRoots\",category:\"Arithmetic\",syntax:[\"nthRoots(A)\",\"nthRoots(A, root)\"],description:'Calculate the nth roots of a value. An nth root of a positive real number A, is a positive real solution of the equation \"x^root = A\". This function returns an array of complex values.',examples:[\"nthRoots(1)\",\"nthRoots(1, 3)\"],seealso:[\"sqrt\",\"pow\",\"nthRoot\"]},pow:{name:\"pow\",category:\"Operators\",syntax:[\"x ^ y\",\"pow(x, y)\"],description:\"Calculates the power of x to y, x^y.\",examples:[\"2^3\",\"2*2*2\",\"1 + e ^ (pi * i)\",\"pow([[1, 2], [4, 3]], 2)\",\"pow([[1, 2], [4, 3]], -1)\"],seealso:[\"multiply\",\"nthRoot\",\"nthRoots\",\"sqrt\"]},round:{name:\"round\",category:\"Arithmetic\",syntax:[\"round(x)\",\"round(x, n)\",\"round(unit, valuelessUnit)\",\"round(unit, n, valuelessUnit)\"],description:\"round a value towards the nearest integer.If x is complex, both real and imaginary part are rounded towards the nearest integer. When n is specified, the value is rounded to n decimals.\",examples:[\"round(3.2)\",\"round(3.8)\",\"round(-4.2)\",\"round(-4.8)\",\"round(pi, 3)\",\"round(123.45678, 2)\",\"round(3.241cm, 2, cm)\",\"round([3.2, 3.8, -4.7])\"],seealso:[\"ceil\",\"floor\",\"fix\"]},sign:{name:\"sign\",category:\"Arithmetic\",syntax:[\"sign(x)\"],description:\"Compute the sign of a value. The sign of a value x is 1 when x>1, -1 when x<0, and 0 when x=0.\",examples:[\"sign(3.5)\",\"sign(-4.2)\",\"sign(0)\"],seealso:[\"abs\"]},sqrt:{name:\"sqrt\",category:\"Arithmetic\",syntax:[\"sqrt(x)\"],description:\"Compute the square root value. If x = y * y, then y is the square root of x.\",examples:[\"sqrt(25)\",\"5 * 5\",\"sqrt(-1)\"],seealso:[\"square\",\"sqrtm\",\"multiply\",\"nthRoot\",\"nthRoots\",\"pow\"]},sqrtm:{name:\"sqrtm\",category:\"Arithmetic\",syntax:[\"sqrtm(x)\"],description:\"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.\",examples:[\"sqrtm([[33, 24], [48, 57]])\"],seealso:[\"sqrt\",\"abs\",\"square\",\"multiply\"]},square:{name:\"square\",category:\"Arithmetic\",syntax:[\"square(x)\"],description:\"Compute the square of a value. The square of x is x * x.\",examples:[\"square(3)\",\"sqrt(9)\",\"3^2\",\"3 * 3\"],seealso:[\"multiply\",\"pow\",\"sqrt\",\"cube\"]},subtract:{name:\"subtract\",category:\"Operators\",syntax:[\"x - y\",\"subtract(x, y)\"],description:\"subtract two values.\",examples:[\"a = 5.3 - 2\",\"a + 2\",\"2/3 - 1/6\",\"2 * 3 - 3\",\"2.1 km - 500m\"],seealso:[\"add\"]},unaryMinus:{name:\"unaryMinus\",category:\"Operators\",syntax:[\"-x\",\"unaryMinus(x)\"],description:\"Inverse the sign of a value. Converts booleans and strings to numbers.\",examples:[\"-4.5\",\"-(-5.6)\",'-\"22\"'],seealso:[\"add\",\"subtract\",\"unaryPlus\"]},unaryPlus:{name:\"unaryPlus\",category:\"Operators\",syntax:[\"+x\",\"unaryPlus(x)\"],description:\"Converts booleans and strings to numbers.\",examples:[\"+true\",'+\"2\"'],seealso:[\"add\",\"subtract\",\"unaryMinus\"]},xgcd:{name:\"xgcd\",category:\"Arithmetic\",syntax:[\"xgcd(a, b)\"],description:\"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.\",examples:[\"xgcd(8, 12)\",\"gcd(8, 12)\",\"xgcd(36163, 21199)\"],seealso:[\"gcd\",\"lcm\"]},invmod:{name:\"invmod\",category:\"Arithmetic\",syntax:[\"invmod(a, b)\"],description:\"Calculate the (modular) multiplicative inverse of a modulo b. Solution to the equation ax ≣ 1 (mod b)\",examples:[\"invmod(8, 12)\",\"invmod(7, 13)\",\"invmod(15151, 15122)\"],seealso:[\"gcd\",\"xgcd\"]},bitAnd:{name:\"bitAnd\",category:\"Bitwise\",syntax:[\"x & y\",\"bitAnd(x, y)\"],description:\"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0\",examples:[\"5 & 3\",\"bitAnd(53, 131)\",\"[1, 12, 31] & 42\"],seealso:[\"bitNot\",\"bitOr\",\"bitXor\",\"leftShift\",\"rightArithShift\",\"rightLogShift\"]},bitNot:{name:\"bitNot\",category:\"Bitwise\",syntax:[\"~x\",\"bitNot(x)\"],description:\"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.\",examples:[\"~1\",\"~2\",\"bitNot([2, -3, 4])\"],seealso:[\"bitAnd\",\"bitOr\",\"bitXor\",\"leftShift\",\"rightArithShift\",\"rightLogShift\"]},bitOr:{name:\"bitOr\",category:\"Bitwise\",syntax:[\"x | y\",\"bitOr(x, y)\"],description:\"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.\",examples:[\"5 | 3\",\"bitOr([1, 2, 3], 4)\"],seealso:[\"bitAnd\",\"bitNot\",\"bitXor\",\"leftShift\",\"rightArithShift\",\"rightLogShift\"]},bitXor:{name:\"bitXor\",category:\"Bitwise\",syntax:[\"bitXor(x, y)\"],description:\"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.\",examples:[\"bitOr(1, 2)\",\"bitXor([2, 3, 4], 4)\"],seealso:[\"bitAnd\",\"bitNot\",\"bitOr\",\"leftShift\",\"rightArithShift\",\"rightLogShift\"]},leftShift:{name:\"leftShift\",category:\"Bitwise\",syntax:[\"x << y\",\"leftShift(x, y)\"],description:\"Bitwise left logical shift of a value x by y number of bits.\",examples:[\"4 << 1\",\"8 >> 1\"],seealso:[\"bitAnd\",\"bitNot\",\"bitOr\",\"bitXor\",\"rightArithShift\",\"rightLogShift\"]},rightArithShift:{name:\"rightArithShift\",category:\"Bitwise\",syntax:[\"x >> y\",\"rightArithShift(x, y)\"],description:\"Bitwise right arithmetic shift of a value x by y number of bits.\",examples:[\"8 >> 1\",\"4 << 1\",\"-12 >> 2\"],seealso:[\"bitAnd\",\"bitNot\",\"bitOr\",\"bitXor\",\"leftShift\",\"rightLogShift\"]},rightLogShift:{name:\"rightLogShift\",category:\"Bitwise\",syntax:[\"x >>> y\",\"rightLogShift(x, y)\"],description:\"Bitwise right logical shift of a value x by y number of bits.\",examples:[\"8 >>> 1\",\"4 << 1\",\"-12 >>> 2\"],seealso:[\"bitAnd\",\"bitNot\",\"bitOr\",\"bitXor\",\"leftShift\",\"rightArithShift\"]},bellNumbers:{name:\"bellNumbers\",category:\"Combinatorics\",syntax:[\"bellNumbers(n)\"],description:\"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.\",examples:[\"bellNumbers(3)\",\"bellNumbers(8)\"],seealso:[\"stirlingS2\"]},catalan:{name:\"catalan\",category:\"Combinatorics\",syntax:[\"catalan(n)\"],description:\"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.\",examples:[\"catalan(3)\",\"catalan(8)\"],seealso:[\"bellNumbers\"]},composition:{name:\"composition\",category:\"Combinatorics\",syntax:[\"composition(n, k)\"],description:\"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.\",examples:[\"composition(5, 3)\"],seealso:[\"combinations\"]},stirlingS2:{name:\"stirlingS2\",category:\"Combinatorics\",syntax:[\"stirlingS2(n, k)\"],description:\"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.\",examples:[\"stirlingS2(5, 3)\"],seealso:[\"bellNumbers\"]},config:{name:\"config\",category:\"Core\",syntax:[\"config()\",\"config(options)\"],description:\"Get configuration or change configuration.\",examples:[\"config()\",\"1/3 + 1/4\",'config({number: \"Fraction\"})',\"1/3 + 1/4\"],seealso:[]},import:{name:\"import\",category:\"Core\",syntax:[\"import(functions)\",\"import(functions, options)\"],description:\"Import functions or constants from an object.\",examples:[\"import({myFn: f(x)=x^2, myConstant: 32 })\",\"myFn(2)\",\"myConstant\"],seealso:[]},typed:{name:\"typed\",category:\"Core\",syntax:[\"typed(signatures)\",\"typed(name, signatures)\"],description:\"Create a typed function.\",examples:['double = typed({ \"number\": f(x)=x+x, \"string\": f(x)=concat(x,x) })',\"double(2)\",'double(\"hello\")'],seealso:[]},arg:{name:\"arg\",category:\"Complex\",syntax:[\"arg(x)\"],description:\"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).\",examples:[\"arg(2 + 2i)\",\"atan2(3, 2)\",\"arg(2 + 3i)\"],seealso:[\"re\",\"im\",\"conj\",\"abs\"]},conj:{name:\"conj\",category:\"Complex\",syntax:[\"conj(x)\"],description:\"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.\",examples:[\"conj(2 + 3i)\",\"conj(2 - 3i)\",\"conj(-5.2i)\"],seealso:[\"re\",\"im\",\"abs\",\"arg\"]},re:{name:\"re\",category:\"Complex\",syntax:[\"re(x)\"],description:\"Get the real part of a complex number.\",examples:[\"re(2 + 3i)\",\"im(2 + 3i)\",\"re(-5.2i)\",\"re(2.4)\"],seealso:[\"im\",\"conj\",\"abs\",\"arg\"]},im:{name:\"im\",category:\"Complex\",syntax:[\"im(x)\"],description:\"Get the imaginary part of a complex number.\",examples:[\"im(2 + 3i)\",\"re(2 + 3i)\",\"im(-5.2i)\",\"im(2.4)\"],seealso:[\"re\",\"conj\",\"abs\",\"arg\"]},evaluate:{name:\"evaluate\",category:\"Expression\",syntax:[\"evaluate(expression)\",\"evaluate(expression, scope)\",\"evaluate([expr1, expr2, expr3, ...])\",\"evaluate([expr1, expr2, expr3, ...], scope)\"],description:\"Evaluate an expression or an array with expressions.\",examples:['evaluate(\"2 + 3\")','evaluate(\"sqrt(16)\")','evaluate(\"2 inch to cm\")','evaluate(\"sin(x * pi)\", { \"x\": 1/2 })','evaluate([\"width=2\", \"height=4\",\"width*height\"])'],seealso:[]},help:{name:\"help\",category:\"Expression\",syntax:[\"help(object)\",\"help(string)\"],description:\"Display documentation on a function or data type.\",examples:[\"help(sqrt)\",'help(\"complex\")'],seealso:[]},distance:{name:\"distance\",category:\"Geometry\",syntax:[\"distance([x1, y1], [x2, y2])\",\"distance([[x1, y1], [x2, y2]])\"],description:\"Calculates the Euclidean distance between two points.\",examples:[\"distance([0,0], [4,4])\",\"distance([[0,0], [4,4]])\"],seealso:[]},intersect:{name:\"intersect\",category:\"Geometry\",syntax:[\"intersect(expr1, expr2, expr3, expr4)\",\"intersect(expr1, expr2, expr3)\"],description:\"Computes the intersection point of lines and/or planes.\",examples:[\"intersect([0, 0], [10, 10], [10, 0], [0, 10])\",\"intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])\"],seealso:[]},and:{name:\"and\",category:\"Logical\",syntax:[\"x and y\",\"and(x, y)\"],description:\"Logical and. Test whether two values are both defined with a nonzero/nonempty value.\",examples:[\"true and false\",\"true and true\",\"2 and 4\"],seealso:[\"not\",\"or\",\"xor\"]},not:{name:\"not\",category:\"Logical\",syntax:[\"not x\",\"not(x)\"],description:\"Logical not. Flips the boolean value of given argument.\",examples:[\"not true\",\"not false\",\"not 2\",\"not 0\"],seealso:[\"and\",\"or\",\"xor\"]},or:{name:\"or\",category:\"Logical\",syntax:[\"x or y\",\"or(x, y)\"],description:\"Logical or. Test if at least one value is defined with a nonzero/nonempty value.\",examples:[\"true or false\",\"false or false\",\"0 or 4\"],seealso:[\"not\",\"and\",\"xor\"]},xor:{name:\"xor\",category:\"Logical\",syntax:[\"x xor y\",\"xor(x, y)\"],description:\"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.\",examples:[\"true xor false\",\"false xor false\",\"true xor true\",\"0 xor 4\"],seealso:[\"not\",\"and\",\"or\"]},concat:{name:\"concat\",category:\"Matrix\",syntax:[\"concat(A, B, C, ...)\",\"concat(A, B, C, ..., dim)\"],description:\"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.\",examples:[\"A = [1, 2; 5, 6]\",\"B = [3, 4; 7, 8]\",\"concat(A, B)\",\"concat(A, B, 1)\",\"concat(A, B, 2)\"],seealso:[\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},count:{name:\"count\",category:\"Matrix\",syntax:[\"count(x)\"],description:\"Count the number of elements of a matrix, array or string.\",examples:[\"a = [1, 2; 3, 4; 5, 6]\",\"count(a)\",\"size(a)\",'count(\"hello world\")'],seealso:[\"size\"]},cross:{name:\"cross\",category:\"Matrix\",syntax:[\"cross(A, B)\"],description:\"Calculate the cross product for two vectors in three dimensional space.\",examples:[\"cross([1, 1, 0], [0, 1, 1])\",\"cross([3, -3, 1], [4, 9, 2])\",\"cross([2, 3, 4], [5, 6, 7])\"],seealso:[\"multiply\",\"dot\"]},column:{name:\"column\",category:\"Matrix\",syntax:[\"column(x, index)\"],description:\"Return a column from a matrix or array.\",examples:[\"A = [[1, 2], [3, 4]]\",\"column(A, 1)\",\"column(A, 2)\"],seealso:[\"row\",\"matrixFromColumns\"]},ctranspose:{name:\"ctranspose\",category:\"Matrix\",syntax:[\"x'\",\"ctranspose(x)\"],description:\"Complex Conjugate and Transpose a matrix\",examples:[\"a = [1, 2, 3; 4, 5, 6]\",\"a'\",\"ctranspose(a)\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"zeros\"]},det:{name:\"det\",category:\"Matrix\",syntax:[\"det(x)\"],description:\"Calculate the determinant of a matrix\",examples:[\"det([1, 2; 3, 4])\",\"det([-2, 2, 3; -1, 1, 3; 2, 0, -1])\"],seealso:[\"concat\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},diag:{name:\"diag\",category:\"Matrix\",syntax:[\"diag(x)\",\"diag(x, k)\"],description:\"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.\",examples:[\"diag(1:3)\",\"diag(1:3, 1)\",\"a = [1, 2, 3; 4, 5, 6; 7, 8, 9]\",\"diag(a)\"],seealso:[\"concat\",\"det\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},diff:{name:\"diff\",category:\"Matrix\",syntax:[\"diff(arr)\",\"diff(arr, dim)\"],description:[\"Create a new matrix or array with the difference of the passed matrix or array.\",\"Dim parameter is optional and used to indicant the dimension of the array/matrix to apply the difference\",\"If no dimension parameter is passed it is assumed as dimension 0\",\"Dimension is zero-based in javascript and one-based in the parser\",\"Arrays must be 'rectangular' meaning arrays like [1, 2]\",\"If something is passed as a matrix it will be returned as a matrix but other than that all matrices are converted to arrays\"],examples:[\"A = [1, 2, 4, 7, 0]\",\"diff(A)\",\"diff(A, 1)\",\"B = [[1, 2], [3, 4]]\",\"diff(B)\",\"diff(B, 1)\",\"diff(B, 2)\",\"diff(B, bignumber(2))\",\"diff([[1, 2], matrix([3, 4])], 2)\"],seealso:[\"subtract\",\"partitionSelect\"]},dot:{name:\"dot\",category:\"Matrix\",syntax:[\"dot(A, B)\",\"A * B\"],description:\"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn\",examples:[\"dot([2, 4, 1], [2, 2, 3])\",\"[2, 4, 1] * [2, 2, 3]\"],seealso:[\"multiply\",\"cross\"]},getMatrixDataType:{name:\"getMatrixDataType\",category:\"Matrix\",syntax:[\"getMatrixDataType(x)\"],description:'Find the data type of all elements in a matrix or array, for example \"number\" if all items are a number and \"Complex\" if all values are complex numbers. If a matrix contains more than one data type, it will return \"mixed\".',examples:[\"getMatrixDataType([1, 2, 3])\",\"getMatrixDataType([[5 cm], [2 inch]])\",'getMatrixDataType([1, \"text\"])',\"getMatrixDataType([1, bignumber(4)])\"],seealso:[\"matrix\",\"sparse\",\"typeOf\"]},identity:{name:\"identity\",category:\"Matrix\",syntax:[\"identity(n)\",\"identity(m, n)\",\"identity([m, n])\"],description:\"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.\",examples:[\"identity(3)\",\"identity(3, 5)\",\"a = [1, 2, 3; 4, 5, 6]\",\"identity(size(a))\"],seealso:[\"concat\",\"det\",\"diag\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},filter:{name:\"filter\",category:\"Matrix\",syntax:[\"filter(x, test)\"],description:\"Filter items in a matrix.\",examples:[\"isPositive(x) = x > 0\",\"filter([6, -2, -1, 4, 3], isPositive)\",\"filter([6, -2, 0, 1, 0], x != 0)\"],seealso:[\"sort\",\"map\",\"forEach\"]},flatten:{name:\"flatten\",category:\"Matrix\",syntax:[\"flatten(x)\"],description:\"Flatten a multi dimensional matrix into a single dimensional matrix.\",examples:[\"a = [1, 2, 3; 4, 5, 6]\",\"size(a)\",\"b = flatten(a)\",\"size(b)\"],seealso:[\"concat\",\"resize\",\"size\",\"squeeze\"]},forEach:{name:\"forEach\",category:\"Matrix\",syntax:[\"forEach(x, callback)\"],description:\"Iterates over all elements of a matrix/array, and executes the given callback function.\",examples:[\"numberOfPets = {}\",\"addPet(n) = numberOfPets[n] = (numberOfPets[n] ? numberOfPets[n]:0 ) + 1;\",'forEach([\"Dog\",\"Cat\",\"Cat\"], addPet)',\"numberOfPets\"],seealso:[\"map\",\"sort\",\"filter\"]},inv:{name:\"inv\",category:\"Matrix\",syntax:[\"inv(x)\"],description:\"Calculate the inverse of a matrix\",examples:[\"inv([1, 2; 3, 4])\",\"inv(4)\",\"1 / 4\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},pinv:{name:\"pinv\",category:\"Matrix\",syntax:[\"pinv(x)\"],description:\"Calculate the Moore–Penrose inverse of a matrix\",examples:[\"pinv([1, 2; 3, 4])\",\"pinv([[1, 0], [0, 1], [0, 1]])\",\"pinv(4)\"],seealso:[\"inv\"]},eigs:{name:\"eigs\",category:\"Matrix\",syntax:[\"eigs(x)\"],description:\"Calculate the eigenvalues and optionally eigenvectors of a square matrix\",examples:[\"eigs([[5, 2.3], [2.3, 1]])\",\"eigs([[1, 2, 3], [4, 5, 6], [7, 8, 9]], { precision: 1e-6, eigenvectors: false })\"],seealso:[\"inv\"]},kron:{name:\"kron\",category:\"Matrix\",syntax:[\"kron(x, y)\"],description:\"Calculates the kronecker product of 2 matrices or vectors.\",examples:[\"kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])\",\"kron([1,1], [2,3,4])\"],seealso:[\"multiply\",\"dot\",\"cross\"]},matrixFromFunction:{name:\"matrixFromFunction\",category:\"Matrix\",syntax:[\"matrixFromFunction(size, fn)\",\"matrixFromFunction(size, fn, format)\",\"matrixFromFunction(size, fn, format, datatype)\",\"matrixFromFunction(size, format, fn)\",\"matrixFromFunction(size, format, datatype, fn)\"],description:\"Create a matrix by evaluating a generating function at each index.\",examples:[\"f(I) = I[1] - I[2]\",\"matrixFromFunction([3,3], f)\",\"g(I) = I[1] - I[2] == 1 ? 4 : 0\",'matrixFromFunction([100, 100], \"sparse\", g)',\"matrixFromFunction([5], random)\"],seealso:[\"matrix\",\"matrixFromRows\",\"matrixFromColumns\",\"zeros\"]},matrixFromRows:{name:\"matrixFromRows\",category:\"Matrix\",syntax:[\"matrixFromRows(...arr)\",\"matrixFromRows(row1, row2)\",\"matrixFromRows(row1, row2, row3)\"],description:\"Create a dense matrix from vectors as individual rows.\",examples:[\"matrixFromRows([1, 2, 3], [[4],[5],[6]])\"],seealso:[\"matrix\",\"matrixFromColumns\",\"matrixFromFunction\",\"zeros\"]},matrixFromColumns:{name:\"matrixFromColumns\",category:\"Matrix\",syntax:[\"matrixFromColumns(...arr)\",\"matrixFromColumns(row1, row2)\",\"matrixFromColumns(row1, row2, row3)\"],description:\"Create a dense matrix from vectors as individual columns.\",examples:[\"matrixFromColumns([1, 2, 3], [[4],[5],[6]])\"],seealso:[\"matrix\",\"matrixFromRows\",\"matrixFromFunction\",\"zeros\"]},map:{name:\"map\",category:\"Matrix\",syntax:[\"map(x, callback)\"],description:\"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.\",examples:[\"map([1, 2, 3], square)\"],seealso:[\"filter\",\"forEach\"]},ones:{name:\"ones\",category:\"Matrix\",syntax:[\"ones(m)\",\"ones(m, n)\",\"ones(m, n, p, ...)\",\"ones([m])\",\"ones([m, n])\",\"ones([m, n, p, ...])\"],description:\"Create a matrix containing ones.\",examples:[\"ones(3)\",\"ones(3, 5)\",\"ones([2,3]) * 4.5\",\"a = [1, 2, 3; 4, 5, 6]\",\"ones(size(a))\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},partitionSelect:{name:\"partitionSelect\",category:\"Matrix\",syntax:[\"partitionSelect(x, k)\",\"partitionSelect(x, k, compare)\"],description:\"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.\",examples:[\"partitionSelect([5, 10, 1], 2)\",'partitionSelect([\"C\", \"B\", \"A\", \"D\"], 1, compareText)',\"arr = [5, 2, 1]\",\"partitionSelect(arr, 0) # returns 1, arr is now: [1, 2, 5]\",\"arr\",\"partitionSelect(arr, 1, 'desc') # returns 2, arr is now: [5, 2, 1]\",\"arr\"],seealso:[\"sort\"]},range:{name:\"range\",category:\"Type\",syntax:[\"start:end\",\"start:step:end\",\"range(start, end)\",\"range(start, end, step)\",\"range(string)\"],description:\"Create a range. Lower bound of the range is included, upper bound is excluded.\",examples:[\"1:5\",\"3:-1:-3\",\"range(3, 7)\",\"range(0, 12, 2)\",'range(\"4:10\")',\"range(1m, 1m, 3m)\",\"a = [1, 2, 3, 4; 5, 6, 7, 8]\",\"a[1:2, 1:2]\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},resize:{name:\"resize\",category:\"Matrix\",syntax:[\"resize(x, size)\",\"resize(x, size, defaultValue)\"],description:\"Resize a matrix.\",examples:[\"resize([1,2,3,4,5], [3])\",\"resize([1,2,3], [5])\",\"resize([1,2,3], [5], -1)\",\"resize(2, [2, 3])\",'resize(\"hello\", [8], \"!\")'],seealso:[\"size\",\"subset\",\"squeeze\",\"reshape\"]},reshape:{name:\"reshape\",category:\"Matrix\",syntax:[\"reshape(x, sizes)\"],description:\"Reshape a multi dimensional array to fit the specified dimensions.\",examples:[\"reshape([1, 2, 3, 4, 5, 6], [2, 3])\",\"reshape([[1, 2], [3, 4]], [1, 4])\",\"reshape([[1, 2], [3, 4]], [4])\",\"reshape([1, 2, 3, 4], [-1, 2])\"],seealso:[\"size\",\"squeeze\",\"resize\"]},rotate:{name:\"rotate\",category:\"Matrix\",syntax:[\"rotate(w, theta)\",\"rotate(w, theta, v)\"],description:\"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.\",examples:[\"rotate([1, 0], pi / 2)\",'rotate(matrix([1, 0]), unit(\"35deg\"))','rotate([1, 0, 0], unit(\"90deg\"), [0, 0, 1])','rotate(matrix([1, 0, 0]), unit(\"90deg\"), matrix([0, 0, 1]))'],seealso:[\"matrix\",\"rotationMatrix\"]},rotationMatrix:{name:\"rotationMatrix\",category:\"Matrix\",syntax:[\"rotationMatrix(theta)\",\"rotationMatrix(theta, v)\",\"rotationMatrix(theta, v, format)\"],description:\"Returns a 2-D rotation matrix (2x2) for a given angle (in radians). Returns a 2-D rotation matrix (3x3) of a given angle (in radians) around given axis.\",examples:[\"rotationMatrix(pi / 2)\",'rotationMatrix(unit(\"45deg\"), [0, 0, 1])','rotationMatrix(1, matrix([0, 0, 1]), \"sparse\")'],seealso:[\"cos\",\"sin\"]},row:{name:\"row\",category:\"Matrix\",syntax:[\"row(x, index)\"],description:\"Return a row from a matrix or array.\",examples:[\"A = [[1, 2], [3, 4]]\",\"row(A, 1)\",\"row(A, 2)\"],seealso:[\"column\",\"matrixFromRows\"]},size:{name:\"size\",category:\"Matrix\",syntax:[\"size(x)\"],description:\"Calculate the size of a matrix.\",examples:[\"size(2.3)\",'size(\"hello world\")',\"a = [1, 2; 3, 4; 5, 6]\",\"size(a)\",\"size(1:6)\"],seealso:[\"concat\",\"count\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"squeeze\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},sort:{name:\"sort\",category:\"Matrix\",syntax:[\"sort(x)\",\"sort(x, compare)\"],description:'Sort the items in a matrix. Compare can be a string \"asc\", \"desc\", \"natural\", or a custom sort function.',examples:[\"sort([5, 10, 1])\",'sort([\"C\", \"B\", \"A\", \"D\"], \"natural\")',\"sortByLength(a, b) = size(a)[1] - size(b)[1]\",'sort([\"Langdon\", \"Tom\", \"Sara\"], sortByLength)','sort([\"10\", \"1\", \"2\"], \"natural\")'],seealso:[\"map\",\"filter\",\"forEach\"]},squeeze:{name:\"squeeze\",category:\"Matrix\",syntax:[\"squeeze(x)\"],description:\"Remove inner and outer singleton dimensions from a matrix.\",examples:[\"a = zeros(3,2,1)\",\"size(squeeze(a))\",\"b = zeros(1,1,3)\",\"size(squeeze(b))\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"subset\",\"trace\",\"transpose\",\"zeros\"]},subset:{name:\"subset\",category:\"Matrix\",syntax:[\"value(index)\",\"value(index) = replacement\",\"subset(value, [index])\",\"subset(value, [index], replacement)\"],description:\"Get or set a subset of the entries of a matrix or characters of a string. Indexes are one-based. There should be one index specification for each dimension of the target. Each specification can be a single index, a list of indices, or a range in colon notation `l:u`. In a range, both the lower bound l and upper bound u are included; and if a bound is omitted it defaults to the most extreme valid value. The cartesian product of the indices specified in each dimension determines the target of the operation.\",examples:[\"d = [1, 2; 3, 4]\",\"e = []\",\"e[1, 1:2] = [5, 6]\",\"e[2, :] = [7, 8]\",\"f = d * e\",\"f[2, 1]\",\"f[:, 1]\",\"f[[1,2], [1,3]] = [9, 10; 11, 12]\",\"f\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"trace\",\"transpose\",\"zeros\"]},trace:{name:\"trace\",category:\"Matrix\",syntax:[\"trace(A)\"],description:\"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.\",examples:[\"A = [1, 2, 3; -1, 2, 3; 2, 0, 3]\",\"trace(A)\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"transpose\",\"zeros\"]},transpose:{name:\"transpose\",category:\"Matrix\",syntax:[\"x'\",\"transpose(x)\"],description:\"Transpose a matrix\",examples:[\"a = [1, 2, 3; 4, 5, 6]\",\"a'\",\"transpose(a)\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"zeros\"]},zeros:{name:\"zeros\",category:\"Matrix\",syntax:[\"zeros(m)\",\"zeros(m, n)\",\"zeros(m, n, p, ...)\",\"zeros([m])\",\"zeros([m, n])\",\"zeros([m, n, p, ...])\"],description:\"Create a matrix containing zeros.\",examples:[\"zeros(3)\",\"zeros(3, 5)\",\"a = [1, 2, 3; 4, 5, 6]\",\"zeros(size(a))\"],seealso:[\"concat\",\"det\",\"diag\",\"identity\",\"inv\",\"ones\",\"range\",\"size\",\"squeeze\",\"subset\",\"trace\",\"transpose\"]},fft:{name:\"fft\",category:\"Matrix\",syntax:[\"fft(x)\"],description:\"Calculate N-dimensional fourier transform\",examples:[\"fft([[1, 0], [1, 0]])\"],seealso:[\"ifft\"]},ifft:{name:\"ifft\",category:\"Matrix\",syntax:[\"ifft(x)\"],description:\"Calculate N-dimensional inverse fourier transform\",examples:[\"ifft([[2, 2], [0, 0]])\"],seealso:[\"fft\"]},sylvester:{name:\"sylvester\",category:\"Algebra\",syntax:[\"sylvester(A,B,C)\"],description:\"Solves the real-valued Sylvester equation AX+XB=C for X\",examples:[\"sylvester([[-1, -2], [1, 1]], [[-2, 1], [-1, 2]], [[-3, 2], [3, 0]])\",\"A = [[-1, -2], [1, 1]]; B = [[2, -1], [1, -2]]; C = [[-3, 2], [3, 0]]\",\"sylvester(A, B, C)\"],seealso:[\"schur\",\"lyap\"]},schur:{name:\"schur\",category:\"Algebra\",syntax:[\"schur(A)\"],description:\"Performs a real Schur decomposition of the real matrix A = UTU'\",examples:[\"schur([[1, 0], [-4, 3]])\",\"A = [[1, 0], [-4, 3]]\",\"schur(A)\"],seealso:[\"lyap\",\"sylvester\"]},lyap:{name:\"lyap\",category:\"Algebra\",syntax:[\"lyap(A,Q)\"],description:\"Solves the Continuous-time Lyapunov equation AP+PA'+Q=0 for P\",examples:[\"lyap([[-2, 0], [1, -4]], [[3, 1], [1, 3]])\",\"A = [[-2, 0], [1, -4]]\",\"Q = [[3, 1], [1, 3]]\",\"lyap(A,Q)\"],seealso:[\"schur\",\"sylvester\"]},solveODE:{name:\"solveODE\",category:\"Numeric\",syntax:[\"solveODE(func, tspan, y0)\",\"solveODE(func, tspan, y0, options)\"],description:\"Numerical Integration of Ordinary Differential Equations.\",examples:[\"f(t,y) = y\",\"tspan = [0, 4]\",\"solveODE(f, tspan, 1)\",\"solveODE(f, tspan, [1, 2])\",'solveODE(f, tspan, 1, { method:\"RK23\", maxStep:0.1 })'],seealso:[\"derivative\",\"simplifyCore\"]},combinations:{name:\"combinations\",category:\"Probability\",syntax:[\"combinations(n, k)\"],description:\"Compute the number of combinations of n items taken k at a time\",examples:[\"combinations(7, 5)\"],seealso:[\"combinationsWithRep\",\"permutations\",\"factorial\"]},combinationsWithRep:{name:\"combinationsWithRep\",category:\"Probability\",syntax:[\"combinationsWithRep(n, k)\"],description:\"Compute the number of combinations of n items taken k at a time with replacements.\",examples:[\"combinationsWithRep(7, 5)\"],seealso:[\"combinations\",\"permutations\",\"factorial\"]},factorial:{name:\"factorial\",category:\"Probability\",syntax:[\"n!\",\"factorial(n)\"],description:\"Compute the factorial of a value\",examples:[\"5!\",\"5 * 4 * 3 * 2 * 1\",\"3!\"],seealso:[\"combinations\",\"combinationsWithRep\",\"permutations\",\"gamma\"]},gamma:{name:\"gamma\",category:\"Probability\",syntax:[\"gamma(n)\"],description:\"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.\",examples:[\"gamma(4)\",\"3!\",\"gamma(1/2)\",\"sqrt(pi)\"],seealso:[\"factorial\"]},kldivergence:{name:\"kldivergence\",category:\"Probability\",syntax:[\"kldivergence(x, y)\"],description:\"Calculate the Kullback-Leibler (KL) divergence between two distributions.\",examples:[\"kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])\"],seealso:[]},lgamma:{name:\"lgamma\",category:\"Probability\",syntax:[\"lgamma(n)\"],description:\"Logarithm of the gamma function for real, positive numbers and complex numbers, using Lanczos approximation for numbers and Stirling series for complex numbers.\",examples:[\"lgamma(4)\",\"lgamma(1/2)\",\"lgamma(i)\",\"lgamma(complex(1.1, 2))\"],seealso:[\"gamma\"]},multinomial:{name:\"multinomial\",category:\"Probability\",syntax:[\"multinomial(A)\"],description:\"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.\",examples:[\"multinomial([1, 2, 1])\"],seealso:[\"combinations\",\"factorial\"]},permutations:{name:\"permutations\",category:\"Probability\",syntax:[\"permutations(n)\",\"permutations(n, k)\"],description:\"Compute the number of permutations of n items taken k at a time\",examples:[\"permutations(5)\",\"permutations(5, 3)\"],seealso:[\"combinations\",\"combinationsWithRep\",\"factorial\"]},pickRandom:{name:\"pickRandom\",category:\"Probability\",syntax:[\"pickRandom(array)\",\"pickRandom(array, number)\",\"pickRandom(array, weights)\",\"pickRandom(array, number, weights)\",\"pickRandom(array, weights, number)\"],description:\"Pick a random entry from a given array.\",examples:[\"pickRandom(0:10)\",\"pickRandom([1, 3, 1, 6])\",\"pickRandom([1, 3, 1, 6], 2)\",\"pickRandom([1, 3, 1, 6], [2, 3, 2, 1])\",\"pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])\",\"pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)\"],seealso:[\"random\",\"randomInt\"]},random:{name:\"random\",category:\"Probability\",syntax:[\"random()\",\"random(max)\",\"random(min, max)\",\"random(size)\",\"random(size, max)\",\"random(size, min, max)\"],description:\"Return a random number.\",examples:[\"random()\",\"random(10, 20)\",\"random([2, 3])\"],seealso:[\"pickRandom\",\"randomInt\"]},randomInt:{name:\"randomInt\",category:\"Probability\",syntax:[\"randomInt(max)\",\"randomInt(min, max)\",\"randomInt(size)\",\"randomInt(size, max)\",\"randomInt(size, min, max)\"],description:\"Return a random integer number\",examples:[\"randomInt(10, 20)\",\"randomInt([2, 3], 10)\"],seealso:[\"pickRandom\",\"random\"]},compare:{name:\"compare\",category:\"Relational\",syntax:[\"compare(x, y)\"],description:\"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.\",examples:[\"compare(2, 3)\",\"compare(3, 2)\",\"compare(2, 2)\",\"compare(5cm, 40mm)\",\"compare(2, [1, 2, 3])\"],seealso:[\"equal\",\"unequal\",\"smaller\",\"smallerEq\",\"largerEq\",\"compareNatural\",\"compareText\"]},compareNatural:{name:\"compareNatural\",category:\"Relational\",syntax:[\"compareNatural(x, y)\"],description:\"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.\",examples:[\"compareNatural(2, 3)\",\"compareNatural(3, 2)\",\"compareNatural(2, 2)\",\"compareNatural(5cm, 40mm)\",'compareNatural(\"2\", \"10\")',\"compareNatural(2 + 3i, 2 + 4i)\",\"compareNatural([1, 2, 4], [1, 2, 3])\",\"compareNatural([1, 5], [1, 2, 3])\",\"compareNatural([1, 2], [1, 2])\",\"compareNatural({a: 2}, {a: 4})\"],seealso:[\"equal\",\"unequal\",\"smaller\",\"smallerEq\",\"largerEq\",\"compare\",\"compareText\"]},compareText:{name:\"compareText\",category:\"Relational\",syntax:[\"compareText(x, y)\"],description:\"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.\",examples:['compareText(\"B\", \"A\")','compareText(\"A\", \"B\")','compareText(\"A\", \"A\")','compareText(\"2\", \"10\")','compare(\"2\", \"10\")',\"compare(2, 10)\",'compareNatural(\"2\", \"10\")','compareText(\"B\", [\"A\", \"B\", \"C\"])'],seealso:[\"compare\",\"compareNatural\"]},deepEqual:{name:\"deepEqual\",category:\"Relational\",syntax:[\"deepEqual(x, y)\"],description:\"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.\",examples:[\"deepEqual([1,3,4], [1,3,4])\",\"deepEqual([1,3,4], [1,3])\"],seealso:[\"equal\",\"unequal\",\"smaller\",\"larger\",\"smallerEq\",\"largerEq\",\"compare\"]},equal:{name:\"equal\",category:\"Relational\",syntax:[\"x == y\",\"equal(x, y)\"],description:\"Check equality of two values. Returns true if the values are equal, and false if not.\",examples:[\"2+2 == 3\",\"2+2 == 4\",\"a = 3.2\",\"b = 6-2.8\",\"a == b\",\"50cm == 0.5m\"],seealso:[\"unequal\",\"smaller\",\"larger\",\"smallerEq\",\"largerEq\",\"compare\",\"deepEqual\",\"equalText\"]},equalText:{name:\"equalText\",category:\"Relational\",syntax:[\"equalText(x, y)\"],description:\"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.\",examples:['equalText(\"Hello\", \"Hello\")','equalText(\"a\", \"A\")','equal(\"2e3\", \"2000\")','equalText(\"2e3\", \"2000\")','equalText(\"B\", [\"A\", \"B\", \"C\"])'],seealso:[\"compare\",\"compareNatural\",\"compareText\",\"equal\"]},larger:{name:\"larger\",category:\"Relational\",syntax:[\"x > y\",\"larger(x, y)\"],description:\"Check if value x is larger than y. Returns true if x is larger than y, and false if not.\",examples:[\"2 > 3\",\"5 > 2*2\",\"a = 3.3\",\"b = 6-2.8\",\"(a > b)\",\"(b < a)\",\"5 cm > 2 inch\"],seealso:[\"equal\",\"unequal\",\"smaller\",\"smallerEq\",\"largerEq\",\"compare\"]},largerEq:{name:\"largerEq\",category:\"Relational\",syntax:[\"x >= y\",\"largerEq(x, y)\"],description:\"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.\",examples:[\"2 >= 1+1\",\"2 > 1+1\",\"a = 3.2\",\"b = 6-2.8\",\"(a >= b)\"],seealso:[\"equal\",\"unequal\",\"smallerEq\",\"smaller\",\"compare\"]},smaller:{name:\"smaller\",category:\"Relational\",syntax:[\"x < y\",\"smaller(x, y)\"],description:\"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.\",examples:[\"2 < 3\",\"5 < 2*2\",\"a = 3.3\",\"b = 6-2.8\",\"(a < b)\",\"5 cm < 2 inch\"],seealso:[\"equal\",\"unequal\",\"larger\",\"smallerEq\",\"largerEq\",\"compare\"]},smallerEq:{name:\"smallerEq\",category:\"Relational\",syntax:[\"x <= y\",\"smallerEq(x, y)\"],description:\"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.\",examples:[\"2 <= 1+1\",\"2 < 1+1\",\"a = 3.2\",\"b = 6-2.8\",\"(a <= b)\"],seealso:[\"equal\",\"unequal\",\"larger\",\"smaller\",\"largerEq\",\"compare\"]},unequal:{name:\"unequal\",category:\"Relational\",syntax:[\"x != y\",\"unequal(x, y)\"],description:\"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.\",examples:[\"2+2 != 3\",\"2+2 != 4\",\"a = 3.2\",\"b = 6-2.8\",\"a != b\",\"50cm != 0.5m\",\"5 cm != 2 inch\"],seealso:[\"equal\",\"smaller\",\"larger\",\"smallerEq\",\"largerEq\",\"compare\",\"deepEqual\"]},setCartesian:{name:\"setCartesian\",category:\"Set\",syntax:[\"setCartesian(set1, set2)\"],description:\"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays and the values will be sorted in ascending order before the operation.\",examples:[\"setCartesian([1, 2], [3, 4])\"],seealso:[\"setUnion\",\"setIntersect\",\"setDifference\",\"setPowerset\"]},setDifference:{name:\"setDifference\",category:\"Set\",syntax:[\"setDifference(set1, set2)\"],description:\"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.\",examples:[\"setDifference([1, 2, 3, 4], [3, 4, 5, 6])\",\"setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])\"],seealso:[\"setUnion\",\"setIntersect\",\"setSymDifference\"]},setDistinct:{name:\"setDistinct\",category:\"Set\",syntax:[\"setDistinct(set)\"],description:\"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.\",examples:[\"setDistinct([1, 1, 1, 2, 2, 3])\"],seealso:[\"setMultiplicity\"]},setIntersect:{name:\"setIntersect\",category:\"Set\",syntax:[\"setIntersect(set1, set2)\"],description:\"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.\",examples:[\"setIntersect([1, 2, 3, 4], [3, 4, 5, 6])\",\"setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])\"],seealso:[\"setUnion\",\"setDifference\"]},setIsSubset:{name:\"setIsSubset\",category:\"Set\",syntax:[\"setIsSubset(set1, set2)\"],description:\"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.\",examples:[\"setIsSubset([1, 2], [3, 4, 5, 6])\",\"setIsSubset([3, 4], [3, 4, 5, 6])\"],seealso:[\"setUnion\",\"setIntersect\",\"setDifference\"]},setMultiplicity:{name:\"setMultiplicity\",category:\"Set\",syntax:[\"setMultiplicity(element, set)\"],description:\"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.\",examples:[\"setMultiplicity(1, [1, 2, 2, 4])\",\"setMultiplicity(2, [1, 2, 2, 4])\"],seealso:[\"setDistinct\",\"setSize\"]},setPowerset:{name:\"setPowerset\",category:\"Set\",syntax:[\"setPowerset(set)\"],description:\"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.\",examples:[\"setPowerset([1, 2, 3])\"],seealso:[\"setCartesian\"]},setSize:{name:\"setSize\",category:\"Set\",syntax:[\"setSize(set)\",\"setSize(set, unique)\"],description:'Count the number of elements of a (multi)set. When the second parameter \"unique\" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:[\"setSize([1, 2, 2, 4])\",\"setSize([1, 2, 2, 4], true)\"],seealso:[\"setUnion\",\"setIntersect\",\"setDifference\"]},setSymDifference:{name:\"setSymDifference\",category:\"Set\",syntax:[\"setSymDifference(set1, set2)\"],description:\"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.\",examples:[\"setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])\",\"setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])\"],seealso:[\"setUnion\",\"setIntersect\",\"setDifference\"]},setUnion:{name:\"setUnion\",category:\"Set\",syntax:[\"setUnion(set1, set2)\"],description:\"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.\",examples:[\"setUnion([1, 2, 3, 4], [3, 4, 5, 6])\",\"setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])\"],seealso:[\"setIntersect\",\"setDifference\"]},zpk2tf:{name:\"zpk2tf\",category:\"Signal\",syntax:[\"zpk2tf(z, p, k)\"],description:\"Compute the transfer function of a zero-pole-gain model.\",examples:[\"zpk2tf([1, 2], [-1, -2], 1)\",\"zpk2tf([1, 2], [-1, -2])\",\"zpk2tf([1 - 3i, 2 + 2i], [-1, -2])\"],seealso:[]},freqz:{name:\"freqz\",category:\"Signal\",syntax:[\"freqz(b, a)\",\"freqz(b, a, w)\"],description:\"Calculates the frequency response of a filter given its numerator and denominator coefficients.\",examples:[\"freqz([1, 2], [1, 2, 3])\",\"freqz([1, 2], [1, 2, 3], [0, 1])\",\"freqz([1, 2], [1, 2, 3], 512)\"],seealso:[]},erf:{name:\"erf\",category:\"Special\",syntax:[\"erf(x)\"],description:\"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x\",examples:[\"erf(0.2)\",\"erf(-0.5)\",\"erf(4)\"],seealso:[]},zeta:{name:\"zeta\",category:\"Special\",syntax:[\"zeta(s)\"],description:\"Compute the Riemann Zeta Function using an infinite series and Riemanns Functional Equation for the entire complex plane\",examples:[\"zeta(0.2)\",\"zeta(-0.5)\",\"zeta(4)\"],seealso:[]},cumsum:{name:\"cumsum\",category:\"Statistics\",syntax:[\"cumsum(a, b, c, ...)\",\"cumsum(A)\"],description:\"Compute the cumulative sum of all values.\",examples:[\"cumsum(2, 3, 4, 1)\",\"cumsum([2, 3, 4, 1])\",\"cumsum([1, 2; 3, 4])\",\"cumsum([1, 2; 3, 4], 1)\",\"cumsum([1, 2; 3, 4], 2)\"],seealso:[\"max\",\"mean\",\"median\",\"min\",\"prod\",\"std\",\"sum\",\"variance\"]},mad:{name:\"mad\",category:\"Statistics\",syntax:[\"mad(a, b, c, ...)\",\"mad(A)\"],description:\"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.\",examples:[\"mad(10, 20, 30)\",\"mad([1, 2, 3])\"],seealso:[\"mean\",\"median\",\"std\",\"abs\"]},max:{name:\"max\",category:\"Statistics\",syntax:[\"max(a, b, c, ...)\",\"max(A)\",\"max(A, dimension)\"],description:\"Compute the maximum value of a list of values.\",examples:[\"max(2, 3, 4, 1)\",\"max([2, 3, 4, 1])\",\"max([2, 5; 4, 3])\",\"max([2, 5; 4, 3], 1)\",\"max([2, 5; 4, 3], 2)\",\"max(2.7, 7.1, -4.5, 2.0, 4.1)\",\"min(2.7, 7.1, -4.5, 2.0, 4.1)\"],seealso:[\"mean\",\"median\",\"min\",\"prod\",\"std\",\"sum\",\"variance\"]},mean:{name:\"mean\",category:\"Statistics\",syntax:[\"mean(a, b, c, ...)\",\"mean(A)\",\"mean(A, dimension)\"],description:\"Compute the arithmetic mean of a list of values.\",examples:[\"mean(2, 3, 4, 1)\",\"mean([2, 3, 4, 1])\",\"mean([2, 5; 4, 3])\",\"mean([2, 5; 4, 3], 1)\",\"mean([2, 5; 4, 3], 2)\",\"mean([1.0, 2.7, 3.2, 4.0])\"],seealso:[\"max\",\"median\",\"min\",\"prod\",\"std\",\"sum\",\"variance\"]},median:{name:\"median\",category:\"Statistics\",syntax:[\"median(a, b, c, ...)\",\"median(A)\"],description:\"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.\",examples:[\"median(5, 2, 7)\",\"median([3, -1, 5, 7])\"],seealso:[\"max\",\"mean\",\"min\",\"prod\",\"std\",\"sum\",\"variance\",\"quantileSeq\"]},min:{name:\"min\",category:\"Statistics\",syntax:[\"min(a, b, c, ...)\",\"min(A)\",\"min(A, dimension)\"],description:\"Compute the minimum value of a list of values.\",examples:[\"min(2, 3, 4, 1)\",\"min([2, 3, 4, 1])\",\"min([2, 5; 4, 3])\",\"min([2, 5; 4, 3], 1)\",\"min([2, 5; 4, 3], 2)\",\"min(2.7, 7.1, -4.5, 2.0, 4.1)\",\"max(2.7, 7.1, -4.5, 2.0, 4.1)\"],seealso:[\"max\",\"mean\",\"median\",\"prod\",\"std\",\"sum\",\"variance\"]},mode:{name:\"mode\",category:\"Statistics\",syntax:[\"mode(a, b, c, ...)\",\"mode(A)\",\"mode(A, a, b, B, c, ...)\"],description:\"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.\",examples:[\"mode(2, 1, 4, 3, 1)\",\"mode([1, 2.7, 3.2, 4, 2.7])\",\"mode(1, 4, 6, 1, 6)\"],seealso:[\"max\",\"mean\",\"min\",\"median\",\"prod\",\"std\",\"sum\",\"variance\"]},prod:{name:\"prod\",category:\"Statistics\",syntax:[\"prod(a, b, c, ...)\",\"prod(A)\"],description:\"Compute the product of all values.\",examples:[\"prod(2, 3, 4)\",\"prod([2, 3, 4])\",\"prod([2, 5; 4, 3])\"],seealso:[\"max\",\"mean\",\"min\",\"median\",\"min\",\"std\",\"sum\",\"variance\"]},quantileSeq:{name:\"quantileSeq\",category:\"Statistics\",syntax:[\"quantileSeq(A, prob[, sorted])\",\"quantileSeq(A, [prob1, prob2, ...][, sorted])\",\"quantileSeq(A, N[, sorted])\"],description:\"Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \\n\\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.\",examples:[\"quantileSeq([3, -1, 5, 7], 0.5)\",\"quantileSeq([3, -1, 5, 7], [1/3, 2/3])\",\"quantileSeq([3, -1, 5, 7], 2)\",\"quantileSeq([-1, 3, 5, 7], 0.5, true)\"],seealso:[\"mean\",\"median\",\"min\",\"max\",\"prod\",\"std\",\"sum\",\"variance\"]},std:{name:\"std\",category:\"Statistics\",syntax:[\"std(a, b, c, ...)\",\"std(A)\",\"std(A, dimension)\",\"std(A, normalization)\",\"std(A, dimension, normalization)\"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be \"unbiased\" (default), \"uncorrected\", or \"biased\".',examples:[\"std(2, 4, 6)\",\"std([2, 4, 6, 8])\",'std([2, 4, 6, 8], \"uncorrected\")','std([2, 4, 6, 8], \"biased\")',\"std([1, 2, 3; 4, 5, 6])\"],seealso:[\"max\",\"mean\",\"min\",\"median\",\"prod\",\"sum\",\"variance\"]},sum:{name:\"sum\",category:\"Statistics\",syntax:[\"sum(a, b, c, ...)\",\"sum(A)\",\"sum(A, dimension)\"],description:\"Compute the sum of all values.\",examples:[\"sum(2, 3, 4, 1)\",\"sum([2, 3, 4, 1])\",\"sum([2, 5; 4, 3])\"],seealso:[\"max\",\"mean\",\"median\",\"min\",\"prod\",\"std\",\"sum\",\"variance\"]},variance:{name:\"variance\",category:\"Statistics\",syntax:[\"variance(a, b, c, ...)\",\"variance(A)\",\"variance(A, dimension)\",\"variance(A, normalization)\",\"variance(A, dimension, normalization)\"],description:'Compute the variance of all values. Optional parameter normalization can be \"unbiased\" (default), \"uncorrected\", or \"biased\".',examples:[\"variance(2, 4, 6)\",\"variance([2, 4, 6, 8])\",'variance([2, 4, 6, 8], \"uncorrected\")','variance([2, 4, 6, 8], \"biased\")',\"variance([1, 2, 3; 4, 5, 6])\"],seealso:[\"max\",\"mean\",\"min\",\"median\",\"min\",\"prod\",\"std\",\"sum\"]},corr:{name:\"corr\",category:\"Statistics\",syntax:[\"corr(A,B)\"],description:\"Compute the correlation coefficient of a two list with values, For matrices, the matrix correlation coefficient is calculated.\",examples:[\"corr([2, 4, 6, 8],[1, 2, 3, 6])\",\"corr(matrix([[1, 2.2, 3, 4.8, 5], [1, 2, 3, 4, 5]]), matrix([[4, 5.3, 6.6, 7, 8], [1, 2, 3, 4, 5]]))\"],seealso:[\"max\",\"mean\",\"min\",\"median\",\"min\",\"prod\",\"std\",\"sum\"]},acos:{name:\"acos\",category:\"Trigonometry\",syntax:[\"acos(x)\"],description:\"Compute the inverse cosine of a value in radians.\",examples:[\"acos(0.5)\",\"acos(cos(2.3))\"],seealso:[\"cos\",\"atan\",\"asin\"]},acosh:{name:\"acosh\",category:\"Trigonometry\",syntax:[\"acosh(x)\"],description:\"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.\",examples:[\"acosh(1.5)\"],seealso:[\"cosh\",\"asinh\",\"atanh\"]},acot:{name:\"acot\",category:\"Trigonometry\",syntax:[\"acot(x)\"],description:\"Calculate the inverse cotangent of a value.\",examples:[\"acot(0.5)\",\"acot(cot(0.5))\",\"acot(2)\"],seealso:[\"cot\",\"atan\"]},acoth:{name:\"acoth\",category:\"Trigonometry\",syntax:[\"acoth(x)\"],description:\"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.\",examples:[\"acoth(2)\",\"acoth(0.5)\"],seealso:[\"acsch\",\"asech\"]},acsc:{name:\"acsc\",category:\"Trigonometry\",syntax:[\"acsc(x)\"],description:\"Calculate the inverse cotangent of a value.\",examples:[\"acsc(2)\",\"acsc(csc(0.5))\",\"acsc(0.5)\"],seealso:[\"csc\",\"asin\",\"asec\"]},acsch:{name:\"acsch\",category:\"Trigonometry\",syntax:[\"acsch(x)\"],description:\"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.\",examples:[\"acsch(0.5)\"],seealso:[\"asech\",\"acoth\"]},asec:{name:\"asec\",category:\"Trigonometry\",syntax:[\"asec(x)\"],description:\"Calculate the inverse secant of a value.\",examples:[\"asec(0.5)\",\"asec(sec(0.5))\",\"asec(2)\"],seealso:[\"acos\",\"acot\",\"acsc\"]},asech:{name:\"asech\",category:\"Trigonometry\",syntax:[\"asech(x)\"],description:\"Calculate the inverse secant of a value.\",examples:[\"asech(0.5)\"],seealso:[\"acsch\",\"acoth\"]},asin:{name:\"asin\",category:\"Trigonometry\",syntax:[\"asin(x)\"],description:\"Compute the inverse sine of a value in radians.\",examples:[\"asin(0.5)\",\"asin(sin(0.5))\"],seealso:[\"sin\",\"acos\",\"atan\"]},asinh:{name:\"asinh\",category:\"Trigonometry\",syntax:[\"asinh(x)\"],description:\"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.\",examples:[\"asinh(0.5)\"],seealso:[\"acosh\",\"atanh\"]},atan:{name:\"atan\",category:\"Trigonometry\",syntax:[\"atan(x)\"],description:\"Compute the inverse tangent of a value in radians.\",examples:[\"atan(0.5)\",\"atan(tan(0.5))\"],seealso:[\"tan\",\"acos\",\"asin\"]},atanh:{name:\"atanh\",category:\"Trigonometry\",syntax:[\"atanh(x)\"],description:\"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.\",examples:[\"atanh(0.5)\"],seealso:[\"acosh\",\"asinh\"]},atan2:{name:\"atan2\",category:\"Trigonometry\",syntax:[\"atan2(y, x)\"],description:\"Computes the principal value of the arc tangent of y/x in radians.\",examples:[\"atan2(2, 2) / pi\",\"angle = 60 deg in rad\",\"x = cos(angle)\",\"y = sin(angle)\",\"atan2(y, x)\"],seealso:[\"sin\",\"cos\",\"tan\"]},cos:{name:\"cos\",category:\"Trigonometry\",syntax:[\"cos(x)\"],description:\"Compute the cosine of x in radians.\",examples:[\"cos(2)\",\"cos(pi / 4) ^ 2\",\"cos(180 deg)\",\"cos(60 deg)\",\"sin(0.2)^2 + cos(0.2)^2\"],seealso:[\"acos\",\"sin\",\"tan\"]},cosh:{name:\"cosh\",category:\"Trigonometry\",syntax:[\"cosh(x)\"],description:\"Compute the hyperbolic cosine of x in radians.\",examples:[\"cosh(0.5)\"],seealso:[\"sinh\",\"tanh\",\"coth\"]},cot:{name:\"cot\",category:\"Trigonometry\",syntax:[\"cot(x)\"],description:\"Compute the cotangent of x in radians. Defined as 1/tan(x)\",examples:[\"cot(2)\",\"1 / tan(2)\"],seealso:[\"sec\",\"csc\",\"tan\"]},coth:{name:\"coth\",category:\"Trigonometry\",syntax:[\"coth(x)\"],description:\"Compute the hyperbolic cotangent of x in radians.\",examples:[\"coth(2)\",\"1 / tanh(2)\"],seealso:[\"sech\",\"csch\",\"tanh\"]},csc:{name:\"csc\",category:\"Trigonometry\",syntax:[\"csc(x)\"],description:\"Compute the cosecant of x in radians. Defined as 1/sin(x)\",examples:[\"csc(2)\",\"1 / sin(2)\"],seealso:[\"sec\",\"cot\",\"sin\"]},csch:{name:\"csch\",category:\"Trigonometry\",syntax:[\"csch(x)\"],description:\"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)\",examples:[\"csch(2)\",\"1 / sinh(2)\"],seealso:[\"sech\",\"coth\",\"sinh\"]},sec:{name:\"sec\",category:\"Trigonometry\",syntax:[\"sec(x)\"],description:\"Compute the secant of x in radians. Defined as 1/cos(x)\",examples:[\"sec(2)\",\"1 / cos(2)\"],seealso:[\"cot\",\"csc\",\"cos\"]},sech:{name:\"sech\",category:\"Trigonometry\",syntax:[\"sech(x)\"],description:\"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)\",examples:[\"sech(2)\",\"1 / cosh(2)\"],seealso:[\"coth\",\"csch\",\"cosh\"]},sin:{name:\"sin\",category:\"Trigonometry\",syntax:[\"sin(x)\"],description:\"Compute the sine of x in radians.\",examples:[\"sin(2)\",\"sin(pi / 4) ^ 2\",\"sin(90 deg)\",\"sin(30 deg)\",\"sin(0.2)^2 + cos(0.2)^2\"],seealso:[\"asin\",\"cos\",\"tan\"]},sinh:{name:\"sinh\",category:\"Trigonometry\",syntax:[\"sinh(x)\"],description:\"Compute the hyperbolic sine of x in radians.\",examples:[\"sinh(0.5)\"],seealso:[\"cosh\",\"tanh\"]},tan:{name:\"tan\",category:\"Trigonometry\",syntax:[\"tan(x)\"],description:\"Compute the tangent of x in radians.\",examples:[\"tan(0.5)\",\"sin(0.5) / cos(0.5)\",\"tan(pi / 4)\",\"tan(45 deg)\"],seealso:[\"atan\",\"sin\",\"cos\"]},tanh:{name:\"tanh\",category:\"Trigonometry\",syntax:[\"tanh(x)\"],description:\"Compute the hyperbolic tangent of x in radians.\",examples:[\"tanh(0.5)\",\"sinh(0.5) / cosh(0.5)\"],seealso:[\"sinh\",\"cosh\"]},to:{name:\"to\",category:\"Units\",syntax:[\"x to unit\",\"to(x, unit)\"],description:\"Change the unit of a value.\",examples:[\"5 inch to cm\",\"3.2kg to g\",\"16 bytes in bits\"],seealso:[]},clone:{name:\"clone\",category:\"Utils\",syntax:[\"clone(x)\"],description:\"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices\",examples:[\"clone(3.5)\",\"clone(2 - 4i)\",\"clone(45 deg)\",\"clone([1, 2; 3, 4])\",'clone(\"hello world\")'],seealso:[]},format:{name:\"format\",category:\"Utils\",syntax:[\"format(value)\",\"format(value, precision)\"],description:\"Format a value of any type as string.\",examples:[\"format(2.3)\",\"format(3 - 4i)\",\"format([])\",\"format(pi, 3)\"],seealso:[\"print\"]},bin:{name:\"bin\",category:\"Utils\",syntax:[\"bin(value)\"],description:\"Format a number as binary\",examples:[\"bin(2)\"],seealso:[\"oct\",\"hex\"]},oct:{name:\"oct\",category:\"Utils\",syntax:[\"oct(value)\"],description:\"Format a number as octal\",examples:[\"oct(56)\"],seealso:[\"bin\",\"hex\"]},hex:{name:\"hex\",category:\"Utils\",syntax:[\"hex(value)\"],description:\"Format a number as hexadecimal\",examples:[\"hex(240)\"],seealso:[\"bin\",\"oct\"]},isNaN:{name:\"isNaN\",category:\"Utils\",syntax:[\"isNaN(x)\"],description:\"Test whether a value is NaN (not a number)\",examples:[\"isNaN(2)\",\"isNaN(0 / 0)\",\"isNaN(NaN)\",\"isNaN(Infinity)\"],seealso:[\"isNegative\",\"isNumeric\",\"isPositive\",\"isZero\"]},isInteger:{name:\"isInteger\",category:\"Utils\",syntax:[\"isInteger(x)\"],description:\"Test whether a value is an integer number.\",examples:[\"isInteger(2)\",\"isInteger(3.5)\",\"isInteger([3, 0.5, -2])\"],seealso:[\"isNegative\",\"isNumeric\",\"isPositive\",\"isZero\"]},isNegative:{name:\"isNegative\",category:\"Utils\",syntax:[\"isNegative(x)\"],description:\"Test whether a value is negative: smaller than zero.\",examples:[\"isNegative(2)\",\"isNegative(0)\",\"isNegative(-4)\",\"isNegative([3, 0.5, -2])\"],seealso:[\"isInteger\",\"isNumeric\",\"isPositive\",\"isZero\"]},isNumeric:{name:\"isNumeric\",category:\"Utils\",syntax:[\"isNumeric(x)\"],description:\"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.\",examples:[\"isNumeric(2)\",'isNumeric(\"2\")','hasNumericValue(\"2\")',\"isNumeric(0)\",\"isNumeric(bignumber(500))\",\"isNumeric(fraction(0.125))\",\"isNumeric(2 + 3i)\",'isNumeric([2.3, \"foo\", false])'],seealso:[\"isInteger\",\"isZero\",\"isNegative\",\"isPositive\",\"isNaN\",\"hasNumericValue\"]},hasNumericValue:{name:\"hasNumericValue\",category:\"Utils\",syntax:[\"hasNumericValue(x)\"],description:\"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.\",examples:[\"hasNumericValue(2)\",'hasNumericValue(\"2\")','isNumeric(\"2\")',\"hasNumericValue(0)\",\"hasNumericValue(bignumber(500))\",\"hasNumericValue(fraction(0.125))\",\"hasNumericValue(2 + 3i)\",'hasNumericValue([2.3, \"foo\", false])'],seealso:[\"isInteger\",\"isZero\",\"isNegative\",\"isPositive\",\"isNaN\",\"isNumeric\"]},isPositive:{name:\"isPositive\",category:\"Utils\",syntax:[\"isPositive(x)\"],description:\"Test whether a value is positive: larger than zero.\",examples:[\"isPositive(2)\",\"isPositive(0)\",\"isPositive(-4)\",\"isPositive([3, 0.5, -2])\"],seealso:[\"isInteger\",\"isNumeric\",\"isNegative\",\"isZero\"]},isPrime:{name:\"isPrime\",category:\"Utils\",syntax:[\"isPrime(x)\"],description:\"Test whether a value is prime: has no divisors other than itself and one.\",examples:[\"isPrime(3)\",\"isPrime(-2)\",\"isPrime([2, 17, 100])\"],seealso:[\"isInteger\",\"isNumeric\",\"isNegative\",\"isZero\"]},isZero:{name:\"isZero\",category:\"Utils\",syntax:[\"isZero(x)\"],description:\"Test whether a value is zero.\",examples:[\"isZero(2)\",\"isZero(0)\",\"isZero(-4)\",\"isZero([3, 0, -2, 0])\"],seealso:[\"isInteger\",\"isNumeric\",\"isNegative\",\"isPositive\"]},print:{name:\"print\",category:\"Utils\",syntax:[\"print(template, values)\",\"print(template, values, precision)\"],description:\"Interpolate values into a string template.\",examples:['print(\"Lucy is $age years old\", {age: 5})','print(\"The value of pi is $pi\", {pi: pi}, 3)','print(\"Hello, $user.name!\", {user: {name: \"John\"}})','print(\"Values: $1, $2, $3\", [6, 9, 4])'],seealso:[\"format\"]},typeOf:{name:\"typeOf\",category:\"Utils\",syntax:[\"typeOf(x)\"],description:\"Get the type of a variable.\",examples:[\"typeOf(3.5)\",\"typeOf(2 - 4i)\",\"typeOf(45 deg)\",'typeOf(\"hello world\")'],seealso:[\"getMatrixDataType\"]},numeric:{name:\"numeric\",category:\"Utils\",syntax:[\"numeric(x)\"],description:\"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.\",examples:['numeric(\"4\")','numeric(\"4\", \"number\")','numeric(\"4\", \"BigNumber\")','numeric(\"4\", \"Fraction\")','numeric(4, \"Fraction\")','numeric(fraction(2, 5), \"number\")'],seealso:[\"number\",\"fraction\",\"bignumber\",\"string\",\"format\"]}},Eh=\"help\",Ah=Se(Eh,[\"typed\",\"mathWithTransform\",\"Help\"],(function(e){var t=e.typed,r=e.mathWithTransform,n=e.Help;return t(Eh,{any:function(e){var t,i=e;if(\"string\"!=typeof e)for(t in r)if(Ae(r,t)&&e===r[t]){i=t;break}var a=ze(Nh,i);if(!a){var o=\"function\"==typeof i?i.name:i;throw new Error('No documentation found on \"'+o+'\"')}return new n(a)}})})),Sh=\"chain\",Ch=Se(Sh,[\"typed\",\"Chain\"],(function(e){var t=e.typed,r=e.Chain;return t(Sh,{\"\":function(){return new r},any:function(e){return new r(e)}})})),Mh=Se(\"det\",[\"typed\",\"matrix\",\"subtractScalar\",\"multiply\",\"divideScalar\",\"isZero\",\"unaryMinus\"],(function(e){var t=e.typed,r=e.matrix,n=e.subtractScalar,i=e.multiply,a=e.divideScalar,o=e.isZero,u=e.unaryMinus;return t(\"det\",{any:function(e){return ye(e)},\"Array | Matrix\":function(e){var t;switch((t=l(e)?e.size():Array.isArray(e)?(e=r(e)).size():[]).length){case 0:return ye(e);case 1:if(1===t[0])return ye(e.valueOf()[0]);if(0===t[0])return 1;throw new RangeError(\"Matrix must be square (size: \"+en(t)+\")\");case 2:var s=t[0],c=t[1];if(s===c)return function(e,t,r){if(1===t)return ye(e[0][0]);if(2===t)return n(i(e[0][0],e[1][1]),i(e[1][0],e[0][1]));for(var s=!1,c=new Array(t).fill(0).map((function(e,t){return t})),f=0;fx&&(x=c(v[f][g]),b=f),f++;if(0===x)throw Error(\"Cannot calculate inverse, determinant is zero\");(f=b)!==g&&(h=v[g],v[g]=v[f],v[f]=h,h=y[g],y[g]=y[f],y[f]=h);var w=v[g],D=y[g];for(f=0;f=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}function Bh(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:t.epsilon,u=arguments.length>3?arguments[3]:void 0,p=arguments.length>4?arguments[4]:void 0;if(\"number\"===u)return function(e,r,n){var i,a,o=e.length,u=Math.abs(r/o);if(n){a=new Array(o);for(var s=0;s=Math.abs(u);){var d=h[0][0],g=h[0][1];e=v(e,(c=e[d][d],f=e[g][g],l=e[d][g],p=void 0,p=f-c,i=Math.abs(p)<=t.epsilon?Math.PI/4:.5*Math.atan(2*l/(f-c))),d,g),n&&(a=m(a,i,d,g)),h=y(e)}for(var b=Array(o).fill(0),w=0;w=i(v);){var A=E[0][0],S=E[0][1];e=d(e,(b=e[A][A],w=e[S][S],D=e[A][S],N=void 0,N=n(w,b),u=i(N)<=t.epsilon?f(-1).acos().div(4):s(.5,a(l(2,D,c(N))))),A,S),o&&(p=h(p,u,A,S)),E=g(e)}for(var C=Array(m).fill(0),M=0;M=5)return null;for(u=0;;){var s=d(e,a);if(b(M(C(a,[s])),n))break;if(++u>=10)return null;a=F(s)}return a}function S(e,t,r){var n=\"BigNumber\"===r,i=\"Complex\"===r,a=Array(e).fill(0).map((function(e){return 2*Math.random()-1}));return n&&(a=a.map((function(e){return c(e)}))),i&&(a=a.map((function(e){return g(e)}))),F(a=C(a,t),r)}function C(e,t){var n,a=l(e),u=_h(t);try{for(u.s();!(n=u.n()).done;){var s=n.value;s=p(s,a),e=r(e,i(o(w(s,e),w(s,s)),s))}}catch(e){u.e(e)}finally{u.f()}return e}function M(e){return s(u(w(e,e)))}function F(e,t){var r=\"Complex\"===t,n=\"BigNumber\"===t?c(1):r?g(1):1;return i(o(n,M(e)),e)}return function(e,l,p,d){var w=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],S=function(e,r,n,i,u){var l,p=\"BigNumber\"===i,m=\"Complex\"===i,h=p?c(0):0,d=p?c(1):m?g(1):1,v=p?c(1):1,w=p?c(10):2,D=a(w,w);u&&(l=Array(r).fill(d));for(var N=!1;!N;){N=!0;for(var E=0;E1&&(k=f(Array(T-1).fill(v)))),T-=1,F.pop();for(var U=0;U2&&(k=f(Array(T-2).fill(v)))),T-=2,F.pop(),F.pop();for(var H=0;H100){var G=Error(\"The eigenvalues failed to converge. Only found these eigenvalues: \"+O.join(\", \"));throw G.values=O,G.vectors=[],G}var V=p?i(B,function(e,t){for(var r=[],n=0;n1&&void 0!==arguments[1]?arguments[1]:{},a=!(\"eigenvectors\"in i)||i.eigenvectors,o=function(e,t,r){var n=e.toArray(),i=e.size();if(2!==i.length||i[0]!==i[1])throw new RangeError(\"Matrix must be square (size: \".concat(en(i),\")\"));var a=i[0];if(function(e,t,r){for(var n=0;n1&&(g=o(g,m),x=-x),d=n(d,o(y=y*(l-b+1)/((2*l-b+1)*b),g)),v=n(v,o(y*x,g));for(var w=o(a(v),d),D=0;Dm&&++a>1e3)throw new Error(\"computing square root of matrix: iterative method could not converge\")}while(t>m);return o}return t(Rh,{\"Array | Matrix\":function(e){var t=l(e)?e.size():cn(e);switch(t.length){case 1:if(1===t[0])return a(e,o);throw new RangeError(\"Matrix must be square (size: \"+en(t)+\")\");case 2:if(t[0]===t[1])return h(e);throw new RangeError(\"Matrix must be square (size: \"+en(t)+\")\");default:throw new RangeError(\"Matrix must be at most two dimensional (size: \"+en(t)+\")\")}}})})),jh=\"sylvester\",Ph=Se(jh,[\"typed\",\"schur\",\"matrixFromColumns\",\"matrix\",\"multiply\",\"range\",\"concat\",\"transpose\",\"index\",\"subset\",\"add\",\"subtract\",\"identity\",\"lusolve\",\"abs\"],(function(e){var t=e.typed,r=e.schur,n=e.matrixFromColumns,i=e.matrix,a=e.multiply,o=e.range,u=e.concat,s=e.transpose,c=e.index,f=e.subset,l=e.add,p=e.subtract,m=e.identity,h=e.lusolve,d=e.abs;return t(jh,{\"Matrix, Matrix, Matrix\":v,\"Array, Matrix, Matrix\":function(e,t,r){return v(i(e),t,r)},\"Array, Array, Matrix\":function(e,t,r){return v(i(e),i(t),r)},\"Array, Matrix, Array\":function(e,t,r){return v(i(e),t,i(r))},\"Matrix, Array, Matrix\":function(e,t,r){return v(e,i(t),r)},\"Matrix, Array, Array\":function(e,t,r){return v(e,i(t),i(r))},\"Matrix, Matrix, Array\":function(e,t,r){return v(e,t,i(r))},\"Array, Array, Array\":function(e,t,r){return v(i(e),i(t),i(r)).toArray()}});function v(e,t,v){for(var y=t.size()[0],g=e.size()[0],x=r(e),b=x.T,w=x.U,D=r(a(-1,t)),N=D.T,E=D.U,A=a(a(s(w),v),E),S=o(0,g),C=[],M=function(e,t){return u(e,t,1)},F=function(e,t){return u(e,t,0)},O=0;O1e-5){for(var T=F(f(A,c(S,O)),f(A,c(S,O+1))),_=0;_100)break}while(o(u(s,t))>1e-4);return{U:c,T:s}}})),$h=\"lyap\",Hh=Se($h,[\"typed\",\"matrix\",\"sylvester\",\"multiply\",\"transpose\"],(function(e){var t=e.typed,r=e.matrix,n=e.sylvester,i=e.multiply,a=e.transpose;return t($h,{\"Matrix, Matrix\":function(e,t){return n(e,a(e),i(-1,t))},\"Array, Matrix\":function(e,t){return n(r(e),a(r(e)),i(-1,t))},\"Matrix, Array\":function(e,t){return n(e,a(r(e)),r(i(-1,t)))},\"Array, Array\":function(e,t){return n(r(e),a(r(e)),r(i(-1,t))).toArray()}})})),Gh=Se(\"divide\",[\"typed\",\"matrix\",\"multiply\",\"equalScalar\",\"divideScalar\",\"inv\"],(function(e){var t=e.typed,r=e.matrix,n=e.multiply,i=e.equalScalar,a=e.divideScalar,o=e.inv,u=Aa({typed:t,equalScalar:i}),s=Ca({typed:t});return t(\"divide\",xe({\"Array | Matrix, Array | Matrix\":function(e,t){return n(e,o(t))},\"DenseMatrix, any\":function(e,t){return s(e,t,a,!1)},\"SparseMatrix, any\":function(e,t){return u(e,t,a,!1)},\"Array, any\":function(e,t){return s(r(e),t,a,!1).valueOf()},\"any, Array | Matrix\":function(e,t){return n(e,o(t))}},a.signatures))})),Vh=\"distance\",Zh=Se(Vh,[\"typed\",\"addScalar\",\"subtractScalar\",\"divideScalar\",\"multiplyScalar\",\"deepEqual\",\"sqrt\",\"abs\"],(function(e){var t=e.typed,r=e.addScalar,n=e.subtractScalar,i=e.multiplyScalar,o=e.divideScalar,u=e.deepEqual,s=e.sqrt,c=e.abs;return t(Vh,{\"Array, Array, Array\":function(e,t,r){if(2===e.length&&2===t.length&&2===r.length){if(!l(e))throw new TypeError(\"Array with 2 numbers or BigNumbers expected for first argument\");if(!l(t))throw new TypeError(\"Array with 2 numbers or BigNumbers expected for second argument\");if(!l(r))throw new TypeError(\"Array with 2 numbers or BigNumbers expected for third argument\");if(u(t,r))throw new TypeError(\"LinePoint1 should not be same with LinePoint2\");var a=n(r[1],t[1]),o=n(t[0],r[0]),s=n(i(r[0],t[1]),i(t[0],r[1]));return v(e[0],e[1],a,o,s)}throw new TypeError(\"Invalid Arguments: Try again\")},\"Object, Object, Object\":function(e,t,r){if(2===Object.keys(e).length&&2===Object.keys(t).length&&2===Object.keys(r).length){if(!l(e))throw new TypeError(\"Values of pointX and pointY should be numbers or BigNumbers\");if(!l(t))throw new TypeError(\"Values of lineOnePtX and lineOnePtY should be numbers or BigNumbers\");if(!l(r))throw new TypeError(\"Values of lineTwoPtX and lineTwoPtY should be numbers or BigNumbers\");if(u(d(t),d(r)))throw new TypeError(\"LinePoint1 should not be same with LinePoint2\");if(\"pointX\"in e&&\"pointY\"in e&&\"lineOnePtX\"in t&&\"lineOnePtY\"in t&&\"lineTwoPtX\"in r&&\"lineTwoPtY\"in r){var a=n(r.lineTwoPtY,t.lineOnePtY),o=n(t.lineOnePtX,r.lineTwoPtX),s=n(i(r.lineTwoPtX,t.lineOnePtY),i(t.lineOnePtX,r.lineTwoPtY));return v(e.pointX,e.pointY,a,o,s)}throw new TypeError(\"Key names do not match\")}throw new TypeError(\"Invalid Arguments: Try again\")},\"Array, Array\":function(e,t){if(2===e.length&&3===t.length){if(!l(e))throw new TypeError(\"Array with 2 numbers or BigNumbers expected for first argument\");if(!p(t))throw new TypeError(\"Array with 3 numbers or BigNumbers expected for second argument\");return v(e[0],e[1],t[0],t[1],t[2])}if(3===e.length&&6===t.length){if(!p(e))throw new TypeError(\"Array with 3 numbers or BigNumbers expected for first argument\");if(!h(t))throw new TypeError(\"Array with 6 numbers or BigNumbers expected for second argument\");return y(e[0],e[1],e[2],t[0],t[1],t[2],t[3],t[4],t[5])}if(e.length===t.length&&e.length>0){if(!m(e))throw new TypeError(\"All values of an array should be numbers or BigNumbers\");if(!m(t))throw new TypeError(\"All values of an array should be numbers or BigNumbers\");return g(e,t)}throw new TypeError(\"Invalid Arguments: Try again\")},\"Object, Object\":function(e,t){if(2===Object.keys(e).length&&3===Object.keys(t).length){if(!l(e))throw new TypeError(\"Values of pointX and pointY should be numbers or BigNumbers\");if(!p(t))throw new TypeError(\"Values of xCoeffLine, yCoeffLine and constant should be numbers or BigNumbers\");if(\"pointX\"in e&&\"pointY\"in e&&\"xCoeffLine\"in t&&\"yCoeffLine\"in t&&\"constant\"in t)return v(e.pointX,e.pointY,t.xCoeffLine,t.yCoeffLine,t.constant);throw new TypeError(\"Key names do not match\")}if(3===Object.keys(e).length&&6===Object.keys(t).length){if(!p(e))throw new TypeError(\"Values of pointX, pointY and pointZ should be numbers or BigNumbers\");if(!h(t))throw new TypeError(\"Values of x0, y0, z0, a, b and c should be numbers or BigNumbers\");if(\"pointX\"in e&&\"pointY\"in e&&\"x0\"in t&&\"y0\"in t&&\"z0\"in t&&\"a\"in t&&\"b\"in t&&\"c\"in t)return y(e.pointX,e.pointY,e.pointZ,t.x0,t.y0,t.z0,t.a,t.b,t.c);throw new TypeError(\"Key names do not match\")}if(2===Object.keys(e).length&&2===Object.keys(t).length){if(!l(e))throw new TypeError(\"Values of pointOneX and pointOneY should be numbers or BigNumbers\");if(!l(t))throw new TypeError(\"Values of pointTwoX and pointTwoY should be numbers or BigNumbers\");if(\"pointOneX\"in e&&\"pointOneY\"in e&&\"pointTwoX\"in t&&\"pointTwoY\"in t)return g([e.pointOneX,e.pointOneY],[t.pointTwoX,t.pointTwoY]);throw new TypeError(\"Key names do not match\")}if(3===Object.keys(e).length&&3===Object.keys(t).length){if(!p(e))throw new TypeError(\"Values of pointOneX, pointOneY and pointOneZ should be numbers or BigNumbers\");if(!p(t))throw new TypeError(\"Values of pointTwoX, pointTwoY and pointTwoZ should be numbers or BigNumbers\");if(\"pointOneX\"in e&&\"pointOneY\"in e&&\"pointOneZ\"in e&&\"pointTwoX\"in t&&\"pointTwoY\"in t&&\"pointTwoZ\"in t)return g([e.pointOneX,e.pointOneY,e.pointOneZ],[t.pointTwoX,t.pointTwoY,t.pointTwoZ]);throw new TypeError(\"Key names do not match\")}throw new TypeError(\"Invalid Arguments: Try again\")},Array:function(e){if(!function(e){if(2===e[0].length&&f(e[0][0])&&f(e[0][1])){if(e.some((function(e){return 2!==e.length||!f(e[0])||!f(e[1])})))return!1}else{if(!(3===e[0].length&&f(e[0][0])&&f(e[0][1])&&f(e[0][2])))return!1;if(e.some((function(e){return 3!==e.length||!f(e[0])||!f(e[1])||!f(e[2])})))return!1}return!0}(e))throw new TypeError(\"Incorrect array format entered for pairwise distance calculation\");return function(e){for(var t=[],r=[],n=[],i=0;i1&&Array.isArray(e[0])&&e.every((function(e){return Array.isArray(e)&&1===e.length}))?m(e):e}function x(e){return 2===e.length&&d(e[0])&&d(e[1])}function b(e){return 3===e.length&&d(e[0])&&d(e[1])&&d(e[2])}function w(e,t,r,n,i,o,u,c,l,p,m,h){var d=s(f(e,t),f(r,n)),v=s(f(i,o),f(u,c)),y=s(f(l,p),f(m,h));return a(a(d,v),y)}})),Yh=Se(\"sum\",[\"typed\",\"config\",\"add\",\"numeric\"],(function(e){var t=e.typed,r=e.config,n=e.add,i=e.numeric;return t(\"sum\",{\"Array | Matrix\":a,\"Array | Matrix, number | BigNumber\":function(e,t){try{return Wn(e,t,n)}catch(e){throw Rs(e,\"sum\")}},\"...\":function(e){if(Gn(e))throw new TypeError(\"Scalar values expected in function sum\");return a(e)}});function a(e){var t;return Vn(e,(function(e){try{t=void 0===t?e:n(t,e)}catch(t){throw Rs(t,\"sum\",e)}})),void 0===t&&(t=i(0,r.number)),\"string\"==typeof t&&(t=i(t,r.number)),t}})),Jh=\"cumsum\",Xh=Se(Jh,[\"typed\",\"add\",\"unaryPlus\"],(function(e){var t=e.typed,r=e.add,n=e.unaryPlus;return t(Jh,{Array:i,Matrix:function(e){return e.create(i(e.valueOf()))},\"Array, number | BigNumber\":o,\"Matrix, number | BigNumber\":function(e,t){return e.create(o(e.valueOf(),t))},\"...\":function(e){if(Gn(e))throw new TypeError(\"All values expected to be scalar in function cumsum\");return i(e)}});function i(e){try{return a(e)}catch(e){throw Rs(e,Jh)}}function a(e){if(0===e.length)return[];for(var t=[n(e[0])],i=1;i=r.length)throw new sn(t,r.length);try{return u(e,t)}catch(e){throw Rs(e,Jh)}}function u(e,t){var r,n,i;if(t<=0){var o=e[0][0];if(Array.isArray(o)){for(i=Hn(e),n=[],r=0;r0&&(o=e[c]);return s(o,n)}var f=a(e,(t-1)/2);return u(f)}catch(e){throw Rs(e,\"median\")}}var u=t({\"number | BigNumber | Complex | Unit\":function(e){return e}}),s=t({\"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit\":function(e,t){return n(r(e,t),2)}});return t(ed,{\"Array | Matrix\":o,\"Array | Matrix, number | BigNumber\":function(e,t){throw new Error(\"median(A, dim) is not yet supported\")},\"...\":function(e){if(Gn(e))throw new TypeError(\"Scalar values expected in function median\");return o(e)}})})),rd=Se(\"mad\",[\"typed\",\"abs\",\"map\",\"median\",\"subtract\"],(function(e){var t=e.typed,r=e.abs,n=e.map,i=e.median,a=e.subtract;return t(\"mad\",{\"Array | Matrix\":o,\"...\":function(e){return o(e)}});function o(e){if(0===(e=En(e.valueOf())).length)throw new Error(\"Cannot calculate median absolute deviation (mad) of an empty array\");try{var t=i(e);return i(n(e,(function(e){return r(a(e,t))})))}catch(e){throw e instanceof TypeError&&e.message.includes(\"median\")?new TypeError(e.message.replace(\"median\",\"mad\")):Rs(e,\"mad\")}}})),nd=\"unbiased\",id=\"variance\",ad=Se(id,[\"typed\",\"add\",\"subtract\",\"multiply\",\"divide\",\"apply\",\"isNaN\"],(function(e){var t=e.typed,r=e.add,n=e.subtract,i=e.multiply,o=e.divide,u=e.apply,s=e.isNaN;return t(id,{\"Array | Matrix\":function(e){return c(e,nd)},\"Array | Matrix, string\":c,\"Array | Matrix, number | BigNumber\":function(e,t){return f(e,t,nd)},\"Array | Matrix, number | BigNumber, string\":f,\"...\":function(e){return c(e,nd)}});function c(e,t){var u,c=0;if(0===e.length)throw new SyntaxError(\"Function variance requires one or more parameters (0 provided)\");if(Vn(e,(function(e){try{u=void 0===u?e:r(u,e),c++}catch(t){throw Rs(t,\"variance\",e)}})),0===c)throw new Error(\"Cannot calculate variance of an empty array\");var f=o(u,c);if(u=void 0,Vn(e,(function(e){var t=n(e,f);u=void 0===u?i(t,t):r(u,i(t,t))})),s(u))return u;switch(t){case\"uncorrected\":return o(u,c);case\"biased\":return o(u,c+1);case\"unbiased\":var l=a(u)?u.mul(0):0;return 1===c?l:o(u,c-1);default:throw new Error('Unknown normalization \"'+t+'\". Choose \"unbiased\" (default), \"uncorrected\", or \"biased\".')}}function f(e,t,r){try{if(0===e.length)throw new SyntaxError(\"Function variance requires one or more parameters (0 provided)\");return u(e,t,(function(e){return c(e,r)}))}catch(e){throw Rs(e,\"variance\")}}})),od=\"quantileSeq\",ud=Se(od,[\"typed\",\"?bignumber\",\"add\",\"subtract\",\"divide\",\"multiply\",\"partitionSelect\",\"compare\",\"isInteger\",\"smaller\",\"smallerEq\",\"larger\"],(function(e){var t=e.typed,r=e.bignumber,n=e.add,a=e.subtract,o=e.divide,u=e.multiply,s=e.partitionSelect,c=e.compare,f=e.isInteger,l=e.smaller,p=e.smallerEq,m=e.larger,h=va({typed:t,isInteger:f});return t(od,{\"Array | Matrix, number | BigNumber\":function(e,t){return v(e,t,!1)},\"Array | Matrix, number | BigNumber, number\":function(e,t,r){return d(e,t,!1,r,v)},\"Array | Matrix, number | BigNumber, boolean\":v,\"Array | Matrix, number | BigNumber, boolean, number\":function(e,t,r,n){return d(e,t,r,n,v)},\"Array | Matrix, Array | Matrix\":function(e,t){return y(e,t,!1)},\"Array | Matrix, Array | Matrix, number\":function(e,t,r){return d(e,t,!1,r,y)},\"Array | Matrix, Array | Matrix, boolean\":y,\"Array | Matrix, Array | Matrix, boolean, number\":function(e,t,r,n){return d(e,t,r,n,y)}});function d(e,t,r,n,i){return h(e,n,(function(e){return i(e,t,r)}))}function v(e,t,a){var u,s=e.valueOf();if(l(t,0))throw new Error(\"N/prob must be non-negative\");if(p(t,1))return i(t)?g(s,t,a):r(g(s,t,a));if(m(t,1)){if(!f(t))throw new Error(\"N must be a positive integer\");if(m(t,4294967295))throw new Error(\"N must be less than or equal to 2^32-1, as that is the maximum length of an Array\");var c=n(t,1);u=[];for(var h=0;l(h,t);h++){var d=o(h+1,c);u.push(g(s,d,a))}return i(t)?u:r(u)}}function y(e,t,r){for(var n=e.valueOf(),i=t.valueOf(),a=[],o=0;o0&&(p=o[y])}return n(u(p,a(1,v)),u(m,v))}})),sd=Se(\"std\",[\"typed\",\"map\",\"sqrt\",\"variance\"],(function(e){var t=e.typed,r=e.map,n=e.sqrt,i=e.variance;return t(\"std\",{\"Array | Matrix\":a,\"Array | Matrix, string\":a,\"Array | Matrix, number | BigNumber\":a,\"Array | Matrix, number | BigNumber, string\":a,\"...\":function(e){return a(e)}});function a(e,t){if(0===e.length)throw new SyntaxError(\"Function std requires one or more parameters (0 provided)\");try{var a=i.apply(null,arguments);return p(a)?r(a,n):n(a)}catch(e){throw e instanceof TypeError&&e.message.includes(\" variance\")?new TypeError(e.message.replace(\" variance\",\" std\")):e}}})),cd=\"corr\",fd=Se(cd,[\"typed\",\"matrix\",\"mean\",\"sqrt\",\"sum\",\"add\",\"subtract\",\"multiply\",\"pow\",\"divide\"],(function(e){var t=e.typed,r=e.matrix,n=e.sqrt,i=e.sum,a=e.add,o=e.subtract,u=e.multiply,s=e.pow,c=e.divide;return t(cd,{\"Array, Array\":function(e,t){return f(e,t)},\"Matrix, Matrix\":function(e,t){var n=f(e.toArray(),t.toArray());return Array.isArray(n)?r(n):n}});function f(e,t){var r=[];if(Array.isArray(e[0])&&Array.isArray(t[0])){if(e.length!==t.length)throw new SyntaxError(\"Dimension mismatch. Array A and B must have the same length.\");for(var n=0;n>1;return ld(e,r)*ld(r+1,t)}function pd(e,t){if(!V(e)||e<0)throw new TypeError(\"Positive integer value expected in function combinations\");if(!V(t)||t<0)throw new TypeError(\"Positive integer value expected in function combinations\");if(t>e)throw new TypeError(\"k must be less than or equal to n\");for(var r=e-t,n=1,i=2,a=t171?1/0:ld(1,e-1);if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*xd(1-e));if(e>=171.35)return 1/0;if(e>85){var r=e*e,n=r*e,i=n*e,a=i*e;return Math.sqrt(2*Math.PI/e)*Math.pow(e/Math.E,e)*(1+1/(12*e)+1/(288*r)-139/(51840*n)-571/(2488320*i)+163879/(209018880*a)+5246819/(75246796800*a*e))}--e,t=wd[0];for(var o=1;o=1;n--)r+=Nd[n]/(e+n);return Dd+(e+.5)*Math.log(t)-t+Math.log(r)}Ed.signature=\"number\";var Ad=\"gamma\",Sd=Se(Ad,[\"typed\",\"config\",\"multiplyScalar\",\"pow\",\"BigNumber\",\"Complex\"],(function(e){var t=e.typed,r=e.config,n=(e.multiplyScalar,e.pow,e.BigNumber),i=e.Complex;return t(Ad,{number:xd,Complex:function e(t){if(0===t.im)return xd(t.re);if(t.re<.5){var r=new i(1-t.re,-t.im),n=new i(Math.PI*t.re,Math.PI*t.im);return new i(Math.PI).div(n.sin()).div(e(r))}t=new i(t.re-1,t.im);for(var a=new i(wd[0],0),o=1;o2;)s+=o-=2,u=u.times(s);return new n(u.toPrecision(n.precision))}})),Cd=\"lgamma\",Md=Se(Cd,[\"Complex\",\"typed\"],(function(e){var t=e.Complex,r=e.typed,n=[-.029550653594771242,.00641025641025641,-.0019175269175269176,.0008417508417508417,-.0005952380952380953,.0007936507936507937,-.002777777777777778,.08333333333333333];return r(Cd,{number:Ed,Complex:function e(r){if(r.isNaN())return new t(NaN,NaN);if(0===r.im)return new t(Ed(r.re),0);if(r.re>=7||Math.abs(r.im)>=7)return i(r);if(r.re<=.1){var n=(s=6.283185307179586,(!0^((c=r.im)>0||!(c<0)&&1/c==1/0)?-s:s)*Math.floor(.5*r.re+.25)),o=r.mul(Math.PI).sin().log(),u=e(new t(1-r.re,-r.im));return new t(1.1447298858494002,n).sub(o).sub(u)}return r.im>=0?a(r):a(r.conjugate()).conjugate();var s,c},BigNumber:function(){throw new Error(\"mathjs doesn't yet provide an implementation of the algorithm lgamma for BigNumber\")}});function i(e){for(var r=e.sub(.5).mul(e.log()).sub(e).add(Dd),i=new t(1,0).div(e),a=i.div(e),o=n[0],u=n[1],s=2*a.re,c=a.re*a.re+a.im*a.im,f=2;f<8;f++){var l=u;u=-c*o+n[f],o=s*o+l}var p=i.mul(a.mul(o).add(u));return r.add(p)}function a(e){var r=0,n=0,a=e;for(e=e.add(1);e.re<=7;){var o=(a=a.mul(e)).im<0?1:0;0!==o&&0===n&&r++,n=o,e=e.add(1)}return i(e).sub(a.log()).sub(new t(0,2*r*Math.PI*1))}})),Fd=\"factorial\",Od=Se(Fd,[\"typed\",\"gamma\"],(function(e){var t=e.typed,r=e.gamma;return t(Fd,{number:function(e){if(e<0)throw new Error(\"Value must be non-negative\");return r(e+1)},BigNumber:function(e){if(e.isNegative())throw new Error(\"Value must be non-negative\");return r(e.plus(1))},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return Zn(t,e)}}))})})),Td=\"kldivergence\",_d=Se(Td,[\"typed\",\"matrix\",\"divide\",\"sum\",\"multiply\",\"map\",\"dotDivide\",\"log\",\"isNumeric\"],(function(e){var t=e.typed,r=e.matrix,n=e.divide,i=e.sum,a=e.multiply,o=e.map,u=e.dotDivide,s=e.log,c=e.isNumeric;return t(Td,{\"Array, Array\":function(e,t){return f(r(e),r(t))},\"Matrix, Array\":function(e,t){return f(e,r(t))},\"Array, Matrix\":function(e,t){return f(r(e),t)},\"Matrix, Matrix\":function(e,t){return f(e,t)}});function f(e,t){var r=t.size().length,f=e.size().length;if(r>1)throw new Error(\"first object must be one dimensional\");if(f>1)throw new Error(\"second object must be one dimensional\");if(r!==f)throw new Error(\"Length of two vectors must be equal\");if(0===i(e))throw new Error(\"Sum of elements in first object must be non zero\");if(0===i(t))throw new Error(\"Sum of elements in second object must be non zero\");var l=n(e,i(e)),p=n(t,i(t)),m=i(a(l,o(u(l,p),(function(e){return s(e)}))));return c(m)?m:Number.NaN}})),Bd=\"multinomial\",kd=Se(Bd,[\"typed\",\"add\",\"divide\",\"multiply\",\"factorial\",\"isInteger\",\"isPositive\"],(function(e){var t=e.typed,r=e.add,n=e.divide,i=e.multiply,a=e.factorial,o=e.isInteger,u=e.isPositive;return t(Bd,{\"Array | Matrix\":function(e){var t=0,s=1;return Vn(e,(function(e){if(!o(e)||!u(e))throw new TypeError(\"Positive integer value expected in function multinomial\");t=r(t,e),s=i(s,a(e))})),n(a(t),s)}})})),Id=\"permutations\",zd=Se(Id,[\"typed\",\"factorial\"],(function(e){var t=e.typed,r=e.factorial;return t(Id,{\"number | BigNumber\":r,\"number, number\":function(e,t){if(!V(e)||e<0)throw new TypeError(\"Positive integer value expected in function permutations\");if(!V(t)||t<0)throw new TypeError(\"Positive integer value expected in function permutations\");if(t>e)throw new TypeError(\"second argument k must be less than or equal to first argument n\");return ld(e-t+1,e)},\"BigNumber, BigNumber\":function(e,t){var r,n;if(!Rd(e)||!Rd(t))throw new TypeError(\"Positive integer value expected in function permutations\");if(t.gt(e))throw new TypeError(\"second argument k must be less than or equal to first argument n\");for(r=e.mul(0).add(1),n=e.minus(t).plus(1);n.lte(e);n=n.plus(1))r=r.times(n);return r}})}));function Rd(e){return e.isInteger()&&e.gte(0)}r(9089);var qd=r(7391),jd=qd(Date.now());function Pd(e){var t,r;return t=null===(r=e)?jd:qd(String(r)),function(){return t()}}var Ld=\"pickRandom\",Ud=Se(Ld,[\"typed\",\"config\",\"?on\"],(function(e){var t=e.typed,r=e.config,n=e.on,a=Pd(r.randomSeed);return n&&n(\"config\",(function(e,t){e.randomSeed!==t.randomSeed&&(a=Pd(e.randomSeed))})),t(Ld,{\"Array | Matrix\":function(e){return o(e,{})},\"Array | Matrix, Object\":function(e,t){return o(e,t)},\"Array | Matrix, number\":function(e,t){return o(e,{number:t})},\"Array | Matrix, Array | Matrix\":function(e,t){return o(e,{weights:t})},\"Array | Matrix, Array | Matrix, number\":function(e,t,r){return o(e,{number:r,weights:t})},\"Array | Matrix, number, Array | Matrix\":function(e,t,r){return o(e,{number:t,weights:r})}});function o(e,t){var r=t.number,n=t.weights,o=t.elementWise,u=void 0===o||o,s=void 0===r;s&&(r=1);var c=l(e)?e.create:l(n)?n.create:null;e=e.valueOf(),n&&(n=n.valueOf()),!0===u&&(e=En(e),n=En(n));var f=0;if(void 0!==n){if(n.length!==e.length)throw new Error(\"Weights must have the same length as possibles\");for(var p=0,m=n.length;p1)for(var n=0,i=e.shift();nv)return m[d][v];for(var y=0;y<=d;++y)if(m[y]||(m[y]=[h(0===y?1:0)]),0!==y)for(var g=m[y],x=m[y-1],b=g.length;b<=y&&b<=v;++b)g[b]=b===y?1:r(n(h(b),x[b]),x[b-1]);return m[d][v]}})})),Jd=\"bellNumbers\",Xd=Se(Jd,[\"typed\",\"addScalar\",\"isNegative\",\"isInteger\",\"stirlingS2\"],(function(e){var t=e.typed,r=e.addScalar,n=e.isNegative,i=e.isInteger,a=e.stirlingS2;return t(Jd,{\"number | BigNumber\":function(e){if(!i(e)||n(e))throw new TypeError(\"Non-negative integer value expected in function bellNumbers\");for(var t=0,o=0;o<=e;o++)t=r(t,a(e,o));return t}})})),Qd=\"catalan\",Kd=Se(Qd,[\"typed\",\"addScalar\",\"divideScalar\",\"multiplyScalar\",\"combinations\",\"isNegative\",\"isInteger\"],(function(e){var t=e.typed,r=e.addScalar,n=e.divideScalar,i=e.multiplyScalar,a=e.combinations,o=e.isNegative,u=e.isInteger;return t(Qd,{\"number | BigNumber\":function(e){if(!u(e)||o(e))throw new TypeError(\"Non-negative integer value expected in function catalan\");return n(a(i(e,2),e),r(e,1))}})})),ev=\"composition\",tv=Se(ev,[\"typed\",\"addScalar\",\"combinations\",\"isNegative\",\"isPositive\",\"isInteger\",\"larger\"],(function(e){var t=e.typed,r=e.addScalar,n=e.combinations,i=e.isPositive,a=(e.isNegative,e.isInteger),o=e.larger;return t(ev,{\"number | BigNumber, number | BigNumber\":function(e,t){if(!(a(e)&&i(e)&&a(t)&&i(t)))throw new TypeError(\"Positive integer value expected in function composition\");if(o(t,e))throw new TypeError(\"k must be less than or equal to n in function composition\");return n(r(e,-1),r(t,-1))}})})),rv=\"leafCount\",nv=Se(rv,[\"parse\",\"typed\"],(function(e){function t(e){var r=0;return e.forEach((function(e){r+=t(e)})),r||1}return e.parse,(0,e.typed)(rv,{Node:function(e){return t(e)}})}));function iv(e){return T(e)||q(e)&&e.isUnary()&&T(e.args[0])}function av(e){return!!T(e)||!(!k(e)&&!q(e)||!e.args.every(av))||!(!j(e)||!av(e.content))}function ov(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 uv(e){for(var t=1;t2&&void 0!==arguments[2]?arguments[2]:u,n=o;if(\"string\"==typeof e?n=e:q(e)?n=e.fn.toString():k(e)?n=e.name:j(e)&&(n=\"paren\"),Ae(r,n)){var i=r[n];if(Ae(i,t))return i[t];if(Ae(u,n))return u[n][t]}if(Ae(r,o)){var a=r[o];return Ae(a,t)?a[t]:u[o][t]}if(Ae(u,n)){var s=u[n];if(Ae(s,t))return s[t]}return u[o][t]}function c(e){return s(e,\"associative\",arguments.length>1&&void 0!==arguments[1]?arguments[1]:u)}function f(e,t){var r,n=[];return c(e,t)?(r=e.op,function e(t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:u)},isAssociative:c,mergeContext:function(e,t){var r=uv({},e);for(var n in t)Ae(e,n)?r[n]=uv(uv({},t[n]),e[n]):r[n]=t[n];return r},flatten:function e(t,r){if(!t.args||0===t.args.length)return t;t.args=f(t,r);for(var n=0;n2&&c(t,r)){for(var o=t.args.pop();t.args.length>0;)o=n([t.args.pop(),o]);t.args=o.args}}},unflattenl:function e(t,r){if(t.args&&0!==t.args.length){for(var n=l(t),i=t.args.length,a=0;a2&&c(t,r)){for(var o=t.args.shift();t.args.length>0;)o=n([o,t.args.shift()]);t.args=o.args}}},defaultContext:u,realContext:{divide:{total:a},log:{total:a}},positiveContext:{subtract:{total:a},abs:{trivial:i},log:{total:i}}}})),cv=Se(\"simplify\",[\"config\",\"typed\",\"parse\",\"add\",\"subtract\",\"multiply\",\"divide\",\"pow\",\"isZero\",\"equal\",\"resolve\",\"simplifyConstant\",\"simplifyCore\",\"?fraction\",\"?bignumber\",\"mathWithTransform\",\"matrix\",\"AccessorNode\",\"ArrayNode\",\"ConstantNode\",\"FunctionNode\",\"IndexNode\",\"ObjectNode\",\"OperatorNode\",\"ParenthesisNode\",\"SymbolNode\"],(function(e){e.config;var r=e.typed,n=e.parse,i=(e.add,e.subtract,e.multiply,e.divide,e.pow,e.isZero,e.equal),a=e.resolve,o=e.simplifyConstant,u=e.simplifyCore,s=(e.fraction,e.bignumber,e.mathWithTransform,e.matrix,e.AccessorNode),c=e.ArrayNode,f=e.ConstantNode,l=e.FunctionNode,p=e.IndexNode,m=e.ObjectNode,h=e.OperatorNode,d=e.ParenthesisNode,v=e.SymbolNode,y=sv({FunctionNode:l,OperatorNode:h,SymbolNode:v}),g=y.hasProperty,x=y.isCommutative,b=y.isAssociative,w=y.mergeContext,D=y.flatten,N=y.unflattenr,E=y.unflattenl,A=y.createMakeNodeFunction,S=y.defaultContext,C=y.realContext,M=y.positiveContext;r.addConversion({from:\"Object\",to:\"Map\",convert:Ye});var F=r(\"simplify\",{Node:z,\"Node, Map\":function(e,t){return z(e,!1,t)},\"Node, Map, Object\":function(e,t,r){return z(e,!1,t,r)},\"Node, Array\":z,\"Node, Array, Map\":z,\"Node, Array, Map, Object\":z});function O(e){return e.transform((function(e,t,r){return j(e)?O(e.content):e}))}r.removeConversion({from:\"Object\",to:\"Map\",convert:Ye}),F.defaultContext=S,F.realContext=C,F.positiveContext=M;var _={true:!0,false:!0,e:!0,i:!0,Infinity:!0,LN2:!0,LN10:!0,LOG2E:!0,LOG10E:!0,NaN:!0,phi:!0,pi:!0,SQRT1_2:!0,SQRT2:!0,tau:!0};function B(e,t){var r={};if(e.s){var i=e.s.split(\"->\");if(2!==i.length)throw SyntaxError(\"Could not parse rule: \"+e.s);r.l=i[0],r.r=i[1]}else r.l=e.l,r.r=e.r;r.l=O(n(r.l)),r.r=O(n(r.r));for(var a=0,o=[\"imposeContext\",\"repeat\",\"assuming\"];a n+-n1\",assuming:{subtract:{total:!0}}},{s:\"n-n -> 0\",assuming:{subtract:{total:!1}}},{s:\"-(cl*v) -> v * (-cl)\",assuming:{multiply:{commutative:!0},subtract:{total:!0}}},{s:\"-(cl*v) -> (-cl) * v\",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{s:\"-(v*cl) -> v * (-cl)\",assuming:{multiply:{commutative:!1},subtract:{total:!0}}},{l:\"-(n1/n2)\",r:\"-n1/n2\"},{l:\"-v\",r:\"v * (-1)\"},{l:\"(n1 + n2)*(-1)\",r:\"n1*(-1) + n2*(-1)\",repeat:!0},{l:\"n/n1^n2\",r:\"n*n1^-n2\"},{l:\"n/n1\",r:\"n*n1^-1\"},{s:\"(n1*n2)^n3 -> n1^n3 * n2^n3\",assuming:{multiply:{commutative:!0}}},{s:\"(n1*n2)^(-1) -> n2^(-1) * n1^(-1)\",assuming:{multiply:{commutative:!1}}},{s:\"(n ^ n1) ^ n2 -> n ^ (n1 * n2)\",assuming:{divide:{total:!0}}},{l:\" vd * ( vd * n1 + n2)\",r:\"vd^2 * n1 + vd * n2\"},{s:\" vd * (vd^n4 * n1 + n2) -> vd^(1+n4) * n1 + vd * n2\",assuming:{divide:{total:!0}}},{s:\"vd^n3 * ( vd * n1 + n2) -> vd^(n3+1) * n1 + vd^n3 * n2\",assuming:{divide:{total:!0}}},{s:\"vd^n3 * (vd^n4 * n1 + n2) -> vd^(n3+n4) * n1 + vd^n3 * n2\",assuming:{divide:{total:!0}}},{l:\"n*n\",r:\"n^2\"},{s:\"n * n^n1 -> n^(n1+1)\",assuming:{divide:{total:!0}}},{s:\"n^n1 * n^n2 -> n^(n1+n2)\",assuming:{divide:{total:!0}}},o,{s:\"n+n -> 2*n\",assuming:{add:{total:!0}}},{l:\"n+-n\",r:\"0\"},{l:\"vd*n + vd\",r:\"vd*(n+1)\"},{l:\"n3*n1 + n3*n2\",r:\"n3*(n1+n2)\"},{l:\"n3^(-n4)*n1 + n3 * n2\",r:\"n3^(-n4)*(n1 + n3^(n4+1) *n2)\"},{l:\"n3^(-n4)*n1 + n3^n5 * n2\",r:\"n3^(-n4)*(n1 + n3^(n4+n5)*n2)\"},{s:\"n*vd + vd -> (n+1)*vd\",assuming:{multiply:{commutative:!1}}},{s:\"vd + n*vd -> (1+n)*vd\",assuming:{multiply:{commutative:!1}}},{s:\"n1*n3 + n2*n3 -> (n1+n2)*n3\",assuming:{multiply:{commutative:!1}}},{s:\"n^n1 * n -> n^(n1+1)\",assuming:{divide:{total:!0},multiply:{commutative:!1}}},{s:\"n1*n3^(-n4) + n2 * n3 -> (n1 + n2*n3^(n4 + 1))*n3^(-n4)\",assuming:{multiply:{commutative:!1}}},{s:\"n1*n3^(-n4) + n2 * n3^n5 -> (n1 + n2*n3^(n4 + n5))*n3^(-n4)\",assuming:{multiply:{commutative:!1}}},{l:\"n*cd + cd\",r:\"(n+1)*cd\"},{s:\"cd*n + cd -> cd*(n+1)\",assuming:{multiply:{commutative:!1}}},{s:\"cd + cd*n -> cd*(1+n)\",assuming:{multiply:{commutative:!1}}},o,{s:\"(-n)*n1 -> -(n*n1)\",assuming:{subtract:{total:!0}}},{s:\"n1*(-n) -> -(n1*n)\",assuming:{subtract:{total:!0},multiply:{commutative:!1}}},{s:\"ce+ve -> ve+ce\",assuming:{add:{commutative:!0}},imposeContext:{add:{commutative:!1}}},{s:\"vd*cd -> cd*vd\",assuming:{multiply:{commutative:!0}},imposeContext:{multiply:{commutative:!1}}},{l:\"n+-n1\",r:\"n-n1\"},{l:\"n+-(n1)\",r:\"n-(n1)\"},{s:\"n*(n1^-1) -> n/n1\",assuming:{multiply:{commutative:!0}}},{s:\"n*n1^-n2 -> n/n1^n2\",assuming:{multiply:{commutative:!0}}},{s:\"n^-1 -> 1/n\",assuming:{multiply:{commutative:!0}}},{l:\"n^1\",r:\"n\"},{s:\"n*(n1/n2) -> (n*n1)/n2\",assuming:{multiply:{associative:!0}}},{s:\"n-(n1+n2) -> n-n1-n2\",assuming:{addition:{associative:!0,commutative:!0}}},{l:\"1*n\",r:\"n\",imposeContext:{multiply:{commutative:!0}}},{s:\"n1/(n2/n3) -> (n1*n3)/n2\",assuming:{multiply:{associative:!0}}},{l:\"n1/(-n2)\",r:\"-n1/n2\"}];var k=0;function I(){return new v(\"_p\"+k++)}function z(e,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:We(),i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=i.consoleDebug;r=function(e,r){for(var n=[],i=0;i \").concat(r[l].r.toString()))),o){var m=u.toString({parenthesis:\"all\"});m!==f&&(console.log(\"Applying\",p,\"produced\",m),f=m)}E(u,i.context)}c=u.toString({parenthesis:\"all\"})}return u}function R(e,t,r){var n=e;if(e)for(var i=0;i=2&&2===e.args.length){for(var o=function(e,t){var r,n,i=[],a=A(e);if(x(e,t))for(var o=0;o1&&(s=a(e.args.slice(0,u))),r=1===(n=e.args.slice(u)).length?n[0]:a(n),i.push(a([s,r]))}return i}(t,r),u=[],s=0;s2)throw Error(\"Unexpected non-binary associative function: \"+e.toString());return[]}for(var p=[],m=0;m2)throw new Error(\"permuting >2 commutative non-associative rule arguments not yet implemented\");var y=$(e.args[0],t.args[1],r);if(0===y.length)return[];var g=$(e.args[1],t.args[0],r);if(0===g.length)return[];p=[y,g]}a=function(e){if(0===e.length)return e;for(var t=e.reduce(L),r=[],n={},i=0;i=\"a\"&&e.name[1]<=\"z\"?e.name.substring(0,2):e.name[0]){case\"n\":case\"_p\":a[0].placeholders[e.name]=t;break;case\"c\":case\"cl\":if(!T(t))return[];a[0].placeholders[e.name]=t;break;case\"v\":if(T(t))return[];a[0].placeholders[e.name]=t;break;case\"vl\":if(!U(t))return[];a[0].placeholders[e.name]=t;break;case\"cd\":if(!iv(t))return[];a[0].placeholders[e.name]=t;break;case\"vd\":if(iv(t))return[];a[0].placeholders[e.name]=t;break;case\"ce\":if(!av(t))return[];a[0].placeholders[e.name]=t;break;case\"ve\":if(av(t))return[];a[0].placeholders[e.name]=t;break;default:throw new Error(\"Invalid symbol in rule: \"+e.name)}}else{if(!(e instanceof f))return[];if(!i(e.value,t.value))return[]}return a}function H(e,t){if(e instanceof f&&t instanceof f){if(!i(e.value,t.value))return!1}else if(e instanceof v&&t instanceof v){if(e.name!==t.name)return!1}else{if(!(e instanceof h&&t instanceof h||e instanceof l&&t instanceof l))return!1;if(e instanceof h){if(e.op!==t.op||e.fn!==t.fn)return!1}else if(e instanceof l&&e.name!==t.name)return!1;if(e.args.length!==t.args.length)return!1;for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}function lv(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r1?(v=B(y,E,g,r),S.unshift(v),v=B(y,S,g,r)):v=B(y,s,g,r)}else v=B(y,s,g,r);else v=B(y,s=e.args.map((function(e){return k(e,r)})),g,r);return v;case\"ParenthesisNode\":return k(e.content,r);case\"AccessorNode\":return function(e,t,r){if(!I(t))return new c(M(e),M(t));if(C(e)||l(e)){for(var n=Array.from(t.dimensions);n.length>0;)if(T(n[0])&&\"string\"!=typeof n[0].value){var i=O(n.shift().value,r);C(e)?e=e.items[i-1]:(e=e.valueOf()[i-1])instanceof Array&&(e=a(e))}else{if(!(n.length>1&&T(n[1])&&\"string\"!=typeof n[1].value))break;var o,u=O(n[1].value,r),s=[],m=C(e)?e.items:e.valueOf(),d=fv(m);try{for(d.s();!(o=d.n()).done;){var v=o.value;if(C(v))s.push(v.items[u-1]);else{if(!l(e))break;s.push(v[u-1])}}}catch(e){d.e(e)}finally{d.f()}if(s.length!==m.length)break;e=C(e)?new f(s):a(s),n.splice(1,1)}return n.length===t.dimensions.length?new c(M(e),t):n.length>0?(t=new h(n),new c(M(e),t)):e}if(R(e)&&1===t.dimensions.length&&T(t.dimensions[0])){var y=t.dimensions[0].value;return y in e.properties?e.properties[y]:new p}return new c(M(e),t)}(k(e.object,r),k(e.index,r),r);case\"ArrayNode\":var _=e.items.map((function(e){return k(e,r)}));return _.some(z)?new f(_.map(M)):a(_);case\"IndexNode\":return new h(e.dimensions.map((function(e){return N(e,r)})));case\"ObjectNode\":var j={};for(var P in e.properties)j[P]=N(e.properties[P],r);return new d(j);default:throw new Error(\"Unimplemented node type in simplifyConstant: \".concat(e.type))}}return N})),mv=\"simplifyCore\",hv=Se(mv,[\"typed\",\"parse\",\"equal\",\"isZero\",\"add\",\"subtract\",\"multiply\",\"divide\",\"pow\",\"AccessorNode\",\"ArrayNode\",\"ConstantNode\",\"FunctionNode\",\"IndexNode\",\"ObjectNode\",\"OperatorNode\",\"ParenthesisNode\",\"SymbolNode\"],(function(e){var t=e.typed,r=(e.parse,e.equal),n=e.isZero,i=(e.add,e.subtract,e.multiply,e.divide,e.pow,e.AccessorNode),a=e.ArrayNode,o=e.ConstantNode,u=e.FunctionNode,s=e.IndexNode,c=e.ObjectNode,f=e.OperatorNode,l=(e.ParenthesisNode,e.SymbolNode),p=new o(0),m=new o(1),h=new o(!0),d=new o(!1);function v(e){return q(e)&&[\"and\",\"not\",\"or\"].includes(e.op)}var y=sv({FunctionNode:u,OperatorNode:f,SymbolNode:l}),g=y.hasProperty,x=y.isCommutative;function b(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=t?t.context:void 0;if(g(e,\"trivial\",o)){if(k(e)&&1===e.args.length)return b(e.args[0],t);var l=!1,y=0;if(e.forEach((function(e){1==++y&&(l=b(e,t))})),1===y)return l}var w=e;if(k(w)){var D=function(e){var t,r=\"OperatorNode:\"+e,n=function(e,t){var r=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\"string\"==typeof e)return Tp(e,t);var r=Object.prototype.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)?Tp(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){r&&(e=r);var n=0,i=function(){};return{s:i,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:i}}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 a,o=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){u=!0,a=e},f:function(){try{o||null==r.return||r.return()}finally{if(u)throw a}}}}(_p);try{for(n.s();!(t=n.n()).done;){var i=t.value;if(r in i)return i[r].op}}catch(e){n.e(e)}finally{n.f()}return null}(w.name);if(!D)return new u(b(w.fn),w.args.map((function(e){return b(e,t)})));if(w.args.length>2&&g(w,\"associative\",o))for(;w.args.length>2;){var N=w.args.pop(),E=w.args.pop();w.args.push(new f(D,w.name,[N,E]))}w=new f(D,w.name,w.args)}if(q(w)&&w.isUnary()){var A=b(w.args[0],t);if(\"~\"===w.op&&q(A)&&A.isUnary()&&\"~\"===A.op)return A.args[0];if(\"not\"===w.op&&q(A)&&A.isUnary()&&\"not\"===A.op&&v(A.args[0]))return A.args[0];var M=!0;if(\"-\"===w.op&&q(A)&&(A.isBinary()&&\"subtract\"===A.fn&&(w=new f(\"-\",\"subtract\",[A.args[1],A.args[0]]),M=!1),A.isUnary()&&\"-\"===A.op))return A.args[0];if(M)return new f(w.op,w.fn,[A])}if(q(w)&&w.isBinary()){var F=b(w.args[0],t),O=b(w.args[1],t);if(\"+\"===w.op){if(T(F)&&n(F.value))return O;if(T(O)&&n(O.value))return F;q(O)&&O.isUnary()&&\"-\"===O.op&&(O=O.args[0],w=new f(\"-\",\"subtract\",[F,O]))}if(\"-\"===w.op)return q(O)&&O.isUnary()&&\"-\"===O.op?b(new f(\"+\",\"add\",[F,O.args[0]]),t):T(F)&&n(F.value)?b(new f(\"-\",\"unaryMinus\",[O])):T(O)&&n(O.value)?F:new f(w.op,w.fn,[F,O]);if(\"*\"===w.op){if(T(F)){if(n(F.value))return p;if(r(F.value,1))return O}if(T(O)){if(n(O.value))return p;if(r(O.value,1))return F;if(x(w,o))return new f(w.op,w.fn,[O,F],w.implicit)}return new f(w.op,w.fn,[F,O],w.implicit)}if(\"/\"===w.op)return T(F)&&n(F.value)?p:T(O)&&r(O.value,1)?F:new f(w.op,w.fn,[F,O]);if(\"^\"===w.op&&T(O)){if(n(O.value))return m;if(r(O.value,1))return F}if(\"and\"===w.op){if(T(F)){if(!F.value)return d;if(v(O))return O;if(T(O))return O.value?h:d}if(T(O)){if(!O.value)return d;if(v(F))return F}}if(\"or\"===w.op){if(T(F)){if(F.value)return h;if(v(O))return O}if(T(O)){if(O.value)return h;if(v(F))return F}}return new f(w.op,w.fn,[F,O])}if(q(w))return new f(w.op,w.fn,w.args.map((function(e){return b(e,t)})));if(C(w))return new a(w.items.map((function(e){return b(e,t)})));if(S(w))return new i(b(w.object,t),b(w.index,t));if(I(w))return new s(w.dimensions.map((function(e){return b(e,t)})));if(R(w)){var _={};for(var B in w.properties)_[B]=b(w.properties[B],t);return new c(_)}return w}return t(mv,{Node:b,\"Node,Object\":b})})),dv=Se(\"resolve\",[\"typed\",\"parse\",\"ConstantNode\",\"FunctionNode\",\"OperatorNode\",\"ParenthesisNode\"],(function(e){var t=e.typed,r=e.parse,n=e.ConstantNode,i=e.FunctionNode,a=e.OperatorNode,o=e.ParenthesisNode;function u(e,t){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Set;if(!t)return e;if(U(e)){if(s.has(e.name)){var c=Array.from(s).join(\", \");throw new ReferenceError(\"recursive loop of variable definitions among {\".concat(c,\"}\"))}var f=t.get(e.name);if(z(f)){var l=new Set(s);return l.add(e.name),u(f,t,l)}return\"number\"==typeof f?r(String(f)):void 0!==f?new n(f):e}if(q(e)){var p=e.args.map((function(e){return u(e,t,s)}));return new a(e.op,e.fn,p,e.implicit)}if(j(e))return new o(u(e.content,t,s));if(k(e)){var m=e.args.map((function(e){return u(e,t,s)}));return new i(e.name,m)}return e.map((function(e){return u(e,t,s)}))}return t(\"resolve\",{Node:u,\"Node, Map | null | undefined\":u,\"Node, Object\":function(e,t){return u(e,Ye(t))},\"Array | Matrix\":t.referToSelf((function(e){return function(t){return t.map((function(t){return e(t)}))}})),\"Array | Matrix, null | undefined\":t.referToSelf((function(e){return function(t){return t.map((function(t){return e(t)}))}})),\"Array, Object\":t.referTo(\"Array,Map\",(function(e){return function(t,r){return e(t,Ye(r))}})),\"Matrix, Object\":t.referTo(\"Matrix,Map\",(function(e){return function(t,r){return e(t,Ye(r))}})),\"Array | Matrix, Map\":t.referToSelf((function(e){return function(t,r){return t.map((function(t){return e(t,r)}))}}))})})),vv=\"symbolicEqual\",yv=Se(vv,[\"parse\",\"simplify\",\"typed\",\"OperatorNode\"],(function(e){e.parse;var t=e.simplify,r=e.typed,n=e.OperatorNode;function i(e,r){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=new n(\"-\",\"subtract\",[e,r]),o=t(a,{},i);return T(o)&&!o.value}return r(vv,{\"Node, Node\":i,\"Node, Node, Object\":i})})),gv=\"derivative\",xv=Se(gv,[\"typed\",\"config\",\"parse\",\"simplify\",\"equal\",\"isZero\",\"numeric\",\"ConstantNode\",\"FunctionNode\",\"OperatorNode\",\"ParenthesisNode\",\"SymbolNode\"],(function(e){var t=e.typed,r=e.config,n=e.parse,i=e.simplify,a=e.equal,o=e.isZero,u=e.numeric,s=e.ConstantNode,c=e.FunctionNode,f=e.OperatorNode,l=e.ParenthesisNode,p=e.SymbolNode;function m(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{simplify:!0},n={};v(n,e,t.name);var a=y(e,n);return r.simplify?i(a):a}t.addConversion({from:\"identifier\",to:\"SymbolNode\",convert:n});var h=t(gv,{\"Node, SymbolNode\":m,\"Node, SymbolNode, Object\":m});t.removeConversion({from:\"identifier\",to:\"SymbolNode\",convert:n}),h._simplify=!0,h.toTex=function(e){return d.apply(null,e.args)};var d=t(\"_derivTex\",{\"Node, SymbolNode\":function(e,t){return T(e)&&\"string\"===H(e.value)?d(n(e.value).toString(),t.toString(),1):d(e.toTex(),t.toString(),1)},\"Node, ConstantNode\":function(e,t){if(\"string\"===H(t.value))return d(e,n(t.value));throw new Error(\"The second parameter to 'derivative' is a non-string constant\")},\"Node, SymbolNode, ConstantNode\":function(e,t,r){return d(e.toString(),t.name,r.value)},\"string, string, number\":function(e,t,r){return(1===r?\"{d\\\\over d\"+t+\"}\":\"{d^{\"+r+\"}\\\\over d\"+t+\"^{\"+r+\"}}\")+\"\\\\left[\".concat(e,\"\\\\right]\")}}),v=t(\"constTag\",{\"Object, ConstantNode, string\":function(e,t){return e[t]=!0,!0},\"Object, SymbolNode, string\":function(e,t,r){return t.name!==r&&(e[t]=!0,!0)},\"Object, ParenthesisNode, string\":function(e,t,r){return v(e,t.content,r)},\"Object, FunctionAssignmentNode, string\":function(e,t,r){return t.params.includes(r)?v(e,t.expr,r):(e[t]=!0,!0)},\"Object, FunctionNode | OperatorNode, string\":function(e,t,r){if(t.args.length>0){for(var n=v(e,t.args[0],r),i=1;i0){var n=e.args.filter((function(e){return void 0===t[e]})),i=1===n.length?n[0]:new f(\"*\",\"multiply\",n),u=r.concat(y(i,t));return new f(\"*\",\"multiply\",u)}return new f(\"+\",\"add\",e.args.map((function(r){return new f(\"*\",\"multiply\",e.args.map((function(e){return e===r?y(e,t):e.clone()})))})))}if(\"/\"===e.op&&e.isBinary()){var s=e.args[0],l=e.args[1];return void 0!==t[l]?new f(\"/\",\"divide\",[y(s,t),l]):void 0!==t[s]?new f(\"*\",\"multiply\",[new f(\"-\",\"unaryMinus\",[s]),new f(\"/\",\"divide\",[y(l,t),new f(\"^\",\"pow\",[l.clone(),g(2)])])]):new f(\"/\",\"divide\",[new f(\"-\",\"subtract\",[new f(\"*\",\"multiply\",[y(s,t),l.clone()]),new f(\"*\",\"multiply\",[s.clone(),y(l,t)])]),new f(\"^\",\"pow\",[l.clone(),g(2)])])}if(\"^\"===e.op&&e.isBinary()){var p=e.args[0],m=e.args[1];if(void 0!==t[p])return T(p)&&(o(p.value)||a(p.value,1))?g(0):new f(\"*\",\"multiply\",[e,new f(\"*\",\"multiply\",[new c(\"log\",[p.clone()]),y(m.clone(),t)])]);if(void 0!==t[m]){if(T(m)){if(o(m.value))return g(0);if(a(m.value,1))return y(p,t)}var h=new f(\"^\",\"pow\",[p.clone(),new f(\"-\",\"subtract\",[m,g(1)])]);return new f(\"*\",\"multiply\",[m.clone(),new f(\"*\",\"multiply\",[y(p,t),h])])}return new f(\"*\",\"multiply\",[new f(\"^\",\"pow\",[p.clone(),m.clone()]),new f(\"+\",\"add\",[new f(\"*\",\"multiply\",[y(p,t),new f(\"/\",\"divide\",[m.clone(),p.clone()])]),new f(\"*\",\"multiply\",[y(m,t),new c(\"log\",[p.clone()])])])])}throw new Error('Cannot process operator \"'+e.op+'\" in derivative: the operator is not supported, undefined, or the number of arguments passed to it are not supported')}});function g(e,t){return new s(u(e,t||r.number))}return h})),bv=\"rationalize\",wv=Se(bv,[\"config\",\"typed\",\"equal\",\"isZero\",\"add\",\"subtract\",\"multiply\",\"divide\",\"pow\",\"parse\",\"simplifyConstant\",\"simplifyCore\",\"simplify\",\"?bignumber\",\"?fraction\",\"mathWithTransform\",\"matrix\",\"AccessorNode\",\"ArrayNode\",\"ConstantNode\",\"FunctionNode\",\"IndexNode\",\"ObjectNode\",\"OperatorNode\",\"SymbolNode\",\"ParenthesisNode\"],(function(e){e.config;var t=e.typed,r=(e.equal,e.isZero,e.add,e.subtract,e.multiply,e.divide,e.pow,e.parse,e.simplifyConstant),n=e.simplifyCore,i=e.simplify,a=(e.fraction,e.bignumber,e.mathWithTransform,e.matrix,e.AccessorNode,e.ArrayNode,e.ConstantNode),o=(e.FunctionNode,e.IndexNode,e.ObjectNode,e.OperatorNode),u=e.SymbolNode;function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=function(){var e=[n,{l:\"n+n\",r:\"2*n\"},{l:\"n+-n\",r:\"0\"},r,{l:\"n*(n1^-1)\",r:\"n/n1\"},{l:\"n*n1^-n2\",r:\"n/n1^n2\"},{l:\"n1^-1\",r:\"1/n1\"},{l:\"n*(n1/n2)\",r:\"(n*n1)/n2\"},{l:\"1*n\",r:\"n\"}],t=[{l:\"(-n1)/(-n2)\",r:\"n1/n2\"},{l:\"(-n1)*(-n2)\",r:\"n1*n2\"},{l:\"n1--n2\",r:\"n1+n2\"},{l:\"n1-n2\",r:\"n1+(-n2)\"},{l:\"(n1+n2)*n3\",r:\"(n1*n3 + n2*n3)\"},{l:\"n1*(n2+n3)\",r:\"(n1*n2+n1*n3)\"},{l:\"c1*n + c2*n\",r:\"(c1+c2)*n\"},{l:\"c1*n + n\",r:\"(c1+1)*n\"},{l:\"c1*n - c2*n\",r:\"(c1-c2)*n\"},{l:\"c1*n - n\",r:\"(c1-1)*n\"},{l:\"v/c\",r:\"(1/c)*v\"},{l:\"v/-c\",r:\"-(1/c)*v\"},{l:\"-v*-c\",r:\"c*v\"},{l:\"-v*c\",r:\"-c*v\"},{l:\"v*-c\",r:\"-c*v\"},{l:\"v*c\",r:\"c*v\"},{l:\"-(-n1*n2)\",r:\"(n1*n2)\"},{l:\"-(n1*n2)\",r:\"(-n1*n2)\"},{l:\"-(-n1+n2)\",r:\"(n1-n2)\"},{l:\"-(n1+n2)\",r:\"(-n1-n2)\"},{l:\"(n1^n2)^n3\",r:\"(n1^(n2*n3))\"},{l:\"-(-n1/n2)\",r:\"(n1/n2)\"},{l:\"-(n1/n2)\",r:\"(-n1/n2)\"}],i=[{l:\"(n1/(n2/n3))\",r:\"((n1*n3)/n2)\"},{l:\"(n1/n2/n3)\",r:\"(n1/(n2*n3))\"}],a={};return a.firstRules=e.concat(t,i),a.distrDivRules=[{l:\"(n1/n2 + n3/n4)\",r:\"((n1*n4 + n3*n2)/(n2*n4))\"},{l:\"(n1/n2 + n3)\",r:\"((n1 + n3*n2)/n2)\"},{l:\"(n1 + n2/n3)\",r:\"((n1*n3 + n2)/n3)\"}],a.sucDivRules=i,a.firstRulesAgain=e.concat(t),a.finalRules=[n,{l:\"n*-n\",r:\"-n^2\"},{l:\"n*n\",r:\"n^2\"},r,{l:\"n*-n^n1\",r:\"-n^(n1+1)\"},{l:\"n*n^n1\",r:\"n^(n1+1)\"},{l:\"n^n1*-n^n2\",r:\"-n^(n1+n2)\"},{l:\"n^n1*n^n2\",r:\"n^(n1+n2)\"},{l:\"n^n1*-n\",r:\"-n^(n1+1)\"},{l:\"n^n1*n\",r:\"n^(n1+1)\"},{l:\"n^n1/-n\",r:\"-n^(n1-1)\"},{l:\"n^n1/n\",r:\"n^(n1-1)\"},{l:\"n/-n^n1\",r:\"-n^(1-n1)\"},{l:\"n/n^n1\",r:\"n^(1-n1)\"},{l:\"n^n1/-n^n2\",r:\"n^(n1-n2)\"},{l:\"n^n1/n^n2\",r:\"n^(n1-n2)\"},{l:\"n1+(-n2*n3)\",r:\"n1-n2*n3\"},{l:\"v*(-c)\",r:\"-c*v\"},{l:\"n1+-n2\",r:\"n1-n2\"},{l:\"v*c\",r:\"c*v\"},{l:\"(n1^n2)^n3\",r:\"(n1^(n2*n3))\"}],a}(),u=function(e,t,r,n){var a=[],o=i(e,n,t,{exactFractions:!1}),u=\"+-*\"+((r=!!r)?\"/\":\"\");!function e(t){var r=t.type;if(\"FunctionNode\"===r)throw new Error(\"There is an unsolved function call\");if(\"OperatorNode\"===r)if(\"^\"===t.op){if(\"ConstantNode\"!==t.args[1].type||!V(parseFloat(t.args[1].value)))throw new Error(\"There is a non-integer exponent\");e(t.args[0])}else{if(!u.includes(t.op))throw new Error(\"Operator \"+t.op+\" invalid in polynomial expression\");for(var n=0;n=1){var m,h;e=c(e);var d,v=!0,y=!1;for(e=i(e,o.firstRules,{},l);h=v?o.distrDivRules:o.sucDivRules,v=!v,(d=(e=i(e,h,{},p)).toString())!==m;)y=!0,m=d;y&&(e=i(e,o.firstRulesAgain,{},l)),e=i(e,o.finalRules,{},l)}var g=[],x={};return\"OperatorNode\"===e.type&&e.isBinary()&&\"/\"===e.op?(1===s&&(e.args[0]=f(e.args[0],g),e.args[1]=f(e.args[1])),a&&(x.numerator=e.args[0],x.denominator=e.args[1])):(1===s&&(e=f(e,g)),a&&(x.numerator=e,x.denominator=null)),a?(x.coefficients=g,x.variables=u.variables,x.expression=e,x):e}return e.ParenthesisNode,t(bv,{Node:s,\"Node, boolean\":function(e,t){return s(e,{},t)},\"Node, Object\":s,\"Node, Object, boolean\":s});function c(e,t,r){var n=e.type,i=arguments.length>1;if(\"OperatorNode\"===n&&e.isBinary()){var u,s=!1;if(\"^\"===e.op&&(\"ParenthesisNode\"!==e.args[0].type&&\"OperatorNode\"!==e.args[0].type||\"ConstantNode\"!==e.args[1].type||(s=(u=parseFloat(e.args[1].value))>=2&&V(u))),s){if(u>2){var f=e.args[0],l=new o(\"^\",\"pow\",[e.args[0].cloneDeep(),new a(u-1)]);e=new o(\"*\",\"multiply\",[f,l])}else e=new o(\"*\",\"multiply\",[e.args[0],e.args[0].cloneDeep()]);i&&(\"content\"===r?t.content=e:t.args[r]=e)}}if(\"ParenthesisNode\"===n)c(e.content,e,\"content\");else if(\"ConstantNode\"!==n&&\"SymbolNode\"!==n)for(var p=0;pr&&(t[c]=0),t[c]+=o.cte*(\"+\"===o.oper?1:-1),void(r=Math.max(c,r))}o.cte=c,\"\"===o.fire&&(t[0]+=o.cte*(\"+\"===o.oper?1:-1))}}(e,null,{cte:1,oper:\"+\",fire:\"\"});for(var i,s=!0,c=r=t.length-1;c>=0;c--)if(0!==t[c]){var f=new a(s?t[c]:Math.abs(t[c])),l=t[c]<0?\"-\":\"+\";if(c>0){var p=new u(n);if(c>1){var m=new a(c);p=new o(\"^\",\"pow\",[p,m])}f=-1===t[c]&&s?new o(\"-\",\"unaryMinus\",[p]):1===Math.abs(t[c])?p:new o(\"*\",\"multiply\",[f,p])}i=s?f:\"+\"===l?new o(\"+\",\"add\",[i,f]):new o(\"-\",\"subtract\",[i,f]),s=!1}return s?new a(0):i}})),Dv=\"zpk2tf\",Nv=Se(Dv,[\"typed\",\"add\",\"multiply\",\"Complex\",\"number\"],(function(e){var t=e.typed,r=e.add,n=e.multiply,i=e.Complex,a=e.number;return t(Dv,{\"Array,Array,number\":function(e,t,r){return o(e,t,r)},\"Array,Array\":function(e,t){return o(e,t,1)},\"Matrix,Matrix,number\":function(e,t,r){return o(e.valueOf(),t.valueOf(),r)},\"Matrix,Matrix\":function(e,t){return o(e.valueOf(),t.valueOf(),1)}});function o(e,t,r){e.some((function(e){return\"BigNumber\"===e.type}))&&(e=e.map((function(e){return a(e)}))),t.some((function(e){return\"BigNumber\"===e.type}))&&(t=t.map((function(e){return a(e)})));for(var o=[i(1,0)],s=[i(1,0)],c=0;c=0&&o-u0?0:2;else if(u&&!0===u.isSet)u=u.map((function(e){return e-1}));else if(f(u)||l(u))\"boolean\"!==r(u)&&(u=u.map((function(e){return e-1})));else if(i(u))u--;else if(a(u))u=u.toNumber()-1;else if(\"string\"!=typeof u)throw new TypeError(\"Dimension must be an Array, Matrix, number, string, or Range\");e[n]=u}var s=new t;return t.apply(s,e),s}}),{isTransformFunction:!0}),rg=Se(\"map\",[\"typed\"],(function(e){var t=e.typed;function r(e,t,r){var i,a;return e[0]&&(i=e[0].compile().evaluate(r)),e[1]&&(a=U(e[1])||B(e[1])?e[1].compile().evaluate(r):Xy(e[1],t,r)),n(i,a)}r.rawArgs=!0;var n=t(\"map\",{\"Array, function\":function(e,t){return ng(e,t,e)},\"Matrix, function\":function(e,t){return e.create(ng(e.valueOf(),t,e))}});return r}),{isTransformFunction:!0});function ng(e,t,r){return function e(n,i){return Array.isArray(n)?An(n,(function(t,r){return e(t,i.concat(r+1))})):Mu(t,n,i,r,\"map\")}(e,[])}function ig(e){if(2===e.length&&p(e[0])){var t=(e=e.slice())[1];i(t)?e[1]=t-1:a(t)&&(e[1]=t.minus(1))}return e}var ag=Se(\"max\",[\"typed\",\"config\",\"numeric\",\"larger\"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.larger,a=hf({typed:t,config:r,numeric:n,larger:i});return t(\"max\",{\"...any\":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),og=Se(\"mean\",[\"typed\",\"add\",\"divide\"],(function(e){var t=e.typed,r=e.add,n=e.divide,i=Kh({typed:t,add:r,divide:n});return t(\"mean\",{\"...any\":function(e){e=ig(e);try{return i.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),ug=Se(\"min\",[\"typed\",\"config\",\"numeric\",\"smaller\"],(function(e){var t=e.typed,r=e.config,n=e.numeric,i=e.smaller,a=df({typed:t,config:r,numeric:n,smaller:i});return t(\"min\",{\"...any\":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),sg=Se(\"range\",[\"typed\",\"config\",\"?matrix\",\"?bignumber\",\"smaller\",\"smallerEq\",\"larger\",\"largerEq\",\"add\",\"isPositive\"],(function(e){var t=e.typed,r=e.config,n=e.matrix,i=e.bignumber,a=e.smaller,o=e.smallerEq,u=e.larger,s=e.largerEq,c=e.add,f=e.isPositive,l=Xu({typed:t,config:r,matrix:n,bignumber:i,smaller:a,smallerEq:o,larger:u,largerEq:s,add:c,isPositive:f});return t(\"range\",{\"...any\":function(e){return\"boolean\"!=typeof e[e.length-1]&&e.push(!0),l.apply(null,e)}})}),{isTransformFunction:!0}),cg=Se(\"row\",[\"typed\",\"Index\",\"matrix\",\"range\"],(function(e){var t=e.typed,r=e.Index,n=e.matrix,a=e.range,o=as({typed:t,Index:r,matrix:n,range:a});return t(\"row\",{\"...any\":function(e){var t=e.length-1,r=e[t];i(r)&&(e[t]=r-1);try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),fg=Se(\"subset\",[\"typed\",\"matrix\",\"zeros\",\"add\"],(function(e){var t=e.typed,r=e.matrix,n=e.zeros,i=e.add,a=ls({typed:t,matrix:r,zeros:n,add:i});return t(\"subset\",{\"...any\":function(e){try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),lg=Se(\"concat\",[\"typed\",\"matrix\",\"isInteger\"],(function(e){var t=e.typed,r=e.matrix,n=e.isInteger,o=xu({typed:t,matrix:r,isInteger:n});return t(\"concat\",{\"...any\":function(e){var t=e.length-1,r=e[t];i(r)?e[t]=r-1:a(r)&&(e[t]=r.minus(1));try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),pg=\"diff\",mg=Se(pg,[\"typed\",\"matrix\",\"subtract\",\"number\",\"bignumber\"],(function(e){var t=e.typed,r=e.matrix,n=e.subtract,i=e.number,a=e.bignumber,o=Gu({typed:t,matrix:r,subtract:n,number:i,bignumber:a});return t(pg,{\"...any\":function(e){e=ig(e);try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),hg=Se(\"std\",[\"typed\",\"map\",\"sqrt\",\"variance\"],(function(e){var t=e.typed,r=e.map,n=e.sqrt,i=e.variance,a=sd({typed:t,map:r,sqrt:n,variance:i});return t(\"std\",{\"...any\":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),dg=Se(\"sum\",[\"typed\",\"config\",\"add\",\"numeric\"],(function(e){var t=e.typed,r=e.config,n=e.add,i=e.numeric,a=Yh({typed:t,config:r,add:n,numeric:i});return t(\"sum\",{\"...any\":function(e){e=ig(e);try{return a.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),vg=Se(\"quantileSeq\",[\"typed\",\"bignumber\",\"add\",\"subtract\",\"divide\",\"multiply\",\"partitionSelect\",\"compare\",\"isInteger\",\"smaller\",\"smallerEq\",\"larger\"],(function(e){var t=e.typed,r=e.bignumber,n=e.add,i=e.subtract,a=e.divide,o=e.multiply,u=e.partitionSelect,s=e.compare,c=e.isInteger,f=e.smaller,l=e.smallerEq,p=e.larger,m=ud({typed:t,bignumber:r,add:n,subtract:i,divide:a,multiply:o,partitionSelect:u,compare:s,isInteger:c,smaller:f,smallerEq:l,larger:p});return t(\"quantileSeq\",{\"Array | Matrix, number | BigNumber\":m,\"Array | Matrix, number | BigNumber, number\":function(e,t,r){return m(e,t,h(r))},\"Array | Matrix, number | BigNumber, boolean\":m,\"Array | Matrix, number | BigNumber, boolean, number\":function(e,t,r,n){return m(e,t,r,h(n))},\"Array | Matrix, Array | Matrix\":m,\"Array | Matrix, Array | Matrix, number\":function(e,t,r){return m(e,t,h(r))},\"Array | Matrix, Array | Matrix, boolean\":m,\"Array | Matrix, Array | Matrix, boolean, number\":function(e,t,r,n){return m(e,t,r,h(n))}});function h(e){return ig([[],e])[1]}}),{isTransformFunction:!0}),yg=\"cumsum\",gg=Se(yg,[\"typed\",\"add\",\"unaryPlus\"],(function(e){var t=e.typed,r=e.add,n=e.unaryPlus,o=Xh({typed:t,add:r,unaryPlus:n});return t(yg,{\"...any\":function(e){if(2===e.length&&p(e[0])){var t=e[1];i(t)?e[1]=t-1:a(t)&&(e[1]=t.minus(1))}try{return o.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),xg=\"variance\",bg=Se(xg,[\"typed\",\"add\",\"subtract\",\"multiply\",\"divide\",\"apply\",\"isNaN\"],(function(e){var t=e.typed,r=e.add,n=e.subtract,i=e.multiply,a=e.divide,o=e.apply,u=e.isNaN,s=ad({typed:t,add:r,subtract:n,multiply:i,divide:a,apply:o,isNaN:u});return t(xg,{\"...any\":function(e){e=ig(e);try{return s.apply(null,e)}catch(e){throw wp(e)}}})}),{isTransformFunction:!0}),wg=\"print\",Dg=Se(wg,[\"typed\",\"matrix\",\"zeros\",\"add\"],(function(e){var t=e.typed,r=e.matrix,n=e.zeros,i=e.add,a=Zs({typed:t,matrix:r,zeros:n,add:i});return t(wg,{\"string, Object | Array\":function(e,t){return a(o(e),t)},\"string, Object | Array, number | Object\":function(e,t,r){return a(o(e),t,r)}});function o(e){return e.replace(Gs,(function(e){return\"$\"+e.slice(1).split(\".\").map((function(e){return!isNaN(e)&&e.length>0?parseInt(e)-1:e})).join(\".\")}))}}),{isTransformFunction:!0}),Ng=Se(\"and\",[\"typed\",\"matrix\",\"zeros\",\"add\",\"equalScalar\",\"not\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.zeros,a=e.not,o=e.concat,u=Tc({typed:t,matrix:r,equalScalar:n,zeros:i,not:a,concat:o});function s(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)&&!u(n,!0))return!1;var i=e[1].compile().evaluate(r);return u(n,i)}return s.rawArgs=!0,s}),{isTransformFunction:!0}),Eg=Se(\"or\",[\"typed\",\"matrix\",\"equalScalar\",\"DenseMatrix\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.DenseMatrix,a=e.concat,o=vu({typed:t,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function u(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)&&o(n,!1))return!0;var i=e[1].compile().evaluate(r);return o(n,i)}return u.rawArgs=!0,u}),{isTransformFunction:!0}),Ag=Se(\"bitAnd\",[\"typed\",\"matrix\",\"zeros\",\"add\",\"equalScalar\",\"not\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.zeros,a=e.not,o=e.concat,u=Xo({typed:t,matrix:r,equalScalar:n,zeros:i,not:a,concat:o});function s(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)){if(isNaN(n))return NaN;if(0===n||!1===n)return 0}var i=e[1].compile().evaluate(r);return u(n,i)}return s.rawArgs=!0,s}),{isTransformFunction:!0}),Sg=Se(\"bitOr\",[\"typed\",\"matrix\",\"equalScalar\",\"DenseMatrix\",\"concat\"],(function(e){var t=e.typed,r=e.matrix,n=e.equalScalar,i=e.DenseMatrix,a=e.concat,o=tu({typed:t,matrix:r,equalScalar:n,DenseMatrix:i,concat:a});function u(e,t,r){var n=e[0].compile().evaluate(r);if(!p(n)){if(isNaN(n))return NaN;if(-1===n)return-1;if(!0===n)return 1}var i=e[1].compile().evaluate(r);return o(n,i)}return u.rawArgs=!0,u}),{isTransformFunction:!0}),Cg=(r(4170),r(6034),r(1504));var Mg={epsilon:1e-12,matrix:\"Matrix\",number:\"number\",precision:64,predictable:!1,randomSeed:null},Fg=[\"Matrix\",\"Array\"],Og=[\"number\",\"BigNumber\",\"Fraction\"];function Tg(e,t){function r(r){if(r){var n=ge(e,ye);_g(r,\"matrix\",Fg),_g(r,\"number\",Og),be(e,r);var i=ge(e,ye),a=ge(r,ye);return t(\"config\",i,n,a),i}return ge(e,ye)}return r.MATRIX_OPTIONS=Fg,r.NUMBER_OPTIONS=Og,Object.keys(Mg).forEach((function(t){Object.defineProperty(r,t,{get:function(){return e[t]},enumerable:!0,configurable:!0})})),r}function _g(e,t,r){void 0===e[t]||r.includes(e[t])||console.warn('Warning: Unknown value \"'+e[t]+'\" for configuration option \"'+t+'\". Available options: '+r.map((function(e){return JSON.stringify(e)})).join(\", \")+\".\")}const Bg=function e(r,n){var _=Yr({},Mg,n);if(\"function\"!=typeof Object.create)throw new Error(\"ES5 not supported by this JavaScript engine. Please load the es5-shim and es5-sham library for compatibility.\");var H,V,Z=(H={isNumber:i,isComplex:o,isBigNumber:a,isFraction:u,isUnit:s,isString:c,isArray:f,isMatrix:l,isCollection:p,isDenseMatrix:m,isSparseMatrix:h,isRange:d,isIndex:v,isBoolean:y,isResultSet:g,isHelp:x,isFunction:b,isDate:w,isRegExp:D,isObject:N,isNull:E,isUndefined:A,isAccessorNode:S,isArrayNode:C,isAssignmentNode:M,isBlockNode:F,isConditionalNode:O,isConstantNode:T,isFunctionAssignmentNode:B,isFunctionNode:k,isIndexNode:I,isNode:z,isObjectNode:R,isOperatorNode:q,isParenthesisNode:j,isRangeNode:P,isRelationalNode:L,isSymbolNode:U,isChain:$},V=new Cg,H.on=V.on.bind(V),H.off=V.off.bind(V),H.once=V.once.bind(V),H.emit=V.emit.bind(V),H);Z.config=Tg(_,Z.emit),Z.expression={transform:{},mathWithTransform:{config:Z.config}};var W={};function Y(){for(var e=arguments.length,t=new Array(e),r=0;r2&&void 0!==arguments[2]?arguments[2]:t.fn;if(a.includes(\".\"))throw new Error(\"Factory name should not contain a nested path. Name: \"+JSON.stringify(a));var o=v(t)?n.expression.transform:n,u=a in n.expression.transform,s=Ae(o,a)?o[a]:void 0,c=function(){var i={};t.dependencies.map(Me).forEach((function(e){if(e.includes(\".\"))throw new Error(\"Factory dependency should not contain a nested path. Name: \"+JSON.stringify(e));\"math\"===e?i.math=n:\"mathWithTransform\"===e?i.mathWithTransform=n.expression.mathWithTransform:\"classes\"===e?i.classes=n:i[e]=n[e]}));var o=t(i);if(o&&\"function\"==typeof o.transform)throw new Error('Transforms cannot be attached to factory functions. Please create a separate function for it with exports.path=\"expression.transform\"');if(void 0===s||r.override)return o;if(e.isTypedFunction(s)&&e.isTypedFunction(o))return e(s,o);if(r.silent)return s;throw new Error('Cannot import \"'+a+'\": already exists')};t.meta&&!1===t.meta.lazy?(o[a]=c(),s&&u?p(a):(v(t)||d(t))&&Ee(n.expression.mathWithTransform,a,(function(){return o[a]}))):(Ee(o,a,c),s&&u?p(a):(v(t)||d(t))&&Ee(n.expression.mathWithTransform,a,(function(){return o[a]}))),i[a]=t,n.emit(\"import\",a,c)}function h(e){return!Ae(y,e)}function d(e){return!(e.fn.includes(\".\")||Ae(y,e.fn)||e.meta&&e.meta.isClass)}function v(e){return void 0!==e&&void 0!==e.meta&&!0===e.meta.isTransformFunction||!1}var y={expression:!0,type:!0,docs:!0,error:!0,json:!0,chain:!0};return function(e,r){var n=arguments.length;if(1!==n&&2!==n)throw new ro(\"import\",n,1,2);r||(r={});var i,f={};for(var p in function e(n,i,a){if(Array.isArray(i))i.forEach((function(t){return e(n,t)}));else if(\"object\"===t(i))for(var o in i)Ae(i,o)&&e(n,i[o],o);else if(Ce(i)||void 0!==a){var u=Ce(i)?v(i)?i.fn+\".transform\":i.fn:a;if(Ae(n,u)&&n[u]!==i&&!r.silent)throw new Error('Cannot import \"'+u+'\" twice');n[u]=i}else if(!r.silent)throw new TypeError(\"Factory, Object, or Array expected\")}(f,e),f)if(Ae(f,p)){var h=f[p];if(Ce(h))m(h,r);else if(\"function\"==typeof(i=h)||\"number\"==typeof i||\"string\"==typeof i||\"boolean\"==typeof i||null===i||s(i)||o(i)||a(i)||u(i)||l(i)||Array.isArray(i))c(p,h,r);else if(!r.silent)throw new TypeError(\"Factory, Object, or Array expected\")}}}(Y,0,Z,W);return Z.import=J,Z.on(\"config\",(function(){Object.values(W).forEach((function(e){e&&e.meta&&e.meta.recreateOnConfigChange&&J(e,{override:!0})}))})),Z.create=e.bind(null,r),Z.factory=Se,Z.import(Object.values(De(r))),Z.ArgumentsError=ro,Z.DimensionError=un,Z.IndexError=sn,Z}(e)})(),n.default})()));\n//# sourceMappingURL=math.js.map","// This file is autogenerated.\n// It's here at this path for backwards compatibility for links to it\n// but the npm package now exports both CJS and ESM.\n// See https://github.com/bgrins/TinyColor/ for instructions.\n (function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinycolor = factory());\n})(this, (function () { 'use strict';\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n\n // https://github.com/bgrins/TinyColor\n // Brian Grinstead, MIT License\n\n var trimLeft = /^\\s+/;\n var trimRight = /\\s+$/;\n function tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n }\n tinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n };\n\n // If input is an object, force 1 into \"1.0\" to handle ratios properly\n // String input requires \"1.0\" as input, so 1 will be treated as 1\n tinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n };\n\n // Given a string or object, convert that input to RGB\n // Possible string inputs:\n //\n // \"red\"\n // \"#f00\" or \"f00\"\n // \"#ff0000\" or \"ff0000\"\n // \"#ff000000\" or \"ff000000\"\n // \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n // \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n // \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n // \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n // \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n // \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n // \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n //\n function inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n }\n\n // Conversion Functions\n // --------------------\n\n // `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n // \n\n // `rgbToRgb`\n // Handle bounds / percentage checking to conform to CSS color spec\n // \n // *Assumes:* r, g, b in [0, 255] or [0, 1]\n // *Returns:* { r, g, b } in [0, 255]\n function rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n }\n\n // `rgbToHsl`\n // Converts an RGB color value to HSL.\n // *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n // *Returns:* { h, s, l } in [0,1]\n function rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n }\n\n // `hslToRgb`\n // Converts an HSL color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHsv`\n // Converts an RGB color value to HSV\n // *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n // *Returns:* { h, s, v } in [0,1]\n function rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n }\n\n // `hsvToRgb`\n // Converts an HSV color value to RGB.\n // *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n // *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n }\n\n // `rgbToHex`\n // Converts an RGB color to hex\n // Assumes r, g, and b are contained in the set [0, 255]\n // Returns a 3 or 6 character hex\n function rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToHex`\n // Converts an RGBA color plus alpha transparency to hex\n // Assumes r, g, b are contained in the set [0, 255] and\n // a in [0, 1]. Returns a 4 or 8 character rgba hex\n function rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n }\n\n // `rgbaToArgbHex`\n // Converts an RGBA color to an ARGB Hex8 string\n // Rarely used, but required for \"toFilter()\"\n function rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n }\n\n // `equals`\n // Can be called with any tinycolor input\n tinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n };\n tinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n };\n\n // Modification Functions\n // ----------------------\n // Thanks to less.js for some of the basics here\n // \n\n function _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n }\n function _greyscale(color) {\n return tinycolor(color).desaturate(100);\n }\n function _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n function _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n }\n function _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n }\n\n // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n // Values outside of this range will be wrapped into this range.\n function _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n }\n\n // Combination Functions\n // ---------------------\n // Thanks to jQuery xColor for some of the ideas behind these\n // \n\n function _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n }\n function polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n }\n function _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n }\n function _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n }\n function _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n }\n\n // Utility Functions\n // ---------------------\n\n tinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n };\n\n // Readability Functions\n // ---------------------\n // false\n // tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\n tinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n };\n\n // `mostReadable`\n // Given a base color and a list of possible foreground or background\n // colors for that base, returns the most readable color.\n // Optionally returns Black or White if the most readable color is unreadable.\n // *Example*\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n // tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n // tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\n tinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n };\n\n // Big List of Colors\n // ------------------\n // \n var names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n };\n\n // Make it easy to access colors via `hexNames[hex]`\n var hexNames = tinycolor.hexNames = flip(names);\n\n // Utilities\n // ---------\n\n // `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\n function flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n }\n\n // Return a valid alpha value [0,1] with all invalid values being set to 1\n function boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n }\n\n // Take input from [0, n] and return it as [0, 1]\n function bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n }\n\n // Force a number between 0 and 1\n function clamp01(val) {\n return Math.min(1, Math.max(0, val));\n }\n\n // Parse a base-16 hex value into a base-10 integer\n function parseIntFromHex(val) {\n return parseInt(val, 16);\n }\n\n // Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n // \n function isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n }\n\n // Check to see if string passed in is a percentage\n function isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n }\n\n // Force a hex value to have 2 characters\n function pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n }\n\n // Replace a decimal with it's percentage value\n function convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n }\n\n // Converts a decimal to a hex value\n function convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n }\n // Converts a hex value to a decimal\n function convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n }\n var matchers = function () {\n // \n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // \n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n }();\n\n // `isValidCSSUnit`\n // Take in a single string / number and check to see if it looks like a CSS unit\n // (see `matchers` above for definition).\n function isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n }\n\n // `stringInputToObject`\n // Permissive string parsing. Take in a number of formats, and output an object\n // based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\n function stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n }\n function validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n }\n\n return tinycolor;\n\n}));\n","// https://d3js.org v7.9.0 Copyright 2010-2023 Mike Bostock\n(function (global, factory) {\ntypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\ntypeof define === 'function' && define.amd ? define(['exports'], factory) :\n(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.d3 = global.d3 || {}));\n})(this, (function (exports) { 'use strict';\n\nvar version = \"7.9.0\";\n\nfunction ascending$3(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction descending$2(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n\nfunction bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending$3;\n compare2 = (d, x) => ascending$3(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending$3 || f === descending$2 ? f : zero$1;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero$1() {\n return 0;\n}\n\nfunction number$3(x) {\n return x === null ? NaN : +x;\n}\n\nfunction* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nconst ascendingBisect = bisector(ascending$3);\nconst bisectRight = ascendingBisect.right;\nconst bisectLeft = ascendingBisect.left;\nconst bisectCenter = bisector(number$3).center;\nvar bisect = bisectRight;\n\nfunction blur(values, r) {\n if (!((r = +r) >= 0)) throw new RangeError(\"invalid r\");\n let length = values.length;\n if (!((length = Math.floor(length)) >= 0)) throw new RangeError(\"invalid length\");\n if (!length || !r) return values;\n const blur = blurf(r);\n const temp = values.slice();\n blur(values, temp, 0, length, 1);\n blur(temp, values, 0, length, 1);\n blur(values, temp, 0, length, 1);\n return values;\n}\n\nconst blur2 = Blur2(blurf);\n\nconst blurImage = Blur2(blurfImage);\n\nfunction Blur2(blur) {\n return function(data, rx, ry = rx) {\n if (!((rx = +rx) >= 0)) throw new RangeError(\"invalid rx\");\n if (!((ry = +ry) >= 0)) throw new RangeError(\"invalid ry\");\n let {data: values, width, height} = data;\n if (!((width = Math.floor(width)) >= 0)) throw new RangeError(\"invalid width\");\n if (!((height = Math.floor(height !== undefined ? height : values.length / width)) >= 0)) throw new RangeError(\"invalid height\");\n if (!width || !height || (!rx && !ry)) return data;\n const blurx = rx && blur(rx);\n const blury = ry && blur(ry);\n const temp = values.slice();\n if (blurx && blury) {\n blurh(blurx, temp, values, width, height);\n blurh(blurx, values, temp, width, height);\n blurh(blurx, temp, values, width, height);\n blurv(blury, values, temp, width, height);\n blurv(blury, temp, values, width, height);\n blurv(blury, values, temp, width, height);\n } else if (blurx) {\n blurh(blurx, values, temp, width, height);\n blurh(blurx, temp, values, width, height);\n blurh(blurx, values, temp, width, height);\n } else if (blury) {\n blurv(blury, values, temp, width, height);\n blurv(blury, temp, values, width, height);\n blurv(blury, values, temp, width, height);\n }\n return data;\n };\n}\n\nfunction blurh(blur, T, S, w, h) {\n for (let y = 0, n = w * h; y < n;) {\n blur(T, S, y, y += w, 1);\n }\n}\n\nfunction blurv(blur, T, S, w, h) {\n for (let x = 0, n = w * h; x < w; ++x) {\n blur(T, S, x, x + n, w);\n }\n}\n\nfunction blurfImage(radius) {\n const blur = blurf(radius);\n return (T, S, start, stop, step) => {\n start <<= 2, stop <<= 2, step <<= 2;\n blur(T, S, start + 0, stop + 0, step);\n blur(T, S, start + 1, stop + 1, step);\n blur(T, S, start + 2, stop + 2, step);\n blur(T, S, start + 3, stop + 3, step);\n };\n}\n\n// Given a target array T, a source array S, sets each value T[i] to the average\n// of {S[i - r], …, S[i], …, S[i + r]}, where r = ⌊radius⌋, start <= i < stop,\n// for each i, i + step, i + 2 * step, etc., and where S[j] is clamped between\n// S[start] (inclusive) and S[stop] (exclusive). If the given radius is not an\n// integer, S[i - r - 1] and S[i + r + 1] are added to the sum, each weighted\n// according to r - ⌊radius⌋.\nfunction blurf(radius) {\n const radius0 = Math.floor(radius);\n if (radius0 === radius) return bluri(radius);\n const t = radius - radius0;\n const w = 2 * radius + 1;\n return (T, S, start, stop, step) => { // stop must be aligned!\n if (!((stop -= step) >= start)) return; // inclusive stop\n let sum = radius0 * S[start];\n const s0 = step * radius0;\n const s1 = s0 + step;\n for (let i = start, j = start + s0; i < j; i += step) {\n sum += S[Math.min(stop, i)];\n }\n for (let i = start, j = stop; i <= j; i += step) {\n sum += S[Math.min(stop, i + s0)];\n T[i] = (sum + t * (S[Math.max(start, i - s1)] + S[Math.min(stop, i + s1)])) / w;\n sum -= S[Math.max(start, i - s0)];\n }\n };\n}\n\n// Like blurf, but optimized for integer radius.\nfunction bluri(radius) {\n const w = 2 * radius + 1;\n return (T, S, start, stop, step) => { // stop must be aligned!\n if (!((stop -= step) >= start)) return; // inclusive stop\n let sum = radius * S[start];\n const s = step * radius;\n for (let i = start, j = start + s; i < j; i += step) {\n sum += S[Math.min(stop, i)];\n }\n for (let i = start, j = stop; i <= j; i += step) {\n sum += S[Math.min(stop, i + s)];\n T[i] = sum / w;\n sum -= S[Math.max(start, i - s)];\n }\n };\n}\n\nfunction count$1(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n\nfunction length$3(array) {\n return array.length | 0;\n}\n\nfunction empty$2(length) {\n return !(length > 0);\n}\n\nfunction arrayify(values) {\n return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n return values => reduce(...values);\n}\n\nfunction cross$2(...values) {\n const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n values = values.map(arrayify);\n const lengths = values.map(length$3);\n const j = values.length - 1;\n const index = new Array(j + 1).fill(0);\n const product = [];\n if (j < 0 || lengths.some(empty$2)) return product;\n while (true) {\n product.push(index.map((j, i) => values[i][j]));\n let i = j;\n while (++index[i] === lengths[i]) {\n if (i === 0) return reduce ? product.map(reduce) : product;\n index[i--] = 0;\n }\n }\n}\n\nfunction cumsum(values, valueof) {\n var sum = 0, index = 0;\n return Float64Array.from(values, valueof === undefined\n ? v => (sum += +v || 0)\n : v => (sum += +valueof(v, index++, values) || 0));\n}\n\nfunction variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n\nfunction deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n\nfunction extent$1(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n\n// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nclass Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nfunction fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nfunction fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n\nclass InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nclass InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n\nfunction identity$9(x) {\n return x;\n}\n\nfunction group(values, ...keys) {\n return nest(values, identity$9, identity$9, keys);\n}\n\nfunction groups(values, ...keys) {\n return nest(values, Array.from, identity$9, keys);\n}\n\nfunction flatten$1(groups, keys) {\n for (let i = 1, n = keys.length; i < n; ++i) {\n groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n }\n return groups;\n}\n\nfunction flatGroup(values, ...keys) {\n return flatten$1(groups(values, ...keys), keys);\n}\n\nfunction flatRollup(values, reduce, ...keys) {\n return flatten$1(rollups(values, reduce, ...keys), keys);\n}\n\nfunction rollup(values, reduce, ...keys) {\n return nest(values, identity$9, reduce, keys);\n}\n\nfunction rollups(values, reduce, ...keys) {\n return nest(values, Array.from, reduce, keys);\n}\n\nfunction index$4(values, ...keys) {\n return nest(values, identity$9, unique, keys);\n}\n\nfunction indexes(values, ...keys) {\n return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n if (values.length !== 1) throw new Error(\"duplicate key\");\n return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n return (function regroup(values, i) {\n if (i >= keys.length) return reduce(values);\n const groups = new InternMap();\n const keyof = keys[i++];\n let index = -1;\n for (const value of values) {\n const key = keyof(value, ++index, values);\n const group = groups.get(key);\n if (group) group.push(value);\n else groups.set(key, [value]);\n }\n for (const [key, values] of groups) {\n groups.set(key, regroup(values, i));\n }\n return map(groups);\n })(values, 0);\n}\n\nfunction permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n\nfunction sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nfunction compareDefined(compare = ascending$3) {\n if (compare === ascending$3) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nfunction ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n\nfunction groupSort(values, reduce, key) {\n return (reduce.length !== 2\n ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending$3(av, bv) || ascending$3(ak, bk)))\n : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending$3(ak, bk))))\n .map(([key]) => key);\n}\n\nvar array$5 = Array.prototype;\n\nvar slice$3 = array$5.slice;\n\nfunction constant$b(x) {\n return () => x;\n}\n\nconst e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nfunction ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nfunction tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nfunction tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n\nfunction nice$1(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n\nfunction thresholdSturges(values) {\n return Math.max(1, Math.ceil(Math.log(count$1(values)) / Math.LN2) + 1);\n}\n\nfunction bin() {\n var value = identity$9,\n domain = extent$1,\n threshold = thresholdSturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n step,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent$1) [x0, x1] = nice$1(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the domain is aligned with the first tick (which it will by\n // default), then we can use quantization rather than bisection to bin\n // values, which is substantially faster.\n if (tz[0] <= x0) step = tickIncrement(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent$1) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n // Be careful not to mutate an array owned by the user!\n var m = tz.length, a = 0, b = m;\n while (tz[a] <= x0) ++a;\n while (tz[b - 1] > x1) --b;\n if (a || b < m) tz = tz.slice(a, b), m = b - a;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n if (isFinite(step)) {\n if (step > 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[Math.min(m, Math.floor((x - x0) / step))].push(data[i]);\n }\n }\n } else if (step < 0) {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n const j = Math.floor((x0 - x) * step);\n bins[Math.min(m, j + (tz[j] <= x))].push(data[i]); // handle off-by-one due to rounding\n }\n }\n }\n } else {\n for (i = 0; i < n; ++i) {\n if ((x = values[i]) != null && x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$b(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant$b([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : constant$b(Array.isArray(_) ? slice$3.call(_) : _), histogram) : threshold;\n };\n\n return histogram;\n}\n\nfunction max$3(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n\nfunction maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n\nfunction min$2(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n\nfunction minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nfunction quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap$1(array, left, k);\n if (compare(array[right], t) > 0) swap$1(array, left, right);\n\n while (i < j) {\n swap$1(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap$1(array, left, j);\n else ++j, swap$1(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap$1(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n\nfunction greatest(values, compare = ascending$3) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending$3(value, maxValue) > 0\n : ascending$3(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n\nfunction quantile$1(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min$2(values);\n if (p >= 1) return max$3(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max$3(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min$2(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction quantileSorted(values, p, valueof = number$3) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nfunction quantileIndex(values, p, valueof = number$3) {\n if (isNaN(p = +p)) return;\n numbers = Float64Array.from(values, (_, i) => number$3(valueof(values[i], i, values)));\n if (p <= 0) return minIndex(numbers);\n if (p >= 1) return maxIndex(numbers);\n var numbers,\n index = Uint32Array.from(values, (_, i) => i),\n j = numbers.length - 1,\n i = Math.floor(j * p);\n quickselect(index, i, 0, j, (i, j) => ascendingDefined(numbers[i], numbers[j]));\n i = greatest(index.subarray(0, i + 1), (i) => numbers[i]);\n return i >= 0 ? i : -1;\n}\n\nfunction thresholdFreedmanDiaconis(values, min, max) {\n const c = count$1(values), d = quantile$1(values, 0.75) - quantile$1(values, 0.25);\n return c && d ? Math.ceil((max - min) / (2 * d * Math.pow(c, -1 / 3))) : 1;\n}\n\nfunction thresholdScott(values, min, max) {\n const c = count$1(values), d = deviation(values);\n return c && d ? Math.ceil((max - min) * Math.cbrt(c) / (3.49 * d)) : 1;\n}\n\nfunction mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n\nfunction median(values, valueof) {\n return quantile$1(values, 0.5, valueof);\n}\n\nfunction medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n\nfunction* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nfunction merge(arrays) {\n return Array.from(flatten(arrays));\n}\n\nfunction mode(values, valueof) {\n const counts = new InternMap();\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n }\n let modeValue;\n let modeCount = 0;\n for (const [value, count] of counts) {\n if (count > modeCount) {\n modeCount = count;\n modeValue = value;\n }\n }\n return modeValue;\n}\n\nfunction pairs(values, pairof = pair) {\n const pairs = [];\n let previous;\n let first = false;\n for (const value of values) {\n if (first) pairs.push(pairof(previous, value));\n previous = value;\n first = true;\n }\n return pairs;\n}\n\nfunction pair(a, b) {\n return [a, b];\n}\n\nfunction range$2(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n\nfunction rank(values, valueof = ascending$3) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n let V = Array.from(values);\n const R = new Float64Array(V.length);\n if (valueof.length !== 2) V = V.map(valueof), valueof = ascending$3;\n const compareIndex = (i, j) => valueof(V[i], V[j]);\n let k, r;\n values = Uint32Array.from(V, (_, i) => i);\n // Risky chaining due to Safari 14 https://github.com/d3/d3-array/issues/123\n values.sort(valueof === ascending$3 ? (i, j) => ascendingDefined(V[i], V[j]) : compareDefined(compareIndex));\n values.forEach((j, i) => {\n const c = compareIndex(j, k === undefined ? j : k);\n if (c >= 0) {\n if (k === undefined || c > 0) k = j, r = i;\n R[j] = r;\n } else {\n R[j] = NaN;\n }\n });\n return R;\n}\n\nfunction least(values, compare = ascending$3) {\n let min;\n let defined = false;\n if (compare.length === 1) {\n let minValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending$3(value, minValue) < 0\n : ascending$3(value, value) === 0) {\n min = element;\n minValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, min) < 0\n : compare(value, value) === 0) {\n min = value;\n defined = true;\n }\n }\n }\n return min;\n}\n\nfunction leastIndex(values, compare = ascending$3) {\n if (compare.length === 1) return minIndex(values, compare);\n let minValue;\n let min = -1;\n let index = -1;\n for (const value of values) {\n ++index;\n if (min < 0\n ? compare(value, value) === 0\n : compare(value, minValue) < 0) {\n minValue = value;\n min = index;\n }\n }\n return min;\n}\n\nfunction greatestIndex(values, compare = ascending$3) {\n if (compare.length === 1) return maxIndex(values, compare);\n let maxValue;\n let max = -1;\n let index = -1;\n for (const value of values) {\n ++index;\n if (max < 0\n ? compare(value, value) === 0\n : compare(value, maxValue) > 0) {\n maxValue = value;\n max = index;\n }\n }\n return max;\n}\n\nfunction scan(values, compare) {\n const index = leastIndex(values, compare);\n return index < 0 ? undefined : index;\n}\n\nvar shuffle$1 = shuffler(Math.random);\n\nfunction shuffler(random) {\n return function shuffle(array, i0 = 0, i1 = array.length) {\n let m = i1 - (i0 = +i0);\n while (m) {\n const i = random() * m-- | 0, t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n return array;\n };\n}\n\nfunction sum$2(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n\nfunction transpose(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min$2(matrix, length$2), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction length$2(d) {\n return d.length;\n}\n\nfunction zip() {\n return transpose(arguments);\n}\n\nfunction every(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n let index = -1;\n for (const value of values) {\n if (!test(value, ++index, values)) {\n return false;\n }\n }\n return true;\n}\n\nfunction some(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n let index = -1;\n for (const value of values) {\n if (test(value, ++index, values)) {\n return true;\n }\n }\n return false;\n}\n\nfunction filter$1(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n const array = [];\n let index = -1;\n for (const value of values) {\n if (test(value, ++index, values)) {\n array.push(value);\n }\n }\n return array;\n}\n\nfunction map$1(values, mapper) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n return Array.from(values, (value, index) => mapper(value, index, values));\n}\n\nfunction reduce(values, reducer, value) {\n if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n const iterator = values[Symbol.iterator]();\n let done, next, index = -1;\n if (arguments.length < 3) {\n ({done, value} = iterator.next());\n if (done) return;\n ++index;\n }\n while (({done, value: next} = iterator.next()), !done) {\n value = reducer(value, next, ++index, values);\n }\n return value;\n}\n\nfunction reverse$1(values) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n return Array.from(values).reverse();\n}\n\nfunction difference(values, ...others) {\n values = new InternSet(values);\n for (const other of others) {\n for (const value of other) {\n values.delete(value);\n }\n }\n return values;\n}\n\nfunction disjoint(values, other) {\n const iterator = other[Symbol.iterator](), set = new InternSet();\n for (const v of values) {\n if (set.has(v)) return false;\n let value, done;\n while (({value, done} = iterator.next())) {\n if (done) break;\n if (Object.is(v, value)) return false;\n set.add(value);\n }\n }\n return true;\n}\n\nfunction intersection(values, ...others) {\n values = new InternSet(values);\n others = others.map(set$2);\n out: for (const value of values) {\n for (const other of others) {\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n }\n return values;\n}\n\nfunction set$2(values) {\n return values instanceof InternSet ? values : new InternSet(values);\n}\n\nfunction superset(values, other) {\n const iterator = values[Symbol.iterator](), set = new Set();\n for (const o of other) {\n const io = intern(o);\n if (set.has(io)) continue;\n let value, done;\n while (({value, done} = iterator.next())) {\n if (done) return false;\n const ivalue = intern(value);\n set.add(ivalue);\n if (Object.is(io, ivalue)) break;\n }\n }\n return true;\n}\n\nfunction intern(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n\nfunction subset(values, other) {\n return superset(other, values);\n}\n\nfunction union(...others) {\n const set = new InternSet();\n for (const other of others) {\n for (const o of other) {\n set.add(o);\n }\n }\n return set;\n}\n\nfunction identity$8(x) {\n return x;\n}\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon$6 = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number$2(scale) {\n return d => +scale(d);\n}\n\nfunction center$1(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$8) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center$1 : number$2)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon$6)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon$6)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nfunction axisTop(scale) {\n return axis(top, scale);\n}\n\nfunction axisRight(scale) {\n return axis(right, scale);\n}\n\nfunction axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nfunction axisLeft(scale) {\n return axis(left, scale);\n}\n\nvar noop$3 = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames$1(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames$1(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get$1(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set$1(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set$1(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get$1(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set$1(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop$3, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nvar xhtml = \"http://www.w3.org/1999/xhtml\";\n\nvar namespaces = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n\nfunction namespace(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nfunction creator(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n\nfunction none$2() {}\n\nfunction selector(selector) {\n return selector == null ? none$2 : function() {\n return this.querySelector(selector);\n };\n}\n\nfunction selection_select(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection$1(subgroups, this._parents);\n}\n\n// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nfunction array$4(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n\nfunction empty$1() {\n return [];\n}\n\nfunction selectorAll(selector) {\n return selector == null ? empty$1 : function() {\n return this.querySelectorAll(selector);\n };\n}\n\nfunction arrayAll(select) {\n return function() {\n return array$4(select.apply(this, arguments));\n };\n}\n\nfunction selection_selectAll(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection$1(subgroups, parents);\n}\n\nfunction matcher(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nfunction childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\nvar find$1 = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find$1.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nfunction selection_selectChild(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nfunction selection_selectChildren(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n\nfunction selection_filter(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection$1(subgroups, this._parents);\n}\n\nfunction sparse(update) {\n return new Array(update.length);\n}\n\nfunction selection_enter() {\n return new Selection$1(this._enter || this._groups.map(sparse), this._parents);\n}\n\nfunction EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n\nfunction constant$a(x) {\n return function() {\n return x;\n };\n}\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nfunction selection_data(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant$a(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection$1(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n\nfunction selection_exit() {\n return new Selection$1(this._exit || this._groups.map(sparse), this._parents);\n}\n\nfunction selection_join(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n\nfunction selection_merge(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection$1(merges, this._parents);\n}\n\nfunction selection_order() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n\nfunction selection_sort(compare) {\n if (!compare) compare = ascending$2;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection$1(sortgroups, this._parents).order();\n}\n\nfunction ascending$2(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n\nfunction selection_call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n\nfunction selection_nodes() {\n return Array.from(this);\n}\n\nfunction selection_node() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n\nfunction selection_size() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n\nfunction selection_empty() {\n return !this.node();\n}\n\nfunction selection_each(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n\nfunction attrRemove$1(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS$1(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant$1(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS$1(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction$1(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS$1(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nfunction selection_attr(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS$1 : attrRemove$1) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)\n : (fullname.local ? attrConstantNS$1 : attrConstant$1)))(fullname, value));\n}\n\nfunction defaultView(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n\nfunction styleRemove$1(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant$1(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction$1(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nfunction selection_style(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove$1 : typeof value === \"function\"\n ? styleFunction$1\n : styleConstant$1)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nfunction styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n\nfunction propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nfunction selection_property(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n\nfunction classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nfunction selection_classed(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n\nfunction textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant$1(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction$1(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nfunction selection_text(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction$1\n : textConstant$1)(value))\n : this.node().textContent;\n}\n\nfunction htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nfunction selection_html(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n\nfunction raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nfunction selection_raise() {\n return this.each(raise);\n}\n\nfunction lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nfunction selection_lower() {\n return this.each(lower);\n}\n\nfunction selection_append(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n\nfunction constantNull() {\n return null;\n}\n\nfunction selection_insert(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n\nfunction remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nfunction selection_remove() {\n return this.each(remove);\n}\n\nfunction selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_clone(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n\nfunction selection_datum(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n\nfunction contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nfunction selection_on(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nfunction selection_dispatch(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n\nfunction* selection_iterator() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n\nvar root$1 = [null];\n\nfunction Selection$1(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection$1([[document.documentElement]], root$1);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection$1.prototype = selection.prototype = {\n constructor: Selection$1,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nfunction select(selector) {\n return typeof selector === \"string\"\n ? new Selection$1([[document.querySelector(selector)]], [document.documentElement])\n : new Selection$1([[selector]], root$1);\n}\n\nfunction create$1(name) {\n return select(creator(name).call(document.documentElement));\n}\n\nvar nextId = 0;\n\nfunction local$1() {\n return new Local;\n}\n\nfunction Local() {\n this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local$1.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n};\n\nfunction sourceEvent(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n\nfunction pointer(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n\nfunction pointers(events, node) {\n if (events.target) { // i.e., instanceof Event, not TouchList or iterable\n events = sourceEvent(events);\n if (node === undefined) node = events.currentTarget;\n events = events.touches || [events];\n }\n return Array.from(events, event => pointer(event, node));\n}\n\nfunction selectAll(selector) {\n return typeof selector === \"string\"\n ? new Selection$1([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection$1([array$4(selector)], root$1);\n}\n\n// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nconst nonpassive = {passive: false};\nconst nonpassivecapture = {capture: true, passive: false};\n\nfunction nopropagation$2(event) {\n event.stopImmediatePropagation();\n}\n\nfunction noevent$2(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nfunction dragDisable(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent$2, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent$2, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nfunction yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent$2, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n\nvar constant$9 = x => () => x;\n\nfunction DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter$2(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable$2() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction drag() {\n var filter = defaultFilter$2,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable$2,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n dragDisable(event.view);\n nopropagation$2(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent$2(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent$2(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation$2(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent$2(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation$2(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$9(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant$9(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant$9(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$9(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n\nfunction define(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nfunction color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl$2(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl$2, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n\nconst radians$1 = Math.PI / 180;\nconst degrees$2 = 180 / Math.PI;\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0$1 = 4 / 29,\n t1$1 = 6 / 29,\n t2 = 3 * t1$1 * t1$1,\n t3 = t1$1 * t1$1 * t1$1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nfunction lab$1(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab$1, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0$1;\n}\n\nfunction lab2xyz(t) {\n return t > t1$1 ? t * t * t : t2 * (t - t0$1);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees$2;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction hcl$2(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians$1;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl$2, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n\nvar A = -0.14861,\n B$1 = +1.78277,\n C = -0.29227,\n D$1 = -0.90649,\n E = +1.97294,\n ED = E * D$1,\n EB = E * B$1,\n BC_DA = B$1 * C - D$1 * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D$1,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees$2 - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix$3(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix$3, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians$1,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B$1 * sinh)),\n 255 * (l + a * (C * cosh + D$1 * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n\nfunction basis$1(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nfunction basis$2(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis$1((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\nfunction basisClosed$1(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis$1((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n\nvar constant$8 = x => () => x;\n\nfunction linear$2(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential$1(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue$1(a, b) {\n var d = b - a;\n return d ? linear$2(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$8(isNaN(a) ? b : a);\n}\n\nfunction gamma$1(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential$1(a, b, y) : constant$8(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear$2(a, d) : constant$8(isNaN(a) ? b : a);\n}\n\nvar interpolateRgb = (function rgbGamma(y) {\n var color = gamma$1(y);\n\n function rgb$1(start, end) {\n var r = color((start = rgb(start)).r, (end = rgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb$1.gamma = rgbGamma;\n\n return rgb$1;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = rgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(basis$2);\nvar rgbBasisClosed = rgbSpline(basisClosed$1);\n\nfunction numberArray(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nfunction isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n\nfunction array$3(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nfunction genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = interpolate$2(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n\nfunction date$1(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n\nfunction interpolateNumber(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n\nfunction object$1(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = interpolate$2(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nfunction interpolateString(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: interpolateNumber(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n\nfunction interpolate$2(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant$8(b)\n : (t === \"number\" ? interpolateNumber\n : t === \"string\" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)\n : b instanceof color ? interpolateRgb\n : b instanceof Date ? date$1\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object$1\n : interpolateNumber)(a, b);\n}\n\nfunction discrete(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nfunction hue(a, b) {\n var i = hue$1(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n\nfunction interpolateRound(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n\nvar degrees$1 = 180 / Math.PI;\n\nvar identity$7 = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nfunction decompose(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees$1,\n skewX: Math.atan(skewX) * degrees$1,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nfunction parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity$7 : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nfunction parseSvg(value) {\n if (value == null) return identity$7;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity$7;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: interpolateNumber(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\nvar epsilon2$1 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nvar interpolateZoom = (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2$1) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n };\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n };\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = hsl$2(start)).h, (end = hsl$2(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hsl$1 = hsl(hue$1);\nvar hslLong = hsl(nogamma);\n\nfunction lab(start, end) {\n var l = nogamma((start = lab$1(start)).l, (end = lab$1(end)).l),\n a = nogamma(start.a, end.a),\n b = nogamma(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = hcl$2(start)).h, (end = hcl$2(end)).h),\n c = nogamma(start.c, end.c),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hcl$1 = hcl(hue$1);\nvar hclLong = hcl(nogamma);\n\nfunction cubehelix$1(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = cubehelix$3(start)).h, (end = cubehelix$3(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nvar cubehelix$2 = cubehelix$1(hue$1);\nvar cubehelixLong = cubehelix$1(nogamma);\n\nfunction piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = interpolate$2;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n\nfunction quantize$1(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n\nvar frame = 0, // is an animation frame pending?\n timeout$1 = 0, // is a timeout pending?\n interval$1 = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nfunction now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nfunction Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nfunction timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nfunction timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout$1 = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout$1) timeout$1 = clearTimeout(timeout$1);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout$1 = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval$1) interval$1 = clearInterval(interval$1);\n } else {\n if (!interval$1) clockLast = clock.now(), interval$1 = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n\nfunction timeout(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n\nfunction interval(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n t._restart = t.restart;\n t.restart = function(callback, delay, time) {\n delay = +delay, time = time == null ? now() : +time;\n t._restart(function tick(elapsed) {\n elapsed += total;\n t._restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n };\n t.restart(callback, delay, time);\n return t;\n}\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nvar CREATED = 0;\nvar SCHEDULED = 1;\nvar STARTING = 2;\nvar STARTED = 3;\nvar RUNNING = 4;\nvar ENDING = 5;\nvar ENDED = 6;\n\nfunction schedule(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nfunction init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nfunction set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nfunction get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n\nfunction interrupt(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n\nfunction selection_interrupt(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction transition_tween(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nfunction tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n\nfunction interpolate$1(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction transition_attr(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransformSvg : interpolate$1;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction transition_attrTween(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nfunction transition_delay(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nfunction transition_duration(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nfunction transition_ease(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nfunction transition_easeVarying(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n\nfunction transition_filter(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n\nfunction transition_merge(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nfunction transition_on(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n\nfunction removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nfunction transition_remove() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n\nfunction transition_select(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n\nfunction transition_selectAll(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n\nvar Selection = selection.prototype.constructor;\n\nfunction transition_selection() {\n return new Selection(this._groups, this._parents);\n}\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = styleValue(this, name),\n string1 = (this.style.removeProperty(name), styleValue(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = styleValue(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = styleValue(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nfunction transition_style(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransformCss : interpolate$1;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n\nfunction styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nfunction transition_styleTween(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nfunction transition_text(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n\nfunction textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction transition_textTween(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n\nfunction transition_transition() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n\nfunction transition_end() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n\nvar id = 0;\n\nfunction Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nfunction transition(name) {\n return selection().transition(name);\n}\n\nfunction newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n\nconst linear$1 = t => +t;\n\nfunction quadIn(t) {\n return t * t;\n}\n\nfunction quadOut(t) {\n return t * (2 - t);\n}\n\nfunction quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n\nfunction cubicIn(t) {\n return t * t * t;\n}\n\nfunction cubicOut(t) {\n return --t * t * t + 1;\n}\n\nfunction cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n\nvar exponent$1 = 3;\n\nvar polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent$1);\n\nvar polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent$1);\n\nvar polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent$1);\n\nvar pi$4 = Math.PI,\n halfPi$3 = pi$4 / 2;\n\nfunction sinIn(t) {\n return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi$3);\n}\n\nfunction sinOut(t) {\n return Math.sin(t * halfPi$3);\n}\n\nfunction sinInOut(t) {\n return (1 - Math.cos(pi$4 * t)) / 2;\n}\n\n// tpmt is two power minus ten times t scaled to [0,1]\nfunction tpmt(x) {\n return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n\nfunction expIn(t) {\n return tpmt(1 - +t);\n}\n\nfunction expOut(t) {\n return 1 - tpmt(t);\n}\n\nfunction expInOut(t) {\n return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n\nfunction circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nfunction circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nfunction circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n\nvar b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nfunction bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nfunction bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nfunction bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n\nvar overshoot = 1.70158;\n\nvar backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nvar backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nvar backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n\nvar tau$5 = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nvar elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau$5);\n\n function elasticIn(t) {\n return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau$5); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nvar elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau$5);\n\n function elasticOut(t) {\n return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau$5); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nvar elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau$5);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * tpmt(-t) * Math.sin((s - t) / p)\n : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau$5); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: cubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nfunction selection_transition(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n\nvar root = [null];\n\nfunction active(node, name) {\n var schedules = node.__transition,\n schedule,\n i;\n\n if (schedules) {\n name = name == null ? null : name + \"\";\n for (i in schedules) {\n if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n return new Transition([[node]], root, name, +i);\n }\n }\n }\n\n return null;\n}\n\nvar constant$7 = x => () => x;\n\nfunction BrushEvent(type, {\n sourceEvent,\n target,\n selection,\n mode,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n selection: {value: selection, enumerable: true, configurable: true},\n mode: {value: mode, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nfunction nopropagation$1(event) {\n event.stopImmediatePropagation();\n}\n\nfunction noevent$1(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs: abs$3, max: max$2, min: min$1} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter$1(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent$1() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable$1() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nfunction brushX() {\n return brush$1(X);\n}\n\nfunction brushY() {\n return brush$1(Y);\n}\n\nfunction brush() {\n return brush$1(XY);\n}\n\nfunction brush$1(dim) {\n var extent = defaultExtent$1,\n filter = defaultFilter$1,\n touchable = defaultTouchable$1,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection, event) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate$2(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function(group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min$1(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min$1(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max$2(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max$2(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true);\n\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs$3(point.cur[0] - point[0]) > abs$3(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n noevent$1(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max$2(W - w0, min$1(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max$2(N - n0, min$1(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max$2(W, min$1(E, points[0][0])), e1 = max$2(W, min$1(E, points[1][0])), signX = 1;\n if (signY) n1 = max$2(N, min$1(S, points[0][1])), s1 = max$2(N, min$1(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max$2(W - w0, min$1(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max$2(W - e0, min$1(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max$2(N - n0, min$1(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max$2(N - s0, min$1(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max$2(W, min$1(E, w0 - dx * signX)), e1 = max$2(W, min$1(E, e0 + dx * signX));\n if (signY) n1 = max$2(N, min$1(S, n0 - dy * signY)), s1 = max$2(N, min$1(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation$1(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n yesdrag(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent$1(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent$1(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant$7(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant$7(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant$7(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n\nvar abs$2 = Math.abs;\nvar cos$2 = Math.cos;\nvar sin$2 = Math.sin;\nvar pi$3 = Math.PI;\nvar halfPi$2 = pi$3 / 2;\nvar tau$4 = pi$3 * 2;\nvar max$1 = Math.max;\nvar epsilon$5 = 1e-12;\n\nfunction range$1(i, j) {\n return Array.from({length: j - i}, (_, k) => i + k);\n}\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\nfunction chord() {\n return chord$1(false, false);\n}\n\nfunction chordTranspose() {\n return chord$1(false, true);\n}\n\nfunction chordDirected() {\n return chord$1(true, false);\n}\n\nfunction chord$1(directed, transpose) {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = new Array(n),\n groupIndex = range$1(0, n),\n chords = new Array(n * n),\n groups = new Array(n),\n k = 0, dx;\n\n matrix = Float64Array.from({length: n * n}, transpose\n ? (_, i) => matrix[i % n][i / n | 0]\n : (_, i) => matrix[i / n | 0][i % n]);\n\n // Compute the scaling factor from value to angle in [0, 2pi].\n for (let i = 0; i < n; ++i) {\n let x = 0;\n for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\n k += groupSums[i] = x;\n }\n k = max$1(0, tau$4 - padAngle * n) / k;\n dx = k ? padAngle : tau$4 / n;\n\n // Compute the angles for each group and constituent chord.\n {\n let x = 0;\n if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\n for (const i of groupIndex) {\n const x0 = x;\n if (directed) {\n const subgroupIndex = range$1(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b]));\n for (const j of subgroupIndex) {\n if (j < 0) {\n const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\n } else {\n const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n } else {\n const subgroupIndex = range$1(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\n for (const j of subgroupIndex) {\n let chord;\n if (i < j) {\n chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n } else {\n chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n if (i === j) chord.source = chord.target;\n }\n if (chord.source && chord.target && chord.source.value < chord.target.value) {\n const source = chord.source;\n chord.source = chord.target;\n chord.target = source;\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n }\n x += dx;\n }\n }\n\n // Remove empty chords.\n chords = Object.values(chords);\n chords.groups = groups;\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n\nconst pi$2 = Math.PI,\n tau$3 = 2 * pi$2,\n epsilon$4 = 1e-6,\n tauEpsilon = tau$3 - epsilon$4;\n\nfunction append$1(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound$1(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append$1;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nlet Path$1 = class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append$1 : appendRound$1(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon$4));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon$4) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi$2 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon$4) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon$4 || Math.abs(this._y1 - y0) > epsilon$4) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau$3 + tau$3;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon$4) {\n this._append`A${r},${r},0,${+(da >= pi$2)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n};\n\nfunction path() {\n return new Path$1;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path$1.prototype;\n\nfunction pathRound(digits = 3) {\n return new Path$1(+digits);\n}\n\nvar slice$2 = Array.prototype.slice;\n\nfunction constant$6(x) {\n return function() {\n return x;\n };\n}\n\nfunction defaultSource$1(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius$1(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n return 0;\n}\n\nfunction defaultArrowheadRadius() {\n return 10;\n}\n\nfunction ribbon(headRadius) {\n var source = defaultSource$1,\n target = defaultTarget,\n sourceRadius = defaultRadius$1,\n targetRadius = defaultRadius$1,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n padAngle = defaultPadAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n s = source.apply(this, arguments),\n t = target.apply(this, arguments),\n ap = padAngle.apply(this, arguments) / 2,\n argv = slice$2.call(arguments),\n sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi$2,\n sa1 = endAngle.apply(this, argv) - halfPi$2,\n tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi$2,\n ta1 = endAngle.apply(this, argv) - halfPi$2;\n\n if (!context) context = buffer = path();\n\n if (ap > epsilon$5) {\n if (abs$2(sa1 - sa0) > ap * 2 + epsilon$5) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n else sa0 = sa1 = (sa0 + sa1) / 2;\n if (abs$2(ta1 - ta0) > ap * 2 + epsilon$5) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n else ta0 = ta1 = (ta0 + ta1) / 2;\n }\n\n context.moveTo(sr * cos$2(sa0), sr * sin$2(sa0));\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) {\n if (headRadius) {\n var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n context.quadraticCurveTo(0, 0, tr2 * cos$2(ta0), tr2 * sin$2(ta0));\n context.lineTo(tr * cos$2(ta2), tr * sin$2(ta2));\n context.lineTo(tr2 * cos$2(ta1), tr2 * sin$2(ta1));\n } else {\n context.quadraticCurveTo(0, 0, tr * cos$2(ta0), tr * sin$2(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n }\n context.quadraticCurveTo(0, 0, sr * cos$2(sa0), sr * sin$2(sa0));\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n if (headRadius) ribbon.headRadius = function(_) {\n return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : headRadius;\n };\n\n ribbon.radius = function(_) {\n return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : sourceRadius;\n };\n\n ribbon.sourceRadius = function(_) {\n return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : sourceRadius;\n };\n\n ribbon.targetRadius = function(_) {\n return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : targetRadius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : endAngle;\n };\n\n ribbon.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$6(+_), ribbon) : padAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\nfunction ribbon$1() {\n return ribbon();\n}\n\nfunction ribbonArrow() {\n return ribbon(defaultArrowheadRadius);\n}\n\nvar array$2 = Array.prototype;\n\nvar slice$1 = array$2.slice;\n\nfunction ascending$1(a, b) {\n return a - b;\n}\n\nfunction area$3(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n\nvar constant$5 = x => () => x;\n\nfunction contains$2(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear$1(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear$1(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n\nfunction noop$2() {}\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nfunction Contours() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n const e = extent$1(values, finite);\n tz = ticks(...nice$1(e[0], e[1], tz), tz);\n while (tz[tz.length - 1] >= e[1]) tz.pop();\n while (tz[1] < e[0]) tz.shift();\n } else {\n tz = tz.slice().sort(ascending$1);\n }\n\n return tz.map(value => contour(values, value));\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n const v = value == null ? NaN : +value;\n if (isNaN(v)) throw new Error(`invalid value: ${value}`);\n\n var polygons = [],\n holes = [];\n\n isorings(values, v, function(ring) {\n smooth(ring, values, v);\n if (area$3(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains$2((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = above(values[0], value);\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = above(values[x + 1], value);\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = above(values[y * dx + dx], value);\n t2 = above(values[y * dx], value);\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);\n t3 = t2, t2 = above(values[y * dx + x + 1], value);\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = above(values[y * dx + x + 1], value);\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v1 = valid(values[yt * dx + xt]);\n if (x > 0 && x < dx && xt === x) {\n point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);\n }\n if (y > 0 && y < dy && yt === y) {\n point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop$2, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n\n// When computing the extent, ignore infinite values (as well as invalid ones).\nfunction finite(x) {\n return isFinite(x) ? x : NaN;\n}\n\n// Is the (possibly invalid) x greater than or equal to the (known valid) value?\n// Treat any invalid value as below negative infinity.\nfunction above(x, value) {\n return x == null ? false : +x >= value;\n}\n\n// During smoothing, treat any invalid value as negative infinity.\nfunction valid(v) {\n return v == null || isNaN(v = +v) ? -Infinity : v;\n}\n\nfunction smooth1(x, v0, v1, value) {\n const a = value - v0;\n const b = v1 - v0;\n const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);\n return isNaN(d) ? x : x + d - 0.5;\n}\n\nfunction defaultX$1(d) {\n return d[0];\n}\n\nfunction defaultY$1(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nfunction density() {\n var x = defaultX$1,\n y = defaultY$1,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant$5(20);\n\n function grid(data) {\n var values = new Float32Array(n * m),\n pow2k = Math.pow(2, -k),\n i = -1;\n\n for (const d of data) {\n var xi = (x(d, ++i, data) + o) * pow2k,\n yi = (y(d, i, data) + o) * pow2k,\n wi = +weight(d, i, data);\n if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {\n var x0 = Math.floor(xi),\n y0 = Math.floor(yi),\n xt = xi - x0 - 0.5,\n yt = yi - y0 - 0.5;\n values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;\n values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;\n values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;\n values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;\n }\n }\n\n blur2({data: values, width: n, height: m}, r * pow2k);\n return values;\n }\n\n function density(data) {\n var values = grid(data),\n tz = threshold(values),\n pow4k = Math.pow(2, 2 * k);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n tz = ticks(Number.MIN_VALUE, max$3(values) / pow4k, tz);\n }\n\n return Contours()\n .size([n, m])\n .thresholds(tz.map(d => d * pow4k))\n (values)\n .map((c, i) => (c.value = +tz[i], transform(c)));\n }\n\n density.contours = function(data) {\n var values = grid(data),\n contours = Contours().size([n, m]),\n pow4k = Math.pow(2, 2 * k),\n contour = value => {\n value = +value;\n var c = transform(contours.contour(values, value * pow4k));\n c.value = value; // preserve exact threshold value\n return c;\n };\n Object.defineProperty(contour, \"max\", {get: () => max$3(values) / pow4k});\n return contour;\n };\n\n function transform(geometry) {\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$5(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$5(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant$5(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0], _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = (Math.sqrt(4 * _ * _ + 1) - 1) / 2, resize();\n };\n\n return density;\n}\n\nconst epsilon$3 = 1.1102230246251565e-16;\nconst splitter = 134217729;\nconst resulterrbound = (3 + 8 * epsilon$3) * epsilon$3;\n\n// fast_expansion_sum_zeroelim routine from oritinal code\nfunction sum$1(elen, e, flen, f, h) {\n let Q, Qnew, hh, bvirt;\n let enow = e[0];\n let fnow = f[0];\n let eindex = 0;\n let findex = 0;\n if ((fnow > enow) === (fnow > -enow)) {\n Q = enow;\n enow = e[++eindex];\n } else {\n Q = fnow;\n fnow = f[++findex];\n }\n let hindex = 0;\n if (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = enow + Q;\n hh = Q - (Qnew - enow);\n enow = e[++eindex];\n } else {\n Qnew = fnow + Q;\n hh = Q - (Qnew - fnow);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n while (eindex < elen && findex < flen) {\n if ((fnow > enow) === (fnow > -enow)) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n } else {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n }\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n }\n while (eindex < elen) {\n Qnew = Q + enow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (enow - bvirt);\n enow = e[++eindex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n while (findex < flen) {\n Qnew = Q + fnow;\n bvirt = Qnew - Q;\n hh = Q - (Qnew - bvirt) + (fnow - bvirt);\n fnow = f[++findex];\n Q = Qnew;\n if (hh !== 0) {\n h[hindex++] = hh;\n }\n }\n if (Q !== 0 || hindex === 0) {\n h[hindex++] = Q;\n }\n return hindex;\n}\n\nfunction estimate(elen, e) {\n let Q = e[0];\n for (let i = 1; i < elen; i++) Q += e[i];\n return Q;\n}\n\nfunction vec(n) {\n return new Float64Array(n);\n}\n\nconst ccwerrboundA = (3 + 16 * epsilon$3) * epsilon$3;\nconst ccwerrboundB = (2 + 12 * epsilon$3) * epsilon$3;\nconst ccwerrboundC = (9 + 64 * epsilon$3) * epsilon$3 * epsilon$3;\n\nconst B = vec(4);\nconst C1 = vec(8);\nconst C2 = vec(12);\nconst D = vec(16);\nconst u = vec(4);\n\nfunction orient2dadapt(ax, ay, bx, by, cx, cy, detsum) {\n let acxtail, acytail, bcxtail, bcytail;\n let bvirt, c, ahi, alo, bhi, blo, _i, _j, _0, s1, s0, t1, t0, u3;\n\n const acx = ax - cx;\n const bcx = bx - cx;\n const acy = ay - cy;\n const bcy = by - cy;\n\n s1 = acx * bcy;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcx;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n B[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n B[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n B[2] = _j - (u3 - bvirt) + (_i - bvirt);\n B[3] = u3;\n\n let det = estimate(4, B);\n let errbound = ccwerrboundB * detsum;\n if (det >= errbound || -det >= errbound) {\n return det;\n }\n\n bvirt = ax - acx;\n acxtail = ax - (acx + bvirt) + (bvirt - cx);\n bvirt = bx - bcx;\n bcxtail = bx - (bcx + bvirt) + (bvirt - cx);\n bvirt = ay - acy;\n acytail = ay - (acy + bvirt) + (bvirt - cy);\n bvirt = by - bcy;\n bcytail = by - (bcy + bvirt) + (bvirt - cy);\n\n if (acxtail === 0 && acytail === 0 && bcxtail === 0 && bcytail === 0) {\n return det;\n }\n\n errbound = ccwerrboundC * detsum + resulterrbound * Math.abs(det);\n det += (acx * bcytail + bcy * acxtail) - (acy * bcxtail + bcx * acytail);\n if (det >= errbound || -det >= errbound) return det;\n\n s1 = acxtail * bcy;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcy;\n bhi = c - (c - bcy);\n blo = bcy - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcx;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcx;\n bhi = c - (c - bcx);\n blo = bcx - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C1len = sum$1(4, B, 4, u, C1);\n\n s1 = acx * bcytail;\n c = splitter * acx;\n ahi = c - (c - acx);\n alo = acx - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acy * bcxtail;\n c = splitter * acy;\n ahi = c - (c - acy);\n alo = acy - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const C2len = sum$1(C1len, C1, 4, u, C2);\n\n s1 = acxtail * bcytail;\n c = splitter * acxtail;\n ahi = c - (c - acxtail);\n alo = acxtail - ahi;\n c = splitter * bcytail;\n bhi = c - (c - bcytail);\n blo = bcytail - bhi;\n s0 = alo * blo - (s1 - ahi * bhi - alo * bhi - ahi * blo);\n t1 = acytail * bcxtail;\n c = splitter * acytail;\n ahi = c - (c - acytail);\n alo = acytail - ahi;\n c = splitter * bcxtail;\n bhi = c - (c - bcxtail);\n blo = bcxtail - bhi;\n t0 = alo * blo - (t1 - ahi * bhi - alo * bhi - ahi * blo);\n _i = s0 - t0;\n bvirt = s0 - _i;\n u[0] = s0 - (_i + bvirt) + (bvirt - t0);\n _j = s1 + _i;\n bvirt = _j - s1;\n _0 = s1 - (_j - bvirt) + (_i - bvirt);\n _i = _0 - t1;\n bvirt = _0 - _i;\n u[1] = _0 - (_i + bvirt) + (bvirt - t1);\n u3 = _j + _i;\n bvirt = u3 - _j;\n u[2] = _j - (u3 - bvirt) + (_i - bvirt);\n u[3] = u3;\n const Dlen = sum$1(C2len, C2, 4, u, D);\n\n return D[Dlen - 1];\n}\n\nfunction orient2d(ax, ay, bx, by, cx, cy) {\n const detleft = (ay - cy) * (bx - cx);\n const detright = (ax - cx) * (by - cy);\n const det = detleft - detright;\n\n const detsum = Math.abs(detleft + detright);\n if (Math.abs(det) >= ccwerrboundA * detsum) return det;\n\n return -orient2dadapt(ax, ay, bx, by, cx, cy, detsum);\n}\n\nconst EPSILON = Math.pow(2, -52);\nconst EDGE_STACK = new Uint32Array(512);\n\nclass Delaunator {\n\n static from(points, getX = defaultGetX, getY = defaultGetY) {\n const n = points.length;\n const coords = new Float64Array(n * 2);\n\n for (let i = 0; i < n; i++) {\n const p = points[i];\n coords[2 * i] = getX(p);\n coords[2 * i + 1] = getY(p);\n }\n\n return new Delaunator(coords);\n }\n\n constructor(coords) {\n const n = coords.length >> 1;\n if (n > 0 && typeof coords[0] !== 'number') throw new Error('Expected coords to contain numbers.');\n\n this.coords = coords;\n\n // arrays that will store the triangulation graph\n const maxTriangles = Math.max(2 * n - 5, 0);\n this._triangles = new Uint32Array(maxTriangles * 3);\n this._halfedges = new Int32Array(maxTriangles * 3);\n\n // temporary arrays for tracking the edges of the advancing convex hull\n this._hashSize = Math.ceil(Math.sqrt(n));\n this._hullPrev = new Uint32Array(n); // edge to prev edge\n this._hullNext = new Uint32Array(n); // edge to next edge\n this._hullTri = new Uint32Array(n); // edge to adjacent triangle\n this._hullHash = new Int32Array(this._hashSize); // angular edge hash\n\n // temporary arrays for sorting points\n this._ids = new Uint32Array(n);\n this._dists = new Float64Array(n);\n\n this.update();\n }\n\n update() {\n const {coords, _hullPrev: hullPrev, _hullNext: hullNext, _hullTri: hullTri, _hullHash: hullHash} = this;\n const n = coords.length >> 1;\n\n // populate an array of point indices; calculate input data bbox\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this._ids[i] = i;\n }\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n\n let i0, i1, i2;\n\n // pick a seed point close to the center\n for (let i = 0, minDist = Infinity; i < n; i++) {\n const d = dist(cx, cy, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist) {\n i0 = i;\n minDist = d;\n }\n }\n const i0x = coords[2 * i0];\n const i0y = coords[2 * i0 + 1];\n\n // find the point closest to the seed\n for (let i = 0, minDist = Infinity; i < n; i++) {\n if (i === i0) continue;\n const d = dist(i0x, i0y, coords[2 * i], coords[2 * i + 1]);\n if (d < minDist && d > 0) {\n i1 = i;\n minDist = d;\n }\n }\n let i1x = coords[2 * i1];\n let i1y = coords[2 * i1 + 1];\n\n let minRadius = Infinity;\n\n // find the third point which forms the smallest circumcircle with the first two\n for (let i = 0; i < n; i++) {\n if (i === i0 || i === i1) continue;\n const r = circumradius(i0x, i0y, i1x, i1y, coords[2 * i], coords[2 * i + 1]);\n if (r < minRadius) {\n i2 = i;\n minRadius = r;\n }\n }\n let i2x = coords[2 * i2];\n let i2y = coords[2 * i2 + 1];\n\n if (minRadius === Infinity) {\n // order collinear points by dx (or dy if all x are identical)\n // and return the list as a hull\n for (let i = 0; i < n; i++) {\n this._dists[i] = (coords[2 * i] - coords[0]) || (coords[2 * i + 1] - coords[1]);\n }\n quicksort(this._ids, this._dists, 0, n - 1);\n const hull = new Uint32Array(n);\n let j = 0;\n for (let i = 0, d0 = -Infinity; i < n; i++) {\n const id = this._ids[i];\n const d = this._dists[id];\n if (d > d0) {\n hull[j++] = id;\n d0 = d;\n }\n }\n this.hull = hull.subarray(0, j);\n this.triangles = new Uint32Array(0);\n this.halfedges = new Uint32Array(0);\n return;\n }\n\n // swap the order of the seed points for counter-clockwise orientation\n if (orient2d(i0x, i0y, i1x, i1y, i2x, i2y) < 0) {\n const i = i1;\n const x = i1x;\n const y = i1y;\n i1 = i2;\n i1x = i2x;\n i1y = i2y;\n i2 = i;\n i2x = x;\n i2y = y;\n }\n\n const center = circumcenter(i0x, i0y, i1x, i1y, i2x, i2y);\n this._cx = center.x;\n this._cy = center.y;\n\n for (let i = 0; i < n; i++) {\n this._dists[i] = dist(coords[2 * i], coords[2 * i + 1], center.x, center.y);\n }\n\n // sort the points by distance from the seed triangle circumcenter\n quicksort(this._ids, this._dists, 0, n - 1);\n\n // set up the seed triangle as the starting hull\n this._hullStart = i0;\n let hullSize = 3;\n\n hullNext[i0] = hullPrev[i2] = i1;\n hullNext[i1] = hullPrev[i0] = i2;\n hullNext[i2] = hullPrev[i1] = i0;\n\n hullTri[i0] = 0;\n hullTri[i1] = 1;\n hullTri[i2] = 2;\n\n hullHash.fill(-1);\n hullHash[this._hashKey(i0x, i0y)] = i0;\n hullHash[this._hashKey(i1x, i1y)] = i1;\n hullHash[this._hashKey(i2x, i2y)] = i2;\n\n this.trianglesLen = 0;\n this._addTriangle(i0, i1, i2, -1, -1, -1);\n\n for (let k = 0, xp, yp; k < this._ids.length; k++) {\n const i = this._ids[k];\n const x = coords[2 * i];\n const y = coords[2 * i + 1];\n\n // skip near-duplicate points\n if (k > 0 && Math.abs(x - xp) <= EPSILON && Math.abs(y - yp) <= EPSILON) continue;\n xp = x;\n yp = y;\n\n // skip seed triangle points\n if (i === i0 || i === i1 || i === i2) continue;\n\n // find a visible edge on the convex hull using edge hash\n let start = 0;\n for (let j = 0, key = this._hashKey(x, y); j < this._hashSize; j++) {\n start = hullHash[(key + j) % this._hashSize];\n if (start !== -1 && start !== hullNext[start]) break;\n }\n\n start = hullPrev[start];\n let e = start, q;\n while (q = hullNext[e], orient2d(x, y, coords[2 * e], coords[2 * e + 1], coords[2 * q], coords[2 * q + 1]) >= 0) {\n e = q;\n if (e === start) {\n e = -1;\n break;\n }\n }\n if (e === -1) continue; // likely a near-duplicate point; skip it\n\n // add the first triangle from the point\n let t = this._addTriangle(e, i, hullNext[e], -1, -1, hullTri[e]);\n\n // recursively flip triangles from the point until they satisfy the Delaunay condition\n hullTri[i] = this._legalize(t + 2);\n hullTri[e] = t; // keep track of boundary triangles on the hull\n hullSize++;\n\n // walk forward through the hull, adding more triangles and flipping recursively\n let n = hullNext[e];\n while (q = hullNext[n], orient2d(x, y, coords[2 * n], coords[2 * n + 1], coords[2 * q], coords[2 * q + 1]) < 0) {\n t = this._addTriangle(n, i, q, hullTri[i], -1, hullTri[n]);\n hullTri[i] = this._legalize(t + 2);\n hullNext[n] = n; // mark as removed\n hullSize--;\n n = q;\n }\n\n // walk backward from the other side, adding more triangles and flipping\n if (e === start) {\n while (q = hullPrev[e], orient2d(x, y, coords[2 * q], coords[2 * q + 1], coords[2 * e], coords[2 * e + 1]) < 0) {\n t = this._addTriangle(q, i, e, -1, hullTri[e], hullTri[q]);\n this._legalize(t + 2);\n hullTri[q] = t;\n hullNext[e] = e; // mark as removed\n hullSize--;\n e = q;\n }\n }\n\n // update the hull indices\n this._hullStart = hullPrev[i] = e;\n hullNext[e] = hullPrev[n] = i;\n hullNext[i] = n;\n\n // save the two new edges in the hash table\n hullHash[this._hashKey(x, y)] = i;\n hullHash[this._hashKey(coords[2 * e], coords[2 * e + 1])] = e;\n }\n\n this.hull = new Uint32Array(hullSize);\n for (let i = 0, e = this._hullStart; i < hullSize; i++) {\n this.hull[i] = e;\n e = hullNext[e];\n }\n\n // trim typed triangle mesh arrays\n this.triangles = this._triangles.subarray(0, this.trianglesLen);\n this.halfedges = this._halfedges.subarray(0, this.trianglesLen);\n }\n\n _hashKey(x, y) {\n return Math.floor(pseudoAngle(x - this._cx, y - this._cy) * this._hashSize) % this._hashSize;\n }\n\n _legalize(a) {\n const {_triangles: triangles, _halfedges: halfedges, coords} = this;\n\n let i = 0;\n let ar = 0;\n\n // recursion eliminated with a fixed-size stack\n while (true) {\n const b = halfedges[a];\n\n /* if the pair of triangles doesn't satisfy the Delaunay condition\n * (p1 is inside the circumcircle of [p0, pl, pr]), flip them,\n * then do the same check/flip recursively for the new pair of triangles\n *\n * pl pl\n * /||\\ / \\\n * al/ || \\bl al/ \\a\n * / || \\ / \\\n * / a||b \\ flip /___ar___\\\n * p0\\ || /p1 => p0\\---bl---/p1\n * \\ || / \\ /\n * ar\\ || /br b\\ /br\n * \\||/ \\ /\n * pr pr\n */\n const a0 = a - a % 3;\n ar = a0 + (a + 2) % 3;\n\n if (b === -1) { // convex hull edge\n if (i === 0) break;\n a = EDGE_STACK[--i];\n continue;\n }\n\n const b0 = b - b % 3;\n const al = a0 + (a + 1) % 3;\n const bl = b0 + (b + 2) % 3;\n\n const p0 = triangles[ar];\n const pr = triangles[a];\n const pl = triangles[al];\n const p1 = triangles[bl];\n\n const illegal = inCircle(\n coords[2 * p0], coords[2 * p0 + 1],\n coords[2 * pr], coords[2 * pr + 1],\n coords[2 * pl], coords[2 * pl + 1],\n coords[2 * p1], coords[2 * p1 + 1]);\n\n if (illegal) {\n triangles[a] = p1;\n triangles[b] = p0;\n\n const hbl = halfedges[bl];\n\n // edge swapped on the other side of the hull (rare); fix the halfedge reference\n if (hbl === -1) {\n let e = this._hullStart;\n do {\n if (this._hullTri[e] === bl) {\n this._hullTri[e] = a;\n break;\n }\n e = this._hullPrev[e];\n } while (e !== this._hullStart);\n }\n this._link(a, hbl);\n this._link(b, halfedges[ar]);\n this._link(ar, bl);\n\n const br = b0 + (b + 1) % 3;\n\n // don't worry about hitting the cap: it can only happen on extremely degenerate input\n if (i < EDGE_STACK.length) {\n EDGE_STACK[i++] = br;\n }\n } else {\n if (i === 0) break;\n a = EDGE_STACK[--i];\n }\n }\n\n return ar;\n }\n\n _link(a, b) {\n this._halfedges[a] = b;\n if (b !== -1) this._halfedges[b] = a;\n }\n\n // add a new triangle given vertex indices and adjacent half-edge ids\n _addTriangle(i0, i1, i2, a, b, c) {\n const t = this.trianglesLen;\n\n this._triangles[t] = i0;\n this._triangles[t + 1] = i1;\n this._triangles[t + 2] = i2;\n\n this._link(t, a);\n this._link(t + 1, b);\n this._link(t + 2, c);\n\n this.trianglesLen += 3;\n\n return t;\n }\n}\n\n// monotonically increases with real angle, but doesn't need expensive trigonometry\nfunction pseudoAngle(dx, dy) {\n const p = dx / (Math.abs(dx) + Math.abs(dy));\n return (dy > 0 ? 3 - p : 1 + p) / 4; // [0..1]\n}\n\nfunction dist(ax, ay, bx, by) {\n const dx = ax - bx;\n const dy = ay - by;\n return dx * dx + dy * dy;\n}\n\nfunction inCircle(ax, ay, bx, by, cx, cy, px, py) {\n const dx = ax - px;\n const dy = ay - py;\n const ex = bx - px;\n const ey = by - py;\n const fx = cx - px;\n const fy = cy - py;\n\n const ap = dx * dx + dy * dy;\n const bp = ex * ex + ey * ey;\n const cp = fx * fx + fy * fy;\n\n return dx * (ey * cp - bp * fy) -\n dy * (ex * cp - bp * fx) +\n ap * (ex * fy - ey * fx) < 0;\n}\n\nfunction circumradius(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = (ey * bl - dy * cl) * d;\n const y = (dx * cl - ex * bl) * d;\n\n return x * x + y * y;\n}\n\nfunction circumcenter(ax, ay, bx, by, cx, cy) {\n const dx = bx - ax;\n const dy = by - ay;\n const ex = cx - ax;\n const ey = cy - ay;\n\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const d = 0.5 / (dx * ey - dy * ex);\n\n const x = ax + (ey * bl - dy * cl) * d;\n const y = ay + (dx * cl - ex * bl) * d;\n\n return {x, y};\n}\n\nfunction quicksort(ids, dists, left, right) {\n if (right - left <= 20) {\n for (let i = left + 1; i <= right; i++) {\n const temp = ids[i];\n const tempDist = dists[temp];\n let j = i - 1;\n while (j >= left && dists[ids[j]] > tempDist) ids[j + 1] = ids[j--];\n ids[j + 1] = temp;\n }\n } else {\n const median = (left + right) >> 1;\n let i = left + 1;\n let j = right;\n swap(ids, median, i);\n if (dists[ids[left]] > dists[ids[right]]) swap(ids, left, right);\n if (dists[ids[i]] > dists[ids[right]]) swap(ids, i, right);\n if (dists[ids[left]] > dists[ids[i]]) swap(ids, left, i);\n\n const temp = ids[i];\n const tempDist = dists[temp];\n while (true) {\n do i++; while (dists[ids[i]] < tempDist);\n do j--; while (dists[ids[j]] > tempDist);\n if (j < i) break;\n swap(ids, i, j);\n }\n ids[left + 1] = ids[j];\n ids[j] = temp;\n\n if (right - i + 1 >= j - left) {\n quicksort(ids, dists, i, right);\n quicksort(ids, dists, left, j - 1);\n } else {\n quicksort(ids, dists, left, j - 1);\n quicksort(ids, dists, i, right);\n }\n }\n}\n\nfunction swap(arr, i, j) {\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n}\n\nfunction defaultGetX(p) {\n return p[0];\n}\nfunction defaultGetY(p) {\n return p[1];\n}\n\nconst epsilon$2 = 1e-6;\n\nclass Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon$2 || Math.abs(this._y1 - y0) > epsilon$2) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n\nclass Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n\nclass Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n let bx, by; // lazily computed barycenter of the hull\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (Math.abs(ab) < 1e-9) {\n // For a degenerate triangle, the circumcenter is at the infinity, in a\n // direction orthogonal to the halfedge and away from the “center” of\n // the diagram , defined as the hull’s barycenter.\n if (bx === undefined) {\n bx = by = 0;\n for (const i of hull) bx += points[i * 2], by += points[i * 2 + 1];\n bx /= hull.length, by /= hull.length;\n }\n const a = 1e9 * Math.sign((bx - x1) * ey - (by - y1) * ex);\n x = (x1 + x3) / 2 - a * ey;\n y = (y1 + y3) / 2 + a * ex;\n } else {\n const d = 1 / ab;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] === cj[aj]\n && ci[ai + 1] === cj[aj + 1]\n && ci[(ai + 2) % li] === cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] === cj[(aj + lj - 1) % lj]) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return this._simplify(V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points));\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1 = 0;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n // for more robustness, always consider the segment in the same order\n const flip = c0 < c1;\n if (flip) [x0, y0, x1, y1, c0, c1] = [x1, y1, x0, y0, c1, c0];\n while (true) {\n if (c0 === 0 && c1 === 0) return flip ? [x1, y1, x0, y0] : [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n // Note: this implicitly checks for out of bounds: if P[j] or P[j+1] are\n // undefined, the conditional statement will be executed.\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n _simplify(P) {\n if (P && P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k] || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1]) {\n P.splice(j, 2), i -= 2;\n }\n }\n if (!P.length) P = null;\n }\n return P;\n }\n}\n\nconst tau$2 = 2 * Math.PI, pow$2 = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nclass Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n inedges[hull[0]] = 1;\n if (hull.length === 2) {\n inedges[hull[1]] = 0;\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n }\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow$2(x - points[i * 2], 2) + pow$2(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow$2(x - points[t * 2], 2) + pow$2(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow$2(x - points[e * 2], 2) + pow$2(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r) {\n if (r === undefined && (!context || typeof context.moveTo !== \"function\")) r = context, context = null;\n r = r == undefined ? 2 : +r;\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau$2);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n\nvar EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad$1(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear$1(year) {\n return year < 0 ? \"-\" + pad$1(-year, 6)\n : year > 9999 ? \"+\" + pad$1(year, 6)\n : pad$1(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear$1(date.getUTCFullYear()) + \"-\" + pad$1(date.getUTCMonth() + 1, 2) + \"-\" + pad$1(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad$1(hours, 2) + \":\" + pad$1(minutes, 2) + \":\" + pad$1(seconds, 2) + \".\" + pad$1(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad$1(hours, 2) + \":\" + pad$1(minutes, 2) + \":\" + pad$1(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad$1(hours, 2) + \":\" + pad$1(minutes, 2) + \"Z\"\n : \"\");\n}\n\nfunction dsvFormat(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n\nvar csv$1 = dsvFormat(\",\");\n\nvar csvParse = csv$1.parse;\nvar csvParseRows = csv$1.parseRows;\nvar csvFormat = csv$1.format;\nvar csvFormatBody = csv$1.formatBody;\nvar csvFormatRows = csv$1.formatRows;\nvar csvFormatRow = csv$1.formatRow;\nvar csvFormatValue = csv$1.formatValue;\n\nvar tsv$1 = dsvFormat(\"\\t\");\n\nvar tsvParse = tsv$1.parse;\nvar tsvParseRows = tsv$1.parseRows;\nvar tsvFormat = tsv$1.format;\nvar tsvFormatBody = tsv$1.formatBody;\nvar tsvFormatRows = tsv$1.formatRows;\nvar tsvFormatRow = tsv$1.formatRow;\nvar tsvFormatValue = tsv$1.formatValue;\n\nfunction autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();\n\nfunction responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nfunction blob(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n\nfunction responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nfunction buffer(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n\nfunction responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nfunction text(input, init) {\n return fetch(input, init).then(responseText);\n}\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nfunction dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nvar csv = dsvParse(csvParse);\nvar tsv = dsvParse(tsvParse);\n\nfunction image(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n\nfunction responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\nfunction json(input, init) {\n return fetch(input, init).then(responseJson);\n}\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nvar xml = parser(\"application/xml\");\n\nvar html = parser(\"text/html\");\n\nvar svg = parser(\"image/svg+xml\");\n\nfunction center(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n\nfunction tree_add(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nfunction addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n\nfunction tree_cover(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n\nfunction tree_data() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n\nfunction tree_extent(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n\nfunction Quad(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n\nfunction tree_find(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n\nfunction tree_remove(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nfunction removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n\nfunction tree_root() {\n return this._root;\n}\n\nfunction tree_size() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n\nfunction tree_visit(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n\nfunction tree_visitAfter(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction tree_x(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction tree_y(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n\nfunction quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n\nfunction constant$4(x) {\n return function() {\n return x;\n };\n}\n\nfunction jiggle(random) {\n return (random() - 0.5) * 1e-6;\n}\n\nfunction x$3(d) {\n return d.x + d.vx;\n}\n\nfunction y$3(d) {\n return d.y + d.vy;\n}\n\nfunction collide(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant$4(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x$3, y$3).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n\nfunction index$3(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nfunction link$2(links) {\n var id = index$3,\n strength = defaultStrength,\n strengths,\n distance = constant$4(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$4(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant$4(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a$2 = 1664525;\nconst c$4 = 1013904223;\nconst m$1 = 4294967296; // 2^32\n\nfunction lcg$2() {\n let s = 1;\n return () => (s = (a$2 * s + c$4) % m$1) / m$1;\n}\n\nfunction x$2(d) {\n return d.x;\n}\n\nfunction y$2(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nfunction simulation(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg$2();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n\nfunction manyBody() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant$4(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n\nfunction radial$1(radius, x, y) {\n var nodes,\n strength = constant$4(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant$4(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = node.y - y || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n node.vy += dy * k;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _, initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n\nfunction x$1(x) {\n var strength = constant$4(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant$4(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : x;\n };\n\n return force;\n}\n\nfunction y$1(y) {\n var strength = constant$4(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant$4(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant$4(+_), initialize(), force) : y;\n };\n\n return force;\n}\n\nfunction formatDecimal(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nfunction formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n\nfunction exponent(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n\nfunction formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n\nfunction formatNumerals(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n\n// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nfunction formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n\n// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nfunction formatTrim(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n\nvar prefixExponent;\n\nfunction formatPrefixAuto(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n\nfunction formatRounded(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n\nvar formatTypes = {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n\nfunction identity$6(x) {\n return x;\n}\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nfunction formatLocale$1(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity$6 : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity$6 : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n\nvar locale$1;\nexports.format = void 0;\nexports.formatPrefix = void 0;\n\ndefaultLocale$1({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nfunction defaultLocale$1(definition) {\n locale$1 = formatLocale$1(definition);\n exports.format = locale$1.format;\n exports.formatPrefix = locale$1.formatPrefix;\n return locale$1;\n}\n\nfunction precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n\nfunction precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n\nfunction precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n\nvar epsilon$1 = 1e-6;\nvar epsilon2 = 1e-12;\nvar pi$1 = Math.PI;\nvar halfPi$1 = pi$1 / 2;\nvar quarterPi = pi$1 / 4;\nvar tau$1 = pi$1 * 2;\n\nvar degrees = 180 / pi$1;\nvar radians = pi$1 / 180;\n\nvar abs$1 = Math.abs;\nvar atan = Math.atan;\nvar atan2$1 = Math.atan2;\nvar cos$1 = Math.cos;\nvar ceil = Math.ceil;\nvar exp = Math.exp;\nvar hypot = Math.hypot;\nvar log$1 = Math.log;\nvar pow$1 = Math.pow;\nvar sin$1 = Math.sin;\nvar sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nvar sqrt$2 = Math.sqrt;\nvar tan = Math.tan;\n\nfunction acos$1(x) {\n return x > 1 ? 0 : x < -1 ? pi$1 : Math.acos(x);\n}\n\nfunction asin$1(x) {\n return x > 1 ? halfPi$1 : x < -1 ? -halfPi$1 : Math.asin(x);\n}\n\nfunction haversin(x) {\n return (x = sin$1(x / 2)) * x;\n}\n\nfunction noop$1() {}\n\nfunction streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nfunction geoStream(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n\nvar areaRingSum$1 = new Adder();\n\n// hello?\n\nvar areaSum$1 = new Adder(),\n lambda00$2,\n phi00$2,\n lambda0$2,\n cosPhi0$1,\n sinPhi0$1;\n\nvar areaStream$1 = {\n point: noop$1,\n lineStart: noop$1,\n lineEnd: noop$1,\n polygonStart: function() {\n areaRingSum$1 = new Adder();\n areaStream$1.lineStart = areaRingStart$1;\n areaStream$1.lineEnd = areaRingEnd$1;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum$1;\n areaSum$1.add(areaRing < 0 ? tau$1 + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop$1;\n },\n sphere: function() {\n areaSum$1.add(tau$1);\n }\n};\n\nfunction areaRingStart$1() {\n areaStream$1.point = areaPointFirst$1;\n}\n\nfunction areaRingEnd$1() {\n areaPoint$1(lambda00$2, phi00$2);\n}\n\nfunction areaPointFirst$1(lambda, phi) {\n areaStream$1.point = areaPoint$1;\n lambda00$2 = lambda, phi00$2 = phi;\n lambda *= radians, phi *= radians;\n lambda0$2 = lambda, cosPhi0$1 = cos$1(phi = phi / 2 + quarterPi), sinPhi0$1 = sin$1(phi);\n}\n\nfunction areaPoint$1(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0$2,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos$1(phi),\n sinPhi = sin$1(phi),\n k = sinPhi0$1 * sinPhi,\n u = cosPhi0$1 * cosPhi + k * cos$1(adLambda),\n v = k * sdLambda * sin$1(adLambda);\n areaRingSum$1.add(atan2$1(v, u));\n\n // Advance the previous points.\n lambda0$2 = lambda, cosPhi0$1 = cosPhi, sinPhi0$1 = sinPhi;\n}\n\nfunction area$2(object) {\n areaSum$1 = new Adder();\n geoStream(object, areaStream$1);\n return areaSum$1 * 2;\n}\n\nfunction spherical(cartesian) {\n return [atan2$1(cartesian[1], cartesian[0]), asin$1(cartesian[2])];\n}\n\nfunction cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);\n return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];\n}\n\nfunction cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nfunction cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nfunction cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nfunction cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nfunction cartesianNormalizeInPlace(d) {\n var l = sqrt$2(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n\nvar lambda0$1, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00$1, phi00$1, // first point\n p0, // previous 3D point\n deltaSum,\n ranges,\n range;\n\nvar boundsStream$2 = {\n point: boundsPoint$1,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream$2.point = boundsRingPoint;\n boundsStream$2.lineStart = boundsRingStart;\n boundsStream$2.lineEnd = boundsRingEnd;\n deltaSum = new Adder();\n areaStream$1.polygonStart();\n },\n polygonEnd: function() {\n areaStream$1.polygonEnd();\n boundsStream$2.point = boundsPoint$1;\n boundsStream$2.lineStart = boundsLineStart;\n boundsStream$2.lineEnd = boundsLineEnd;\n if (areaRingSum$1 < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon$1) phi1 = 90;\n else if (deltaSum < -epsilon$1) phi0 = -90;\n range[0] = lambda0$1, range[1] = lambda1;\n },\n sphere: function() {\n lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n }\n};\n\nfunction boundsPoint$1(lambda, phi) {\n ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs$1(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n }\n } else {\n if (lambda1 >= lambda0$1) {\n if (lambda < lambda0$1) lambda0$1 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream$2.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0$1, range[1] = lambda1;\n boundsStream$2.point = boundsPoint$1;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs$1(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00$1 = lambda, phi00$1 = phi;\n }\n areaStream$1.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream$1.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00$1, phi00$1);\n areaStream$1.lineEnd();\n if (abs$1(deltaSum) > epsilon$1) lambda0$1 = -(lambda1 = 180);\n range[0] = lambda0$1, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nfunction bounds(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);\n ranges = [];\n geoStream(feature, boundsStream$2);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0$1 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0$1, phi0], [lambda1, phi1]];\n}\n\nvar W0, W1,\n X0$1, Y0$1, Z0$1,\n X1$1, Y1$1, Z1$1,\n X2$1, Y2$1, Z2$1,\n lambda00, phi00, // first point\n x0$4, y0$4, z0; // previous point\n\nvar centroidStream$1 = {\n sphere: noop$1,\n point: centroidPoint$1,\n lineStart: centroidLineStart$1,\n lineEnd: centroidLineEnd$1,\n polygonStart: function() {\n centroidStream$1.lineStart = centroidRingStart$1;\n centroidStream$1.lineEnd = centroidRingEnd$1;\n },\n polygonEnd: function() {\n centroidStream$1.lineStart = centroidLineStart$1;\n centroidStream$1.lineEnd = centroidLineEnd$1;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint$1(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi);\n centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0$1 += (x - X0$1) / W0;\n Y0$1 += (y - Y0$1) / W0;\n Z0$1 += (z - Z0$1) / W0;\n}\n\nfunction centroidLineStart$1() {\n centroidStream$1.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi);\n x0$4 = cosPhi * cos$1(lambda);\n y0$4 = cosPhi * sin$1(lambda);\n z0 = sin$1(phi);\n centroidStream$1.point = centroidLinePoint;\n centroidPointCartesian(x0$4, y0$4, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi),\n x = cosPhi * cos$1(lambda),\n y = cosPhi * sin$1(lambda),\n z = sin$1(phi),\n w = atan2$1(sqrt$2((w = y0$4 * z - z0 * y) * w + (w = z0 * x - x0$4 * z) * w + (w = x0$4 * y - y0$4 * x) * w), x0$4 * x + y0$4 * y + z0 * z);\n W1 += w;\n X1$1 += w * (x0$4 + (x0$4 = x));\n Y1$1 += w * (y0$4 + (y0$4 = y));\n Z1$1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0$4, y0$4, z0);\n}\n\nfunction centroidLineEnd$1() {\n centroidStream$1.point = centroidPoint$1;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart$1() {\n centroidStream$1.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd$1() {\n centroidRingPoint(lambda00, phi00);\n centroidStream$1.point = centroidPoint$1;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream$1.point = centroidRingPoint;\n var cosPhi = cos$1(phi);\n x0$4 = cosPhi * cos$1(lambda);\n y0$4 = cosPhi * sin$1(lambda);\n z0 = sin$1(phi);\n centroidPointCartesian(x0$4, y0$4, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos$1(phi),\n x = cosPhi * cos$1(lambda),\n y = cosPhi * sin$1(lambda),\n z = sin$1(phi),\n cx = y0$4 * z - z0 * y,\n cy = z0 * x - x0$4 * z,\n cz = x0$4 * y - y0$4 * x,\n m = hypot(cx, cy, cz),\n w = asin$1(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2$1.add(v * cx);\n Y2$1.add(v * cy);\n Z2$1.add(v * cz);\n W1 += w;\n X1$1 += w * (x0$4 + (x0$4 = x));\n Y1$1 += w * (y0$4 + (y0$4 = y));\n Z1$1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0$4, y0$4, z0);\n}\n\nfunction centroid$1(object) {\n W0 = W1 =\n X0$1 = Y0$1 = Z0$1 =\n X1$1 = Y1$1 = Z1$1 = 0;\n X2$1 = new Adder();\n Y2$1 = new Adder();\n Z2$1 = new Adder();\n geoStream(object, centroidStream$1);\n\n var x = +X2$1,\n y = +Y2$1,\n z = +Z2$1,\n m = hypot(x, y, z);\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1$1, y = Y1$1, z = Z1$1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon$1) x = X0$1, y = Y0$1, z = Z0$1;\n m = hypot(x, y, z);\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2$1(y, x) * degrees, asin$1(z / m) * degrees];\n}\n\nfunction constant$3(x) {\n return function() {\n return x;\n };\n}\n\nfunction compose(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n\nfunction rotationIdentity(lambda, phi) {\n if (abs$1(lambda) > pi$1) lambda -= Math.round(lambda / tau$1) * tau$1;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nfunction rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau$1) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs$1(lambda) > pi$1) lambda -= Math.round(lambda / tau$1) * tau$1;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos$1(deltaPhi),\n sinDeltaPhi = sin$1(deltaPhi),\n cosDeltaGamma = cos$1(deltaGamma),\n sinDeltaGamma = sin$1(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos$1(phi),\n x = cos$1(lambda) * cosPhi,\n y = sin$1(lambda) * cosPhi,\n z = sin$1(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2$1(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin$1(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos$1(phi),\n x = cos$1(lambda) * cosPhi,\n y = sin$1(lambda) * cosPhi,\n z = sin$1(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2$1(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin$1(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nfunction rotation(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nfunction circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos$1(radius),\n sinRadius = sin$1(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau$1;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$1;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos$1(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau$1 - epsilon$1) % tau$1;\n}\n\nfunction circle$1() {\n var center = constant$3([0, 0]),\n radius = constant$3(90),\n precision = constant$3(2),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant$3([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant$3(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant$3(+_), circle) : precision;\n };\n\n return circle;\n}\n\nfunction clipBuffer() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop$1,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n\nfunction pointEqual(a, b) {\n return abs$1(a[0] - b[0]) < epsilon$1 && abs$1(a[1] - b[1]) < epsilon$1;\n}\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nfunction clipRejoin(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon$1;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link$1(subject);\n link$1(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link$1(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n\nfunction longitude(point) {\n return abs$1(point[0]) <= pi$1 ? point[0] : sign$1(point[0]) * ((abs$1(point[0]) + pi$1) % tau$1 - pi$1);\n}\n\nfunction polygonContains(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin$1(phi),\n normal = [sin$1(lambda), -cos$1(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi$1 + epsilon$1;\n else if (sinPhi === -1) phi = -halfPi$1 - epsilon$1;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin$1(phi0),\n cosPhi0 = cos$1(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin$1(phi1),\n cosPhi1 = cos$1(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi$1,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2$1(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));\n angle += antimeridian ? delta + sign * tau$1 : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon$1 || angle < epsilon$1 && sum < -epsilon2) ^ (winding & 1);\n}\n\nfunction clip(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi$1 - epsilon$1 : halfPi$1 - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi$1 - epsilon$1 : halfPi$1 - b[1]);\n}\n\nvar clipAntimeridian = clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi$1, -halfPi$1]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi$1 : -pi$1,\n delta = abs$1(lambda1 - lambda0);\n if (abs$1(delta - pi$1) < epsilon$1) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$1 : -halfPi$1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi$1) { // line crosses antimeridian\n if (abs$1(lambda0 - sign0) < epsilon$1) lambda0 -= sign0 * epsilon$1; // handle degeneracies\n if (abs$1(lambda1 - sign1) < epsilon$1) lambda1 -= sign1 * epsilon$1;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin$1(lambda0 - lambda1);\n return abs$1(sinLambda0Lambda1) > epsilon$1\n ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)\n - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi$1;\n stream.point(-pi$1, phi);\n stream.point(0, phi);\n stream.point(pi$1, phi);\n stream.point(pi$1, 0);\n stream.point(pi$1, -phi);\n stream.point(0, -phi);\n stream.point(-pi$1, -phi);\n stream.point(-pi$1, 0);\n stream.point(-pi$1, phi);\n } else if (abs$1(from[0] - to[0]) > epsilon$1) {\n var lambda = from[0] < to[0] ? pi$1 : -pi$1;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n\nfunction clipCircle(radius) {\n var cr = cos$1(radius),\n delta = 2 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs$1(cr) > epsilon$1; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos$1(lambda) * cos$1(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi$1 : -pi$1), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt$2(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs$1(delta - pi$1) < epsilon$1,\n meridian = polar || delta < epsilon$1;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$1 ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi$1 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi$1 - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$1, radius - pi$1]);\n}\n\nfunction clipLine(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nfunction clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs$1(p[0] - x0) < epsilon$1 ? direction > 0 ? 0 : 3\n : abs$1(p[0] - x1) < epsilon$1 ? direction > 0 ? 2 : 1\n : abs$1(p[1] - y0) < epsilon$1 ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n\nfunction extent() {\n var x0 = 0,\n y0 = 0,\n x1 = 960,\n y1 = 500,\n cache,\n cacheStream,\n clip;\n\n return clip = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n },\n extent: function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n }\n };\n}\n\nvar lengthSum$1,\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream$1 = {\n sphere: noop$1,\n point: noop$1,\n lineStart: lengthLineStart,\n lineEnd: noop$1,\n polygonStart: noop$1,\n polygonEnd: noop$1\n};\n\nfunction lengthLineStart() {\n lengthStream$1.point = lengthPointFirst$1;\n lengthStream$1.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream$1.point = lengthStream$1.lineEnd = noop$1;\n}\n\nfunction lengthPointFirst$1(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin$1(phi), cosPhi0 = cos$1(phi);\n lengthStream$1.point = lengthPoint$1;\n}\n\nfunction lengthPoint$1(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin$1(phi),\n cosPhi = cos$1(phi),\n delta = abs$1(lambda - lambda0),\n cosDelta = cos$1(delta),\n sinDelta = sin$1(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum$1.add(atan2$1(sqrt$2(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nfunction length$1(object) {\n lengthSum$1 = new Adder();\n geoStream(object, lengthStream$1);\n return +lengthSum$1;\n}\n\nvar coordinates = [null, null],\n object = {type: \"LineString\", coordinates: coordinates};\n\nfunction distance(a, b) {\n coordinates[0] = a;\n coordinates[1] = b;\n return length$1(object);\n}\n\nvar containsObjectType = {\n Feature: function(object, point) {\n return containsGeometry(object.geometry, point);\n },\n FeatureCollection: function(object, point) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n return false;\n }\n};\n\nvar containsGeometryType = {\n Sphere: function() {\n return true;\n },\n Point: function(object, point) {\n return containsPoint(object.coordinates, point);\n },\n MultiPoint: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n return false;\n },\n LineString: function(object, point) {\n return containsLine(object.coordinates, point);\n },\n MultiLineString: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsLine(coordinates[i], point)) return true;\n return false;\n },\n Polygon: function(object, point) {\n return containsPolygon(object.coordinates, point);\n },\n MultiPolygon: function(object, point) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n return false;\n },\n GeometryCollection: function(object, point) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n return false;\n }\n};\n\nfunction containsGeometry(geometry, point) {\n return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n ? containsGeometryType[geometry.type](geometry, point)\n : false;\n}\n\nfunction containsPoint(coordinates, point) {\n return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n var ao, bo, ab;\n for (var i = 0, n = coordinates.length; i < n; i++) {\n bo = distance(coordinates[i], point);\n if (bo === 0) return true;\n if (i > 0) {\n ab = distance(coordinates[i], coordinates[i - 1]);\n if (\n ab > 0 &&\n ao <= ab &&\n bo <= ab &&\n (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n )\n return true;\n }\n ao = bo;\n }\n return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n return [point[0] * radians, point[1] * radians];\n}\n\nfunction contains$1(object, point) {\n return (object && containsObjectType.hasOwnProperty(object.type)\n ? containsObjectType[object.type]\n : containsGeometry)(object, point);\n}\n\nfunction graticuleX(y0, y1, dy) {\n var y = range$2(y0, y1 - epsilon$1, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range$2(x0, x1 - epsilon$1, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nfunction graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range$2(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range$2(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range$2(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$1(x % DX) > epsilon$1; }).map(x))\n .concat(range$2(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$1(y % DY) > epsilon$1; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon$1], [180, 90 - epsilon$1]])\n .extentMinor([[-180, -80 - epsilon$1], [180, 80 + epsilon$1]]);\n}\n\nfunction graticule10() {\n return graticule()();\n}\n\nfunction interpolate(a, b) {\n var x0 = a[0] * radians,\n y0 = a[1] * radians,\n x1 = b[0] * radians,\n y1 = b[1] * radians,\n cy0 = cos$1(y0),\n sy0 = sin$1(y0),\n cy1 = cos$1(y1),\n sy1 = sin$1(y1),\n kx0 = cy0 * cos$1(x0),\n ky0 = cy0 * sin$1(x0),\n kx1 = cy1 * cos$1(x1),\n ky1 = cy1 * sin$1(x1),\n d = 2 * asin$1(sqrt$2(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n k = sin$1(d);\n\n var interpolate = d ? function(t) {\n var B = sin$1(t *= d) / k,\n A = sin$1(d - t) / k,\n x = A * kx0 + B * kx1,\n y = A * ky0 + B * ky1,\n z = A * sy0 + B * sy1;\n return [\n atan2$1(y, x) * degrees,\n atan2$1(z, sqrt$2(x * x + y * y)) * degrees\n ];\n } : function() {\n return [x0 * degrees, y0 * degrees];\n };\n\n interpolate.distance = d;\n\n return interpolate;\n}\n\nvar identity$5 = x => x;\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00$2,\n y00$2,\n x0$3,\n y0$3;\n\nvar areaStream = {\n point: noop$1,\n lineStart: noop$1,\n lineEnd: noop$1,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop$1;\n areaSum.add(abs$1(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00$2 = x0$3 = x, y00$2 = y0$3 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0$3 * x - x0$3 * y);\n x0$3 = x, y0$3 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00$2, y00$2);\n}\n\nvar pathArea = areaStream;\n\nvar x0$2 = Infinity,\n y0$2 = x0$2,\n x1 = -x0$2,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop$1,\n lineEnd: noop$1,\n polygonStart: noop$1,\n polygonEnd: noop$1,\n result: function() {\n var bounds = [[x0$2, y0$2], [x1, y1]];\n x1 = y1 = -(y0$2 = x0$2 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0$2) x0$2 = x;\n if (x > x1) x1 = x;\n if (y < y0$2) y0$2 = y;\n if (y > y1) y1 = y;\n}\n\nvar boundsStream$1 = boundsStream;\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00$1,\n y00$1,\n x0$1,\n y0$1;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0$1 = x, y0$1 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0$1, dy = y - y0$1, z = sqrt$2(dx * dx + dy * dy);\n X1 += z * (x0$1 + x) / 2;\n Y1 += z * (y0$1 + y) / 2;\n Z1 += z;\n centroidPoint(x0$1 = x, y0$1 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00$1, y00$1);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00$1 = x0$1 = x, y00$1 = y0$1 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0$1,\n dy = y - y0$1,\n z = sqrt$2(dx * dx + dy * dy);\n\n X1 += z * (x0$1 + x) / 2;\n Y1 += z * (y0$1 + y) / 2;\n Z1 += z;\n\n z = y0$1 * x - x0$1 * y;\n X2 += z * (x0$1 + x);\n Y2 += z * (y0$1 + y);\n Z2 += z * 3;\n centroidPoint(x0$1 = x, y0$1 = y);\n}\n\nvar pathCentroid = centroidStream;\n\nfunction PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau$1);\n break;\n }\n }\n },\n result: noop$1\n};\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop$1,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop$1;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt$2(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nvar pathMeasure = lengthStream;\n\n// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nclass PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n\nfunction index$2(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n geoStream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n geoStream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n geoStream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n geoStream(object, projectionStream(boundsStream$1));\n return boundsStream$1.result();\n };\n\n path.centroid = function(object) {\n geoStream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity$5) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n\nfunction transform$1(methods) {\n return {\n stream: transformer$3(methods)\n };\n}\n\nfunction transformer$3(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream$1));\n fitBounds(boundsStream$1.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nfunction fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nfunction fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nfunction fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)\n\nfunction resample(project, delta2) {\n return +delta2 ? resample$1(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer$3({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample$1(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt$2(a * a + b * b + c * c),\n phi2 = asin$1(c /= m),\n lambda2 = abs$1(abs$1(c) - 1) < epsilon$1 || abs$1(lambda0 - lambda1) < epsilon$1 ? (lambda0 + lambda1) / 2 : atan2$1(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs$1((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n\nvar transformRadians = transformer$3({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer$3({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos$1(alpha),\n sinAlpha = sin$1(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nfunction projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nfunction projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity$5, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$5) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$2(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n\nfunction conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi$1 / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n\nfunction cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos$1(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin$1(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin$1(y * cosPhi0)];\n };\n\n return forward;\n}\n\nfunction conicEqualAreaRaw(y0, y1) {\n var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs$1(n) < epsilon$1) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$2(c) / n;\n\n function project(x, y) {\n var r = sqrt$2(c - 2 * n * sin$1(y)) / n;\n return [r * sin$1(x *= n), r0 - r * cos$1(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2$1(x, abs$1(r0y)) * sign$1(r0y);\n if (r0y * n < 0)\n l -= pi$1 * sign$1(x) * sign$1(r0y);\n return [l / n, asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nfunction conicEqualArea() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n\nfunction albers() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nfunction albersUsa() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon$1, y + 0.120 * k + epsilon$1], [x - 0.214 * k - epsilon$1, y + 0.234 * k - epsilon$1]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon$1, y + 0.166 * k + epsilon$1], [x - 0.115 * k - epsilon$1, y + 0.234 * k - epsilon$1]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n\nfunction azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos$1(x),\n cy = cos$1(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin$1(x),\n k * sin$1(y)\n ];\n }\n}\n\nfunction azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt$2(x * x + y * y),\n c = angle(z),\n sc = sin$1(c),\n cc = cos$1(c);\n return [\n atan2$1(x * sc, z * cc),\n asin$1(z && y * sc / z)\n ];\n }\n}\n\nvar azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt$2(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin$1(z / 2);\n});\n\nfunction azimuthalEqualArea() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n\nvar azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos$1(c)) && c / sin$1(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nfunction azimuthalEquidistant() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n\nfunction mercatorRaw(lambda, phi) {\n return [lambda, log$1(tan((halfPi$1 + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi$1];\n};\n\nfunction mercator() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau$1);\n}\n\nfunction mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi$1 * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n\nfunction tany(y) {\n return tan((halfPi$1 + y) / 2);\n}\n\nfunction conicConformalRaw(y0, y1) {\n var cy0 = cos$1(y0),\n n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),\n f = cy0 * pow$1(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi$1 + epsilon$1) y = -halfPi$1 + epsilon$1; }\n else { if (y > halfPi$1 - epsilon$1) y = halfPi$1 - epsilon$1; }\n var r = f / pow$1(tany(y), n);\n return [r * sin$1(n * x), f - r * cos$1(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign$1(n) * sqrt$2(x * x + fy * fy),\n l = atan2$1(x, abs$1(fy)) * sign$1(fy);\n if (fy * n < 0)\n l -= pi$1 * sign$1(x) * sign$1(fy);\n return [l / n, 2 * atan(pow$1(f / r, 1 / n)) - halfPi$1];\n };\n\n return project;\n}\n\nfunction conicConformal() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n\nfunction equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nfunction equirectangular() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n\nfunction conicEquidistantRaw(y0, y1) {\n var cy0 = cos$1(y0),\n n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs$1(n) < epsilon$1) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin$1(nx), g - gy * cos$1(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2$1(x, abs$1(gy)) * sign$1(gy);\n if (gy * n < 0)\n l -= pi$1 * sign$1(x) * sign$1(gy);\n return [l / n, g - sign$1(n) * sqrt$2(x * x + gy * gy)];\n };\n\n return project;\n}\n\nfunction conicEquidistant() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt$2(3) / 2,\n iterations = 12;\n\nfunction equalEarthRaw(lambda, phi) {\n var l = asin$1(M * sin$1(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos$1(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs$1(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos$1(l),\n asin$1(sin$1(l) / M)\n ];\n};\n\nfunction equalEarth() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n\nfunction gnomonicRaw(x, y) {\n var cy = cos$1(y), k = cos$1(x) * cy;\n return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nfunction gnomonic() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n\nfunction identity$4() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n alpha = 0, ca, sa, // angle\n x0 = null, y0, x1, y1, // clip extent\n kx = 1, ky = 1,\n transform = transformer$3({\n point: function(x, y) {\n var p = projection([x, y]);\n this.stream.point(p[0], p[1]);\n }\n }),\n postclip = identity$5,\n cache,\n cacheStream;\n\n function reset() {\n kx = k * sx;\n ky = k * sy;\n cache = cacheStream = null;\n return projection;\n }\n\n function projection (p) {\n var x = p[0] * kx, y = p[1] * ky;\n if (alpha) {\n var t = y * ca - x * sa;\n x = x * ca + y * sa;\n y = t;\n } \n return [x + tx, y + ty];\n }\n projection.invert = function(p) {\n var x = p[0] - tx, y = p[1] - ty;\n if (alpha) {\n var t = y * ca + x * sa;\n x = x * ca - y * sa;\n y = t;\n }\n return [x / kx, y / ky];\n };\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n };\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$5) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n projection.scale = function(_) {\n return arguments.length ? (k = +_, reset()) : k;\n };\n projection.translate = function(_) {\n return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n };\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, sa = sin$1(alpha), ca = cos$1(alpha), reset()) : alpha * degrees;\n };\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n };\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n };\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n return projection;\n}\n\nfunction naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs$1(delta) > epsilon$1 && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nfunction naturalEarth1() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n\nfunction orthographicRaw(x, y) {\n return [cos$1(y) * sin$1(x), sin$1(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin$1);\n\nfunction orthographic() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon$1);\n}\n\nfunction stereographicRaw(x, y) {\n var cy = cos$1(y), k = 1 + cos$1(x) * cy;\n return [cy * sin$1(x) / k, sin$1(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nfunction stereographic() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n\nfunction transverseMercatorRaw(lambda, phi) {\n return [log$1(tan((halfPi$1 + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi$1];\n};\n\nfunction transverseMercator() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n\nfunction defaultSeparation$1(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n return x + c.x;\n}\n\nfunction maxY(children) {\n return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n var children;\n while (children = node.children) node = children[0];\n return node;\n}\n\nfunction leafRight(node) {\n var children;\n while (children = node.children) node = children[children.length - 1];\n return node;\n}\n\nfunction cluster() {\n var separation = defaultSeparation$1,\n dx = 1,\n dy = 1,\n nodeSize = false;\n\n function cluster(root) {\n var previousNode,\n x = 0;\n\n // First walk, computing the initial x & y values.\n root.eachAfter(function(node) {\n var children = node.children;\n if (children) {\n node.x = meanX(children);\n node.y = maxY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n\n var left = leafLeft(root),\n right = leafRight(root),\n x0 = left.x - separation(left, right) / 2,\n x1 = right.x + separation(right, left) / 2;\n\n // Second walk, normalizing x & y to the desired size.\n return root.eachAfter(nodeSize ? function(node) {\n node.x = (node.x - root.x) * dx;\n node.y = (root.y - node.y) * dy;\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * dx;\n node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n });\n }\n\n cluster.separation = function(x) {\n return arguments.length ? (separation = x, cluster) : separation;\n };\n\n cluster.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n };\n\n cluster.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n };\n\n return cluster;\n}\n\nfunction count(node) {\n var sum = 0,\n children = node.children,\n i = children && children.length;\n if (!i) sum = 1;\n else while (--i >= 0) sum += children[i].value;\n node.value = sum;\n}\n\nfunction node_count() {\n return this.eachAfter(count);\n}\n\nfunction node_each(callback, that) {\n let index = -1;\n for (const node of this) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n\nfunction node_eachBefore(callback, that) {\n var node = this, nodes = [node], children, i, index = -1;\n while (node = nodes.pop()) {\n callback.call(that, node, ++index, this);\n if (children = node.children) {\n for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n }\n return this;\n}\n\nfunction node_eachAfter(callback, that) {\n var node = this, nodes = [node], next = [], children, i, n, index = -1;\n while (node = nodes.pop()) {\n next.push(node);\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n }\n while (node = next.pop()) {\n callback.call(that, node, ++index, this);\n }\n return this;\n}\n\nfunction node_find(callback, that) {\n let index = -1;\n for (const node of this) {\n if (callback.call(that, node, ++index, this)) {\n return node;\n }\n }\n}\n\nfunction node_sum(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n\nfunction node_sort(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n\nfunction node_path(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n\nfunction node_ancestors() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n\nfunction node_descendants() {\n return Array.from(this);\n}\n\nfunction node_leaves() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n\nfunction node_links() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n\nfunction* node_iterator() {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n yield node;\n if (children = node.children) {\n for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n }\n } while (next.length);\n}\n\nfunction hierarchy(data, children) {\n if (data instanceof Map) {\n data = [undefined, data];\n if (children === undefined) children = mapChildren;\n } else if (children === undefined) {\n children = objectChildren;\n }\n\n var root = new Node$1(data),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n while (node = nodes.pop()) {\n if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n node.children = childs;\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = childs[i] = new Node$1(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction objectChildren(d) {\n return d.children;\n}\n\nfunction mapChildren(d) {\n return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n if (node.data.value !== undefined) node.value = node.data.value;\n node.data = node.data.data;\n}\n\nfunction computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nfunction Node$1(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode$1.prototype = hierarchy.prototype = {\n constructor: Node$1,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n find: node_find,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy,\n [Symbol.iterator]: node_iterator\n};\n\nfunction optional(f) {\n return f == null ? null : required(f);\n}\n\nfunction required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n\nfunction constantZero() {\n return 0;\n}\n\nfunction constant$2(x) {\n return function() {\n return x;\n };\n}\n\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a$1 = 1664525;\nconst c$3 = 1013904223;\nconst m = 4294967296; // 2^32\n\nfunction lcg$1() {\n let s = 1;\n return () => (s = (a$1 * s + c$3) % m) / m;\n}\n\nfunction array$1(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nfunction shuffle(array, random) {\n let m = array.length,\n t,\n i;\n\n while (m) {\n i = random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n\nfunction enclose(circles) {\n return packEncloseRandom(circles, lcg$1());\n}\n\nfunction packEncloseRandom(circles, random) {\n var i = 0, n = (circles = shuffle(Array.from(circles), random)).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + Math.max(a.r, b.r, 1) * 1e-9, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(Math.abs(A) > 1e-6 ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nfunction packSiblingsRandom(circles, random) {\n if (!(n = (circles = array$1(circles)).length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = packEncloseRandom(a, random);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nfunction siblings(circles) {\n packSiblingsRandom(circles, lcg$1());\n return circles;\n}\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nfunction index$1() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n const random = lcg$1();\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildrenRandom(padding, 0.5, random))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildrenRandom(constantZero, 1, random))\n .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant$2(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildrenRandom(padding, k, random) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packSiblingsRandom(children, random);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n\nfunction roundNode(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n\nfunction treemapDice(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n\nfunction partition() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n\nvar preroot = {depth: -1},\n ambiguous = {},\n imputed = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nfunction stratify() {\n var id = defaultId,\n parentId = defaultParentId,\n path;\n\n function stratify(data) {\n var nodes = Array.from(data),\n currentId = id,\n currentParentId = parentId,\n n,\n d,\n i,\n root,\n parent,\n node,\n nodeId,\n nodeKey,\n nodeByKey = new Map;\n\n if (path != null) {\n const I = nodes.map((d, i) => normalize$1(path(d, i, data)));\n const P = I.map(parentof);\n const S = new Set(I).add(\"\");\n for (const i of P) {\n if (!S.has(i)) {\n S.add(i);\n I.push(i);\n P.push(parentof(i));\n nodes.push(imputed);\n }\n }\n currentId = (_, i) => I[i];\n currentParentId = (_, i) => P[i];\n }\n\n for (i = 0, n = nodes.length; i < n; ++i) {\n d = nodes[i], node = nodes[i] = new Node$1(d);\n if ((nodeId = currentId(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = node.id = nodeId;\n nodeByKey.set(nodeKey, nodeByKey.has(nodeKey) ? ambiguous : node);\n }\n if ((nodeId = currentParentId(d, i, data)) != null && (nodeId += \"\")) {\n node.parent = nodeId;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (nodeId = node.parent) {\n parent = nodeByKey.get(nodeId);\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n } else {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n\n // When imputing internal nodes, only introduce roots if needed.\n // Then replace the imputed marker data with null.\n if (path != null) {\n while (root.data === imputed && root.children.length === 1) {\n root = root.children[0], --n;\n }\n for (let i = nodes.length - 1; i >= 0; --i) {\n node = nodes[i];\n if (node.data !== imputed) break;\n node.data = null;\n }\n }\n\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = optional(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = optional(x), stratify) : parentId;\n };\n\n stratify.path = function(x) {\n return arguments.length ? (path = optional(x), stratify) : path;\n };\n\n return stratify;\n}\n\n// To normalize a path, we coerce to a string, strip the trailing slash if any\n// (as long as the trailing slash is not immediately preceded by another slash),\n// and add leading slash if missing.\nfunction normalize$1(path) {\n path = `${path}`;\n let i = path.length;\n if (slash(path, i - 1) && !slash(path, i - 2)) path = path.slice(0, -1);\n return path[0] === \"/\" ? path : `/${path}`;\n}\n\n// Walk backwards to find the first slash that is not the leading slash, e.g.:\n// \"/foo/bar\" ⇥ \"/foo\", \"/foo\" ⇥ \"/\", \"/\" ↦ \"\". (The root is special-cased\n// because the id of the root must be a truthy value.)\nfunction parentof(path) {\n let i = path.length;\n if (i < 2) return \"\";\n while (--i > 1) if (slash(path, i)) break;\n return path.slice(0, i);\n}\n\n// Slashes can be escaped; to determine whether a slash is a path delimiter, we\n// count the number of preceding backslashes escaping the forward slash: an odd\n// number indicates an escaped forward slash.\nfunction slash(path, i) {\n if (path[i] === \"/\") {\n let k = 0;\n while (i > 0 && path[--i] === \"\\\\\") ++k;\n if ((k & 1) === 0) return true;\n }\n return false;\n}\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node$1.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nfunction tree() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n\nfunction treemapSlice(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n\nvar phi = (1 + Math.sqrt(5)) / 2;\n\nfunction squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nvar squarify = (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n\nfunction index() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant$2(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant$2(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant$2(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant$2(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant$2(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n\nfunction binary(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = value ? (x0 * valueRight + x1 * valueLeft) / value : x1;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = value ? (y0 * valueRight + y1 * valueLeft) / value : y1;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n\nfunction sliceDice(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);\n}\n\nvar resquarify = (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += (y1 - y0) * row.value / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += (x1 - x0) * row.value / value : x1, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n\nfunction area$1(polygon) {\n var i = -1,\n n = polygon.length,\n a,\n b = polygon[n - 1],\n area = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n}\n\nfunction centroid(polygon) {\n var i = -1,\n n = polygon.length,\n x = 0,\n y = 0,\n a,\n b = polygon[n - 1],\n c,\n k = 0;\n\n while (++i < n) {\n a = b;\n b = polygon[i];\n k += c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n\n return k *= 3, [x / k, y / k];\n}\n\n// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nfunction cross$1(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n\nfunction lexicographicOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n const n = points.length,\n indexes = [0, 1];\n let size = 2, i;\n\n for (i = 2; i < n; ++i) {\n while (size > 1 && cross$1(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n indexes[size++] = i;\n }\n\n return indexes.slice(0, size); // remove popped points\n}\n\nfunction hull(points) {\n if ((n = points.length) < 3) return null;\n\n var i,\n n,\n sortedPoints = new Array(n),\n flippedPoints = new Array(n);\n\n for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n sortedPoints.sort(lexicographicOrder);\n for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n var upperIndexes = computeUpperHullIndexes(sortedPoints),\n lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n // Construct the hull polygon, removing possible duplicate endpoints.\n var skipLeft = lowerIndexes[0] === upperIndexes[0],\n skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n hull = [];\n\n // Add upper hull in right-to-l order.\n // Then add lower hull in left-to-right order.\n for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n return hull;\n}\n\nfunction contains(polygon, point) {\n var n = polygon.length,\n p = polygon[n - 1],\n x = point[0], y = point[1],\n x0 = p[0], y0 = p[1],\n x1, y1,\n inside = false;\n\n for (var i = 0; i < n; ++i) {\n p = polygon[i], x1 = p[0], y1 = p[1];\n if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n x0 = x1, y0 = y1;\n }\n\n return inside;\n}\n\nfunction length(polygon) {\n var i = -1,\n n = polygon.length,\n b = polygon[n - 1],\n xa,\n ya,\n xb = b[0],\n yb = b[1],\n perimeter = 0;\n\n while (++i < n) {\n xa = xb;\n ya = yb;\n b = polygon[i];\n xb = b[0];\n yb = b[1];\n xa -= xb;\n ya -= yb;\n perimeter += Math.hypot(xa, ya);\n }\n\n return perimeter;\n}\n\nvar defaultSource = Math.random;\n\nvar uniform = (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n\nvar int = (function sourceRandomInt(source) {\n function randomInt(min, max) {\n if (arguments.length < 2) max = min, min = 0;\n min = Math.floor(min);\n max = Math.floor(max) - min;\n return function() {\n return Math.floor(source() * max + min);\n };\n }\n\n randomInt.source = sourceRandomInt;\n\n return randomInt;\n})(defaultSource);\n\nvar normal = (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n\nvar logNormal = (function sourceRandomLogNormal(source) {\n var N = normal.source(source);\n\n function randomLogNormal() {\n var randomNormal = N.apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(defaultSource);\n\nvar irwinHall = (function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n if ((n = +n) <= 0) return () => 0;\n return function() {\n for (var sum = 0, i = n; i > 1; --i) sum += source();\n return sum + i * source();\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(defaultSource);\n\nvar bates = (function sourceRandomBates(source) {\n var I = irwinHall.source(source);\n\n function randomBates(n) {\n // use limiting distribution at n === 0\n if ((n = +n) === 0) return source;\n var randomIrwinHall = I(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(defaultSource);\n\nvar exponential = (function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log1p(-source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(defaultSource);\n\nvar pareto = (function sourceRandomPareto(source) {\n function randomPareto(alpha) {\n if ((alpha = +alpha) < 0) throw new RangeError(\"invalid alpha\");\n alpha = 1 / -alpha;\n return function() {\n return Math.pow(1 - source(), alpha);\n };\n }\n\n randomPareto.source = sourceRandomPareto;\n\n return randomPareto;\n})(defaultSource);\n\nvar bernoulli = (function sourceRandomBernoulli(source) {\n function randomBernoulli(p) {\n if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n return function() {\n return Math.floor(source() + p);\n };\n }\n\n randomBernoulli.source = sourceRandomBernoulli;\n\n return randomBernoulli;\n})(defaultSource);\n\nvar geometric = (function sourceRandomGeometric(source) {\n function randomGeometric(p) {\n if ((p = +p) < 0 || p > 1) throw new RangeError(\"invalid p\");\n if (p === 0) return () => Infinity;\n if (p === 1) return () => 1;\n p = Math.log1p(-p);\n return function() {\n return 1 + Math.floor(Math.log1p(-source()) / p);\n };\n }\n\n randomGeometric.source = sourceRandomGeometric;\n\n return randomGeometric;\n})(defaultSource);\n\nvar gamma = (function sourceRandomGamma(source) {\n var randomNormal = normal.source(source)();\n\n function randomGamma(k, theta) {\n if ((k = +k) < 0) throw new RangeError(\"invalid k\");\n // degenerate distribution if k === 0\n if (k === 0) return () => 0;\n theta = theta == null ? 1 : +theta;\n // exponential distribution if k === 1\n if (k === 1) return () => -Math.log1p(-source()) * theta;\n\n var d = (k < 1 ? k + 1 : k) - 1 / 3,\n c = 1 / (3 * Math.sqrt(d)),\n multiplier = k < 1 ? () => Math.pow(source(), 1 / k) : () => 1;\n return function() {\n do {\n do {\n var x = randomNormal(),\n v = 1 + c * x;\n } while (v <= 0);\n v *= v * v;\n var u = 1 - source();\n } while (u >= 1 - 0.0331 * x * x * x * x && Math.log(u) >= 0.5 * x * x + d * (1 - v + Math.log(v)));\n return d * v * multiplier() * theta;\n };\n }\n\n randomGamma.source = sourceRandomGamma;\n\n return randomGamma;\n})(defaultSource);\n\nvar beta = (function sourceRandomBeta(source) {\n var G = gamma.source(source);\n\n function randomBeta(alpha, beta) {\n var X = G(alpha),\n Y = G(beta);\n return function() {\n var x = X();\n return x === 0 ? 0 : x / (x + Y());\n };\n }\n\n randomBeta.source = sourceRandomBeta;\n\n return randomBeta;\n})(defaultSource);\n\nvar binomial = (function sourceRandomBinomial(source) {\n var G = geometric.source(source),\n B = beta.source(source);\n\n function randomBinomial(n, p) {\n n = +n;\n if ((p = +p) >= 1) return () => n;\n if (p <= 0) return () => 0;\n return function() {\n var acc = 0, nn = n, pp = p;\n while (nn * pp > 16 && nn * (1 - pp) > 16) {\n var i = Math.floor((nn + 1) * pp),\n y = B(i, nn - i + 1)();\n if (y <= pp) {\n acc += i;\n nn -= i;\n pp = (pp - y) / (1 - y);\n } else {\n nn = i - 1;\n pp /= y;\n }\n }\n var sign = pp < 0.5,\n pFinal = sign ? pp : 1 - pp,\n g = G(pFinal);\n for (var s = g(), k = 0; s <= nn; ++k) s += g();\n return acc + (sign ? k : nn - k);\n };\n }\n\n randomBinomial.source = sourceRandomBinomial;\n\n return randomBinomial;\n})(defaultSource);\n\nvar weibull = (function sourceRandomWeibull(source) {\n function randomWeibull(k, a, b) {\n var outerFunc;\n if ((k = +k) === 0) {\n outerFunc = x => -Math.log(x);\n } else {\n k = 1 / k;\n outerFunc = x => Math.pow(x, k);\n }\n a = a == null ? 0 : +a;\n b = b == null ? 1 : +b;\n return function() {\n return a + b * outerFunc(-Math.log1p(-source()));\n };\n }\n\n randomWeibull.source = sourceRandomWeibull;\n\n return randomWeibull;\n})(defaultSource);\n\nvar cauchy = (function sourceRandomCauchy(source) {\n function randomCauchy(a, b) {\n a = a == null ? 0 : +a;\n b = b == null ? 1 : +b;\n return function() {\n return a + b * Math.tan(Math.PI * source());\n };\n }\n\n randomCauchy.source = sourceRandomCauchy;\n\n return randomCauchy;\n})(defaultSource);\n\nvar logistic = (function sourceRandomLogistic(source) {\n function randomLogistic(a, b) {\n a = a == null ? 0 : +a;\n b = b == null ? 1 : +b;\n return function() {\n var u = source();\n return a + b * Math.log(u / (1 - u));\n };\n }\n\n randomLogistic.source = sourceRandomLogistic;\n\n return randomLogistic;\n})(defaultSource);\n\nvar poisson = (function sourceRandomPoisson(source) {\n var G = gamma.source(source),\n B = binomial.source(source);\n\n function randomPoisson(lambda) {\n return function() {\n var acc = 0, l = lambda;\n while (l > 16) {\n var n = Math.floor(0.875 * l),\n t = G(n)();\n if (t > l) return acc + B(n - 1, l / t)();\n acc += n;\n l -= t;\n }\n for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source());\n return acc + k;\n };\n }\n\n randomPoisson.source = sourceRandomPoisson;\n\n return randomPoisson;\n})(defaultSource);\n\n// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst mul = 0x19660D;\nconst inc = 0x3C6EF35F;\nconst eps = 1 / 0x100000000;\n\nfunction lcg(seed = Math.random()) {\n let state = (0 <= seed && seed < 1 ? seed / eps : Math.abs(seed)) | 0;\n return () => (state = mul * state + inc | 0, eps * (state >>> 0));\n}\n\nfunction initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nfunction initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n\nconst implicit = Symbol(\"implicit\");\n\nfunction ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = range$2(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nfunction point$4() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n\nfunction constants(x) {\n return function() {\n return x;\n };\n}\n\nfunction number$1(x) {\n return +x;\n}\n\nvar unit = [0, 1];\n\nfunction identity$3(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constants(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nfunction copy$1(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction transformer$2() {\n var domain = unit,\n range = unit,\n interpolate = interpolate$2,\n transform,\n untransform,\n unknown,\n clamp = identity$3,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity$3) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number$1), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity$3, rescale()) : clamp !== identity$3;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nfunction continuous() {\n return transformer$2()(identity$3, identity$3);\n}\n\nfunction tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return exports.formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return exports.format(specifier);\n}\n\nfunction linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start;\n d[i1] = stop;\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nfunction linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy$1(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n\nfunction identity$2(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number$1), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity$2(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number$1) : [0, 1];\n\n return linearish(scale);\n}\n\nfunction nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nfunction loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = exports.format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nfunction log() {\n const scale = loggish(transformer$2()).domain([1, 10]);\n scale.copy = () => copy$1(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nfunction symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nfunction symlog() {\n var scale = symlogish(transformer$2());\n\n scale.copy = function() {\n return copy$1(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nfunction powish(transform) {\n var scale = transform(identity$3, identity$3),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity$3, identity$3)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nfunction pow() {\n var scale = powish(transformer$2());\n\n scale.copy = function() {\n return copy$1(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nfunction sqrt$1() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n\nfunction square$1(x) {\n return Math.sign(x) * x * x;\n}\n\nfunction unsquare(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n}\n\nfunction radial() {\n var squared = continuous(),\n range = [0, 1],\n round = false,\n unknown;\n\n function scale(x) {\n var y = unsquare(squared(x));\n return isNaN(y) ? unknown : round ? Math.round(y) : y;\n }\n\n scale.invert = function(y) {\n return squared.invert(square$1(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (squared.domain(_), scale) : squared.domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (squared.range((range = Array.from(_, number$1)).map(square$1)), scale) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return scale.range(_).round(true);\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, scale) : round;\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (squared.clamp(_), scale) : squared.clamp();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return radial(squared.domain(), range)\n .round(round)\n .clamp(squared.clamp())\n .unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n\nfunction quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = quantileSorted(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending$3);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n\nfunction quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n\nfunction threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n\nconst t0 = new Date, t1 = new Date;\n\nfunction timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n\nconst millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nconst milliseconds = millisecond.range;\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\nconst second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nconst seconds = second.range;\n\nconst timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nconst timeMinutes = timeMinute.range;\n\nconst utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nconst utcMinutes = utcMinute.range;\n\nconst timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nconst timeHours = timeHour.range;\n\nconst utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nconst utcHours = utcHour.range;\n\nconst timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nconst timeDays = timeDay.range;\n\nconst utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nconst utcDays = utcDay.range;\n\nconst unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nconst unixDays = unixDay.range;\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nconst timeSunday = timeWeekday(0);\nconst timeMonday = timeWeekday(1);\nconst timeTuesday = timeWeekday(2);\nconst timeWednesday = timeWeekday(3);\nconst timeThursday = timeWeekday(4);\nconst timeFriday = timeWeekday(5);\nconst timeSaturday = timeWeekday(6);\n\nconst timeSundays = timeSunday.range;\nconst timeMondays = timeMonday.range;\nconst timeTuesdays = timeTuesday.range;\nconst timeWednesdays = timeWednesday.range;\nconst timeThursdays = timeThursday.range;\nconst timeFridays = timeFriday.range;\nconst timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nconst utcSunday = utcWeekday(0);\nconst utcMonday = utcWeekday(1);\nconst utcTuesday = utcWeekday(2);\nconst utcWednesday = utcWeekday(3);\nconst utcThursday = utcWeekday(4);\nconst utcFriday = utcWeekday(5);\nconst utcSaturday = utcWeekday(6);\n\nconst utcSundays = utcSunday.range;\nconst utcMondays = utcMonday.range;\nconst utcTuesdays = utcTuesday.range;\nconst utcWednesdays = utcWednesday.range;\nconst utcThursdays = utcThursday.range;\nconst utcFridays = utcFriday.range;\nconst utcSaturdays = utcSaturday.range;\n\nconst timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nconst timeMonths = timeMonth.range;\n\nconst utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nconst utcMonths = utcMonth.range;\n\nconst timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nconst timeYears = timeYear.range;\n\nconst utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nconst utcYears = utcYear.range;\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n\nvar locale;\nexports.timeFormat = void 0;\nexports.timeParse = void 0;\nexports.utcFormat = void 0;\nexports.utcParse = void 0;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale(definition) {\n locale = formatLocale(definition);\n exports.timeFormat = locale.format;\n exports.timeParse = locale.parse;\n exports.utcFormat = locale.utcFormat;\n exports.utcParse = locale.utcParse;\n return locale;\n}\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : exports.utcFormat(isoSpecifier);\n\nvar formatIso$1 = formatIso;\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : exports.utcParse(isoSpecifier);\n\nvar parseIso$1 = parseIso;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nfunction calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy$1(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nfunction time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute, second, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n\nfunction utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n\nfunction transformer$1() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity$3,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate$2);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nfunction copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nfunction sequential() {\n var scale = linearish(transformer$1()(identity$3));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialLog() {\n var scale = loggish(transformer$1()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSymlog() {\n var scale = symlogish(transformer$1());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialPow() {\n var scale = powish(transformer$1());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction sequentialQuantile() {\n var domain = [],\n interpolator = identity$3;\n\n function scale(x) {\n if (x != null && !isNaN(x = +x)) return interpolator((bisect(domain, x, 1) - 1) / (domain.length - 1));\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending$3);\n return scale;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.range = function() {\n return domain.map((d, i) => interpolator(i / (domain.length - 1)));\n };\n\n scale.quantiles = function(n) {\n return Array.from({length: n + 1}, (_, i) => quantile$1(domain, i / n));\n };\n\n scale.copy = function() {\n return sequentialQuantile(interpolator).domain(domain);\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity$3,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate$2);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nfunction diverging$1() {\n var scale = linearish(transformer()(identity$3));\n\n scale.copy = function() {\n return copy(scale, diverging$1());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nfunction divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n\nfunction colors(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n\nvar category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\nvar Accent = colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n\nvar Dark2 = colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n\nvar observable10 = colors(\"4269d0efb118ff725c6cc5b03ca951ff8ab7a463f297bbf59c6b4e9498a0\");\n\nvar Paired = colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n\nvar Pastel1 = colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n\nvar Pastel2 = colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n\nvar Set1 = colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n\nvar Set2 = colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n\nvar Set3 = colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n\nvar Tableau10 = colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n\nvar ramp$1 = scheme => rgbBasis(scheme[scheme.length - 1]);\n\nvar scheme$q = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nvar BrBG = ramp$1(scheme$q);\n\nvar scheme$p = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nvar PRGn = ramp$1(scheme$p);\n\nvar scheme$o = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nvar PiYG = ramp$1(scheme$o);\n\nvar scheme$n = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nvar PuOr = ramp$1(scheme$n);\n\nvar scheme$m = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nvar RdBu = ramp$1(scheme$m);\n\nvar scheme$l = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nvar RdGy = ramp$1(scheme$l);\n\nvar scheme$k = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nvar RdYlBu = ramp$1(scheme$k);\n\nvar scheme$j = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nvar RdYlGn = ramp$1(scheme$j);\n\nvar scheme$i = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nvar Spectral = ramp$1(scheme$i);\n\nvar scheme$h = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nvar BuGn = ramp$1(scheme$h);\n\nvar scheme$g = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nvar BuPu = ramp$1(scheme$g);\n\nvar scheme$f = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nvar GnBu = ramp$1(scheme$f);\n\nvar scheme$e = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nvar OrRd = ramp$1(scheme$e);\n\nvar scheme$d = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nvar PuBuGn = ramp$1(scheme$d);\n\nvar scheme$c = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nvar PuBu = ramp$1(scheme$c);\n\nvar scheme$b = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nvar PuRd = ramp$1(scheme$b);\n\nvar scheme$a = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nvar RdPu = ramp$1(scheme$a);\n\nvar scheme$9 = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nvar YlGnBu = ramp$1(scheme$9);\n\nvar scheme$8 = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nvar YlGn = ramp$1(scheme$8);\n\nvar scheme$7 = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nvar YlOrBr = ramp$1(scheme$7);\n\nvar scheme$6 = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nvar YlOrRd = ramp$1(scheme$6);\n\nvar scheme$5 = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nvar Blues = ramp$1(scheme$5);\n\nvar scheme$4 = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nvar Greens = ramp$1(scheme$4);\n\nvar scheme$3 = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nvar Greys = ramp$1(scheme$3);\n\nvar scheme$2 = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nvar Purples = ramp$1(scheme$2);\n\nvar scheme$1 = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nvar Reds = ramp$1(scheme$1);\n\nvar scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nvar Oranges = ramp$1(scheme);\n\nfunction cividis(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n\nvar cubehelix = cubehelixLong(cubehelix$3(300, 0.5, 0.0), cubehelix$3(-240, 0.5, 1.0));\n\nvar warm = cubehelixLong(cubehelix$3(-100, 0.75, 0.35), cubehelix$3(80, 1.50, 0.8));\n\nvar cool = cubehelixLong(cubehelix$3(260, 0.75, 0.35), cubehelix$3(80, 1.50, 0.8));\n\nvar c$2 = cubehelix$3();\n\nfunction rainbow(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c$2.h = 360 * t - 100;\n c$2.s = 1.5 - 1.5 * ts;\n c$2.l = 0.8 - 0.9 * ts;\n return c$2 + \"\";\n}\n\nvar c$1 = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nfunction sinebow(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c$1.r = 255 * (x = Math.sin(t)) * x;\n c$1.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c$1.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c$1 + \"\";\n}\n\nfunction turbo(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nvar viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nvar magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nvar inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nvar plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\nfunction constant$1(x) {\n return function constant() {\n return x;\n };\n}\n\nconst abs = Math.abs;\nconst atan2 = Math.atan2;\nconst cos = Math.cos;\nconst max = Math.max;\nconst min = Math.min;\nconst sin = Math.sin;\nconst sqrt = Math.sqrt;\n\nconst epsilon = 1e-12;\nconst pi = Math.PI;\nconst halfPi = pi / 2;\nconst tau = 2 * pi;\n\nfunction acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\nfunction withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path$1(digits);\n}\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nfunction arc() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant$1(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null,\n path = withPath(arc);\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle. If this\n // intersection fails, it’s probably because the arc is too small, so\n // disable the corner radius entirely.\n if (da < pi) {\n if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n } else {\n rc0 = rc1 = 0;\n }\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant$1(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$1(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n\nvar slice = Array.prototype.slice;\n\nfunction array(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nfunction Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nfunction curveLinear(context) {\n return new Linear(context);\n}\n\nfunction x(p) {\n return p[0];\n}\n\nfunction y(p) {\n return p[1];\n}\n\nfunction line(x$1, y$1) {\n var defined = constant$1(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x$1 = typeof x$1 === \"function\" ? x$1 : (x$1 === undefined) ? x : constant$1(x$1);\n y$1 = typeof y$1 === \"function\" ? y$1 : (y$1 === undefined) ? y : constant$1(y$1);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x$1(d, i, data), +y$1(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x$1 = typeof _ === \"function\" ? _ : constant$1(+_), line) : x$1;\n };\n\n line.y = function(_) {\n return arguments.length ? (y$1 = typeof _ === \"function\" ? _ : constant$1(+_), line) : y$1;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$1(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n\nfunction area(x0, y0, y1) {\n var x1 = null,\n defined = constant$1(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? x : constant$1(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant$1(0) : constant$1(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? y : constant$1(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$1(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant$1(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$1(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant$1(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant$1(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant$1(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n\nfunction descending$1(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n\nfunction identity$1(d) {\n return d;\n}\n\nfunction pie() {\n var value = identity$1,\n sortValues = descending$1,\n sort = null,\n startAngle = constant$1(0),\n endAngle = constant$1(tau),\n padAngle = constant$1(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$1(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant$1(+_), pie) : padAngle;\n };\n\n return pie;\n}\n\nvar curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nfunction curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n\nfunction lineRadial(l) {\n var c = l.curve;\n\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n\n l.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return l;\n}\n\nfunction lineRadial$1() {\n return lineRadial(line().curve(curveRadialLinear));\n}\n\nfunction areaRadial() {\n var a = area().curve(curveRadialLinear),\n c = a.curve,\n x0 = a.lineX0,\n x1 = a.lineX1,\n y0 = a.lineY0,\n y1 = a.lineY1;\n\n a.angle = a.x, delete a.x;\n a.startAngle = a.x0, delete a.x0;\n a.endAngle = a.x1, delete a.x1;\n a.radius = a.y, delete a.y;\n a.innerRadius = a.y0, delete a.y0;\n a.outerRadius = a.y1, delete a.y1;\n a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n a.curve = function(_) {\n return arguments.length ? c(curveRadial(_)) : c()._curve;\n };\n\n return a;\n}\n\nfunction pointRadial(x, y) {\n return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n\nclass Bump {\n constructor(context, x) {\n this._context = context;\n this._x = x;\n }\n areaStart() {\n this._line = 0;\n }\n areaEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n }\n point(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: {\n this._point = 1;\n if (this._line) this._context.lineTo(x, y);\n else this._context.moveTo(x, y);\n break;\n }\n case 1: this._point = 2; // falls through\n default: {\n if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);\n else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);\n break;\n }\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nclass BumpRadial {\n constructor(context) {\n this._context = context;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {}\n point(x, y) {\n x = +x, y = +y;\n if (this._point === 0) {\n this._point = 1;\n } else {\n const p0 = pointRadial(this._x0, this._y0);\n const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);\n const p2 = pointRadial(x, this._y0);\n const p3 = pointRadial(x, y);\n this._context.moveTo(...p0);\n this._context.bezierCurveTo(...p1, ...p2, ...p3);\n }\n this._x0 = x, this._y0 = y;\n }\n}\n\nfunction bumpX(context) {\n return new Bump(context, true);\n}\n\nfunction bumpY(context) {\n return new Bump(context, false);\n}\n\nfunction bumpRadial(context) {\n return new BumpRadial(context);\n}\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n let source = linkSource,\n target = linkTarget,\n x$1 = x,\n y$1 = y,\n context = null,\n output = null,\n path = withPath(link);\n\n function link() {\n let buffer;\n const argv = slice.call(arguments);\n const s = source.apply(this, argv);\n const t = target.apply(this, argv);\n if (context == null) output = curve(buffer = path());\n output.lineStart();\n argv[0] = s, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv));\n argv[0] = t, output.point(+x$1.apply(this, argv), +y$1.apply(this, argv));\n output.lineEnd();\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x$1 = typeof _ === \"function\" ? _ : constant$1(+_), link) : x$1;\n };\n\n link.y = function(_) {\n return arguments.length ? (y$1 = typeof _ === \"function\" ? _ : constant$1(+_), link) : y$1;\n };\n\n link.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), link) : context;\n };\n\n return link;\n}\n\nfunction linkHorizontal() {\n return link(bumpX);\n}\n\nfunction linkVertical() {\n return link(bumpY);\n}\n\nfunction linkRadial() {\n const l = link(bumpRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n\nconst sqrt3$2 = sqrt(3);\n\nvar asterisk = {\n draw(context, size) {\n const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n const t = r / 2;\n const u = t * sqrt3$2;\n context.moveTo(0, r);\n context.lineTo(0, -r);\n context.moveTo(-u, -t);\n context.lineTo(u, t);\n context.moveTo(-u, t);\n context.lineTo(u, -t);\n }\n};\n\nvar circle = {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n\nvar cross = {\n draw(context, size) {\n const r = sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nvar diamond = {\n draw(context, size) {\n const y = sqrt(size / tan30_2);\n const x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n\nvar diamond2 = {\n draw(context, size) {\n const r = sqrt(size) * 0.62625;\n context.moveTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.lineTo(-r, 0);\n context.closePath();\n }\n};\n\nvar plus = {\n draw(context, size) {\n const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n context.moveTo(0, r);\n context.lineTo(0, -r);\n }\n};\n\nvar square = {\n draw(context, size) {\n const w = sqrt(size);\n const x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n\nvar square2 = {\n draw(context, size) {\n const r = sqrt(size) * 0.4431;\n context.moveTo(r, r);\n context.lineTo(r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, r);\n context.closePath();\n }\n};\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nvar star = {\n draw(context, size) {\n const r = sqrt(size * ka);\n const x = kx * r;\n const y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (let i = 1; i < 5; ++i) {\n const a = tau * i / 5;\n const c = cos(a);\n const s = sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n\nconst sqrt3$1 = sqrt(3);\n\nvar triangle = {\n draw(context, size) {\n const y = -sqrt(size / (sqrt3$1 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3$1 * y, -y);\n context.lineTo(sqrt3$1 * y, -y);\n context.closePath();\n }\n};\n\nconst sqrt3 = sqrt(3);\n\nvar triangle2 = {\n draw(context, size) {\n const s = sqrt(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n context.moveTo(0, -s);\n context.lineTo(u, t);\n context.lineTo(-u, t);\n context.closePath();\n }\n};\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nvar wye = {\n draw(context, size) {\n const r = sqrt(size / a);\n const x0 = r / 2, y0 = r * k;\n const x1 = x0, y1 = r * k + r;\n const x2 = -x1, y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n\nvar times = {\n draw(context, size) {\n const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n context.moveTo(-r, -r);\n context.lineTo(r, r);\n context.moveTo(-r, r);\n context.lineTo(r, -r);\n }\n};\n\n// These symbols are designed to be filled.\nconst symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nconst symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nfunction Symbol$1(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant$1(type || circle);\n size = typeof size === \"function\" ? size : constant$1(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant$1(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant$1(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n\nfunction noop() {}\n\nfunction point$3(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nfunction Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point$3(this, this._x1, this._y1); // falls through\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through\n default: point$3(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nfunction basis(context) {\n return new Basis(context);\n}\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point$3(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nfunction basisClosed(context) {\n return new BasisClosed(context);\n}\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // falls through\n default: point$3(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nfunction basisOpen(context) {\n return new BasisOpen(context);\n}\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nvar bundle = (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n\nfunction point$2(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nfunction Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point$2(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // falls through\n default: point$2(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar cardinal = (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n\nfunction CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point$2(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar cardinalClosed = (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n\nfunction CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point$2(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar cardinalOpen = (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n\nfunction point$1(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // falls through\n default: point$1(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar catmullRom = (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point$1(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar catmullRomClosed = (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // falls through\n default: point$1(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nvar catmullRomOpen = (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nfunction linearClosed(context) {\n return new LinearClosed(context);\n}\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n};\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nfunction monotoneX(context) {\n return new MonotoneX(context);\n}\n\nfunction monotoneY(context) {\n return new MonotoneY(context);\n}\n\nfunction Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nfunction natural(context) {\n return new Natural(context);\n}\n\nfunction Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nfunction step(context) {\n return new Step(context, 0.5);\n}\n\nfunction stepBefore(context) {\n return new Step(context, 0);\n}\n\nfunction stepAfter(context) {\n return new Step(context, 1);\n}\n\nfunction none$1(series, order) {\n if (!((n = series.length) > 1)) return;\n for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n s0 = s1, s1 = series[order[i]];\n for (j = 0; j < m; ++j) {\n s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n }\n }\n}\n\nfunction none(series) {\n var n = series.length, o = new Array(n);\n while (--n >= 0) o[n] = n;\n return o;\n}\n\nfunction stackValue(d, key) {\n return d[key];\n}\n\nfunction stackSeries(key) {\n const series = [];\n series.key = key;\n return series;\n}\n\nfunction stack() {\n var keys = constant$1([]),\n order = none,\n offset = none$1,\n value = stackValue;\n\n function stack(data) {\n var sz = Array.from(keys.apply(this, arguments), stackSeries),\n i, n = sz.length, j = -1,\n oz;\n\n for (const d of data) {\n for (i = 0, ++j; i < n; ++i) {\n (sz[i][j] = [0, +value(d, sz[i].key, j, data)]).data = d;\n }\n }\n\n for (i = 0, oz = array(order(sz)); i < n; ++i) {\n sz[oz[i]].index = i;\n }\n\n offset(sz, oz);\n return sz;\n }\n\n stack.keys = function(_) {\n return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant$1(Array.from(_)), stack) : keys;\n };\n\n stack.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant$1(+_), stack) : value;\n };\n\n stack.order = function(_) {\n return arguments.length ? (order = _ == null ? none : typeof _ === \"function\" ? _ : constant$1(Array.from(_)), stack) : order;\n };\n\n stack.offset = function(_) {\n return arguments.length ? (offset = _ == null ? none$1 : _, stack) : offset;\n };\n\n return stack;\n}\n\nfunction expand(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n }\n none$1(series, order);\n}\n\nfunction diverging(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n for (yp = yn = 0, i = 0; i < n; ++i) {\n if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n d[0] = yp, d[1] = yp += dy;\n } else if (dy < 0) {\n d[1] = yn, d[0] = yn += dy;\n } else {\n d[0] = 0, d[1] = dy;\n }\n }\n }\n}\n\nfunction silhouette(series, order) {\n if (!((n = series.length) > 0)) return;\n for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n s0[j][1] += s0[j][0] = -y / 2;\n }\n none$1(series, order);\n}\n\nfunction wiggle(series, order) {\n if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n var si = series[order[i]],\n sij0 = si[j][1] || 0,\n sij1 = si[j - 1][1] || 0,\n s3 = (sij0 - sij1) / 2;\n for (var k = 0; k < i; ++k) {\n var sk = series[order[k]],\n skj0 = sk[j][1] || 0,\n skj1 = sk[j - 1][1] || 0;\n s3 += skj0 - skj1;\n }\n s1 += sij0, s2 += s3 * sij0;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n if (s1) y -= s2 / s1;\n }\n s0[j - 1][1] += s0[j - 1][0] = y;\n none$1(series, order);\n}\n\nfunction appearance(series) {\n var peaks = series.map(peak);\n return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n return j;\n}\n\nfunction ascending(series) {\n var sums = series.map(sum);\n return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nfunction sum(series) {\n var s = 0, i = -1, n = series.length, v;\n while (++i < n) if (v = +series[i][1]) s += v;\n return s;\n}\n\nfunction descending(series) {\n return ascending(series).reverse();\n}\n\nfunction insideOut(series) {\n var n = series.length,\n i,\n j,\n sums = series.map(sum),\n order = appearance(series),\n top = 0,\n bottom = 0,\n tops = [],\n bottoms = [];\n\n for (i = 0; i < n; ++i) {\n j = order[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n\n return bottoms.reverse().concat(tops);\n}\n\nfunction reverse(series) {\n return none(series).reverse();\n}\n\nvar constant = x => () => x;\n\nfunction ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nfunction Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nvar identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nfunction transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n\nfunction nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nfunction noevent(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nfunction zoom() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n yesdrag(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n\nexports.Adder = Adder;\nexports.Delaunay = Delaunay;\nexports.FormatSpecifier = FormatSpecifier;\nexports.InternMap = InternMap;\nexports.InternSet = InternSet;\nexports.Node = Node$1;\nexports.Path = Path$1;\nexports.Voronoi = Voronoi;\nexports.ZoomTransform = Transform;\nexports.active = active;\nexports.arc = arc;\nexports.area = area;\nexports.areaRadial = areaRadial;\nexports.ascending = ascending$3;\nexports.autoType = autoType;\nexports.axisBottom = axisBottom;\nexports.axisLeft = axisLeft;\nexports.axisRight = axisRight;\nexports.axisTop = axisTop;\nexports.bin = bin;\nexports.bisect = bisect;\nexports.bisectCenter = bisectCenter;\nexports.bisectLeft = bisectLeft;\nexports.bisectRight = bisectRight;\nexports.bisector = bisector;\nexports.blob = blob;\nexports.blur = blur;\nexports.blur2 = blur2;\nexports.blurImage = blurImage;\nexports.brush = brush;\nexports.brushSelection = brushSelection;\nexports.brushX = brushX;\nexports.brushY = brushY;\nexports.buffer = buffer;\nexports.chord = chord;\nexports.chordDirected = chordDirected;\nexports.chordTranspose = chordTranspose;\nexports.cluster = cluster;\nexports.color = color;\nexports.contourDensity = density;\nexports.contours = Contours;\nexports.count = count$1;\nexports.create = create$1;\nexports.creator = creator;\nexports.cross = cross$2;\nexports.csv = csv;\nexports.csvFormat = csvFormat;\nexports.csvFormatBody = csvFormatBody;\nexports.csvFormatRow = csvFormatRow;\nexports.csvFormatRows = csvFormatRows;\nexports.csvFormatValue = csvFormatValue;\nexports.csvParse = csvParse;\nexports.csvParseRows = csvParseRows;\nexports.cubehelix = cubehelix$3;\nexports.cumsum = cumsum;\nexports.curveBasis = basis;\nexports.curveBasisClosed = basisClosed;\nexports.curveBasisOpen = basisOpen;\nexports.curveBumpX = bumpX;\nexports.curveBumpY = bumpY;\nexports.curveBundle = bundle;\nexports.curveCardinal = cardinal;\nexports.curveCardinalClosed = cardinalClosed;\nexports.curveCardinalOpen = cardinalOpen;\nexports.curveCatmullRom = catmullRom;\nexports.curveCatmullRomClosed = catmullRomClosed;\nexports.curveCatmullRomOpen = catmullRomOpen;\nexports.curveLinear = curveLinear;\nexports.curveLinearClosed = linearClosed;\nexports.curveMonotoneX = monotoneX;\nexports.curveMonotoneY = monotoneY;\nexports.curveNatural = natural;\nexports.curveStep = step;\nexports.curveStepAfter = stepAfter;\nexports.curveStepBefore = stepBefore;\nexports.descending = descending$2;\nexports.deviation = deviation;\nexports.difference = difference;\nexports.disjoint = disjoint;\nexports.dispatch = dispatch;\nexports.drag = drag;\nexports.dragDisable = dragDisable;\nexports.dragEnable = yesdrag;\nexports.dsv = dsv;\nexports.dsvFormat = dsvFormat;\nexports.easeBack = backInOut;\nexports.easeBackIn = backIn;\nexports.easeBackInOut = backInOut;\nexports.easeBackOut = backOut;\nexports.easeBounce = bounceOut;\nexports.easeBounceIn = bounceIn;\nexports.easeBounceInOut = bounceInOut;\nexports.easeBounceOut = bounceOut;\nexports.easeCircle = circleInOut;\nexports.easeCircleIn = circleIn;\nexports.easeCircleInOut = circleInOut;\nexports.easeCircleOut = circleOut;\nexports.easeCubic = cubicInOut;\nexports.easeCubicIn = cubicIn;\nexports.easeCubicInOut = cubicInOut;\nexports.easeCubicOut = cubicOut;\nexports.easeElastic = elasticOut;\nexports.easeElasticIn = elasticIn;\nexports.easeElasticInOut = elasticInOut;\nexports.easeElasticOut = elasticOut;\nexports.easeExp = expInOut;\nexports.easeExpIn = expIn;\nexports.easeExpInOut = expInOut;\nexports.easeExpOut = expOut;\nexports.easeLinear = linear$1;\nexports.easePoly = polyInOut;\nexports.easePolyIn = polyIn;\nexports.easePolyInOut = polyInOut;\nexports.easePolyOut = polyOut;\nexports.easeQuad = quadInOut;\nexports.easeQuadIn = quadIn;\nexports.easeQuadInOut = quadInOut;\nexports.easeQuadOut = quadOut;\nexports.easeSin = sinInOut;\nexports.easeSinIn = sinIn;\nexports.easeSinInOut = sinInOut;\nexports.easeSinOut = sinOut;\nexports.every = every;\nexports.extent = extent$1;\nexports.fcumsum = fcumsum;\nexports.filter = filter$1;\nexports.flatGroup = flatGroup;\nexports.flatRollup = flatRollup;\nexports.forceCenter = center;\nexports.forceCollide = collide;\nexports.forceLink = link$2;\nexports.forceManyBody = manyBody;\nexports.forceRadial = radial$1;\nexports.forceSimulation = simulation;\nexports.forceX = x$1;\nexports.forceY = y$1;\nexports.formatDefaultLocale = defaultLocale$1;\nexports.formatLocale = formatLocale$1;\nexports.formatSpecifier = formatSpecifier;\nexports.fsum = fsum;\nexports.geoAlbers = albers;\nexports.geoAlbersUsa = albersUsa;\nexports.geoArea = area$2;\nexports.geoAzimuthalEqualArea = azimuthalEqualArea;\nexports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;\nexports.geoAzimuthalEquidistant = azimuthalEquidistant;\nexports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;\nexports.geoBounds = bounds;\nexports.geoCentroid = centroid$1;\nexports.geoCircle = circle$1;\nexports.geoClipAntimeridian = clipAntimeridian;\nexports.geoClipCircle = clipCircle;\nexports.geoClipExtent = extent;\nexports.geoClipRectangle = clipRectangle;\nexports.geoConicConformal = conicConformal;\nexports.geoConicConformalRaw = conicConformalRaw;\nexports.geoConicEqualArea = conicEqualArea;\nexports.geoConicEqualAreaRaw = conicEqualAreaRaw;\nexports.geoConicEquidistant = conicEquidistant;\nexports.geoConicEquidistantRaw = conicEquidistantRaw;\nexports.geoContains = contains$1;\nexports.geoDistance = distance;\nexports.geoEqualEarth = equalEarth;\nexports.geoEqualEarthRaw = equalEarthRaw;\nexports.geoEquirectangular = equirectangular;\nexports.geoEquirectangularRaw = equirectangularRaw;\nexports.geoGnomonic = gnomonic;\nexports.geoGnomonicRaw = gnomonicRaw;\nexports.geoGraticule = graticule;\nexports.geoGraticule10 = graticule10;\nexports.geoIdentity = identity$4;\nexports.geoInterpolate = interpolate;\nexports.geoLength = length$1;\nexports.geoMercator = mercator;\nexports.geoMercatorRaw = mercatorRaw;\nexports.geoNaturalEarth1 = naturalEarth1;\nexports.geoNaturalEarth1Raw = naturalEarth1Raw;\nexports.geoOrthographic = orthographic;\nexports.geoOrthographicRaw = orthographicRaw;\nexports.geoPath = index$2;\nexports.geoProjection = projection;\nexports.geoProjectionMutator = projectionMutator;\nexports.geoRotation = rotation;\nexports.geoStereographic = stereographic;\nexports.geoStereographicRaw = stereographicRaw;\nexports.geoStream = geoStream;\nexports.geoTransform = transform$1;\nexports.geoTransverseMercator = transverseMercator;\nexports.geoTransverseMercatorRaw = transverseMercatorRaw;\nexports.gray = gray;\nexports.greatest = greatest;\nexports.greatestIndex = greatestIndex;\nexports.group = group;\nexports.groupSort = groupSort;\nexports.groups = groups;\nexports.hcl = hcl$2;\nexports.hierarchy = hierarchy;\nexports.histogram = bin;\nexports.hsl = hsl$2;\nexports.html = html;\nexports.image = image;\nexports.index = index$4;\nexports.indexes = indexes;\nexports.interpolate = interpolate$2;\nexports.interpolateArray = array$3;\nexports.interpolateBasis = basis$2;\nexports.interpolateBasisClosed = basisClosed$1;\nexports.interpolateBlues = Blues;\nexports.interpolateBrBG = BrBG;\nexports.interpolateBuGn = BuGn;\nexports.interpolateBuPu = BuPu;\nexports.interpolateCividis = cividis;\nexports.interpolateCool = cool;\nexports.interpolateCubehelix = cubehelix$2;\nexports.interpolateCubehelixDefault = cubehelix;\nexports.interpolateCubehelixLong = cubehelixLong;\nexports.interpolateDate = date$1;\nexports.interpolateDiscrete = discrete;\nexports.interpolateGnBu = GnBu;\nexports.interpolateGreens = Greens;\nexports.interpolateGreys = Greys;\nexports.interpolateHcl = hcl$1;\nexports.interpolateHclLong = hclLong;\nexports.interpolateHsl = hsl$1;\nexports.interpolateHslLong = hslLong;\nexports.interpolateHue = hue;\nexports.interpolateInferno = inferno;\nexports.interpolateLab = lab;\nexports.interpolateMagma = magma;\nexports.interpolateNumber = interpolateNumber;\nexports.interpolateNumberArray = numberArray;\nexports.interpolateObject = object$1;\nexports.interpolateOrRd = OrRd;\nexports.interpolateOranges = Oranges;\nexports.interpolatePRGn = PRGn;\nexports.interpolatePiYG = PiYG;\nexports.interpolatePlasma = plasma;\nexports.interpolatePuBu = PuBu;\nexports.interpolatePuBuGn = PuBuGn;\nexports.interpolatePuOr = PuOr;\nexports.interpolatePuRd = PuRd;\nexports.interpolatePurples = Purples;\nexports.interpolateRainbow = rainbow;\nexports.interpolateRdBu = RdBu;\nexports.interpolateRdGy = RdGy;\nexports.interpolateRdPu = RdPu;\nexports.interpolateRdYlBu = RdYlBu;\nexports.interpolateRdYlGn = RdYlGn;\nexports.interpolateReds = Reds;\nexports.interpolateRgb = interpolateRgb;\nexports.interpolateRgbBasis = rgbBasis;\nexports.interpolateRgbBasisClosed = rgbBasisClosed;\nexports.interpolateRound = interpolateRound;\nexports.interpolateSinebow = sinebow;\nexports.interpolateSpectral = Spectral;\nexports.interpolateString = interpolateString;\nexports.interpolateTransformCss = interpolateTransformCss;\nexports.interpolateTransformSvg = interpolateTransformSvg;\nexports.interpolateTurbo = turbo;\nexports.interpolateViridis = viridis;\nexports.interpolateWarm = warm;\nexports.interpolateYlGn = YlGn;\nexports.interpolateYlGnBu = YlGnBu;\nexports.interpolateYlOrBr = YlOrBr;\nexports.interpolateYlOrRd = YlOrRd;\nexports.interpolateZoom = interpolateZoom;\nexports.interrupt = interrupt;\nexports.intersection = intersection;\nexports.interval = interval;\nexports.isoFormat = formatIso$1;\nexports.isoParse = parseIso$1;\nexports.json = json;\nexports.lab = lab$1;\nexports.lch = lch;\nexports.least = least;\nexports.leastIndex = leastIndex;\nexports.line = line;\nexports.lineRadial = lineRadial$1;\nexports.link = link;\nexports.linkHorizontal = linkHorizontal;\nexports.linkRadial = linkRadial;\nexports.linkVertical = linkVertical;\nexports.local = local$1;\nexports.map = map$1;\nexports.matcher = matcher;\nexports.max = max$3;\nexports.maxIndex = maxIndex;\nexports.mean = mean;\nexports.median = median;\nexports.medianIndex = medianIndex;\nexports.merge = merge;\nexports.min = min$2;\nexports.minIndex = minIndex;\nexports.mode = mode;\nexports.namespace = namespace;\nexports.namespaces = namespaces;\nexports.nice = nice$1;\nexports.now = now;\nexports.pack = index$1;\nexports.packEnclose = enclose;\nexports.packSiblings = siblings;\nexports.pairs = pairs;\nexports.partition = partition;\nexports.path = path;\nexports.pathRound = pathRound;\nexports.permute = permute;\nexports.pie = pie;\nexports.piecewise = piecewise;\nexports.pointRadial = pointRadial;\nexports.pointer = pointer;\nexports.pointers = pointers;\nexports.polygonArea = area$1;\nexports.polygonCentroid = centroid;\nexports.polygonContains = contains;\nexports.polygonHull = hull;\nexports.polygonLength = length;\nexports.precisionFixed = precisionFixed;\nexports.precisionPrefix = precisionPrefix;\nexports.precisionRound = precisionRound;\nexports.quadtree = quadtree;\nexports.quantile = quantile$1;\nexports.quantileIndex = quantileIndex;\nexports.quantileSorted = quantileSorted;\nexports.quantize = quantize$1;\nexports.quickselect = quickselect;\nexports.radialArea = areaRadial;\nexports.radialLine = lineRadial$1;\nexports.randomBates = bates;\nexports.randomBernoulli = bernoulli;\nexports.randomBeta = beta;\nexports.randomBinomial = binomial;\nexports.randomCauchy = cauchy;\nexports.randomExponential = exponential;\nexports.randomGamma = gamma;\nexports.randomGeometric = geometric;\nexports.randomInt = int;\nexports.randomIrwinHall = irwinHall;\nexports.randomLcg = lcg;\nexports.randomLogNormal = logNormal;\nexports.randomLogistic = logistic;\nexports.randomNormal = normal;\nexports.randomPareto = pareto;\nexports.randomPoisson = poisson;\nexports.randomUniform = uniform;\nexports.randomWeibull = weibull;\nexports.range = range$2;\nexports.rank = rank;\nexports.reduce = reduce;\nexports.reverse = reverse$1;\nexports.rgb = rgb;\nexports.ribbon = ribbon$1;\nexports.ribbonArrow = ribbonArrow;\nexports.rollup = rollup;\nexports.rollups = rollups;\nexports.scaleBand = band;\nexports.scaleDiverging = diverging$1;\nexports.scaleDivergingLog = divergingLog;\nexports.scaleDivergingPow = divergingPow;\nexports.scaleDivergingSqrt = divergingSqrt;\nexports.scaleDivergingSymlog = divergingSymlog;\nexports.scaleIdentity = identity$2;\nexports.scaleImplicit = implicit;\nexports.scaleLinear = linear;\nexports.scaleLog = log;\nexports.scaleOrdinal = ordinal;\nexports.scalePoint = point$4;\nexports.scalePow = pow;\nexports.scaleQuantile = quantile;\nexports.scaleQuantize = quantize;\nexports.scaleRadial = radial;\nexports.scaleSequential = sequential;\nexports.scaleSequentialLog = sequentialLog;\nexports.scaleSequentialPow = sequentialPow;\nexports.scaleSequentialQuantile = sequentialQuantile;\nexports.scaleSequentialSqrt = sequentialSqrt;\nexports.scaleSequentialSymlog = sequentialSymlog;\nexports.scaleSqrt = sqrt$1;\nexports.scaleSymlog = symlog;\nexports.scaleThreshold = threshold;\nexports.scaleTime = time;\nexports.scaleUtc = utcTime;\nexports.scan = scan;\nexports.schemeAccent = Accent;\nexports.schemeBlues = scheme$5;\nexports.schemeBrBG = scheme$q;\nexports.schemeBuGn = scheme$h;\nexports.schemeBuPu = scheme$g;\nexports.schemeCategory10 = category10;\nexports.schemeDark2 = Dark2;\nexports.schemeGnBu = scheme$f;\nexports.schemeGreens = scheme$4;\nexports.schemeGreys = scheme$3;\nexports.schemeObservable10 = observable10;\nexports.schemeOrRd = scheme$e;\nexports.schemeOranges = scheme;\nexports.schemePRGn = scheme$p;\nexports.schemePaired = Paired;\nexports.schemePastel1 = Pastel1;\nexports.schemePastel2 = Pastel2;\nexports.schemePiYG = scheme$o;\nexports.schemePuBu = scheme$c;\nexports.schemePuBuGn = scheme$d;\nexports.schemePuOr = scheme$n;\nexports.schemePuRd = scheme$b;\nexports.schemePurples = scheme$2;\nexports.schemeRdBu = scheme$m;\nexports.schemeRdGy = scheme$l;\nexports.schemeRdPu = scheme$a;\nexports.schemeRdYlBu = scheme$k;\nexports.schemeRdYlGn = scheme$j;\nexports.schemeReds = scheme$1;\nexports.schemeSet1 = Set1;\nexports.schemeSet2 = Set2;\nexports.schemeSet3 = Set3;\nexports.schemeSpectral = scheme$i;\nexports.schemeTableau10 = Tableau10;\nexports.schemeYlGn = scheme$8;\nexports.schemeYlGnBu = scheme$9;\nexports.schemeYlOrBr = scheme$7;\nexports.schemeYlOrRd = scheme$6;\nexports.select = select;\nexports.selectAll = selectAll;\nexports.selection = selection;\nexports.selector = selector;\nexports.selectorAll = selectorAll;\nexports.shuffle = shuffle$1;\nexports.shuffler = shuffler;\nexports.some = some;\nexports.sort = sort;\nexports.stack = stack;\nexports.stackOffsetDiverging = diverging;\nexports.stackOffsetExpand = expand;\nexports.stackOffsetNone = none$1;\nexports.stackOffsetSilhouette = silhouette;\nexports.stackOffsetWiggle = wiggle;\nexports.stackOrderAppearance = appearance;\nexports.stackOrderAscending = ascending;\nexports.stackOrderDescending = descending;\nexports.stackOrderInsideOut = insideOut;\nexports.stackOrderNone = none;\nexports.stackOrderReverse = reverse;\nexports.stratify = stratify;\nexports.style = styleValue;\nexports.subset = subset;\nexports.sum = sum$2;\nexports.superset = superset;\nexports.svg = svg;\nexports.symbol = Symbol$1;\nexports.symbolAsterisk = asterisk;\nexports.symbolCircle = circle;\nexports.symbolCross = cross;\nexports.symbolDiamond = diamond;\nexports.symbolDiamond2 = diamond2;\nexports.symbolPlus = plus;\nexports.symbolSquare = square;\nexports.symbolSquare2 = square2;\nexports.symbolStar = star;\nexports.symbolTimes = times;\nexports.symbolTriangle = triangle;\nexports.symbolTriangle2 = triangle2;\nexports.symbolWye = wye;\nexports.symbolX = times;\nexports.symbols = symbolsFill;\nexports.symbolsFill = symbolsFill;\nexports.symbolsStroke = symbolsStroke;\nexports.text = text;\nexports.thresholdFreedmanDiaconis = thresholdFreedmanDiaconis;\nexports.thresholdScott = thresholdScott;\nexports.thresholdSturges = thresholdSturges;\nexports.tickFormat = tickFormat;\nexports.tickIncrement = tickIncrement;\nexports.tickStep = tickStep;\nexports.ticks = ticks;\nexports.timeDay = timeDay;\nexports.timeDays = timeDays;\nexports.timeFormatDefaultLocale = defaultLocale;\nexports.timeFormatLocale = formatLocale;\nexports.timeFriday = timeFriday;\nexports.timeFridays = timeFridays;\nexports.timeHour = timeHour;\nexports.timeHours = timeHours;\nexports.timeInterval = timeInterval;\nexports.timeMillisecond = millisecond;\nexports.timeMilliseconds = milliseconds;\nexports.timeMinute = timeMinute;\nexports.timeMinutes = timeMinutes;\nexports.timeMonday = timeMonday;\nexports.timeMondays = timeMondays;\nexports.timeMonth = timeMonth;\nexports.timeMonths = timeMonths;\nexports.timeSaturday = timeSaturday;\nexports.timeSaturdays = timeSaturdays;\nexports.timeSecond = second;\nexports.timeSeconds = seconds;\nexports.timeSunday = timeSunday;\nexports.timeSundays = timeSundays;\nexports.timeThursday = timeThursday;\nexports.timeThursdays = timeThursdays;\nexports.timeTickInterval = timeTickInterval;\nexports.timeTicks = timeTicks;\nexports.timeTuesday = timeTuesday;\nexports.timeTuesdays = timeTuesdays;\nexports.timeWednesday = timeWednesday;\nexports.timeWednesdays = timeWednesdays;\nexports.timeWeek = timeSunday;\nexports.timeWeeks = timeSundays;\nexports.timeYear = timeYear;\nexports.timeYears = timeYears;\nexports.timeout = timeout;\nexports.timer = timer;\nexports.timerFlush = timerFlush;\nexports.transition = transition;\nexports.transpose = transpose;\nexports.tree = tree;\nexports.treemap = index;\nexports.treemapBinary = binary;\nexports.treemapDice = treemapDice;\nexports.treemapResquarify = resquarify;\nexports.treemapSlice = treemapSlice;\nexports.treemapSliceDice = sliceDice;\nexports.treemapSquarify = squarify;\nexports.tsv = tsv;\nexports.tsvFormat = tsvFormat;\nexports.tsvFormatBody = tsvFormatBody;\nexports.tsvFormatRow = tsvFormatRow;\nexports.tsvFormatRows = tsvFormatRows;\nexports.tsvFormatValue = tsvFormatValue;\nexports.tsvParse = tsvParse;\nexports.tsvParseRows = tsvParseRows;\nexports.union = union;\nexports.unixDay = unixDay;\nexports.unixDays = unixDays;\nexports.utcDay = utcDay;\nexports.utcDays = utcDays;\nexports.utcFriday = utcFriday;\nexports.utcFridays = utcFridays;\nexports.utcHour = utcHour;\nexports.utcHours = utcHours;\nexports.utcMillisecond = millisecond;\nexports.utcMilliseconds = milliseconds;\nexports.utcMinute = utcMinute;\nexports.utcMinutes = utcMinutes;\nexports.utcMonday = utcMonday;\nexports.utcMondays = utcMondays;\nexports.utcMonth = utcMonth;\nexports.utcMonths = utcMonths;\nexports.utcSaturday = utcSaturday;\nexports.utcSaturdays = utcSaturdays;\nexports.utcSecond = second;\nexports.utcSeconds = seconds;\nexports.utcSunday = utcSunday;\nexports.utcSundays = utcSundays;\nexports.utcThursday = utcThursday;\nexports.utcThursdays = utcThursdays;\nexports.utcTickInterval = utcTickInterval;\nexports.utcTicks = utcTicks;\nexports.utcTuesday = utcTuesday;\nexports.utcTuesdays = utcTuesdays;\nexports.utcWednesday = utcWednesday;\nexports.utcWednesdays = utcWednesdays;\nexports.utcWeek = utcSunday;\nexports.utcWeeks = utcSundays;\nexports.utcYear = utcYear;\nexports.utcYears = utcYears;\nexports.variance = variance;\nexports.version = version;\nexports.window = defaultView;\nexports.xml = xml;\nexports.zip = zip;\nexports.zoom = zoom;\nexports.zoomIdentity = identity;\nexports.zoomTransform = transform;\n\n}));\n","(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o b ? 1 : a >= b ? 0 : NaN;\n }\n\n function bisector(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n\n function ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n }\n\n var ascendingBisect = bisector(ascending);\n var bisectRight = ascendingBisect.right;\n var bisectLeft = ascendingBisect.left;\n\n function descending(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n }\n\n function number(x) {\n return x === null ? NaN : +x;\n }\n\n function variance(array, f) {\n var n = array.length,\n m = 0,\n a,\n d,\n s = 0,\n i = -1,\n j = 0;\n\n if (f == null) {\n while (++i < n) {\n if (!isNaN(a = number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n\n else {\n while (++i < n) {\n if (!isNaN(a = number(f(array[i], i, array)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n\n if (j > 1) return s / (j - 1);\n }\n\n function deviation(array, f) {\n var v = variance(array, f);\n return v ? Math.sqrt(v) : v;\n }\n\n function extent(array, f) {\n var i = -1,\n n = array.length,\n a,\n b,\n c;\n\n if (f == null) {\n while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n\n else {\n while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }\n while (++i < n) if ((b = f(array[i], i, array)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n\n return [a, c];\n }\n\n var array = Array.prototype;\n\n var slice = array.slice;\n var map = array.map;\n\n function constant(x) {\n return function() {\n return x;\n };\n }\n\n function identity(x) {\n return x;\n }\n\n function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n }\n\n var e10 = Math.sqrt(50);\n var e5 = Math.sqrt(10);\n var e2 = Math.sqrt(2);\n function ticks(start, stop, count) {\n var step = tickStep(start, stop, count);\n return range(\n Math.ceil(start / step) * step,\n Math.floor(stop / step) * step + step / 2, // inclusive\n step\n );\n }\n\n function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n }\n\n function sturges(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n }\n\n function histogram() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] >= x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisectRight(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n }\n\n function quantile(array, p, f) {\n if (f == null) f = number;\n if (!(n = array.length)) return;\n if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);\n if (p >= 1) return +f(array[n - 1], n - 1, array);\n var n,\n h = (n - 1) * p,\n i = Math.floor(h),\n a = +f(array[i], i, array),\n b = +f(array[i + 1], i + 1, array);\n return a + (b - a) * (h - i);\n }\n\n function freedmanDiaconis(values, min, max) {\n values = map.call(values, number).sort(ascending);\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n }\n\n function scott(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n }\n\n function max(array, f) {\n var i = -1,\n n = array.length,\n a,\n b;\n\n if (f == null) {\n while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n }\n\n else {\n while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;\n }\n\n return a;\n }\n\n function mean(array, f) {\n var s = 0,\n n = array.length,\n a,\n i = -1,\n j = n;\n\n if (f == null) {\n while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;\n }\n\n else {\n while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;\n }\n\n if (j) return s / j;\n }\n\n function median(array, f) {\n var numbers = [],\n n = array.length,\n a,\n i = -1;\n\n if (f == null) {\n while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);\n }\n\n else {\n while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);\n }\n\n return quantile(numbers.sort(ascending), 0.5);\n }\n\n function merge(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n }\n\n function min(array, f) {\n var i = -1,\n n = array.length,\n a,\n b;\n\n if (f == null) {\n while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n }\n\n else {\n while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }\n while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;\n }\n\n return a;\n }\n\n function pairs(array) {\n var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [p, p = array[++i]];\n return pairs;\n }\n\n function permute(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n }\n\n function scan(array, compare) {\n if (!(n = array.length)) return;\n var i = 0,\n n,\n j = 0,\n xi,\n xj = array[j];\n\n if (!compare) compare = ascending;\n\n while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;\n\n if (compare(xj, xj) === 0) return j;\n }\n\n function shuffle(array, i0, i1) {\n var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n\n return array;\n }\n\n function sum(array, f) {\n var s = 0,\n n = array.length,\n a,\n i = -1;\n\n if (f == null) {\n while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.\n }\n\n else {\n while (++i < n) if (a = +f(array[i], i, array)) s += a;\n }\n\n return s;\n }\n\n function transpose(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n }\n\n function length(d) {\n return d.length;\n }\n\n function zip() {\n return transpose(arguments);\n }\n\n exports.bisect = bisectRight;\n exports.bisectRight = bisectRight;\n exports.bisectLeft = bisectLeft;\n exports.ascending = ascending;\n exports.bisector = bisector;\n exports.descending = descending;\n exports.deviation = deviation;\n exports.extent = extent;\n exports.histogram = histogram;\n exports.thresholdFreedmanDiaconis = freedmanDiaconis;\n exports.thresholdScott = scott;\n exports.thresholdSturges = sturges;\n exports.max = max;\n exports.mean = mean;\n exports.median = median;\n exports.merge = merge;\n exports.min = min;\n exports.pairs = pairs;\n exports.permute = permute;\n exports.quantile = quantile;\n exports.range = range;\n exports.scan = scan;\n exports.shuffle = shuffle;\n exports.sum = sum;\n exports.ticks = ticks;\n exports.tickStep = tickStep;\n exports.transpose = transpose;\n exports.variance = variance;\n exports.zip = zip;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n},{}],2:[function(require,module,exports){\n// https://d3js.org/d3-collection/ Version 1.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nvar prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nvar nest = function() {\n var keys = [],\n sortKeys = [],\n sortValues,\n rollup,\n nest;\n\n function apply(array, depth, createResult, setResult) {\n if (depth >= keys.length) return rollup != null\n ? rollup(array) : (sortValues != null\n ? array.sort(sortValues)\n : array);\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = map(),\n values,\n result = createResult();\n\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n values.push(value);\n } else {\n valuesByKey.set(keyValue, [value]);\n }\n }\n\n valuesByKey.each(function(values, key) {\n setResult(result, key, apply(values, depth, createResult, setResult));\n });\n\n return result;\n }\n\n function entries(map$$1, depth) {\n if (++depth > keys.length) return map$$1;\n var array, sortKey = sortKeys[depth - 1];\n if (rollup != null && depth >= keys.length) array = map$$1.entries();\n else array = [], map$$1.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n }\n\n return nest = {\n object: function(array) { return apply(array, 0, createObject, setObject); },\n map: function(array) { return apply(array, 0, createMap, setMap); },\n entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n key: function(d) { keys.push(d); return nest; },\n sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n sortValues: function(order) { sortValues = order; return nest; },\n rollup: function(f) { rollup = f; return nest; }\n };\n};\n\nfunction createObject() {\n return {};\n}\n\nfunction setObject(object, key, value) {\n object[key] = value;\n}\n\nfunction createMap() {\n return map();\n}\n\nfunction setMap(map$$1, key, value) {\n map$$1.set(key, value);\n}\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nvar keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n};\n\nvar values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n};\n\nvar entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({key: key, value: map[key]});\n return entries;\n};\n\nexports.nest = nest;\nexports.set = set;\nexports.map = map;\nexports.keys = keys;\nexports.values = values;\nexports.entries = entries;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{}],3:[function(require,module,exports){\n// https://d3js.org/d3-color/ Version 1.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nvar define = function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n};\n\nfunction extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n\nfunction Color() {}\n\nvar darker = 0.7;\nvar brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\";\nvar reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\";\nvar reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\";\nvar reHex3 = /^#([0-9a-f]{3})$/;\nvar reHex6 = /^#([0-9a-f]{6})$/;\nvar reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\");\nvar reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\");\nvar reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\");\nvar reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\");\nvar reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\");\nvar reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nfunction color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nfunction rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nfunction rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nfunction Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nfunction hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nfunction hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n\nvar deg2rad = Math.PI / 180;\nvar rad2deg = 180 / Math.PI;\n\nvar Kn = 18;\nvar Xn = 0.950470;\nvar Yn = 1;\nvar Zn = 1.088830;\nvar t0 = 4 / 29;\nvar t1 = 6 / 29;\nvar t2 = 3 * t1 * t1;\nvar t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var b = rgb2xyz(o.r),\n a = rgb2xyz(o.g),\n l = rgb2xyz(o.b),\n x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Rgb(\n xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction xyz2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2xyz(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n\nvar A = -0.14861;\nvar B = +1.78277;\nvar C = -0.29227;\nvar D = -0.90649;\nvar E = +1.97294;\nvar ED = E * D;\nvar EB = E * B;\nvar BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nfunction cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n\nexports.color = color;\nexports.rgb = rgb;\nexports.hsl = hsl;\nexports.lab = lab;\nexports.hcl = hcl;\nexports.cubehelix = cubehelix;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{}],4:[function(require,module,exports){\n// https://d3js.org/d3-dispatch/ Version 1.0.1. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n var noop = {value: function() {}};\n\n function dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n }\n\n function Dispatch(_) {\n this._ = _;\n }\n\n function parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n }\n\n Dispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n };\n\n function get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n }\n\n function set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n }\n\n exports.dispatch = dispatch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n},{}],5:[function(require,module,exports){\n// https://d3js.org/d3-format/ Version 1.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n // Computes the decimal coefficient and exponent of the specified number x with\n // significant digits p, where x is positive and p is in [1, 21] or undefined.\n // For example, formatDecimal(1.23) returns [\"123\", 0].\n function formatDecimal(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n }\n\n function exponent(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n }\n\n function formatGroup(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n }\n\n function formatDefault(x, p) {\n x = x.toPrecision(p);\n\n out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (x[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n case \"e\": break out;\n default: if (i0 > 0) i0 = 0; break;\n }\n }\n\n return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;\n }\n\n var prefixExponent;\n\n function formatPrefixAuto(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n }\n\n function formatRounded(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n }\n\n var formatTypes = {\n \"\": formatDefault,\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n };\n\n // [[fill]align][sign][symbol][0][width][,][.precision][type]\n var re = /^(?:(.)?([<>=^]))?([+\\-\\( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?([a-z%])?$/i;\n\n function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n }\n\n function FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n\n var match,\n fill = match[1] || \" \",\n align = match[2] || \">\",\n sign = match[3] || \"-\",\n symbol = match[4] || \"\",\n zero = !!match[5],\n width = match[6] && +match[6],\n comma = !!match[7],\n precision = match[8] && +match[8].slice(1),\n type = match[9] || \"\";\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // Map invalid types to the default format.\n else if (!formatTypes[type]) type = \"\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n this.fill = fill;\n this.align = align;\n this.sign = sign;\n this.symbol = symbol;\n this.zero = zero;\n this.width = width;\n this.comma = comma;\n this.precision = precision;\n this.type = type;\n }\n\n FormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + this.type;\n };\n\n var prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\n function identity(x) {\n return x;\n }\n\n function formatLocale(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal;\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n type = specifier.type;\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? \"%\" : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = !type || /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? (type ? 6 : 12)\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Convert negative to positive, and compute the prefix.\n // Note that -0 is not less than 0, but 1 / -0 is!\n var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);\n\n // Perform the initial formatting.\n value = formatType(value, precision);\n\n // If the original value was negative, it may be rounded to zero during\n // formatting; treat this as (positive) zero.\n if (valueNegative) {\n i = -1, n = value.length;\n valueNegative = false;\n while (++i < n) {\n if (c = value.charCodeAt(i), (48 < c && c < 58)\n || (type === \"x\" && 96 < c && c < 103)\n || (type === \"X\" && 64 < c && c < 71)) {\n valueNegative = true;\n break;\n }\n }\n }\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = valueSuffix + (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": return valuePrefix + value + valueSuffix + padding;\n case \"=\": return valuePrefix + padding + value + valueSuffix;\n case \"^\": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);\n }\n return padding + valuePrefix + value + valueSuffix;\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n }\n\n var locale;\n defaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n });\n\n function defaultLocale(definition) {\n locale = formatLocale(definition);\n exports.format = locale.format;\n exports.formatPrefix = locale.formatPrefix;\n return locale;\n }\n\n function precisionFixed(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n }\n\n function precisionPrefix(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n }\n\n function precisionRound(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n }\n\n exports.formatDefaultLocale = defaultLocale;\n exports.formatLocale = formatLocale;\n exports.formatSpecifier = formatSpecifier;\n exports.precisionFixed = precisionFixed;\n exports.precisionPrefix = precisionPrefix;\n exports.precisionRound = precisionRound;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n},{}],6:[function(require,module,exports){\n// https://d3js.org/d3-interpolate/ Version 1.1.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-color')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-color'], factory) :\n (factory((global.d3 = global.d3 || {}),global.d3));\n}(this, (function (exports,d3Color) { 'use strict';\n\nfunction basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nvar basis$1 = function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n};\n\nvar basisClosed = function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n};\n\nvar constant = function(x) {\n return function() {\n return x;\n };\n};\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nfunction hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nfunction gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nfunction nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n\nvar rgb$1 = (function rgbGamma(y) {\n var color$$1 = gamma(y);\n\n function rgb$$1(start, end) {\n var r = color$$1((start = d3Color.rgb(start)).r, (end = d3Color.rgb(end)).r),\n g = color$$1(start.g, end.g),\n b = color$$1(start.b, end.b),\n opacity = color$$1(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb$$1.gamma = rgbGamma;\n\n return rgb$$1;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color$$1;\n for (i = 0; i < n; ++i) {\n color$$1 = d3Color.rgb(colors[i]);\n r[i] = color$$1.r || 0;\n g[i] = color$$1.g || 0;\n b[i] = color$$1.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color$$1.opacity = 1;\n return function(t) {\n color$$1.r = r(t);\n color$$1.g = g(t);\n color$$1.b = b(t);\n return color$$1 + \"\";\n };\n };\n}\n\nvar rgbBasis = rgbSpline(basis$1);\nvar rgbBasisClosed = rgbSpline(basisClosed);\n\nvar array = function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(nb),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n};\n\nvar date = function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n};\n\nvar number = function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n};\n\nvar object = function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n};\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;\nvar reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nvar string = function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n};\n\nvar value = function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = d3Color.color(b)) ? (b = c, rgb$1) : string)\n : b instanceof d3Color.color ? rgb$1\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : isNaN(b) ? object\n : number)(a, b);\n};\n\nvar round = function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n};\n\nvar degrees = 180 / Math.PI;\n\nvar identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nvar decompose = function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n};\n\nvar cssNode;\nvar cssRoot;\nvar cssView;\nvar svgNode;\n\nfunction parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nfunction parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nvar interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nvar interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n\nvar rho = Math.SQRT2;\nvar rho2 = 2;\nvar rho4 = 4;\nvar epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nvar zoom = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n };\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n };\n }\n\n i.duration = S * 1000;\n\n return i;\n};\n\nfunction hsl$1(hue$$1) {\n return function(start, end) {\n var h = hue$$1((start = d3Color.hsl(start)).h, (end = d3Color.hsl(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hsl$2 = hsl$1(hue);\nvar hslLong = hsl$1(nogamma);\n\nfunction lab$1(start, end) {\n var l = nogamma((start = d3Color.lab(start)).l, (end = d3Color.lab(end)).l),\n a = nogamma(start.a, end.a),\n b = nogamma(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\nfunction hcl$1(hue$$1) {\n return function(start, end) {\n var h = hue$$1((start = d3Color.hcl(start)).h, (end = d3Color.hcl(end)).h),\n c = nogamma(start.c, end.c),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hcl$2 = hcl$1(hue);\nvar hclLong = hcl$1(nogamma);\n\nfunction cubehelix$1(hue$$1) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix$$1(start, end) {\n var h = hue$$1((start = d3Color.cubehelix(start)).h, (end = d3Color.cubehelix(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix$$1.gamma = cubehelixGamma;\n\n return cubehelix$$1;\n })(1);\n}\n\nvar cubehelix$2 = cubehelix$1(hue);\nvar cubehelixLong = cubehelix$1(nogamma);\n\nvar quantize = function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n};\n\nexports.interpolate = value;\nexports.interpolateArray = array;\nexports.interpolateBasis = basis$1;\nexports.interpolateBasisClosed = basisClosed;\nexports.interpolateDate = date;\nexports.interpolateNumber = number;\nexports.interpolateObject = object;\nexports.interpolateRound = round;\nexports.interpolateString = string;\nexports.interpolateTransformCss = interpolateTransformCss;\nexports.interpolateTransformSvg = interpolateTransformSvg;\nexports.interpolateZoom = zoom;\nexports.interpolateRgb = rgb$1;\nexports.interpolateRgbBasis = rgbBasis;\nexports.interpolateRgbBasisClosed = rgbBasisClosed;\nexports.interpolateHsl = hsl$2;\nexports.interpolateHslLong = hslLong;\nexports.interpolateLab = lab$1;\nexports.interpolateHcl = hcl$2;\nexports.interpolateHclLong = hclLong;\nexports.interpolateCubehelix = cubehelix$2;\nexports.interpolateCubehelixLong = cubehelixLong;\nexports.quantize = quantize;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{\"d3-color\":3}],7:[function(require,module,exports){\n// https://d3js.org/d3-scale/ Version 1.0.3. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-collection'), require('d3-interpolate'), require('d3-format'), require('d3-time'), require('d3-time-format'), require('d3-color')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-collection', 'd3-interpolate', 'd3-format', 'd3-time', 'd3-time-format', 'd3-color'], factory) :\n (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3,global.d3,global.d3,global.d3,global.d3));\n}(this, function (exports,d3Array,d3Collection,d3Interpolate,d3Format,d3Time,d3TimeFormat,d3Color) { 'use strict';\n\n var array = Array.prototype;\n\n var map$1 = array.map;\n var slice = array.slice;\n\n var implicit = {name: \"implicit\"};\n\n function ordinal(range) {\n var index = d3Collection.map(),\n domain = [],\n unknown = implicit;\n\n range = range == null ? [] : slice.call(range);\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = d3Collection.map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return scale;\n }\n\n function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse];\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = d3Array.range(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = [+_[0], +_[1]], round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n }\n\n function pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n }\n\n function point() {\n return pointish(band().paddingInner(1));\n }\n\n function constant(x) {\n return function() {\n return x;\n };\n }\n\n function number(x) {\n return +x;\n }\n\n var unit = [0, 1];\n\n function deinterpolate(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(b);\n }\n\n function deinterpolateClamp(deinterpolate) {\n return function(a, b) {\n var d = deinterpolate(a = +a, b = +b);\n return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };\n };\n }\n\n function reinterpolateClamp(reinterpolate) {\n return function(a, b) {\n var r = reinterpolate(a = +a, b = +b);\n return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };\n };\n }\n\n function bimap(domain, range, deinterpolate, reinterpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);\n else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n }\n\n function polymap(domain, range, deinterpolate, reinterpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = deinterpolate(domain[i], domain[i + 1]);\n r[i] = reinterpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = d3Array.bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n }\n\n function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp());\n }\n\n // deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n // reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].\n function continuous(deinterpolate$$, reinterpolate) {\n var domain = unit,\n range = unit,\n interpolate = d3Interpolate.interpolate,\n clamp = false,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate$$) : deinterpolate$$, interpolate)))(+x);\n }\n\n scale.invert = function(y) {\n return (input || (input = piecewise(range, domain, deinterpolate, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map$1.call(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = d3Interpolate.interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, rescale()) : clamp;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n return rescale();\n }\n\n function tickFormat(domain, count, specifier) {\n var start = domain[0],\n stop = domain[domain.length - 1],\n step = d3Array.tickStep(start, stop, count == null ? 10 : count),\n precision;\n specifier = d3Format.formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionPrefix(step, value))) specifier.precision = precision;\n return d3Format.formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = d3Format.precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return d3Format.format(specifier);\n }\n\n function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return d3Array.ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain(), count, specifier);\n };\n\n scale.nice = function(count) {\n var d = domain(),\n i = d.length - 1,\n n = count == null ? 10 : count,\n start = d[0],\n stop = d[i],\n step = d3Array.tickStep(start, stop, n);\n\n if (step) {\n step = d3Array.tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);\n d[0] = Math.floor(start / step) * step;\n d[i] = Math.ceil(stop / step) * step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n }\n\n function linear() {\n var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n return linearish(scale);\n }\n\n function identity() {\n var domain = [0, 1];\n\n function scale(x) {\n return +x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = map$1.call(_, number), scale) : domain.slice();\n };\n\n scale.copy = function() {\n return identity().domain(domain);\n };\n\n return linearish(scale);\n }\n\n function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n }\n\n function deinterpolate$1(a, b) {\n return (b = Math.log(b / a))\n ? function(x) { return Math.log(x / a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n return a < 0\n ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }\n : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };\n }\n\n function pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n }\n\n function powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n }\n\n function logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n }\n\n function reflect(f) {\n return function(x) {\n return -f(-x);\n };\n }\n\n function log() {\n var scale = continuous(deinterpolate$1, reinterpolate).domain([1, 10]),\n domain = scale.domain,\n base = 10,\n logs = logp(10),\n pows = powp(10);\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = d3Array.ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = d3Format.format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n scale.copy = function() {\n return copy(scale, log().base(base));\n };\n\n return scale;\n }\n\n function raise(x, exponent) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n }\n\n function pow() {\n var exponent = 1,\n scale = continuous(deinterpolate, reinterpolate),\n domain = scale.domain;\n\n function deinterpolate(a, b) {\n return (b = raise(b, exponent) - (a = raise(a, exponent)))\n ? function(x) { return (raise(x, exponent) - a) / b; }\n : constant(b);\n }\n\n function reinterpolate(a, b) {\n b = raise(b, exponent) - (a = raise(a, exponent));\n return function(t) { return raise(a + b * t, 1 / exponent); };\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, domain(domain())) : exponent;\n };\n\n scale.copy = function() {\n return copy(scale, pow().exponent(exponent));\n };\n\n return linearish(scale);\n }\n\n function sqrt() {\n return pow().exponent(0.5);\n }\n\n function quantile$1() {\n var domain = [],\n range = [],\n thresholds = [];\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = d3Array.quantile(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3Array.bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(d3Array.ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile$1()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n }\n\n function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1];\n\n function scale(x) {\n if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range);\n };\n\n return linearish(scale);\n }\n\n function threshold() {\n var domain = [0.5],\n range = [0, 1],\n n = 1;\n\n function scale(x) {\n if (x <= x) return range[d3Array.bisect(domain, x, 0, n)];\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range);\n };\n\n return scale;\n }\n\n var durationSecond = 1000;\n var durationMinute = durationSecond * 60;\n var durationHour = durationMinute * 60;\n var durationDay = durationHour * 24;\n var durationWeek = durationDay * 7;\n var durationMonth = durationDay * 30;\n var durationYear = durationDay * 365;\n function date(t) {\n return new Date(t);\n }\n\n function number$1(t) {\n return t instanceof Date ? +t : +new Date(+t);\n }\n\n function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(deinterpolate, d3Interpolate.interpolateNumber),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = d3Array.bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = d3Array.tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = d3Array.tickStep(start, stop, interval);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map$1.call(_, number$1)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n }\n\n function time() {\n return calendar(d3Time.timeYear, d3Time.timeMonth, d3Time.timeWeek, d3Time.timeDay, d3Time.timeHour, d3Time.timeMinute, d3Time.timeSecond, d3Time.timeMillisecond, d3TimeFormat.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);\n }\n\n function utcTime() {\n return calendar(d3Time.utcYear, d3Time.utcMonth, d3Time.utcWeek, d3Time.utcDay, d3Time.utcHour, d3Time.utcMinute, d3Time.utcSecond, d3Time.utcMillisecond, d3TimeFormat.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);\n }\n\n function colors(s) {\n return s.match(/.{6}/g).map(function(x) {\n return \"#\" + x;\n });\n }\n\n var category10 = colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n\n var category20b = colors(\"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6\");\n\n var category20c = colors(\"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9\");\n\n var category20 = colors(\"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5\");\n\n var cubehelix$1 = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(300, 0.5, 0.0), d3Color.cubehelix(-240, 0.5, 1.0));\n\n var warm = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(-100, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\n var cool = d3Interpolate.interpolateCubehelixLong(d3Color.cubehelix(260, 0.75, 0.35), d3Color.cubehelix(80, 1.50, 0.8));\n\n var rainbow = d3Color.cubehelix();\n\n function rainbow$1(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n rainbow.h = 360 * t - 100;\n rainbow.s = 1.5 - 1.5 * ts;\n rainbow.l = 0.8 - 0.9 * ts;\n return rainbow + \"\";\n }\n\n function ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n }\n\n var viridis = ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\n var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\n var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\n var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n\n function sequential(interpolator) {\n var x0 = 0,\n x1 = 1,\n clamp = false;\n\n function scale(x) {\n var t = (x - x0) / (x1 - x0);\n return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.copy = function() {\n return sequential(interpolator).domain([x0, x1]).clamp(clamp);\n };\n\n return linearish(scale);\n }\n\n exports.scaleBand = band;\n exports.scalePoint = point;\n exports.scaleIdentity = identity;\n exports.scaleLinear = linear;\n exports.scaleLog = log;\n exports.scaleOrdinal = ordinal;\n exports.scaleImplicit = implicit;\n exports.scalePow = pow;\n exports.scaleSqrt = sqrt;\n exports.scaleQuantile = quantile$1;\n exports.scaleQuantize = quantize;\n exports.scaleThreshold = threshold;\n exports.scaleTime = time;\n exports.scaleUtc = utcTime;\n exports.schemeCategory10 = category10;\n exports.schemeCategory20b = category20b;\n exports.schemeCategory20c = category20c;\n exports.schemeCategory20 = category20;\n exports.interpolateCubehelixDefault = cubehelix$1;\n exports.interpolateRainbow = rainbow$1;\n exports.interpolateWarm = warm;\n exports.interpolateCool = cool;\n exports.interpolateViridis = viridis;\n exports.interpolateMagma = magma;\n exports.interpolateInferno = inferno;\n exports.interpolatePlasma = plasma;\n exports.scaleSequential = sequential;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n},{\"d3-array\":1,\"d3-collection\":2,\"d3-color\":3,\"d3-format\":5,\"d3-interpolate\":6,\"d3-time\":10,\"d3-time-format\":9}],8:[function(require,module,exports){\n// https://d3js.org/d3-selection/ Version 1.0.2. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, function (exports) { 'use strict';\n\n var xhtml = \"http://www.w3.org/1999/xhtml\";\n\n var namespaces = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n\n function namespace(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n }\n\n function creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n }\n\n function creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n }\n\n function creator(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n }\n\n var nextId = 0;\n\n function local() {\n return new Local;\n }\n\n function Local() {\n this._ = \"@\" + (++nextId).toString(36);\n }\n\n Local.prototype = local.prototype = {\n constructor: Local,\n get: function(node) {\n var id = this._;\n while (!(id in node)) if (!(node = node.parentNode)) return;\n return node[id];\n },\n set: function(node, value) {\n return node[this._] = value;\n },\n remove: function(node) {\n return this._ in node && delete node[this._];\n },\n toString: function() {\n return this._;\n }\n };\n\n var matcher = function(selector) {\n return function() {\n return this.matches(selector);\n };\n };\n\n if (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!element.matches) {\n var vendorMatches = element.webkitMatchesSelector\n || element.msMatchesSelector\n || element.mozMatchesSelector\n || element.oMatchesSelector;\n matcher = function(selector) {\n return function() {\n return vendorMatches.call(this, selector);\n };\n };\n }\n }\n\n var matcher$1 = matcher;\n\n var filterEvents = {};\n\n exports.event = null;\n\n if (typeof document !== \"undefined\") {\n var element$1 = document.documentElement;\n if (!(\"onmouseenter\" in element$1)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n }\n\n function filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n }\n\n function contextListener(listener, index, group) {\n return function(event1) {\n var event0 = exports.event; // Events can be reentrant (e.g., focus).\n exports.event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n exports.event = event0;\n }\n };\n }\n\n function parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n }\n\n function onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n }\n\n function onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n }\n\n function selection_on(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n }\n\n function customEvent(event1, listener, that, args) {\n var event0 = exports.event;\n event1.sourceEvent = exports.event;\n exports.event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n exports.event = event0;\n }\n }\n\n function sourceEvent() {\n var current = exports.event, source;\n while (source = current.sourceEvent) current = source;\n return current;\n }\n\n function point(node, event) {\n var svg = node.ownerSVGElement || node;\n\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n\n function mouse(node) {\n var event = sourceEvent();\n if (event.changedTouches) event = event.changedTouches[0];\n return point(node, event);\n }\n\n function none() {}\n\n function selector(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n }\n\n function selection_select(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n }\n\n function empty() {\n return [];\n }\n\n function selectorAll(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n }\n\n function selection_selectAll(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n }\n\n function selection_filter(match) {\n if (typeof match !== \"function\") match = matcher$1(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n }\n\n function sparse(update) {\n return new Array(update.length);\n }\n\n function selection_enter() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n }\n\n function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n }\n\n EnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n };\n\n function constant(x) {\n return function() {\n return x;\n };\n }\n\n var keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\n function bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n }\n\n function bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n }\n\n function selection_data(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n }\n\n function selection_exit() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n }\n\n function selection_merge(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n }\n\n function selection_order() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n }\n\n function selection_sort(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n }\n\n function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n\n function selection_call() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n }\n\n function selection_nodes() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n }\n\n function selection_node() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n }\n\n function selection_size() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n }\n\n function selection_empty() {\n return !this.node();\n }\n\n function selection_each(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n }\n\n function attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n }\n\n function attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n }\n\n function attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n }\n\n function attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n }\n\n function attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n }\n\n function attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n }\n\n function selection_attr(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n }\n\n function defaultView(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n }\n\n function styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n }\n\n function styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n }\n\n function styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n }\n\n function selection_style(name, value, priority) {\n var node;\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : defaultView(node = this.node())\n .getComputedStyle(node, null)\n .getPropertyValue(name);\n }\n\n function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n }\n\n function propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n }\n\n function propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n }\n\n function selection_property(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n }\n\n function classArray(string) {\n return string.trim().split(/^|\\s+/);\n }\n\n function classList(node) {\n return node.classList || new ClassList(node);\n }\n\n function ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n }\n\n ClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n };\n\n function classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n }\n\n function classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n }\n\n function classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n }\n\n function classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n }\n\n function classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n }\n\n function selection_classed(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n }\n\n function textRemove() {\n this.textContent = \"\";\n }\n\n function textConstant(value) {\n return function() {\n this.textContent = value;\n };\n }\n\n function textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n }\n\n function selection_text(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n }\n\n function htmlRemove() {\n this.innerHTML = \"\";\n }\n\n function htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n }\n\n function htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n }\n\n function selection_html(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n }\n\n function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n }\n\n function selection_raise() {\n return this.each(raise);\n }\n\n function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n }\n\n function selection_lower() {\n return this.each(lower);\n }\n\n function selection_append(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n }\n\n function constantNull() {\n return null;\n }\n\n function selection_insert(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n }\n\n function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n\n function selection_remove() {\n return this.each(remove);\n }\n\n function selection_datum(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n }\n\n function dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (event) {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n }\n\n function dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n }\n\n function dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n }\n\n function selection_dispatch(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n }\n\n var root = [null];\n\n function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n }\n\n function selection() {\n return new Selection([[document.documentElement]], root);\n }\n\n Selection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n };\n\n function select(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n }\n\n function selectAll(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([selector == null ? [] : selector], root);\n }\n\n function touch(node, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return point(node, touch);\n }\n }\n\n return null;\n }\n\n function touches(node, touches) {\n if (touches == null) touches = sourceEvent().touches;\n\n for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n points[i] = point(node, touches[i]);\n }\n\n return points;\n }\n\n exports.creator = creator;\n exports.local = local;\n exports.matcher = matcher$1;\n exports.mouse = mouse;\n exports.namespace = namespace;\n exports.namespaces = namespaces;\n exports.select = select;\n exports.selectAll = selectAll;\n exports.selection = selection;\n exports.selector = selector;\n exports.selectorAll = selectorAll;\n exports.touch = touch;\n exports.touches = touches;\n exports.window = defaultView;\n exports.customEvent = customEvent;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n},{}],9:[function(require,module,exports){\n// https://d3js.org/d3-time-format/ Version 2.0.3. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-time')) :\n typeof define === 'function' && define.amd ? define(['exports', 'd3-time'], factory) :\n (factory((global.d3 = global.d3 || {}),global.d3));\n}(this, (function (exports,d3Time) { 'use strict';\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nfunction formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"S\": formatSeconds,\n \"U\": formatWeekNumberSunday,\n \"w\": formatWeekdayNumber,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"S\": formatUTCSeconds,\n \"U\": formatUTCWeekNumberSunday,\n \"w\": formatUTCWeekdayNumber,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"S\": parseSeconds,\n \"U\": parseWeekNumberSunday,\n \"w\": parseWeekdayNumber,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0);\n if (i != string.length) return null;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n var day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"};\nvar numberRe = /^\\s*\\d+/;\nvar percentRe = /^%/;\nvar requoteRe = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?:\\:?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + d3Time.timeDay.count(d3Time.timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(d3Time.timeSunday.count(d3Time.timeYear(d), d), p, 2);\n}\n\nfunction formatWeekdayNumber(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(d3Time.timeMonday.count(d3Time.timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + d3Time.utcDay.count(d3Time.utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(d3Time.utcSunday.count(d3Time.utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekdayNumber(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(d3Time.utcMonday.count(d3Time.utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nvar locale$1;\n\n\n\n\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nfunction defaultLocale(definition) {\n locale$1 = formatLocale(definition);\n exports.timeFormat = locale$1.format;\n exports.timeParse = locale$1.parse;\n exports.utcFormat = locale$1.utcFormat;\n exports.utcParse = locale$1.utcParse;\n return locale$1;\n}\n\nvar isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : exports.utcFormat(isoSpecifier);\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : exports.utcParse(isoSpecifier);\n\nexports.timeFormatDefaultLocale = defaultLocale;\nexports.timeFormatLocale = formatLocale;\nexports.isoFormat = formatIso;\nexports.isoParse = parseIso;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{\"d3-time\":10}],10:[function(require,module,exports){\n// https://d3js.org/d3-time/ Version 1.0.4. Copyright 2016 Mike Bostock.\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (factory((global.d3 = global.d3 || {})));\n}(this, (function (exports) { 'use strict';\n\nvar t0 = new Date;\nvar t1 = new Date;\n\nfunction newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n\nvar millisecond = newInterval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return newInterval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nvar milliseconds = millisecond.range;\n\nvar durationSecond = 1e3;\nvar durationMinute = 6e4;\nvar durationHour = 36e5;\nvar durationDay = 864e5;\nvar durationWeek = 6048e5;\n\nvar second = newInterval(function(date) {\n date.setTime(Math.floor(date / durationSecond) * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nvar seconds = second.range;\n\nvar minute = newInterval(function(date) {\n date.setTime(Math.floor(date / durationMinute) * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nvar minutes = minute.range;\n\nvar hour = newInterval(function(date) {\n var offset = date.getTimezoneOffset() * durationMinute % durationHour;\n if (offset < 0) offset += durationHour;\n date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nvar hours = hour.range;\n\nvar day = newInterval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nvar days = day.range;\n\nfunction weekday(i) {\n return newInterval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nvar sunday = weekday(0);\nvar monday = weekday(1);\nvar tuesday = weekday(2);\nvar wednesday = weekday(3);\nvar thursday = weekday(4);\nvar friday = weekday(5);\nvar saturday = weekday(6);\n\nvar sundays = sunday.range;\nvar mondays = monday.range;\nvar tuesdays = tuesday.range;\nvar wednesdays = wednesday.range;\nvar thursdays = thursday.range;\nvar fridays = friday.range;\nvar saturdays = saturday.range;\n\nvar month = newInterval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nvar months = month.range;\n\nvar year = newInterval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nvar years = year.range;\n\nvar utcMinute = newInterval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nvar utcMinutes = utcMinute.range;\n\nvar utcHour = newInterval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nvar utcHours = utcHour.range;\n\nvar utcDay = newInterval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nvar utcDays = utcDay.range;\n\nfunction utcWeekday(i) {\n return newInterval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nvar utcSunday = utcWeekday(0);\nvar utcMonday = utcWeekday(1);\nvar utcTuesday = utcWeekday(2);\nvar utcWednesday = utcWeekday(3);\nvar utcThursday = utcWeekday(4);\nvar utcFriday = utcWeekday(5);\nvar utcSaturday = utcWeekday(6);\n\nvar utcSundays = utcSunday.range;\nvar utcMondays = utcMonday.range;\nvar utcTuesdays = utcTuesday.range;\nvar utcWednesdays = utcWednesday.range;\nvar utcThursdays = utcThursday.range;\nvar utcFridays = utcFriday.range;\nvar utcSaturdays = utcSaturday.range;\n\nvar utcMonth = newInterval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nvar utcMonths = utcMonth.range;\n\nvar utcYear = newInterval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nvar utcYears = utcYear.range;\n\nexports.timeInterval = newInterval;\nexports.timeMillisecond = millisecond;\nexports.timeMilliseconds = milliseconds;\nexports.utcMillisecond = millisecond;\nexports.utcMilliseconds = milliseconds;\nexports.timeSecond = second;\nexports.timeSeconds = seconds;\nexports.utcSecond = second;\nexports.utcSeconds = seconds;\nexports.timeMinute = minute;\nexports.timeMinutes = minutes;\nexports.timeHour = hour;\nexports.timeHours = hours;\nexports.timeDay = day;\nexports.timeDays = days;\nexports.timeWeek = sunday;\nexports.timeWeeks = sundays;\nexports.timeSunday = sunday;\nexports.timeSundays = sundays;\nexports.timeMonday = monday;\nexports.timeMondays = mondays;\nexports.timeTuesday = tuesday;\nexports.timeTuesdays = tuesdays;\nexports.timeWednesday = wednesday;\nexports.timeWednesdays = wednesdays;\nexports.timeThursday = thursday;\nexports.timeThursdays = thursdays;\nexports.timeFriday = friday;\nexports.timeFridays = fridays;\nexports.timeSaturday = saturday;\nexports.timeSaturdays = saturdays;\nexports.timeMonth = month;\nexports.timeMonths = months;\nexports.timeYear = year;\nexports.timeYears = years;\nexports.utcMinute = utcMinute;\nexports.utcMinutes = utcMinutes;\nexports.utcHour = utcHour;\nexports.utcHours = utcHours;\nexports.utcDay = utcDay;\nexports.utcDays = utcDays;\nexports.utcWeek = utcSunday;\nexports.utcWeeks = utcSundays;\nexports.utcSunday = utcSunday;\nexports.utcSundays = utcSundays;\nexports.utcMonday = utcMonday;\nexports.utcMondays = utcMondays;\nexports.utcTuesday = utcTuesday;\nexports.utcTuesdays = utcTuesdays;\nexports.utcWednesday = utcWednesday;\nexports.utcWednesdays = utcWednesdays;\nexports.utcThursday = utcThursday;\nexports.utcThursdays = utcThursdays;\nexports.utcFriday = utcFriday;\nexports.utcFridays = utcFridays;\nexports.utcSaturday = utcSaturday;\nexports.utcSaturdays = utcSaturdays;\nexports.utcMonth = utcMonth;\nexports.utcMonths = utcMonths;\nexports.utcYear = utcYear;\nexports.utcYears = utcYears;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n},{}],11:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = color;\n\nvar _legend = require(\"./legend\");\n\nvar _legend2 = _interopRequireDefault(_legend);\n\nvar _d3Dispatch = require(\"d3-dispatch\");\n\nvar _d3Scale = require(\"d3-scale\");\n\nvar _d3Format = require(\"d3-format\");\n\nvar _d3Array = require(\"d3-array\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction color() {\n var scale = (0, _d3Scale.scaleLinear)(),\n shape = \"rect\",\n shapeWidth = 15,\n shapeHeight = 15,\n shapeRadius = 10,\n shapePadding = 2,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n useClass = false,\n title = \"\",\n locale = _legend2.default.d3_defaultLocale,\n specifier = _legend2.default.d3_defaultFormatSpecifier,\n labelOffset = 10,\n labelAlign = \"middle\",\n labelDelimiter = _legend2.default.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n path = void 0,\n titleWidth = void 0,\n legendDispatcher = (0, _d3Dispatch.dispatch)(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = _legend2.default.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n if (cellFilter) {\n _legend2.default.d3_filterCells(type, cellFilter);\n }\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\").data(type.data);\n\n //add event handlers\n _legend2.default.d3_addEvents(cellEnter, legendDispatcher);\n\n cell.exit().transition().style(\"opacity\", 0).remove();\n shapes.exit().transition().style(\"opacity\", 0).remove();\n\n shapes = shapes.merge(shapes);\n\n _legend2.default.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path);\n var text = _legend2.default.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n // sets placement\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d) {\n return d.getBBox();\n });\n //sets scale\n //everything is fill except for line which is stroke,\n if (!useClass) {\n if (shape == \"line\") {\n shapes.style(\"stroke\", type.feature);\n } else {\n shapes.style(\"fill\", type.feature);\n }\n } else {\n shapes.attr(\"class\", function (d) {\n return classPrefix + \"swatch \" + type.feature(d);\n });\n }\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(d.height, shapeSize[i].height);\n });\n\n cellTrans = function cellTrans(d, i) {\n var height = (0, _d3Array.sum)(cellSize.slice(0, i));\n return \"translate(0, \" + (height + i * shapePadding) + \")\";\n };\n\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width + shapeSize[i].x + labelOffset) + \", \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n cellTrans = function cellTrans(d, i) {\n return \"translate(\" + i * (shapeSize[i].width + shapePadding) + \",0)\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate(\" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (shapeSize[i].height + shapeSize[i].y + labelOffset + 8) + \")\";\n };\n }\n\n _legend2.default.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n _legend2.default.d3_title(svg, title, classPrefix, titleWidth);\n\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shape = function (_, d) {\n if (!arguments.length) return shape;\n if (_ == \"rect\" || _ == \"circle\" || _ == \"line\" || _ == \"path\" && typeof d === \"string\") {\n shape = _;\n path = d;\n }\n return legend;\n };\n\n legend.shapeWidth = function (_) {\n if (!arguments.length) return shapeWidth;\n shapeWidth = +_;\n return legend;\n };\n\n legend.shapeHeight = function (_) {\n if (!arguments.length) return shapeHeight;\n shapeHeight = +_;\n return legend;\n };\n\n legend.shapeRadius = function (_) {\n if (!arguments.length) return shapeRadius;\n shapeRadius = +_;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = (0, _d3Format.formatLocale)(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = (0, _d3Format.formatSpecifier)(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.useClass = function (_) {\n if (!arguments.length) return useClass;\n if (_ === true || _ === false) {\n useClass = _;\n }\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.textWrap = function (_) {\n if (!arguments.length) return textWrap;\n textWrap = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\n},{\"./legend\":13,\"d3-array\":1,\"d3-dispatch\":4,\"d3-format\":5,\"d3-scale\":7}],12:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar thresholdLabels = exports.thresholdLabels = function thresholdLabels(_ref) {\n var i = _ref.i,\n genLength = _ref.genLength,\n generatedLabels = _ref.generatedLabels,\n labelDelimiter = _ref.labelDelimiter;\n\n if (i === 0) {\n var values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n return \"Less than \" + values[1];\n } else if (i === genLength - 1) {\n var _values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n return _values[0] + \" or more\";\n }\n return generatedLabels[i];\n};\n\nexports.default = {\n thresholdLabels: thresholdLabels\n};\n\n},{}],13:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _d3Selection = require(\"d3-selection\");\n\nvar _d3Format = require(\"d3-format\");\n\nvar d3_identity = function d3_identity(d) {\n return d;\n};\n\nvar d3_reverse = function d3_reverse(arr) {\n var mirror = [];\n for (var i = 0, l = arr.length; i < l; i++) {\n mirror[i] = arr[l - i - 1];\n }\n return mirror;\n};\n\n//Text wrapping code adapted from Mike Bostock\nvar d3_textWrapping = function d3_textWrapping(text, width) {\n text.each(function () {\n var text = (0, _d3Selection.select)(this),\n words = text.text().split(/\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.2,\n //ems\n y = text.attr(\"y\"),\n dy = parseFloat(text.attr(\"dy\")) || 0,\n tspan = text.text(null).append(\"tspan\").attr(\"x\", 0).attr(\"dy\", dy + \"em\");\n\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (tspan.node().getComputedTextLength() > width && line.length > 1) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", lineHeight + dy + \"em\").text(word);\n }\n }\n });\n};\n\nvar d3_mergeLabels = function d3_mergeLabels() {\n var gen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var labels = arguments[1];\n var domain = arguments[2];\n var range = arguments[3];\n var labelDelimiter = arguments[4];\n\n if ((typeof labels === \"undefined\" ? \"undefined\" : _typeof(labels)) === \"object\") {\n if (labels.length === 0) return gen;\n\n var i = labels.length;\n for (; i < gen.length; i++) {\n labels.push(gen[i]);\n }\n return labels;\n } else if (typeof labels === \"function\") {\n var customLabels = [];\n var genLength = gen.length;\n for (var _i = 0; _i < genLength; _i++) {\n customLabels.push(labels({\n i: _i,\n genLength: genLength,\n generatedLabels: gen,\n domain: domain,\n range: range,\n labelDelimiter: labelDelimiter\n }));\n }\n return customLabels;\n }\n\n return gen;\n};\n\nvar d3_linearLegend = function d3_linearLegend(scale, cells, labelFormat) {\n var data = [];\n\n if (cells.length > 1) {\n data = cells;\n } else {\n var domain = scale.domain(),\n increment = (domain[domain.length - 1] - domain[0]) / (cells - 1);\n var i = 0;\n\n for (; i < cells; i++) {\n data.push(domain[0] + i * increment);\n }\n }\n\n var labels = data.map(labelFormat);\n return {\n data: data,\n labels: labels,\n feature: function feature(d) {\n return scale(d);\n }\n };\n};\n\nvar d3_quantLegend = function d3_quantLegend(scale, labelFormat, labelDelimiter) {\n var labels = scale.range().map(function (d) {\n var invert = scale.invertExtent(d);\n return labelFormat(invert[0]) + \" \" + labelDelimiter + \" \" + labelFormat(invert[1]);\n });\n\n return {\n data: scale.range(),\n labels: labels,\n feature: d3_identity\n };\n};\n\nvar d3_ordinalLegend = function d3_ordinalLegend(scale) {\n return {\n data: scale.domain(),\n labels: scale.domain(),\n feature: function feature(d) {\n return scale(d);\n }\n };\n};\n\nvar d3_cellOver = function d3_cellOver(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellover\", obj, d);\n};\n\nvar d3_cellOut = function d3_cellOut(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellout\", obj, d);\n};\n\nvar d3_cellClick = function d3_cellClick(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellclick\", obj, d);\n};\n\nexports.default = {\n d3_drawShapes: function d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path) {\n if (shape === \"rect\") {\n shapes.attr(\"height\", shapeHeight).attr(\"width\", shapeWidth);\n } else if (shape === \"circle\") {\n shapes.attr(\"r\", shapeRadius);\n } else if (shape === \"line\") {\n shapes.attr(\"x1\", 0).attr(\"x2\", shapeWidth).attr(\"y1\", 0).attr(\"y2\", 0);\n } else if (shape === \"path\") {\n shapes.attr(\"d\", path);\n }\n },\n\n d3_addText: function d3_addText(svg, enter, labels, classPrefix, labelWidth) {\n enter.append(\"text\").attr(\"class\", classPrefix + \"label\");\n var text = svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").data(labels).text(d3_identity);\n\n if (labelWidth) {\n svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").call(d3_textWrapping, labelWidth);\n }\n\n return text;\n },\n\n d3_calcType: function d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter) {\n var type = scale.invertExtent ? d3_quantLegend(scale, labelFormat, labelDelimiter) : scale.ticks ? d3_linearLegend(scale, cells, labelFormat) : d3_ordinalLegend(scale);\n\n //for d3.scaleSequential that doesn't have a range function\n var range = scale.range && scale.range() || scale.domain();\n type.labels = d3_mergeLabels(type.labels, labels, scale.domain(), range, labelDelimiter);\n\n if (ascending) {\n type.labels = d3_reverse(type.labels);\n type.data = d3_reverse(type.data);\n }\n\n return type;\n },\n\n d3_filterCells: function d3_filterCells(type, cellFilter) {\n var filterCells = type.data.map(function (d, i) {\n return { data: d, label: type.labels[i] };\n }).filter(cellFilter);\n var dataValues = filterCells.map(function (d) {\n return d.data;\n });\n var labelValues = filterCells.map(function (d) {\n return d.label;\n });\n type.data = type.data.filter(function (d) {\n return dataValues.indexOf(d) !== -1;\n });\n type.labels = type.labels.filter(function (d) {\n return labelValues.indexOf(d) !== -1;\n });\n return type;\n },\n\n d3_placement: function d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign) {\n cell.attr(\"transform\", cellTrans);\n text.attr(\"transform\", textTrans);\n if (orient === \"horizontal\") {\n text.style(\"text-anchor\", labelAlign);\n }\n },\n\n d3_addEvents: function d3_addEvents(cells, dispatcher) {\n cells.on(\"mouseover.legend\", function (d) {\n d3_cellOver(dispatcher, d, this);\n }).on(\"mouseout.legend\", function (d) {\n d3_cellOut(dispatcher, d, this);\n }).on(\"click.legend\", function (d) {\n d3_cellClick(dispatcher, d, this);\n });\n },\n\n d3_title: function d3_title(svg, title, classPrefix, titleWidth) {\n if (title !== \"\") {\n var titleText = svg.selectAll(\"text.\" + classPrefix + \"legendTitle\");\n\n titleText.data([title]).enter().append(\"text\").attr(\"class\", classPrefix + \"legendTitle\");\n\n svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").text(title);\n\n if (titleWidth) {\n svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").call(d3_textWrapping, titleWidth);\n }\n\n var cellsSvg = svg.select(\".\" + classPrefix + \"legendCells\");\n var yOffset = svg.select(\".\" + classPrefix + \"legendTitle\").nodes().map(function (d) {\n return d.getBBox().height;\n })[0],\n xOffset = -cellsSvg.nodes().map(function (d) {\n return d.getBBox().x;\n })[0];\n cellsSvg.attr(\"transform\", \"translate(\" + xOffset + \",\" + yOffset + \")\");\n }\n },\n\n d3_defaultLocale: {\n format: _d3Format.format,\n formatPrefix: _d3Format.formatPrefix\n },\n\n d3_defaultFormatSpecifier: \".01f\",\n\n d3_defaultDelimiter: \"to\"\n};\n\n},{\"d3-format\":5,\"d3-selection\":8}],14:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = size;\n\nvar _legend = require(\"./legend\");\n\nvar _legend2 = _interopRequireDefault(_legend);\n\nvar _d3Dispatch = require(\"d3-dispatch\");\n\nvar _d3Scale = require(\"d3-scale\");\n\nvar _d3Format = require(\"d3-format\");\n\nvar _d3Array = require(\"d3-array\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction size() {\n var scale = (0, _d3Scale.scaleLinear)(),\n shape = \"rect\",\n shapeWidth = 15,\n shapePadding = 2,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n title = \"\",\n locale = _legend2.default.d3_defaultLocale,\n specifier = _legend2.default.d3_defaultFormatSpecifier,\n labelOffset = 10,\n labelAlign = \"middle\",\n labelDelimiter = _legend2.default.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n path = void 0,\n titleWidth = void 0,\n legendDispatcher = (0, _d3Dispatch.dispatch)(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = _legend2.default.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n if (cellFilter) {\n _legend2.default.d3_filterCells(type, cellFilter);\n }\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n //add event handlers\n _legend2.default.d3_addEvents(cellEnter, legendDispatcher);\n\n cell.exit().transition().style(\"opacity\", 0).remove();\n\n shapes.exit().transition().style(\"opacity\", 0).remove();\n shapes = shapes.merge(shapes);\n\n //creates shape\n if (shape === \"line\") {\n _legend2.default.d3_drawShapes(shape, shapes, 0, shapeWidth);\n shapes.attr(\"stroke-width\", type.feature);\n } else {\n _legend2.default.d3_drawShapes(shape, shapes, type.feature, type.feature, type.feature, path);\n }\n\n var text = _legend2.default.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n //sets placement\n\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d, i) {\n var bbox = d.getBBox();\n var stroke = scale(type.data[i]);\n\n if (shape === \"line\" && orient === \"horizontal\") {\n bbox.height = bbox.height + stroke;\n } else if (shape === \"line\" && orient === \"vertical\") {\n bbox.width = bbox.width;\n }\n return bbox;\n });\n\n var maxH = (0, _d3Array.max)(shapeSize, function (d) {\n return d.height + d.y;\n }),\n maxW = (0, _d3Array.max)(shapeSize, function (d) {\n return d.width + d.x;\n });\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(d.height, shapeSize[i].height);\n });\n var y = shape == \"circle\" || shape == \"line\" ? shapeSize[0].height / 2 : 0;\n cellTrans = function cellTrans(d, i) {\n var height = (0, _d3Array.sum)(cellSize.slice(0, i));\n\n return \"translate(0, \" + (y + height + i * shapePadding) + \")\";\n };\n\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (maxW + labelOffset) + \",\\n \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n (function () {\n cellTrans = function cellTrans(d, i) {\n var width = (0, _d3Array.sum)(shapeSize.slice(0, i), function (d) {\n return d.width;\n });\n var y = shape == \"circle\" || shape == \"line\" ? maxH / 2 : 0;\n return \"translate(\" + (width + i * shapePadding) + \", \" + y + \")\";\n };\n\n var offset = shape == \"line\" ? maxH / 2 : maxH;\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (offset + labelOffset) + \")\";\n };\n })();\n }\n\n _legend2.default.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n _legend2.default.d3_title(svg, title, classPrefix, titleWidth);\n\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shape = function (_, d) {\n if (!arguments.length) return shape;\n if (_ == \"rect\" || _ == \"circle\" || _ == \"line\") {\n shape = _;\n path = d;\n }\n return legend;\n };\n\n legend.shapeWidth = function (_) {\n if (!arguments.length) return shapeWidth;\n shapeWidth = +_;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = (0, _d3Format.formatLocale)(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = (0, _d3Format.formatSpecifier)(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\n},{\"./legend\":13,\"d3-array\":1,\"d3-dispatch\":4,\"d3-format\":5,\"d3-scale\":7}],15:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = symbol;\n\nvar _legend = require(\"./legend\");\n\nvar _legend2 = _interopRequireDefault(_legend);\n\nvar _d3Dispatch = require(\"d3-dispatch\");\n\nvar _d3Scale = require(\"d3-scale\");\n\nvar _d3Format = require(\"d3-format\");\n\nvar _d3Array = require(\"d3-array\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction symbol() {\n var scale = (0, _d3Scale.scaleLinear)(),\n shape = \"path\",\n shapeWidth = 15,\n shapeHeight = 15,\n shapeRadius = 10,\n shapePadding = 5,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n title = \"\",\n locale = _legend2.default.d3_defaultLocale,\n specifier = _legend2.default.d3_defaultFormatSpecifier,\n labelAlign = \"middle\",\n labelOffset = 10,\n labelDelimiter = _legend2.default.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n titleWidth = void 0,\n legendDispatcher = (0, _d3Dispatch.dispatch)(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = _legend2.default.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n if (cellFilter) {\n _legend2.default.d3_filterCells(type, cellFilter);\n }\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n //add event handlers\n _legend2.default.d3_addEvents(cellEnter, legendDispatcher);\n\n //remove old shapes\n cell.exit().transition().style(\"opacity\", 0).remove();\n shapes.exit().transition().style(\"opacity\", 0).remove();\n shapes = shapes.merge(shapes);\n\n _legend2.default.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, type.feature);\n var text = _legend2.default.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n // sets placement\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d) {\n return d.getBBox();\n });\n\n var maxH = (0, _d3Array.max)(shapeSize, function (d) {\n return d.height;\n }),\n maxW = (0, _d3Array.max)(shapeSize, function (d) {\n return d.width;\n });\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(maxH, d.height);\n });\n\n cellTrans = function cellTrans(d, i) {\n var height = (0, _d3Array.sum)(cellSize.slice(0, i));\n return \"translate(0, \" + (height + i * shapePadding) + \" )\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (maxW + labelOffset) + \",\\n \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n cellTrans = function cellTrans(d, i) {\n return \"translate( \" + i * (maxW + shapePadding) + \",0)\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (maxH + labelOffset) + \")\";\n };\n }\n\n _legend2.default.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n _legend2.default.d3_title(svg, title, classPrefix, titleWidth);\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = (0, _d3Format.formatLocale)(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = (0, _d3Format.formatSpecifier)(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\n},{\"./legend\":13,\"d3-array\":1,\"d3-dispatch\":4,\"d3-format\":5,\"d3-scale\":7}],16:[function(require,module,exports){\n'use strict';\n\nvar _color = require('./color');\n\nvar _color2 = _interopRequireDefault(_color);\n\nvar _size = require('./size');\n\nvar _size2 = _interopRequireDefault(_size);\n\nvar _symbol = require('./symbol');\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _helpers = require('./helpers');\n\nvar _helpers2 = _interopRequireDefault(_helpers);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nd3.legendColor = _color2.default;\nd3.legendSize = _size2.default;\nd3.legendSymbol = _symbol2.default;\nd3.legendHelpers = _helpers2.default;\n\n},{\"./color\":11,\"./helpers\":12,\"./size\":14,\"./symbol\":15}]},{},[16])\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvYnVpbGQvZDMtYXJyYXkuanMiLCJub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9idWlsZC9kMy1jb2xsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLWNvbG9yL2J1aWxkL2QzLWNvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL2J1aWxkL2QzLWRpc3BhdGNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9idWlsZC9kMy1mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvYnVpbGQvZDMtaW50ZXJwb2xhdGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvYnVpbGQvZDMtc2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL2J1aWxkL2QzLXNlbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9idWlsZC9kMy10aW1lLWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL2J1aWxkL2QzLXRpbWUuanMiLCJzcmMvY29sb3IuanMiLCJzcmMvaGVscGVycy5qcyIsInNyYy9sZWdlbmQuanMiLCJzcmMvc2l6ZS5qcyIsInNyYy9zeW1ib2wuanMiLCJzcmMvd2ViLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcjRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1OEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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V0FBTyxNQUFQO0FBQ0QsR0FKRDs7QUFNQSxTQUFPLEtBQVAsR0FBZSxVQUFTLENBQVQsRUFBWTtBQUN6QixRQUFJLENBQUMsVUFBVSxNQUFmLEVBQXVCLE9BQU8sS0FBUDtBQUN2QixZQUFRLENBQVI7QUFDQSxXQUFPLE1BQVA7QUFDRCxHQUpEOztBQU1BLFNBQU8sVUFBUCxHQUFvQixVQUFTLENBQVQsRUFBWTtBQUM5QixRQUFJLENBQUMsVUFBVSxNQUFmLEVBQXVCLE9BQU8sVUFBUDtBQUN2QixpQkFBYSxDQUFiO0FBQ0EsV0FBTyxNQUFQO0FBQ0QsR0FKRDs7QUFNQSxTQUFPLEVBQVAsR0FBWSxZQUFXO0FBQ3JCLFFBQU0sUUFBUSxpQkFBaUIsRUFBakIsQ0FBb0IsS0FBcEIsQ0FBMEIsZ0JBQTFCLEVBQTRDLFNBQTVDLENBQWQ7QUFDQSxXQUFPLFVBQVUsZ0JBQVYsR0FBNkIsTUFBN0IsR0FBc0MsS0FBN0M7QUFDRCxHQUhEOztBQUtBLFNBQU8sTUFBUDtBQUNEOzs7OztBQzlPRDs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUEsR0FBRyxXQUFIO0FBQ0EsR0FBRyxVQUFIO0FBQ0EsR0FBRyxZQUFIO0FBQ0EsR0FBRyxhQUFIIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtYXJyYXkvIFZlcnNpb24gMS4wLjEuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgKGZhY3RvcnkoKGdsb2JhbC5kMyA9IGdsb2JhbC5kMyB8fCB7fSkpKTtcbn0odGhpcywgZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xuICB9XG5cbiAgZnVuY3Rpb24gYmlzZWN0b3IoY29tcGFyZSkge1xuICAgIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZnQ6IGZ1bmN0aW9uKGEsIHgsIGxvLCBoaSkge1xuICAgICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGxvIDwgaGkpIHtcbiAgICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICAgIGVsc2UgaGkgPSBtaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvO1xuICAgICAgfSxcbiAgICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgICAgdmFyIG1pZCA9IGxvICsgaGkgPj4+IDE7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0gbWlkO1xuICAgICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsbztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGQsIHgpIHtcbiAgICAgIHJldHVybiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBhc2NlbmRpbmdCaXNlY3QgPSBiaXNlY3Rvcihhc2NlbmRpbmcpO1xuICB2YXIgYmlzZWN0UmlnaHQgPSBhc2NlbmRpbmdCaXNlY3QucmlnaHQ7XG4gIHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5cbiAgZnVuY3Rpb24gZGVzY2VuZGluZyhhLCBiKSB7XG4gICAgcmV0dXJuIGIgPCBhID8gLTEgOiBiID4gYSA/IDEgOiBiID49IGEgPyAwIDogTmFOO1xuICB9XG5cbiAgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICByZXR1cm4geCA9PT0gbnVsbCA/IE5hTiA6ICt4O1xuICB9XG5cbiAgZnVuY3Rpb24gdmFyaWFuY2UoYXJyYXksIGYpIHtcbiAgICB2YXIgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgbSA9IDAsXG4gICAgICAgIGEsXG4gICAgICAgIGQsXG4gICAgICAgIHMgPSAwLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIGogPSAwO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKCFpc05hTihhID0gbnVtYmVyKGFycmF5W2ldKSkpIHtcbiAgICAgICAgICBkID0gYSAtIG07XG4gICAgICAgICAgbSArPSBkIC8gKytqO1xuICAgICAgICAgIHMgKz0gZCAqIChhIC0gbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmICghaXNOYU4oYSA9IG51bWJlcihmKGFycmF5W2ldLCBpLCBhcnJheSkpKSkge1xuICAgICAgICAgIGQgPSBhIC0gbTtcbiAgICAgICAgICBtICs9IGQgLyArK2o7XG4gICAgICAgICAgcyArPSBkICogKGEgLSBtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChqID4gMSkgcmV0dXJuIHMgLyAoaiAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGV2aWF0aW9uKGFycmF5LCBmKSB7XG4gICAgdmFyIHYgPSB2YXJpYW5jZShhcnJheSwgZik7XG4gICAgcmV0dXJuIHYgPyBNYXRoLnNxcnQodikgOiB2O1xuICB9XG5cbiAgZnVuY3Rpb24gZXh0ZW50KGFycmF5LCBmKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgYSxcbiAgICAgICAgYixcbiAgICAgICAgYztcblxuICAgIGlmIChmID09IG51bGwpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBiID49IGIpIHsgYSA9IGMgPSBiOyBicmVhazsgfVxuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhID4gYikgYSA9IGI7XG4gICAgICAgIGlmIChjIDwgYikgYyA9IGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYyA9IGI7IGJyZWFrOyB9XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhID4gYikgYSA9IGI7XG4gICAgICAgIGlmIChjIDwgYikgYyA9IGI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFthLCBjXTtcbiAgfVxuXG4gIHZhciBhcnJheSA9IEFycmF5LnByb3RvdHlwZTtcblxuICB2YXIgc2xpY2UgPSBhcnJheS5zbGljZTtcbiAgdmFyIG1hcCA9IGFycmF5Lm1hcDtcblxuICBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gICAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmFuZ2U7XG4gIH1cblxuICB2YXIgZTEwID0gTWF0aC5zcXJ0KDUwKTtcbiAgdmFyIGU1ID0gTWF0aC5zcXJ0KDEwKTtcbiAgdmFyIGUyID0gTWF0aC5zcXJ0KDIpO1xuICBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgcmV0dXJuIHJhbmdlKFxuICAgICAgTWF0aC5jZWlsKHN0YXJ0IC8gc3RlcCkgKiBzdGVwLFxuICAgICAgTWF0aC5mbG9vcihzdG9wIC8gc3RlcCkgKiBzdGVwICsgc3RlcCAvIDIsIC8vIGluY2x1c2l2ZVxuICAgICAgc3RlcFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICB2YXIgc3RlcDAgPSBNYXRoLmFicyhzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMCwgY291bnQpLFxuICAgICAgICBzdGVwMSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXAwKSAvIE1hdGguTE4xMCkpLFxuICAgICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gICAgaWYgKGVycm9yID49IGUxMCkgc3RlcDEgKj0gMTA7XG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTUpIHN0ZXAxICo9IDU7XG4gICAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gICAgcmV0dXJuIHN0b3AgPCBzdGFydCA/IC1zdGVwMSA6IHN0ZXAxO1xuICB9XG5cbiAgZnVuY3Rpb24gc3R1cmdlcyh2YWx1ZXMpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nKHZhbHVlcy5sZW5ndGgpIC8gTWF0aC5MTjIpICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhpc3RvZ3JhbSgpIHtcbiAgICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgICAgZG9tYWluID0gZXh0ZW50LFxuICAgICAgICB0aHJlc2hvbGQgPSBzdHVyZ2VzO1xuXG4gICAgZnVuY3Rpb24gaGlzdG9ncmFtKGRhdGEpIHtcbiAgICAgIHZhciBpLFxuICAgICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHZhbHVlcyA9IG5ldyBBcnJheShuKTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZShkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHh6ID0gZG9tYWluKHZhbHVlcyksXG4gICAgICAgICAgeDAgPSB4elswXSxcbiAgICAgICAgICB4MSA9IHh6WzFdLFxuICAgICAgICAgIHR6ID0gdGhyZXNob2xkKHZhbHVlcywgeDAsIHgxKTtcblxuICAgICAgLy8gQ29udmVydCBudW1iZXIgb2YgdGhyZXNob2xkcyBpbnRvIHVuaWZvcm0gdGhyZXNob2xkcy5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0eikpIHR6ID0gdGlja3MoeDAsIHgxLCB0eik7XG5cbiAgICAgIC8vIFJlbW92ZSBhbnkgdGhyZXNob2xkcyBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgICB2YXIgbSA9IHR6Lmxlbmd0aDtcbiAgICAgIHdoaWxlICh0elswXSA8PSB4MCkgdHouc2hpZnQoKSwgLS1tO1xuICAgICAgd2hpbGUgKHR6W20gLSAxXSA+PSB4MSkgdHoucG9wKCksIC0tbTtcblxuICAgICAgdmFyIGJpbnMgPSBuZXcgQXJyYXkobSArIDEpLFxuICAgICAgICAgIGJpbjtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSBiaW5zLlxuICAgICAgZm9yIChpID0gMDsgaSA8PSBtOyArK2kpIHtcbiAgICAgICAgYmluID0gYmluc1tpXSA9IFtdO1xuICAgICAgICBiaW4ueDAgPSBpID4gMCA/IHR6W2kgLSAxXSA6IHgwO1xuICAgICAgICBiaW4ueDEgPSBpIDwgbSA/IHR6W2ldIDogeDE7XG4gICAgICB9XG5cbiAgICAgIC8vIEFzc2lnbiBkYXRhIHRvIGJpbnMgYnkgdmFsdWUsIGlnbm9yaW5nIGFueSBvdXRzaWRlIHRoZSBkb21haW4uXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHggPSB2YWx1ZXNbaV07XG4gICAgICAgIGlmICh4MCA8PSB4ICYmIHggPD0geDEpIHtcbiAgICAgICAgICBiaW5zW2Jpc2VjdFJpZ2h0KHR6LCB4LCAwLCBtKV0ucHVzaChkYXRhW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmlucztcbiAgICB9XG5cbiAgICBoaXN0b2dyYW0udmFsdWUgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoXyksIGhpc3RvZ3JhbSkgOiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgaGlzdG9ncmFtLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGRvbWFpbiA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW19bMF0sIF9bMV1dKSwgaGlzdG9ncmFtKSA6IGRvbWFpbjtcbiAgICB9O1xuXG4gICAgaGlzdG9ncmFtLnRocmVzaG9sZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aHJlc2hvbGQgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IEFycmF5LmlzQXJyYXkoXykgPyBjb25zdGFudChzbGljZS5jYWxsKF8pKSA6IGNvbnN0YW50KF8pLCBoaXN0b2dyYW0pIDogdGhyZXNob2xkO1xuICAgIH07XG5cbiAgICByZXR1cm4gaGlzdG9ncmFtO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpbGUoYXJyYXksIHAsIGYpIHtcbiAgICBpZiAoZiA9PSBudWxsKSBmID0gbnVtYmVyO1xuICAgIGlmICghKG4gPSBhcnJheS5sZW5ndGgpKSByZXR1cm47XG4gICAgaWYgKChwID0gK3ApIDw9IDAgfHwgbiA8IDIpIHJldHVybiArZihhcnJheVswXSwgMCwgYXJyYXkpO1xuICAgIGlmIChwID49IDEpIHJldHVybiArZihhcnJheVtuIC0gMV0sIG4gLSAxLCBhcnJheSk7XG4gICAgdmFyIG4sXG4gICAgICAgIGggPSAobiAtIDEpICogcCxcbiAgICAgICAgaSA9IE1hdGguZmxvb3IoaCksXG4gICAgICAgIGEgPSArZihhcnJheVtpXSwgaSwgYXJyYXkpLFxuICAgICAgICBiID0gK2YoYXJyYXlbaSArIDFdLCBpICsgMSwgYXJyYXkpO1xuICAgIHJldHVybiBhICsgKGIgLSBhKSAqIChoIC0gaSk7XG4gIH1cblxuICBmdW5jdGlvbiBmcmVlZG1hbkRpYWNvbmlzKHZhbHVlcywgbWluLCBtYXgpIHtcbiAgICB2YWx1ZXMgPSBtYXAuY2FsbCh2YWx1ZXMsIG51bWJlcikuc29ydChhc2NlbmRpbmcpO1xuICAgIHJldHVybiBNYXRoLmNlaWwoKG1heCAtIG1pbikgLyAoMiAqIChxdWFudGlsZSh2YWx1ZXMsIDAuNzUpIC0gcXVhbnRpbGUodmFsdWVzLCAwLjI1KSkgKiBNYXRoLnBvdyh2YWx1ZXMubGVuZ3RoLCAtMSAvIDMpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBzY290dCh2YWx1ZXMsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgobWF4IC0gbWluKSAvICgzLjUgKiBkZXZpYXRpb24odmFsdWVzKSAqIE1hdGgucG93KHZhbHVlcy5sZW5ndGgsIC0xIC8gMykpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heChhcnJheSwgZikge1xuICAgIHZhciBpID0gLTEsXG4gICAgICAgIG4gPSBhcnJheS5sZW5ndGgsXG4gICAgICAgIGEsXG4gICAgICAgIGI7XG5cbiAgICBpZiAoZiA9PSBudWxsKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gYXJyYXlbaV0pICE9IG51bGwgJiYgYiA+PSBiKSB7IGEgPSBiOyBicmVhazsgfVxuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsICYmIGIgPiBhKSBhID0gYjtcbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmKGFycmF5W2ldLCBpLCBhcnJheSkpICE9IG51bGwgJiYgYiA+PSBiKSB7IGEgPSBiOyBicmVhazsgfVxuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGYoYXJyYXlbaV0sIGksIGFycmF5KSkgIT0gbnVsbCAmJiBiID4gYSkgYSA9IGI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiBtZWFuKGFycmF5LCBmKSB7XG4gICAgdmFyIHMgPSAwLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIGogPSBuO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihhcnJheVtpXSkpKSBzICs9IGE7IGVsc2UgLS1qO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihmKGFycmF5W2ldLCBpLCBhcnJheSkpKSkgcyArPSBhOyBlbHNlIC0tajtcbiAgICB9XG5cbiAgICBpZiAoaikgcmV0dXJuIHMgLyBqO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVkaWFuKGFycmF5LCBmKSB7XG4gICAgdmFyIG51bWJlcnMgPSBbXSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgYSxcbiAgICAgICAgaSA9IC0xO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghaXNOYU4oYSA9IG51bWJlcihhcnJheVtpXSkpKSBudW1iZXJzLnB1c2goYSk7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpc05hTihhID0gbnVtYmVyKGYoYXJyYXlbaV0sIGksIGFycmF5KSkpKSBudW1iZXJzLnB1c2goYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YW50aWxlKG51bWJlcnMuc29ydChhc2NlbmRpbmcpLCAwLjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWVyZ2UoYXJyYXlzKSB7XG4gICAgdmFyIG4gPSBhcnJheXMubGVuZ3RoLFxuICAgICAgICBtLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIGogPSAwLFxuICAgICAgICBtZXJnZWQsXG4gICAgICAgIGFycmF5O1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIGogKz0gYXJyYXlzW2ldLmxlbmd0aDtcbiAgICBtZXJnZWQgPSBuZXcgQXJyYXkoaik7XG5cbiAgICB3aGlsZSAoLS1uID49IDApIHtcbiAgICAgIGFycmF5ID0gYXJyYXlzW25dO1xuICAgICAgbSA9IGFycmF5Lmxlbmd0aDtcbiAgICAgIHdoaWxlICgtLW0gPj0gMCkge1xuICAgICAgICBtZXJnZWRbLS1qXSA9IGFycmF5W21dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBtaW4oYXJyYXksIGYpIHtcbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBiO1xuXG4gICAgaWYgKGYgPT0gbnVsbCkge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgoYiA9IGFycmF5W2ldKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYjsgYnJlYWs7IH1cbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBhcnJheVtpXSkgIT0gbnVsbCAmJiBhID4gYikgYSA9IGI7XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKChiID0gZihhcnJheVtpXSwgaSwgYXJyYXkpKSAhPSBudWxsICYmIGIgPj0gYikgeyBhID0gYjsgYnJlYWs7IH1cbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKGIgPSBmKGFycmF5W2ldLCBpLCBhcnJheSkpICE9IG51bGwgJiYgYSA+IGIpIGEgPSBiO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFpcnMoYXJyYXkpIHtcbiAgICB2YXIgaSA9IDAsIG4gPSBhcnJheS5sZW5ndGggLSAxLCBwID0gYXJyYXlbMF0sIHBhaXJzID0gbmV3IEFycmF5KG4gPCAwID8gMCA6IG4pO1xuICAgIHdoaWxlIChpIDwgbikgcGFpcnNbaV0gPSBbcCwgcCA9IGFycmF5WysraV1dO1xuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGUoYXJyYXksIGluZGV4ZXMpIHtcbiAgICB2YXIgaSA9IGluZGV4ZXMubGVuZ3RoLCBwZXJtdXRlcyA9IG5ldyBBcnJheShpKTtcbiAgICB3aGlsZSAoaS0tKSBwZXJtdXRlc1tpXSA9IGFycmF5W2luZGV4ZXNbaV1dO1xuICAgIHJldHVybiBwZXJtdXRlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYW4oYXJyYXksIGNvbXBhcmUpIHtcbiAgICBpZiAoIShuID0gYXJyYXkubGVuZ3RoKSkgcmV0dXJuO1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbixcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIHhpLFxuICAgICAgICB4aiA9IGFycmF5W2pdO1xuXG4gICAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIGlmIChjb21wYXJlKHhpID0gYXJyYXlbaV0sIHhqKSA8IDAgfHwgY29tcGFyZSh4aiwgeGopICE9PSAwKSB4aiA9IHhpLCBqID0gaTtcblxuICAgIGlmIChjb21wYXJlKHhqLCB4aikgPT09IDApIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZShhcnJheSwgaTAsIGkxKSB7XG4gICAgdmFyIG0gPSAoaTEgPT0gbnVsbCA/IGFycmF5Lmxlbmd0aCA6IGkxKSAtIChpMCA9IGkwID09IG51bGwgPyAwIDogK2kwKSxcbiAgICAgICAgdCxcbiAgICAgICAgaTtcblxuICAgIHdoaWxlIChtKSB7XG4gICAgICBpID0gTWF0aC5yYW5kb20oKSAqIG0tLSB8IDA7XG4gICAgICB0ID0gYXJyYXlbbSArIGkwXTtcbiAgICAgIGFycmF5W20gKyBpMF0gPSBhcnJheVtpICsgaTBdO1xuICAgICAgYXJyYXlbaSArIGkwXSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgZnVuY3Rpb24gc3VtKGFycmF5LCBmKSB7XG4gICAgdmFyIHMgPSAwLFxuICAgICAgICBuID0gYXJyYXkubGVuZ3RoLFxuICAgICAgICBhLFxuICAgICAgICBpID0gLTE7XG5cbiAgICBpZiAoZiA9PSBudWxsKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKGEgPSArYXJyYXlbaV0pIHMgKz0gYTsgLy8gTm90ZTogemVybyBhbmQgbnVsbCBhcmUgZXF1aXZhbGVudC5cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoYSA9ICtmKGFycmF5W2ldLCBpLCBhcnJheSkpIHMgKz0gYTtcbiAgICB9XG5cbiAgICByZXR1cm4gcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zcG9zZShtYXRyaXgpIHtcbiAgICBpZiAoIShuID0gbWF0cml4Lmxlbmd0aCkpIHJldHVybiBbXTtcbiAgICBmb3IgKHZhciBpID0gLTEsIG0gPSBtaW4obWF0cml4LCBsZW5ndGgpLCB0cmFuc3Bvc2UgPSBuZXcgQXJyYXkobSk7ICsraSA8IG07KSB7XG4gICAgICBmb3IgKHZhciBqID0gLTEsIG4sIHJvdyA9IHRyYW5zcG9zZVtpXSA9IG5ldyBBcnJheShuKTsgKytqIDwgbjspIHtcbiAgICAgICAgcm93W2pdID0gbWF0cml4W2pdW2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJhbnNwb3NlO1xuICB9XG5cbiAgZnVuY3Rpb24gbGVuZ3RoKGQpIHtcbiAgICByZXR1cm4gZC5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiB6aXAoKSB7XG4gICAgcmV0dXJuIHRyYW5zcG9zZShhcmd1bWVudHMpO1xuICB9XG5cbiAgZXhwb3J0cy5iaXNlY3QgPSBiaXNlY3RSaWdodDtcbiAgZXhwb3J0cy5iaXNlY3RSaWdodCA9IGJpc2VjdFJpZ2h0O1xuICBleHBvcnRzLmJpc2VjdExlZnQgPSBiaXNlY3RMZWZ0O1xuICBleHBvcnRzLmFzY2VuZGluZyA9IGFzY2VuZGluZztcbiAgZXhwb3J0cy5iaXNlY3RvciA9IGJpc2VjdG9yO1xuICBleHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuICBleHBvcnRzLmRldmlhdGlvbiA9IGRldmlhdGlvbjtcbiAgZXhwb3J0cy5leHRlbnQgPSBleHRlbnQ7XG4gIGV4cG9ydHMuaGlzdG9ncmFtID0gaGlzdG9ncmFtO1xuICBleHBvcnRzLnRocmVzaG9sZEZyZWVkbWFuRGlhY29uaXMgPSBmcmVlZG1hbkRpYWNvbmlzO1xuICBleHBvcnRzLnRocmVzaG9sZFNjb3R0ID0gc2NvdHQ7XG4gIGV4cG9ydHMudGhyZXNob2xkU3R1cmdlcyA9IHN0dXJnZXM7XG4gIGV4cG9ydHMubWF4ID0gbWF4O1xuICBleHBvcnRzLm1lYW4gPSBtZWFuO1xuICBleHBvcnRzLm1lZGlhbiA9IG1lZGlhbjtcbiAgZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuICBleHBvcnRzLm1pbiA9IG1pbjtcbiAgZXhwb3J0cy5wYWlycyA9IHBhaXJzO1xuICBleHBvcnRzLnBlcm11dGUgPSBwZXJtdXRlO1xuICBleHBvcnRzLnF1YW50aWxlID0gcXVhbnRpbGU7XG4gIGV4cG9ydHMucmFuZ2UgPSByYW5nZTtcbiAgZXhwb3J0cy5zY2FuID0gc2NhbjtcbiAgZXhwb3J0cy5zaHVmZmxlID0gc2h1ZmZsZTtcbiAgZXhwb3J0cy5zdW0gPSBzdW07XG4gIGV4cG9ydHMudGlja3MgPSB0aWNrcztcbiAgZXhwb3J0cy50aWNrU3RlcCA9IHRpY2tTdGVwO1xuICBleHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbiAgZXhwb3J0cy52YXJpYW5jZSA9IHZhcmlhbmNlO1xuICBleHBvcnRzLnppcCA9IHppcDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7IiwiLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1jb2xsZWN0aW9uLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBwcmVmaXggPSBcIiRcIjtcblxuZnVuY3Rpb24gTWFwKCkge31cblxuTWFwLnByb3RvdHlwZSA9IG1hcC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBNYXAsXG4gIGhhczogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIChwcmVmaXggKyBrZXkpIGluIHRoaXM7XG4gIH0sXG4gIGdldDogZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHRoaXNbcHJlZml4ICsga2V5XTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG4gICAgdGhpc1twcmVmaXggKyBrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24oa2V5KSB7XG4gICAgdmFyIHByb3BlcnR5ID0gcHJlZml4ICsga2V5O1xuICAgIHJldHVybiBwcm9wZXJ0eSBpbiB0aGlzICYmIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAgY2xlYXI6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBkZWxldGUgdGhpc1twcm9wZXJ0eV07XG4gIH0sXG4gIGtleXM6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGtleXMucHVzaChwcm9wZXJ0eS5zbGljZSgxKSk7XG4gICAgcmV0dXJuIGtleXM7XG4gIH0sXG4gIHZhbHVlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSB2YWx1ZXMucHVzaCh0aGlzW3Byb3BlcnR5XSk7XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfSxcbiAgZW50cmllczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZW50cmllcy5wdXNoKHtrZXk6IHByb3BlcnR5LnNsaWNlKDEpLCB2YWx1ZTogdGhpc1twcm9wZXJ0eV19KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfSxcbiAgc2l6ZTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSArK3NpemU7XG4gICAgcmV0dXJuIHNpemU7XG4gIH0sXG4gIGVtcHR5OiBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBlYWNoOiBmdW5jdGlvbihmKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGYodGhpc1twcm9wZXJ0eV0sIHByb3BlcnR5LnNsaWNlKDEpLCB0aGlzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gbWFwKG9iamVjdCwgZikge1xuICB2YXIgbWFwID0gbmV3IE1hcDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgTWFwKSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7IG1hcC5zZXQoa2V5LCB2YWx1ZSk7IH0pO1xuXG4gIC8vIEluZGV4IGFycmF5IGJ5IG51bWVyaWMgaW5kZXggb3Igc3BlY2lmaWVkIGtleSBmdW5jdGlvbi5cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IG9iamVjdC5sZW5ndGgsXG4gICAgICAgIG87XG5cbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChpLCBvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIG1hcC5zZXQoZihvID0gb2JqZWN0W2ldLCBpLCBvYmplY3QpLCBvKTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgb2JqZWN0IHRvIG1hcC5cbiAgZWxzZSBpZiAob2JqZWN0KSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBtYXAuc2V0KGtleSwgb2JqZWN0W2tleV0pO1xuXG4gIHJldHVybiBtYXA7XG59XG5cbnZhciBuZXN0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBrZXlzID0gW10sXG4gICAgICBzb3J0S2V5cyA9IFtdLFxuICAgICAgc29ydFZhbHVlcyxcbiAgICAgIHJvbGx1cCxcbiAgICAgIG5lc3Q7XG5cbiAgZnVuY3Rpb24gYXBwbHkoYXJyYXksIGRlcHRoLCBjcmVhdGVSZXN1bHQsIHNldFJlc3VsdCkge1xuICAgIGlmIChkZXB0aCA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHJvbGx1cCAhPSBudWxsXG4gICAgICAgID8gcm9sbHVwKGFycmF5KSA6IChzb3J0VmFsdWVzICE9IG51bGxcbiAgICAgICAgPyBhcnJheS5zb3J0KHNvcnRWYWx1ZXMpXG4gICAgICAgIDogYXJyYXkpO1xuXG4gICAgdmFyIGkgPSAtMSxcbiAgICAgICAgbiA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAga2V5ID0ga2V5c1tkZXB0aCsrXSxcbiAgICAgICAga2V5VmFsdWUsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICB2YWx1ZXNCeUtleSA9IG1hcCgpLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdCgpO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh2YWx1ZXMgPSB2YWx1ZXNCeUtleS5nZXQoa2V5VmFsdWUgPSBrZXkodmFsdWUgPSBhcnJheVtpXSkgKyBcIlwiKSkge1xuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZXNCeUtleS5zZXQoa2V5VmFsdWUsIFt2YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhbHVlc0J5S2V5LmVhY2goZnVuY3Rpb24odmFsdWVzLCBrZXkpIHtcbiAgICAgIHNldFJlc3VsdChyZXN1bHQsIGtleSwgYXBwbHkodmFsdWVzLCBkZXB0aCwgY3JlYXRlUmVzdWx0LCBzZXRSZXN1bHQpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBlbnRyaWVzKG1hcCQkMSwgZGVwdGgpIHtcbiAgICBpZiAoKytkZXB0aCA+IGtleXMubGVuZ3RoKSByZXR1cm4gbWFwJCQxO1xuICAgIHZhciBhcnJheSwgc29ydEtleSA9IHNvcnRLZXlzW2RlcHRoIC0gMV07XG4gICAgaWYgKHJvbGx1cCAhPSBudWxsICYmIGRlcHRoID49IGtleXMubGVuZ3RoKSBhcnJheSA9IG1hcCQkMS5lbnRyaWVzKCk7XG4gICAgZWxzZSBhcnJheSA9IFtdLCBtYXAkJDEuZWFjaChmdW5jdGlvbih2LCBrKSB7IGFycmF5LnB1c2goe2tleTogaywgdmFsdWVzOiBlbnRyaWVzKHYsIGRlcHRoKX0pOyB9KTtcbiAgICByZXR1cm4gc29ydEtleSAhPSBudWxsID8gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBzb3J0S2V5KGEua2V5LCBiLmtleSk7IH0pIDogYXJyYXk7XG4gIH1cblxuICByZXR1cm4gbmVzdCA9IHtcbiAgICBvYmplY3Q6IGZ1bmN0aW9uKGFycmF5KSB7IHJldHVybiBhcHBseShhcnJheSwgMCwgY3JlYXRlT2JqZWN0LCBzZXRPYmplY3QpOyB9LFxuICAgIG1hcDogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGFwcGx5KGFycmF5LCAwLCBjcmVhdGVNYXAsIHNldE1hcCk7IH0sXG4gICAgZW50cmllczogZnVuY3Rpb24oYXJyYXkpIHsgcmV0dXJuIGVudHJpZXMoYXBwbHkoYXJyYXksIDAsIGNyZWF0ZU1hcCwgc2V0TWFwKSwgMCk7IH0sXG4gICAga2V5OiBmdW5jdGlvbihkKSB7IGtleXMucHVzaChkKTsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydEtleXM6IGZ1bmN0aW9uKG9yZGVyKSB7IHNvcnRLZXlzW2tleXMubGVuZ3RoIC0gMV0gPSBvcmRlcjsgcmV0dXJuIG5lc3Q7IH0sXG4gICAgc29ydFZhbHVlczogZnVuY3Rpb24ob3JkZXIpIHsgc29ydFZhbHVlcyA9IG9yZGVyOyByZXR1cm4gbmVzdDsgfSxcbiAgICByb2xsdXA6IGZ1bmN0aW9uKGYpIHsgcm9sbHVwID0gZjsgcmV0dXJuIG5lc3Q7IH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdCgpIHtcbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBzZXRPYmplY3Qob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hcCgpIHtcbiAgcmV0dXJuIG1hcCgpO1xufVxuXG5mdW5jdGlvbiBzZXRNYXAobWFwJCQxLCBrZXksIHZhbHVlKSB7XG4gIG1hcCQkMS5zZXQoa2V5LCB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIFNldCgpIHt9XG5cbnZhciBwcm90byA9IG1hcC5wcm90b3R5cGU7XG5cblNldC5wcm90b3R5cGUgPSBzZXQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogU2V0LFxuICBoYXM6IHByb3RvLmhhcyxcbiAgYWRkOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhbHVlICs9IFwiXCI7XG4gICAgdGhpc1twcmVmaXggKyB2YWx1ZV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBwcm90by5yZW1vdmUsXG4gIGNsZWFyOiBwcm90by5jbGVhcixcbiAgdmFsdWVzOiBwcm90by5rZXlzLFxuICBzaXplOiBwcm90by5zaXplLFxuICBlbXB0eTogcHJvdG8uZW1wdHksXG4gIGVhY2g6IHByb3RvLmVhY2hcbn07XG5cbmZ1bmN0aW9uIHNldChvYmplY3QsIGYpIHtcbiAgdmFyIHNldCA9IG5ldyBTZXQ7XG5cbiAgLy8gQ29weSBjb25zdHJ1Y3Rvci5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFNldCkgb2JqZWN0LmVhY2goZnVuY3Rpb24odmFsdWUpIHsgc2V0LmFkZCh2YWx1ZSk7IH0pO1xuXG4gIC8vIE90aGVyd2lzZSwgYXNzdW1lIGl04oCZcyBhbiBhcnJheS5cbiAgZWxzZSBpZiAob2JqZWN0KSB7XG4gICAgdmFyIGkgPSAtMSwgbiA9IG9iamVjdC5sZW5ndGg7XG4gICAgaWYgKGYgPT0gbnVsbCkgd2hpbGUgKCsraSA8IG4pIHNldC5hZGQob2JqZWN0W2ldKTtcbiAgICBlbHNlIHdoaWxlICgrK2kgPCBuKSBzZXQuYWRkKGYob2JqZWN0W2ldLCBpLCBvYmplY3QpKTtcbiAgfVxuXG4gIHJldHVybiBzZXQ7XG59XG5cbnZhciBrZXlzID0gZnVuY3Rpb24obWFwKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBtYXApIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn07XG5cbnZhciB2YWx1ZXMgPSBmdW5jdGlvbihtYXApIHtcbiAgdmFyIHZhbHVlcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSB2YWx1ZXMucHVzaChtYXBba2V5XSk7XG4gIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgZW50cmllcyA9IGZ1bmN0aW9uKG1hcCkge1xuICB2YXIgZW50cmllcyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gbWFwKSBlbnRyaWVzLnB1c2goe2tleToga2V5LCB2YWx1ZTogbWFwW2tleV19KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59O1xuXG5leHBvcnRzLm5lc3QgPSBuZXN0O1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG5leHBvcnRzLm1hcCA9IG1hcDtcbmV4cG9ydHMua2V5cyA9IGtleXM7XG5leHBvcnRzLnZhbHVlcyA9IHZhbHVlcztcbmV4cG9ydHMuZW50cmllcyA9IGVudHJpZXM7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4iLCIvLyBodHRwczovL2QzanMub3JnL2QzLWNvbG9yLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn07XG5cbmZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cblxuZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG52YXIgZGFya2VyID0gMC43O1xudmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiO1xudmFyIHJlTiA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCI7XG52YXIgcmVQID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCI7XG52YXIgcmVIZXgzID0gL14jKFswLTlhLWZdezN9KSQvO1xudmFyIHJlSGV4NiA9IC9eIyhbMC05YS1mXXs2fSkkLztcbnZhciByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVJLCByZUksIHJlSV0gKyBcIlxcXFwpJFwiKTtcbnZhciByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKTtcbnZhciByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZUksIHJlSSwgcmVJLCByZU5dICsgXCJcXFxcKSRcIik7XG52YXIgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpO1xudmFyIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpO1xudmFyIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiICsgW3JlTiwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKSArIFwiXCI7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG07XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXgzLmV4ZWMoZm9ybWF0KSkgPyAobSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweDBmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkpIC8vICNmMDBcbiAgICAgIDogKG0gPSByZUhleDYuZXhlYyhmb3JtYXQpKSA/IHJnYm4ocGFyc2VJbnQobVsxXSwgMTYpKSAvLyAjZmYwMDAwXG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKVxuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5mdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMuciAmJiB0aGlzLnIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmcgJiYgdGhpcy5nIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5iICYmIHRoaXMuYiA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZnVuY3Rpb24gaHNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbmV3IEhzbChvLmgsIG8ucywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBIc2w7XG4gIGlmIChvIGluc3RhbmNlb2YgSHNsKSByZXR1cm4gbztcbiAgbyA9IG8ucmdiKCk7XG4gIHZhciByID0gby5yIC8gMjU1LFxuICAgICAgZyA9IG8uZyAvIDI1NSxcbiAgICAgIGIgPSBvLmIgLyAyNTUsXG4gICAgICBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKSxcbiAgICAgIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpLFxuICAgICAgaCA9IE5hTixcbiAgICAgIHMgPSBtYXggLSBtaW4sXG4gICAgICBsID0gKG1heCArIG1pbikgLyAyO1xuICBpZiAocykge1xuICAgIGlmIChyID09PSBtYXgpIGggPSAoZyAtIGIpIC8gcyArIChnIDwgYikgKiA2O1xuICAgIGVsc2UgaWYgKGcgPT09IG1heCkgaCA9IChiIC0gcikgLyBzICsgMjtcbiAgICBlbHNlIGggPSAociAtIGcpIC8gcyArIDQ7XG4gICAgcyAvPSBsIDwgMC41ID8gbWF4ICsgbWluIDogMiAtIG1heCAtIG1pbjtcbiAgICBoICo9IDYwO1xuICB9IGVsc2Uge1xuICAgIHMgPSBsID4gMCAmJiBsIDwgMSA/IDAgOiBoO1xuICB9XG4gIHJldHVybiBuZXcgSHNsKGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIGhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaHNsQ29udmVydChoKSA6IG5ldyBIc2woaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBIc2woaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhzbCwgaHNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gdGhpcy5oICUgMzYwICsgKHRoaXMuaCA8IDApICogMzYwLFxuICAgICAgICBzID0gaXNOYU4oaCkgfHwgaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMsXG4gICAgICAgIGwgPSB0aGlzLmwsXG4gICAgICAgIG0yID0gbCArIChsIDwgMC41ID8gbCA6IDEgLSBsKSAqIHMsXG4gICAgICAgIG0xID0gMiAqIGwgLSBtMjtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGhzbDJyZ2IoaCA+PSAyNDAgPyBoIC0gMjQwIDogaCArIDEyMCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCwgbTEsIG0yKSxcbiAgICAgIGhzbDJyZ2IoaCA8IDEyMCA/IGggKyAyNDAgOiBoIC0gMTIwLCBtMSwgbTIpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9XG59KSk7XG5cbi8qIEZyb20gRnZEIDEzLjM3LCBDU1MgQ29sb3IgTW9kdWxlIExldmVsIDMgKi9cbmZ1bmN0aW9uIGhzbDJyZ2IoaCwgbTEsIG0yKSB7XG4gIHJldHVybiAoaCA8IDYwID8gbTEgKyAobTIgLSBtMSkgKiBoIC8gNjBcbiAgICAgIDogaCA8IDE4MCA/IG0yXG4gICAgICA6IGggPCAyNDAgPyBtMSArIChtMiAtIG0xKSAqICgyNDAgLSBoKSAvIDYwXG4gICAgICA6IG0xKSAqIDI1NTtcbn1cblxudmFyIGRlZzJyYWQgPSBNYXRoLlBJIC8gMTgwO1xudmFyIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuXG52YXIgS24gPSAxODtcbnZhciBYbiA9IDAuOTUwNDcwO1xudmFyIFluID0gMTtcbnZhciBabiA9IDEuMDg4ODMwO1xudmFyIHQwID0gNCAvIDI5O1xudmFyIHQxID0gNiAvIDI5O1xudmFyIHQyID0gMyAqIHQxICogdDE7XG52YXIgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHtcbiAgICB2YXIgaCA9IG8uaCAqIGRlZzJyYWQ7XG4gICAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG4gIH1cbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgYiA9IHJnYjJ4eXooby5yKSxcbiAgICAgIGEgPSByZ2IyeHl6KG8uZyksXG4gICAgICBsID0gcmdiMnh5eihvLmIpLFxuICAgICAgeCA9IHh5ejJsYWIoKDAuNDEyNDU2NCAqIGIgKyAwLjM1NzU3NjEgKiBhICsgMC4xODA0Mzc1ICogbCkgLyBYbiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMTI2NzI5ICogYiArIDAuNzE1MTUyMiAqIGEgKyAwLjA3MjE3NTAgKiBsKSAvIFluKSxcbiAgICAgIHogPSB4eXoybGFiKCgwLjAxOTMzMzkgKiBiICsgMC4xMTkxOTIwICogYSArIDAuOTUwMzA0MSAqIGwpIC8gWm4pO1xuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIGxhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gbGFiQ29udmVydChsKSA6IG5ldyBMYWIobCwgYSwgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIHh5ejJyZ2IoIDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICB4eXoycmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopLFxuICAgICAgeHl6MnJnYiggMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZnVuY3Rpb24gSGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMuYyA9ICtjO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEtuICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCAtIEtuICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbGFiQ29udmVydCh0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuXG52YXIgQSA9IC0wLjE0ODYxO1xudmFyIEIgPSArMS43ODI3NztcbnZhciBDID0gLTAuMjkyMjc7XG52YXIgRCA9IC0wLjkwNjQ5O1xudmFyIEUgPSArMS45NzI5NDtcbnZhciBFRCA9IEUgKiBEO1xudmFyIEVCID0gRSAqIEI7XG52YXIgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5mdW5jdGlvbiBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5zID0gK3M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEN1YmVoZWxpeCwgY3ViZWhlbGl4LCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBDdWJlaGVsaXgodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoID0gaXNOYU4odGhpcy5oKSA/IDAgOiAodGhpcy5oICsgMTIwKSAqIGRlZzJyYWQsXG4gICAgICAgIGwgPSArdGhpcy5sLFxuICAgICAgICBhID0gaXNOYU4odGhpcy5zKSA/IDAgOiB0aGlzLnMgKiBsICogKDEgLSBsKSxcbiAgICAgICAgY29zaCA9IE1hdGguY29zKGgpLFxuICAgICAgICBzaW5oID0gTWF0aC5zaW4oaCk7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICAyNTUgKiAobCArIGEgKiAoQSAqIGNvc2ggKyBCICogc2luaCkpLFxuICAgICAgMjU1ICogKGwgKyBhICogKEMgKiBjb3NoICsgRCAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChFICogY29zaCkpLFxuICAgICAgdGhpcy5vcGFjaXR5XG4gICAgKTtcbiAgfVxufSkpO1xuXG5leHBvcnRzLmNvbG9yID0gY29sb3I7XG5leHBvcnRzLnJnYiA9IHJnYjtcbmV4cG9ydHMuaHNsID0gaHNsO1xuZXhwb3J0cy5sYWIgPSBsYWI7XG5leHBvcnRzLmhjbCA9IGhjbDtcbmV4cG9ydHMuY3ViZWhlbGl4ID0gY3ViZWhlbGl4O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSkpO1xuIiwiLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1kaXNwYXRjaC8gVmVyc2lvbiAxLjAuMS4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSkpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICAgIF9bdF0gPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgICB0aGlzLl8gPSBfO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICAgIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gICAgfSk7XG4gIH1cblxuICBEaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICAgIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICAgIHQsXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgICB9LFxuICAgIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfSxcbiAgICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBleHBvcnRzLmRpc3BhdGNoID0gZGlzcGF0Y2g7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpOyIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtZm9ybWF0LyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvLyBDb21wdXRlcyB0aGUgZGVjaW1hbCBjb2VmZmljaWVudCBhbmQgZXhwb25lbnQgb2YgdGhlIHNwZWNpZmllZCBudW1iZXIgeCB3aXRoXG4gIC8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbCgxLjIzKSByZXR1cm5zIFtcIjEyM1wiLCAwXS5cbiAgZnVuY3Rpb24gZm9ybWF0RGVjaW1hbCh4LCBwKSB7XG4gICAgaWYgKChpID0gKHggPSBwID8geC50b0V4cG9uZW50aWFsKHAgLSAxKSA6IHgudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKFwiZVwiKSkgPCAwKSByZXR1cm4gbnVsbDsgLy8gTmFOLCDCsUluZmluaXR5XG4gICAgdmFyIGksIGNvZWZmaWNpZW50ID0geC5zbGljZSgwLCBpKTtcblxuICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgICAvLyAoZS5nLiwgMS4yZSszKSBvciB0aGUgZm9ybSBcXGRlWy0rXVxcZCsgKGUuZy4sIDFlKzMpLlxuICAgIHJldHVybiBbXG4gICAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICAgK3guc2xpY2UoaSArIDEpXG4gICAgXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cG9uZW50KHgpIHtcbiAgICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWwoTWF0aC5hYnMoeCkpLCB4ID8geFsxXSA6IE5hTjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdEdyb3VwKGdyb3VwaW5nLCB0aG91c2FuZHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aCxcbiAgICAgICAgICB0ID0gW10sXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgZyA9IGdyb3VwaW5nWzBdLFxuICAgICAgICAgIGxlbmd0aCA9IDA7XG5cbiAgICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgICBpZiAobGVuZ3RoICsgZyArIDEgPiB3aWR0aCkgZyA9IE1hdGgubWF4KDEsIHdpZHRoIC0gbGVuZ3RoKTtcbiAgICAgICAgdC5wdXNoKHZhbHVlLnN1YnN0cmluZyhpIC09IGcsIGkgKyBnKSk7XG4gICAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgICAgZyA9IGdyb3VwaW5nW2ogPSAoaiArIDEpICUgZ3JvdXBpbmcubGVuZ3RoXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0RGVmYXVsdCh4LCBwKSB7XG4gICAgeCA9IHgudG9QcmVjaXNpb24ocCk7XG5cbiAgICBvdXQ6IGZvciAodmFyIG4gPSB4Lmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgICBzd2l0Y2ggKHhbaV0pIHtcbiAgICAgICAgY2FzZSBcIi5cIjogaTAgPSBpMSA9IGk7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgICAgY2FzZSBcImVcIjogYnJlYWsgb3V0O1xuICAgICAgICBkZWZhdWx0OiBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpMCA+IDAgPyB4LnNsaWNlKDAsIGkwKSArIHguc2xpY2UoaTEgKyAxKSA6IHg7XG4gIH1cblxuICB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbiAgZnVuY3Rpb24gZm9ybWF0UHJlZml4QXV0byh4LCBwKSB7XG4gICAgdmFyIGQgPSBmb3JtYXREZWNpbWFsKHgsIHApO1xuICAgIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICAgIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICAgIGV4cG9uZW50ID0gZFsxXSxcbiAgICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICAgIHJldHVybiBpID09PSBuID8gY29lZmZpY2llbnRcbiAgICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgICA6IFwiMC5cIiArIG5ldyBBcnJheSgxIC0gaSkuam9pbihcIjBcIikgKyBmb3JtYXREZWNpbWFsKHgsIE1hdGgubWF4KDAsIHAgKyBpIC0gMSkpWzBdOyAvLyBsZXNzIHRoYW4gMXkhXG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3VuZGVkKHgsIHApIHtcbiAgICB2YXIgZCA9IGZvcm1hdERlY2ltYWwoeCwgcCk7XG4gICAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gICAgdmFyIGNvZWZmaWNpZW50ID0gZFswXSxcbiAgICAgICAgZXhwb25lbnQgPSBkWzFdO1xuICAgIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICAgIDogY29lZmZpY2llbnQubGVuZ3RoID4gZXhwb25lbnQgKyAxID8gY29lZmZpY2llbnQuc2xpY2UoMCwgZXhwb25lbnQgKyAxKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoZXhwb25lbnQgKyAxKVxuICAgICAgICA6IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGV4cG9uZW50IC0gY29lZmZpY2llbnQubGVuZ3RoICsgMikuam9pbihcIjBcIik7XG4gIH1cblxuICB2YXIgZm9ybWF0VHlwZXMgPSB7XG4gICAgXCJcIjogZm9ybWF0RGVmYXVsdCxcbiAgICBcIiVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gKHggKiAxMDApLnRvRml4ZWQocCk7IH0sXG4gICAgXCJiXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMik7IH0sXG4gICAgXCJjXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggKyBcIlwiOyB9LFxuICAgIFwiZFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDEwKTsgfSxcbiAgICBcImVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4geC50b0V4cG9uZW50aWFsKHApOyB9LFxuICAgIFwiZlwiOiBmdW5jdGlvbih4LCBwKSB7IHJldHVybiB4LnRvRml4ZWQocCk7IH0sXG4gICAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXG4gICAgXCJvXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoOCk7IH0sXG4gICAgXCJwXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCk7IH0sXG4gICAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gICAgXCJzXCI6IGZvcm1hdFByZWZpeEF1dG8sXG4gICAgXCJYXCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7IH0sXG4gICAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XG4gIH07XG5cbiAgLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICB2YXIgcmUgPSAvXig/OiguKT8oWzw+PV5dKSk/KFsrXFwtXFwoIF0pPyhbJCNdKT8oMCk/KFxcZCspPygsKT8oXFwuXFxkKyk/KFthLXolXSk/JC9pO1xuXG4gIGZ1bmN0aW9uIGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gRm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICAgIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcblxuICAgIHZhciBtYXRjaCxcbiAgICAgICAgZmlsbCA9IG1hdGNoWzFdIHx8IFwiIFwiLFxuICAgICAgICBhbGlnbiA9IG1hdGNoWzJdIHx8IFwiPlwiLFxuICAgICAgICBzaWduID0gbWF0Y2hbM10gfHwgXCItXCIsXG4gICAgICAgIHN5bWJvbCA9IG1hdGNoWzRdIHx8IFwiXCIsXG4gICAgICAgIHplcm8gPSAhIW1hdGNoWzVdLFxuICAgICAgICB3aWR0aCA9IG1hdGNoWzZdICYmICttYXRjaFs2XSxcbiAgICAgICAgY29tbWEgPSAhIW1hdGNoWzddLFxuICAgICAgICBwcmVjaXNpb24gPSBtYXRjaFs4XSAmJiArbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgICAgIHR5cGUgPSBtYXRjaFs5XSB8fCBcIlwiO1xuXG4gICAgLy8gVGhlIFwiblwiIHR5cGUgaXMgYW4gYWxpYXMgZm9yIFwiLGdcIi5cbiAgICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gICAgLy8gTWFwIGludmFsaWQgdHlwZXMgdG8gdGhlIGRlZmF1bHQgZm9ybWF0LlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgdHlwZSA9IFwiXCI7XG5cbiAgICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgICBpZiAoemVybyB8fCAoZmlsbCA9PT0gXCIwXCIgJiYgYWxpZ24gPT09IFwiPVwiKSkgemVybyA9IHRydWUsIGZpbGwgPSBcIjBcIiwgYWxpZ24gPSBcIj1cIjtcblxuICAgIHRoaXMuZmlsbCA9IGZpbGw7XG4gICAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICAgIHRoaXMuc2lnbiA9IHNpZ247XG4gICAgdGhpcy5zeW1ib2wgPSBzeW1ib2w7XG4gICAgdGhpcy56ZXJvID0gemVybztcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5jb21tYSA9IGNvbW1hO1xuICAgIHRoaXMucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gIH1cblxuICBGb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgICArIHRoaXMuYWxpZ25cbiAgICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgICArICh0aGlzLnplcm8gPyBcIjBcIiA6IFwiXCIpXG4gICAgICAgICsgKHRoaXMud2lkdGggPT0gbnVsbCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICAgICsgKHRoaXMucHJlY2lzaW9uID09IG51bGwgPyBcIlwiIDogXCIuXCIgKyBNYXRoLm1heCgwLCB0aGlzLnByZWNpc2lvbiB8IDApKVxuICAgICAgICArIHRoaXMudHlwZTtcbiAgfTtcblxuICB2YXIgcHJlZml4ZXMgPSBbXCJ5XCIsXCJ6XCIsXCJhXCIsXCJmXCIsXCJwXCIsXCJuXCIsXCLCtVwiLFwibVwiLFwiXCIsXCJrXCIsXCJNXCIsXCJHXCIsXCJUXCIsXCJQXCIsXCJFXCIsXCJaXCIsXCJZXCJdO1xuXG4gIGZ1bmN0aW9uIGlkZW50aXR5KHgpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgJiYgbG9jYWxlLnRob3VzYW5kcyA/IGZvcm1hdEdyb3VwKGxvY2FsZS5ncm91cGluZywgbG9jYWxlLnRob3VzYW5kcykgOiBpZGVudGl0eSxcbiAgICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICAgIGRlY2ltYWwgPSBsb2NhbGUuZGVjaW1hbDtcblxuICAgIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xuXG4gICAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICAgIHNpZ24gPSBzcGVjaWZpZXIuc2lnbixcbiAgICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgICB3aWR0aCA9IHNwZWNpZmllci53aWR0aCxcbiAgICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAvLyBGb3IgU0ktcHJlZml4LCB0aGUgc3VmZml4IGlzIGxhemlseSBjb21wdXRlZC5cbiAgICAgIHZhciBwcmVmaXggPSBzeW1ib2wgPT09IFwiJFwiID8gY3VycmVuY3lbMF0gOiBzeW1ib2wgPT09IFwiI1wiICYmIC9bYm94WF0vLnRlc3QodHlwZSkgPyBcIjBcIiArIHR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsXG4gICAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5WzFdIDogL1slcF0vLnRlc3QodHlwZSkgPyBcIiVcIiA6IFwiXCI7XG5cbiAgICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgICAvLyBJcyB0aGlzIGFuIGludGVnZXIgdHlwZT9cbiAgICAgIC8vIENhbiB0aGlzIHR5cGUgZ2VuZXJhdGUgZXhwb25lbnRpYWwgbm90YXRpb24/XG4gICAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICAgIG1heWJlU3VmZml4ID0gIXR5cGUgfHwgL1tkZWZncHJzJV0vLnRlc3QodHlwZSk7XG5cbiAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gaWYgbm90IHNwZWNpZmllZCxcbiAgICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgICAvLyBGb3Igc2lnbmlmaWNhbnQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFsxLCAyMV0uXG4gICAgICAvLyBGb3IgZml4ZWQgcHJlY2lzaW9uLCBpdCBtdXN0IGJlIGluIFswLCAyMF0uXG4gICAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT0gbnVsbCA/ICh0eXBlID8gNiA6IDEyKVxuICAgICAgICAgIDogL1tncHJzXS8udGVzdCh0eXBlKSA/IE1hdGgubWF4KDEsIE1hdGgubWluKDIxLCBwcmVjaXNpb24pKVxuICAgICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgICAgdmFyIHZhbHVlUHJlZml4ID0gcHJlZml4LFxuICAgICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBcImNcIikge1xuICAgICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgICAvLyBDb252ZXJ0IG5lZ2F0aXZlIHRvIHBvc2l0aXZlLCBhbmQgY29tcHV0ZSB0aGUgcHJlZml4LlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgICAgdmFyIHZhbHVlTmVnYXRpdmUgPSAodmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDApICYmICh2YWx1ZSAqPSAtMSwgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgICAgdmFsdWUgPSBmb3JtYXRUeXBlKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgICAgICAgLy8gSWYgdGhlIG9yaWdpbmFsIHZhbHVlIHdhcyBuZWdhdGl2ZSwgaXQgbWF5IGJlIHJvdW5kZWQgdG8gemVybyBkdXJpbmdcbiAgICAgICAgICAvLyBmb3JtYXR0aW5nOyB0cmVhdCB0aGlzIGFzIChwb3NpdGl2ZSkgemVyby5cbiAgICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSkge1xuICAgICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgICAgaWYgKGMgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpLCAoNDggPCBjICYmIGMgPCA1OClcbiAgICAgICAgICAgICAgICAgIHx8ICh0eXBlID09PSBcInhcIiAmJiA5NiA8IGMgJiYgYyA8IDEwMylcbiAgICAgICAgICAgICAgICAgIHx8ICh0eXBlID09PSBcIlhcIiAmJiA2NCA8IGMgJiYgYyA8IDcxKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlTmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBcIi1cIikgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICAgIHZhbHVlU3VmZml4ID0gdmFsdWVTdWZmaXggKyAodHlwZSA9PT0gXCJzXCIgPyBwcmVmaXhlc1s4ICsgcHJlZml4RXhwb25lbnQgLyAzXSA6IFwiXCIpICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgICAgLy8gQnJlYWsgdGhlIGZvcm1hdHRlZCB2YWx1ZSBpbnRvIHRoZSBpbnRlZ2VyIOKAnHZhbHVl4oCdIHBhcnQgdGhhdCBjYW4gYmVcbiAgICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICAgIGkgPSAtMSwgbiA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICAgIHZhbHVlU3VmZml4ID0gKGMgPT09IDQ2ID8gZGVjaW1hbCArIHZhbHVlLnNsaWNlKGkgKyAxKSA6IHZhbHVlLnNsaWNlKGkpKSArIHZhbHVlU3VmZml4O1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwYWRkaW5nLlxuICAgICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgICAgLy8gSWYgdGhlIGZpbGwgY2hhcmFjdGVyIGlzIFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGFmdGVyIHBhZGRpbmcuXG4gICAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgICAgICBjYXNlIFwiPFwiOiByZXR1cm4gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZztcbiAgICAgICAgICBjYXNlIFwiPVwiOiByZXR1cm4gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICBjYXNlIFwiXlwiOiByZXR1cm4gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgIH1cblxuICAgICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzcGVjaWZpZXIgKyBcIlwiO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgICBlID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMsXG4gICAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgICBmb3JtYXRQcmVmaXg6IGZvcm1hdFByZWZpeFxuICAgIH07XG4gIH1cblxuICB2YXIgbG9jYWxlO1xuICBkZWZhdWx0TG9jYWxlKHtcbiAgICBkZWNpbWFsOiBcIi5cIixcbiAgICB0aG91c2FuZHM6IFwiLFwiLFxuICAgIGdyb3VwaW5nOiBbM10sXG4gICAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICAgIGV4cG9ydHMuZm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgICBleHBvcnRzLmZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gICAgcmV0dXJuIGxvY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZWNpc2lvbkZpeGVkKHN0ZXApIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgLWV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlY2lzaW9uUm91bmQoc3RlcCwgbWF4KSB7XG4gICAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG4gIH1cblxuICBleHBvcnRzLmZvcm1hdERlZmF1bHRMb2NhbGUgPSBkZWZhdWx0TG9jYWxlO1xuICBleHBvcnRzLmZvcm1hdExvY2FsZSA9IGZvcm1hdExvY2FsZTtcbiAgZXhwb3J0cy5mb3JtYXRTcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXI7XG4gIGV4cG9ydHMucHJlY2lzaW9uRml4ZWQgPSBwcmVjaXNpb25GaXhlZDtcbiAgZXhwb3J0cy5wcmVjaXNpb25QcmVmaXggPSBwcmVjaXNpb25QcmVmaXg7XG4gIGV4cG9ydHMucHJlY2lzaW9uUm91bmQgPSBwcmVjaXNpb25Sb3VuZDtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7IiwiLy8gaHR0cHM6Ly9kM2pzLm9yZy9kMy1pbnRlcnBvbGF0ZS8gVmVyc2lvbiAxLjEuMi4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCdkMy1jb2xvcicpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMtY29sb3InXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSxnbG9iYWwuZDMpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzLGQzQ29sb3IpIHsgJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG52YXIgYmFzaXMkMSA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdCA8PSAwID8gKHQgPSAwKSA6IHQgPj0gMSA/ICh0ID0gMSwgbiAtIDEpIDogTWF0aC5mbG9vcih0ICogbiksXG4gICAgICAgIHYxID0gdmFsdWVzW2ldLFxuICAgICAgICB2MiA9IHZhbHVlc1tpICsgMV0sXG4gICAgICAgIHYwID0gaSA+IDAgPyB2YWx1ZXNbaSAtIDFdIDogMiAqIHYxIC0gdjIsXG4gICAgICAgIHYzID0gaSA8IG4gLSAxID8gdmFsdWVzW2kgKyAyXSA6IDIgKiB2MiAtIHYxO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn07XG5cbnZhciBiYXNpc0Nsb3NlZCA9IGZ1bmN0aW9uKHZhbHVlcykge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKCgodCAlPSAxKSA8IDAgPyArK3QgOiB0KSAqIG4pLFxuICAgICAgICB2MCA9IHZhbHVlc1soaSArIG4gLSAxKSAlIG5dLFxuICAgICAgICB2MSA9IHZhbHVlc1tpICUgbl0sXG4gICAgICAgIHYyID0gdmFsdWVzWyhpICsgMSkgJSBuXSxcbiAgICAgICAgdjMgPSB2YWx1ZXNbKGkgKyAyKSAlIG5dO1xuICAgIHJldHVybiBiYXNpcygodCAtIGkgLyBuKSAqIG4sIHYwLCB2MSwgdjIsIHYzKTtcbiAgfTtcbn07XG5cbnZhciBjb25zdGFudCA9IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufTtcblxuZnVuY3Rpb24gbGluZWFyKGEsIGQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYSArIHQgKiBkO1xuICB9O1xufVxuXG5mdW5jdGlvbiBleHBvbmVudGlhbChhLCBiLCB5KSB7XG4gIHJldHVybiBhID0gTWF0aC5wb3coYSwgeSksIGIgPSBNYXRoLnBvdyhiLCB5KSAtIGEsIHkgPSAxIC8geSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhhICsgdCAqIGIsIHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5mdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbnZhciByZ2IkMSA9IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciQkMSA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYiQkMShzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvciQkMSgoc3RhcnQgPSBkM0NvbG9yLnJnYihzdGFydCkpLnIsIChlbmQgPSBkM0NvbG9yLnJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yJCQxKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yJCQxKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IGNvbG9yJCQxKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuciA9IHIodCk7XG4gICAgICBzdGFydC5nID0gZyh0KTtcbiAgICAgIHN0YXJ0LmIgPSBiKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cblxuICByZ2IkJDEuZ2FtbWEgPSByZ2JHYW1tYTtcblxuICByZXR1cm4gcmdiJCQxO1xufSkoMSk7XG5cbmZ1bmN0aW9uIHJnYlNwbGluZShzcGxpbmUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbG9ycykge1xuICAgIHZhciBuID0gY29sb3JzLmxlbmd0aCxcbiAgICAgICAgciA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgZyA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgYiA9IG5ldyBBcnJheShuKSxcbiAgICAgICAgaSwgY29sb3IkJDE7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29sb3IkJDEgPSBkM0NvbG9yLnJnYihjb2xvcnNbaV0pO1xuICAgICAgcltpXSA9IGNvbG9yJCQxLnIgfHwgMDtcbiAgICAgIGdbaV0gPSBjb2xvciQkMS5nIHx8IDA7XG4gICAgICBiW2ldID0gY29sb3IkJDEuYiB8fCAwO1xuICAgIH1cbiAgICByID0gc3BsaW5lKHIpO1xuICAgIGcgPSBzcGxpbmUoZyk7XG4gICAgYiA9IHNwbGluZShiKTtcbiAgICBjb2xvciQkMS5vcGFjaXR5ID0gMTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgY29sb3IkJDEuciA9IHIodCk7XG4gICAgICBjb2xvciQkMS5nID0gZyh0KTtcbiAgICAgIGNvbG9yJCQxLmIgPSBiKHQpO1xuICAgICAgcmV0dXJuIGNvbG9yJCQxICsgXCJcIjtcbiAgICB9O1xuICB9O1xufVxuXG52YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMkMSk7XG52YXIgcmdiQmFzaXNDbG9zZWQgPSByZ2JTcGxpbmUoYmFzaXNDbG9zZWQpO1xuXG52YXIgYXJyYXkgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmIpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59O1xuXG52YXIgZGF0ZSA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZTtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGQuc2V0VGltZShhICsgYiAqIHQpLCBkO1xuICB9O1xufTtcblxudmFyIG51bWJlciA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyBiICogdDtcbiAgfTtcbn07XG5cbnZhciBvYmplY3QgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufTtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZztcbnZhciByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbnZhciBzdHJpbmcgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBiaSA9IHJlQS5sYXN0SW5kZXggPSByZUIubGFzdEluZGV4ID0gMCwgLy8gc2NhbiBpbmRleCBmb3IgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYW0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYVxuICAgICAgYm0sIC8vIGN1cnJlbnQgbWF0Y2ggaW4gYlxuICAgICAgYnMsIC8vIHN0cmluZyBwcmVjZWRpbmcgY3VycmVudCBudW1iZXIgaW4gYiwgaWYgYW55XG4gICAgICBpID0gLTEsIC8vIGluZGV4IGluIHNcbiAgICAgIHMgPSBbXSwgLy8gc3RyaW5nIGNvbnN0YW50cyBhbmQgcGxhY2Vob2xkZXJzXG4gICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG5cbiAgLy8gQ29lcmNlIGlucHV0cyB0byBzdHJpbmdzLlxuICBhID0gYSArIFwiXCIsIGIgPSBiICsgXCJcIjtcblxuICAvLyBJbnRlcnBvbGF0ZSBwYWlycyBvZiBudW1iZXJzIGluIGEgJiBiLlxuICB3aGlsZSAoKGFtID0gcmVBLmV4ZWMoYSkpXG4gICAgICAmJiAoYm0gPSByZUIuZXhlYyhiKSkpIHtcbiAgICBpZiAoKGJzID0gYm0uaW5kZXgpID4gYmkpIHsgLy8gYSBzdHJpbmcgcHJlY2VkZXMgdGhlIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGJzID0gYi5zbGljZShiaSwgYnMpO1xuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJzO1xuICAgIH1cbiAgICBpZiAoKGFtID0gYW1bMF0pID09PSAoYm0gPSBibVswXSkpIHsgLy8gbnVtYmVycyBpbiBhICYgYiBtYXRjaFxuICAgICAgaWYgKHNbaV0pIHNbaV0gKz0gYm07IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgICBlbHNlIHNbKytpXSA9IGJtO1xuICAgIH0gZWxzZSB7IC8vIGludGVycG9sYXRlIG5vbi1tYXRjaGluZyBudW1iZXJzXG4gICAgICBzWysraV0gPSBudWxsO1xuICAgICAgcS5wdXNoKHtpOiBpLCB4OiBudW1iZXIoYW0sIGJtKX0pO1xuICAgIH1cbiAgICBiaSA9IHJlQi5sYXN0SW5kZXg7XG4gIH1cblxuICAvLyBBZGQgcmVtYWlucyBvZiBiLlxuICBpZiAoYmkgPCBiLmxlbmd0aCkge1xuICAgIGJzID0gYi5zbGljZShiaSk7XG4gICAgaWYgKHNbaV0pIHNbaV0gKz0gYnM7IC8vIGNvYWxlc2NlIHdpdGggcHJldmlvdXMgc3RyaW5nXG4gICAgZWxzZSBzWysraV0gPSBicztcbiAgfVxuXG4gIC8vIFNwZWNpYWwgb3B0aW1pemF0aW9uIGZvciBvbmx5IGEgc2luZ2xlIG1hdGNoLlxuICAvLyBPdGhlcndpc2UsIGludGVycG9sYXRlIGVhY2ggb2YgdGhlIG51bWJlcnMgYW5kIHJlam9pbiB0aGUgc3RyaW5nLlxuICByZXR1cm4gcy5sZW5ndGggPCAyID8gKHFbMF1cbiAgICAgID8gb25lKHFbMF0ueClcbiAgICAgIDogemVybyhiKSlcbiAgICAgIDogKGIgPSBxLmxlbmd0aCwgZnVuY3Rpb24odCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBvOyBpIDwgYjsgKytpKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICAgICAgcmV0dXJuIHMuam9pbihcIlwiKTtcbiAgICAgICAgfSk7XG59O1xuXG52YXIgdmFsdWUgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciB0ID0gdHlwZW9mIGIsIGM7XG4gIHJldHVybiBiID09IG51bGwgfHwgdCA9PT0gXCJib29sZWFuXCIgPyBjb25zdGFudChiKVxuICAgICAgOiAodCA9PT0gXCJudW1iZXJcIiA/IG51bWJlclxuICAgICAgOiB0ID09PSBcInN0cmluZ1wiID8gKChjID0gZDNDb2xvci5jb2xvcihiKSkgPyAoYiA9IGMsIHJnYiQxKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGQzQ29sb3IuY29sb3IgPyByZ2IkMVxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogQXJyYXkuaXNBcnJheShiKSA/IGFycmF5XG4gICAgICA6IGlzTmFOKGIpID8gb2JqZWN0XG4gICAgICA6IG51bWJlcikoYSwgYik7XG59O1xuXG52YXIgcm91bmQgPSBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKGEgKyBiICogdCk7XG4gIH07XG59O1xuXG52YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbnZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbnZhciBkZWNvbXBvc2UgPSBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn07XG5cbnZhciBjc3NOb2RlO1xudmFyIGNzc1Jvb3Q7XG52YXIgY3NzVmlldztcbnZhciBzdmdOb2RlO1xuXG5mdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IFwibm9uZVwiKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghY3NzTm9kZSkgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJESVZcIiksIGNzc1Jvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGNzc1ZpZXcgPSBkb2N1bWVudC5kZWZhdWx0VmlldztcbiAgY3NzTm9kZS5zdHlsZS50cmFuc2Zvcm0gPSB2YWx1ZTtcbiAgdmFsdWUgPSBjc3NWaWV3LmdldENvbXB1dGVkU3R5bGUoY3NzUm9vdC5hcHBlbmRDaGlsZChjc3NOb2RlKSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKTtcbiAgY3NzUm9vdC5yZW1vdmVDaGlsZChjc3NOb2RlKTtcbiAgdmFsdWUgPSB2YWx1ZS5zbGljZSg3LCAtMSkuc3BsaXQoXCIsXCIpO1xuICByZXR1cm4gZGVjb21wb3NlKCt2YWx1ZVswXSwgK3ZhbHVlWzFdLCArdmFsdWVbMl0sICt2YWx1ZVszXSwgK3ZhbHVlWzRdLCArdmFsdWVbNV0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVN2Zyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIXN2Z05vZGUpIHN2Z05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcImdcIik7XG4gIHN2Z05vZGUuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHZhbHVlKTtcbiAgaWYgKCEodmFsdWUgPSBzdmdOb2RlLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHZhbHVlID0gdmFsdWUubWF0cml4O1xuICByZXR1cm4gZGVjb21wb3NlKHZhbHVlLmEsIHZhbHVlLmIsIHZhbHVlLmMsIHZhbHVlLmQsIHZhbHVlLmUsIHZhbHVlLmYpO1xufVxuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbnZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xudmFyIGludGVycG9sYXRlVHJhbnNmb3JtU3ZnID0gaW50ZXJwb2xhdGVUcmFuc2Zvcm0ocGFyc2VTdmcsIFwiLCBcIiwgXCIpXCIsIFwiKVwiKTtcblxudmFyIHJobyA9IE1hdGguU1FSVDI7XG52YXIgcmhvMiA9IDI7XG52YXIgcmhvNCA9IDQ7XG52YXIgZXBzaWxvbjIgPSAxZS0xMjtcblxuZnVuY3Rpb24gY29zaCh4KSB7XG4gIHJldHVybiAoKHggPSBNYXRoLmV4cCh4KSkgKyAxIC8geCkgLyAyO1xufVxuXG5mdW5jdGlvbiBzaW5oKHgpIHtcbiAgcmV0dXJuICgoeCA9IE1hdGguZXhwKHgpKSAtIDEgLyB4KSAvIDI7XG59XG5cbmZ1bmN0aW9uIHRhbmgoeCkge1xuICByZXR1cm4gKCh4ID0gTWF0aC5leHAoMiAqIHgpKSAtIDEpIC8gKHggKyAxKTtcbn1cblxuLy8gcDAgPSBbdXgwLCB1eTAsIHcwXVxuLy8gcDEgPSBbdXgxLCB1eTEsIHcxXVxudmFyIHpvb20gPSBmdW5jdGlvbihwMCwgcDEpIHtcbiAgdmFyIHV4MCA9IHAwWzBdLCB1eTAgPSBwMFsxXSwgdzAgPSBwMFsyXSxcbiAgICAgIHV4MSA9IHAxWzBdLCB1eTEgPSBwMVsxXSwgdzEgPSBwMVsyXSxcbiAgICAgIGR4ID0gdXgxIC0gdXgwLFxuICAgICAgZHkgPSB1eTEgLSB1eTAsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgaSxcbiAgICAgIFM7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIGZvciB1MCDiiYUgdTEuXG4gIGlmIChkMiA8IGVwc2lsb24yKSB7XG4gICAgUyA9IE1hdGgubG9nKHcxIC8gdzApIC8gcmhvO1xuICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB1eDAgKyB0ICogZHgsXG4gICAgICAgIHV5MCArIHQgKiBkeSxcbiAgICAgICAgdzAgKiBNYXRoLmV4cChyaG8gKiB0ICogUylcbiAgICAgIF07XG4gICAgfTtcbiAgfVxuXG4gIC8vIEdlbmVyYWwgY2FzZS5cbiAgZWxzZSB7XG4gICAgdmFyIGQxID0gTWF0aC5zcXJ0KGQyKSxcbiAgICAgICAgYjAgPSAodzEgKiB3MSAtIHcwICogdzAgKyByaG80ICogZDIpIC8gKDIgKiB3MCAqIHJobzIgKiBkMSksXG4gICAgICAgIGIxID0gKHcxICogdzEgLSB3MCAqIHcwIC0gcmhvNCAqIGQyKSAvICgyICogdzEgKiByaG8yICogZDEpLFxuICAgICAgICByMCA9IE1hdGgubG9nKE1hdGguc3FydChiMCAqIGIwICsgMSkgLSBiMCksXG4gICAgICAgIHIxID0gTWF0aC5sb2coTWF0aC5zcXJ0KGIxICogYjEgKyAxKSAtIGIxKTtcbiAgICBTID0gKHIxIC0gcjApIC8gcmhvO1xuICAgIGkgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgcyA9IHQgKiBTLFxuICAgICAgICAgIGNvc2hyMCA9IGNvc2gocjApLFxuICAgICAgICAgIHUgPSB3MCAvIChyaG8yICogZDEpICogKGNvc2hyMCAqIHRhbmgocmhvICogcyArIHIwKSAtIHNpbmgocjApKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHV4MCArIHUgKiBkeCxcbiAgICAgICAgdXkwICsgdSAqIGR5LFxuICAgICAgICB3MCAqIGNvc2hyMCAvIGNvc2gocmhvICogcyArIHIwKVxuICAgICAgXTtcbiAgICB9O1xuICB9XG5cbiAgaS5kdXJhdGlvbiA9IFMgKiAxMDAwO1xuXG4gIHJldHVybiBpO1xufTtcblxuZnVuY3Rpb24gaHNsJDEoaHVlJCQxKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgdmFyIGggPSBodWUkJDEoKHN0YXJ0ID0gZDNDb2xvci5oc2woc3RhcnQpKS5oLCAoZW5kID0gZDNDb2xvci5oc2woZW5kKSkuaCksXG4gICAgICAgIHMgPSBub2dhbW1hKHN0YXJ0LnMsIGVuZC5zKSxcbiAgICAgICAgbCA9IG5vZ2FtbWEoc3RhcnQubCwgZW5kLmwpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICBzdGFydC5sID0gbCh0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG59XG5cbnZhciBoc2wkMiA9IGhzbCQxKGh1ZSk7XG52YXIgaHNsTG9uZyA9IGhzbCQxKG5vZ2FtbWEpO1xuXG5mdW5jdGlvbiBsYWIkMShzdGFydCwgZW5kKSB7XG4gIHZhciBsID0gbm9nYW1tYSgoc3RhcnQgPSBkM0NvbG9yLmxhYihzdGFydCkpLmwsIChlbmQgPSBkM0NvbG9yLmxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBub2dhbW1hKHN0YXJ0LmEsIGVuZC5hKSxcbiAgICAgIGIgPSBub2dhbW1hKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBoY2wkMShodWUkJDEpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgaCA9IGh1ZSQkMSgoc3RhcnQgPSBkM0NvbG9yLmhjbChzdGFydCkpLmgsIChlbmQgPSBkM0NvbG9yLmhjbChlbmQpKS5oKSxcbiAgICAgICAgYyA9IG5vZ2FtbWEoc3RhcnQuYywgZW5kLmMpLFxuICAgICAgICBsID0gbm9nYW1tYShzdGFydC5sLCBlbmQubCksXG4gICAgICAgIG9wYWNpdHkgPSBub2dhbW1hKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgc3RhcnQuaCA9IGgodCk7XG4gICAgICBzdGFydC5jID0gYyh0KTtcbiAgICAgIHN0YXJ0LmwgPSBsKHQpO1xuICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICAgIH07XG4gIH1cbn1cblxudmFyIGhjbCQyID0gaGNsJDEoaHVlKTtcbnZhciBoY2xMb25nID0gaGNsJDEobm9nYW1tYSk7XG5cbmZ1bmN0aW9uIGN1YmVoZWxpeCQxKGh1ZSQkMSkge1xuICByZXR1cm4gKGZ1bmN0aW9uIGN1YmVoZWxpeEdhbW1hKHkpIHtcbiAgICB5ID0gK3k7XG5cbiAgICBmdW5jdGlvbiBjdWJlaGVsaXgkJDEoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIGggPSBodWUkJDEoKHN0YXJ0ID0gZDNDb2xvci5jdWJlaGVsaXgoc3RhcnQpKS5oLCAoZW5kID0gZDNDb2xvci5jdWJlaGVsaXgoZW5kKSkuaCksXG4gICAgICAgICAgcyA9IG5vZ2FtbWEoc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBub2dhbW1hKHN0YXJ0LmwsIGVuZC5sKSxcbiAgICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgICBzdGFydC5oID0gaCh0KTtcbiAgICAgICAgc3RhcnQucyA9IHModCk7XG4gICAgICAgIHN0YXJ0LmwgPSBsKE1hdGgucG93KHQsIHkpKTtcbiAgICAgICAgc3RhcnQub3BhY2l0eSA9IG9wYWNpdHkodCk7XG4gICAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGN1YmVoZWxpeCQkMS5nYW1tYSA9IGN1YmVoZWxpeEdhbW1hO1xuXG4gICAgcmV0dXJuIGN1YmVoZWxpeCQkMTtcbiAgfSkoMSk7XG59XG5cbnZhciBjdWJlaGVsaXgkMiA9IGN1YmVoZWxpeCQxKGh1ZSk7XG52YXIgY3ViZWhlbGl4TG9uZyA9IGN1YmVoZWxpeCQxKG5vZ2FtbWEpO1xuXG52YXIgcXVhbnRpemUgPSBmdW5jdGlvbihpbnRlcnBvbGF0b3IsIG4pIHtcbiAgdmFyIHNhbXBsZXMgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBzYW1wbGVzW2ldID0gaW50ZXJwb2xhdG9yKGkgLyAobiAtIDEpKTtcbiAgcmV0dXJuIHNhbXBsZXM7XG59O1xuXG5leHBvcnRzLmludGVycG9sYXRlID0gdmFsdWU7XG5leHBvcnRzLmludGVycG9sYXRlQXJyYXkgPSBhcnJheTtcbmV4cG9ydHMuaW50ZXJwb2xhdGVCYXNpcyA9IGJhc2lzJDE7XG5leHBvcnRzLmludGVycG9sYXRlQmFzaXNDbG9zZWQgPSBiYXNpc0Nsb3NlZDtcbmV4cG9ydHMuaW50ZXJwb2xhdGVEYXRlID0gZGF0ZTtcbmV4cG9ydHMuaW50ZXJwb2xhdGVOdW1iZXIgPSBudW1iZXI7XG5leHBvcnRzLmludGVycG9sYXRlT2JqZWN0ID0gb2JqZWN0O1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVJvdW5kID0gcm91bmQ7XG5leHBvcnRzLmludGVycG9sYXRlU3RyaW5nID0gc3RyaW5nO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtQ3NzO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtU3ZnO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVpvb20gPSB6b29tO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVJnYiA9IHJnYiQxO1xuZXhwb3J0cy5pbnRlcnBvbGF0ZVJnYkJhc2lzID0gcmdiQmFzaXM7XG5leHBvcnRzLmludGVycG9sYXRlUmdiQmFzaXNDbG9zZWQgPSByZ2JCYXNpc0Nsb3NlZDtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIc2wgPSBoc2wkMjtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIc2xMb25nID0gaHNsTG9uZztcbmV4cG9ydHMuaW50ZXJwb2xhdGVMYWIgPSBsYWIkMTtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIY2wgPSBoY2wkMjtcbmV4cG9ydHMuaW50ZXJwb2xhdGVIY2xMb25nID0gaGNsTG9uZztcbmV4cG9ydHMuaW50ZXJwb2xhdGVDdWJlaGVsaXggPSBjdWJlaGVsaXgkMjtcbmV4cG9ydHMuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nID0gY3ViZWhlbGl4TG9uZztcbmV4cG9ydHMucXVhbnRpemUgPSBxdWFudGl6ZTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtc2NhbGUvIFZlcnNpb24gMS4wLjMuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnZDMtYXJyYXknKSwgcmVxdWlyZSgnZDMtY29sbGVjdGlvbicpLCByZXF1aXJlKCdkMy1pbnRlcnBvbGF0ZScpLCByZXF1aXJlKCdkMy1mb3JtYXQnKSwgcmVxdWlyZSgnZDMtdGltZScpLCByZXF1aXJlKCdkMy10aW1lLWZvcm1hdCcpLCByZXF1aXJlKCdkMy1jb2xvcicpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMtYXJyYXknLCAnZDMtY29sbGVjdGlvbicsICdkMy1pbnRlcnBvbGF0ZScsICdkMy1mb3JtYXQnLCAnZDMtdGltZScsICdkMy10aW1lLWZvcm1hdCcsICdkMy1jb2xvciddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pLGdsb2JhbC5kMyxnbG9iYWwuZDMsZ2xvYmFsLmQzLGdsb2JhbC5kMyxnbG9iYWwuZDMsZ2xvYmFsLmQzLGdsb2JhbC5kMykpO1xufSh0aGlzLCBmdW5jdGlvbiAoZXhwb3J0cyxkM0FycmF5LGQzQ29sbGVjdGlvbixkM0ludGVycG9sYXRlLGQzRm9ybWF0LGQzVGltZSxkM1RpbWVGb3JtYXQsZDNDb2xvcikgeyAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGFycmF5ID0gQXJyYXkucHJvdG90eXBlO1xuXG4gIHZhciBtYXAkMSA9IGFycmF5Lm1hcDtcbiAgdmFyIHNsaWNlID0gYXJyYXkuc2xpY2U7XG5cbiAgdmFyIGltcGxpY2l0ID0ge25hbWU6IFwiaW1wbGljaXRcIn07XG5cbiAgZnVuY3Rpb24gb3JkaW5hbChyYW5nZSkge1xuICAgIHZhciBpbmRleCA9IGQzQ29sbGVjdGlvbi5tYXAoKSxcbiAgICAgICAgZG9tYWluID0gW10sXG4gICAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICAgIHJhbmdlID0gcmFuZ2UgPT0gbnVsbCA/IFtdIDogc2xpY2UuY2FsbChyYW5nZSk7XG5cbiAgICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgICB2YXIga2V5ID0gZCArIFwiXCIsIGkgPSBpbmRleC5nZXQoa2V5KTtcbiAgICAgIGlmICghaSkge1xuICAgICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgICBpbmRleC5zZXQoa2V5LCBpID0gZG9tYWluLnB1c2goZCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICAgIH1cblxuICAgIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgICAgZG9tYWluID0gW10sIGluZGV4ID0gZDNDb2xsZWN0aW9uLm1hcCgpO1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IF8ubGVuZ3RoLCBkLCBrZXk7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFpbmRleC5oYXMoa2V5ID0gKGQgPSBfW2ldKSArIFwiXCIpKSBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaChkKSk7XG4gICAgICByZXR1cm4gc2NhbGU7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gICAgfTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBvcmRpbmFsKClcbiAgICAgICAgICAuZG9tYWluKGRvbWFpbilcbiAgICAgICAgICAucmFuZ2UocmFuZ2UpXG4gICAgICAgICAgLnVua25vd24odW5rbm93bik7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhbmQoKSB7XG4gICAgdmFyIHNjYWxlID0gb3JkaW5hbCgpLnVua25vd24odW5kZWZpbmVkKSxcbiAgICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluLFxuICAgICAgICBvcmRpbmFsUmFuZ2UgPSBzY2FsZS5yYW5nZSxcbiAgICAgICAgcmFuZ2UgPSBbMCwgMV0sXG4gICAgICAgIHN0ZXAsXG4gICAgICAgIGJhbmR3aWR0aCxcbiAgICAgICAgcm91bmQgPSBmYWxzZSxcbiAgICAgICAgcGFkZGluZ0lubmVyID0gMCxcbiAgICAgICAgcGFkZGluZ091dGVyID0gMCxcbiAgICAgICAgYWxpZ24gPSAwLjU7XG5cbiAgICBkZWxldGUgc2NhbGUudW5rbm93bjtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgbiA9IGRvbWFpbigpLmxlbmd0aCxcbiAgICAgICAgICByZXZlcnNlID0gcmFuZ2VbMV0gPCByYW5nZVswXSxcbiAgICAgICAgICBzdGFydCA9IHJhbmdlW3JldmVyc2UgLSAwXSxcbiAgICAgICAgICBzdG9wID0gcmFuZ2VbMSAtIHJldmVyc2VdO1xuICAgICAgc3RlcCA9IChzdG9wIC0gc3RhcnQpIC8gTWF0aC5tYXgoMSwgbiAtIHBhZGRpbmdJbm5lciArIHBhZGRpbmdPdXRlciAqIDIpO1xuICAgICAgaWYgKHJvdW5kKSBzdGVwID0gTWF0aC5mbG9vcihzdGVwKTtcbiAgICAgIHN0YXJ0ICs9IChzdG9wIC0gc3RhcnQgLSBzdGVwICogKG4gLSBwYWRkaW5nSW5uZXIpKSAqIGFsaWduO1xuICAgICAgYmFuZHdpZHRoID0gc3RlcCAqICgxIC0gcGFkZGluZ0lubmVyKTtcbiAgICAgIGlmIChyb3VuZCkgc3RhcnQgPSBNYXRoLnJvdW5kKHN0YXJ0KSwgYmFuZHdpZHRoID0gTWF0aC5yb3VuZChiYW5kd2lkdGgpO1xuICAgICAgdmFyIHZhbHVlcyA9IGQzQXJyYXkucmFuZ2UobikubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHN0YXJ0ICsgc3RlcCAqIGk7IH0pO1xuICAgICAgcmV0dXJuIG9yZGluYWxSYW5nZShyZXZlcnNlID8gdmFsdWVzLnJldmVyc2UoKSA6IHZhbHVlcyk7XG4gICAgfVxuXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluKF8pLCByZXNjYWxlKCkpIDogZG9tYWluKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gcmFuZ2UgPSBbK19bMF0sICtfWzFdXSwgcm91bmQgPSB0cnVlLCByZXNjYWxlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLmJhbmR3aWR0aCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGJhbmR3aWR0aDtcbiAgICB9O1xuXG4gICAgc2NhbGUuc3RlcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXA7XG4gICAgfTtcblxuICAgIHNjYWxlLnJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm91bmQgPSAhIV8sIHJlc2NhbGUoKSkgOiByb3VuZDtcbiAgICB9O1xuXG4gICAgc2NhbGUucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHBhZGRpbmdJbm5lciA9IHBhZGRpbmdPdXRlciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIF8pKSwgcmVzY2FsZSgpKSA6IHBhZGRpbmdJbm5lcjtcbiAgICB9O1xuXG4gICAgc2NhbGUucGFkZGluZ0lubmVyID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZ0lubmVyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgXykpLCByZXNjYWxlKCkpIDogcGFkZGluZ0lubmVyO1xuICAgIH07XG5cbiAgICBzY2FsZS5wYWRkaW5nT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nT3V0ZXIgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBwYWRkaW5nT3V0ZXI7XG4gICAgfTtcblxuICAgIHNjYWxlLmFsaWduID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxpZ24gPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBfKSksIHJlc2NhbGUoKSkgOiBhbGlnbjtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGJhbmQoKVxuICAgICAgICAgIC5kb21haW4oZG9tYWluKCkpXG4gICAgICAgICAgLnJhbmdlKHJhbmdlKVxuICAgICAgICAgIC5yb3VuZChyb3VuZClcbiAgICAgICAgICAucGFkZGluZ0lubmVyKHBhZGRpbmdJbm5lcilcbiAgICAgICAgICAucGFkZGluZ091dGVyKHBhZGRpbmdPdXRlcilcbiAgICAgICAgICAuYWxpZ24oYWxpZ24pO1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcG9pbnRpc2goc2NhbGUpIHtcbiAgICB2YXIgY29weSA9IHNjYWxlLmNvcHk7XG5cbiAgICBzY2FsZS5wYWRkaW5nID0gc2NhbGUucGFkZGluZ091dGVyO1xuICAgIGRlbGV0ZSBzY2FsZS5wYWRkaW5nSW5uZXI7XG4gICAgZGVsZXRlIHNjYWxlLnBhZGRpbmdPdXRlcjtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBwb2ludGlzaChjb3B5KCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBwb2ludCgpIHtcbiAgICByZXR1cm4gcG9pbnRpc2goYmFuZCgpLnBhZGRpbmdJbm5lcigxKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdGFudCh4KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgcmV0dXJuICt4O1xuICB9XG5cbiAgdmFyIHVuaXQgPSBbMCwgMV07XG5cbiAgZnVuY3Rpb24gZGVpbnRlcnBvbGF0ZShhLCBiKSB7XG4gICAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICAgIDogY29uc3RhbnQoYik7XG4gIH1cblxuICBmdW5jdGlvbiBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgICB2YXIgZCA9IGRlaW50ZXJwb2xhdGUoYSA9ICthLCBiID0gK2IpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPD0gYSA/IDAgOiB4ID49IGIgPyAxIDogZCh4KTsgfTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVpbnRlcnBvbGF0ZUNsYW1wKHJlaW50ZXJwb2xhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgICAgdmFyIHIgPSByZWludGVycG9sYXRlKGEgPSArYSwgYiA9ICtiKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiB0IDw9IDAgPyBhIDogdCA+PSAxID8gYiA6IHIodCk7IH07XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICAgIGlmIChkMSA8IGQwKSBkMCA9IGRlaW50ZXJwb2xhdGUoZDEsIGQwKSwgcjAgPSByZWludGVycG9sYXRlKHIxLCByMCk7XG4gICAgZWxzZSBkMCA9IGRlaW50ZXJwb2xhdGUoZDAsIGQxKSwgcjAgPSByZWludGVycG9sYXRlKHIwLCByMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICAgIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICAgIHIgPSBuZXcgQXJyYXkoaiksXG4gICAgICAgIGkgPSAtMTtcblxuICAgIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICAgIGlmIChkb21haW5bal0gPCBkb21haW5bMF0pIHtcbiAgICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKCsraSA8IGopIHtcbiAgICAgIGRbaV0gPSBkZWludGVycG9sYXRlKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgICByW2ldID0gcmVpbnRlcnBvbGF0ZShyYW5nZVtpXSwgcmFuZ2VbaSArIDFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgICAgdmFyIGkgPSBkM0FycmF5LmJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb3B5KHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldFxuICAgICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgICAgLnJhbmdlKHNvdXJjZS5yYW5nZSgpKVxuICAgICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSk7XG4gIH1cblxuICAvLyBkZWludGVycG9sYXRlKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4gIC8vIHJlaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBkb21haW4gdmFsdWUgeCBpbiBbYSxiXS5cbiAgZnVuY3Rpb24gY29udGludW91cyhkZWludGVycG9sYXRlJCQsIHJlaW50ZXJwb2xhdGUpIHtcbiAgICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgICBpbnRlcnBvbGF0ZSA9IGQzSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGUsXG4gICAgICAgIGNsYW1wID0gZmFsc2UsXG4gICAgICAgIHBpZWNld2lzZSxcbiAgICAgICAgb3V0cHV0LFxuICAgICAgICBpbnB1dDtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgICByZXR1cm4gKG91dHB1dCB8fCAob3V0cHV0ID0gcGllY2V3aXNlKGRvbWFpbiwgcmFuZ2UsIGNsYW1wID8gZGVpbnRlcnBvbGF0ZUNsYW1wKGRlaW50ZXJwb2xhdGUkJCkgOiBkZWludGVycG9sYXRlJCQsIGludGVycG9sYXRlKSkpKCt4KTtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLCBkZWludGVycG9sYXRlLCBjbGFtcCA/IHJlaW50ZXJwb2xhdGVDbGFtcChyZWludGVycG9sYXRlKSA6IHJlaW50ZXJwb2xhdGUpKSkoK3kpO1xuICAgIH07XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBtYXAkMS5jYWxsKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IHNsaWNlLmNhbGwoXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIHJhbmdlID0gc2xpY2UuY2FsbChfKSwgaW50ZXJwb2xhdGUgPSBkM0ludGVycG9sYXRlLmludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9ICEhXywgcmVzY2FsZSgpKSA6IGNsYW1wO1xuICAgIH07XG5cbiAgICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzY2FsZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0Zvcm1hdChkb21haW4sIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgc3RhcnQgPSBkb21haW5bMF0sXG4gICAgICAgIHN0b3AgPSBkb21haW5bZG9tYWluLmxlbmd0aCAtIDFdLFxuICAgICAgICBzdGVwID0gZDNBcnJheS50aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQpLFxuICAgICAgICBwcmVjaXNpb247XG4gICAgc3BlY2lmaWVyID0gZDNGb3JtYXQuZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgICBzd2l0Y2ggKHNwZWNpZmllci50eXBlKSB7XG4gICAgICBjYXNlIFwic1wiOiB7XG4gICAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgICBpZiAoc3BlY2lmaWVyLnByZWNpc2lvbiA9PSBudWxsICYmICFpc05hTihwcmVjaXNpb24gPSBkM0Zvcm1hdC5wcmVjaXNpb25QcmVmaXgoc3RlcCwgdmFsdWUpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbjtcbiAgICAgICAgcmV0dXJuIGQzRm9ybWF0LmZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJcIjpcbiAgICAgIGNhc2UgXCJlXCI6XG4gICAgICBjYXNlIFwiZ1wiOlxuICAgICAgY2FzZSBcInBcIjpcbiAgICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gZDNGb3JtYXQucHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJmXCI6XG4gICAgICBjYXNlIFwiJVwiOiB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IGQzRm9ybWF0LnByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkM0Zvcm1hdC5mb3JtYXQoc3BlY2lmaWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICAgIHZhciBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgICAgcmV0dXJuIGQzQXJyYXkudGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgICByZXR1cm4gdGlja0Zvcm1hdChkb21haW4oKSwgY291bnQsIHNwZWNpZmllcik7XG4gICAgfTtcblxuICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihjb3VudCkge1xuICAgICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgICBpID0gZC5sZW5ndGggLSAxLFxuICAgICAgICAgIG4gPSBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCxcbiAgICAgICAgICBzdGFydCA9IGRbMF0sXG4gICAgICAgICAgc3RvcCA9IGRbaV0sXG4gICAgICAgICAgc3RlcCA9IGQzQXJyYXkudGlja1N0ZXAoc3RhcnQsIHN0b3AsIG4pO1xuXG4gICAgICBpZiAoc3RlcCkge1xuICAgICAgICBzdGVwID0gZDNBcnJheS50aWNrU3RlcChNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwLCBNYXRoLmNlaWwoc3RvcCAvIHN0ZXApICogc3RlcCwgbik7XG4gICAgICAgIGRbMF0gPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBkW2ldID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICAgIGRvbWFpbihkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH07XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gICAgdmFyIHNjYWxlID0gY29udGludW91cyhkZWludGVycG9sYXRlLCBkM0ludGVycG9sYXRlLmludGVycG9sYXRlTnVtYmVyKTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaWRlbnRpdHkoKSB7XG4gICAgdmFyIGRvbWFpbiA9IFswLCAxXTtcblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIHJldHVybiAreDtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnQgPSBzY2FsZTtcblxuICAgIHNjYWxlLmRvbWFpbiA9IHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gbWFwJDEuY2FsbChfLCBudW1iZXIpLCBzY2FsZSkgOiBkb21haW4uc2xpY2UoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlkZW50aXR5KCkuZG9tYWluKGRvbWFpbik7XG4gICAgfTtcblxuICAgIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmljZShkb21haW4sIGludGVydmFsKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgICB2YXIgaTAgPSAwLFxuICAgICAgICBpMSA9IGRvbWFpbi5sZW5ndGggLSAxLFxuICAgICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgICAgdDtcblxuICAgIGlmICh4MSA8IHgwKSB7XG4gICAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICAgIHQgPSB4MCwgeDAgPSB4MSwgeDEgPSB0O1xuICAgIH1cblxuICAgIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gICAgZG9tYWluW2kxXSA9IGludGVydmFsLmNlaWwoeDEpO1xuICAgIHJldHVybiBkb21haW47XG4gIH1cblxuICBmdW5jdGlvbiBkZWludGVycG9sYXRlJDEoYSwgYikge1xuICAgIHJldHVybiAoYiA9IE1hdGgubG9nKGIgLyBhKSlcbiAgICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLmxvZyh4IC8gYSkgLyBiOyB9XG4gICAgICAgIDogY29uc3RhbnQoYik7XG4gIH1cblxuICBmdW5jdGlvbiByZWludGVycG9sYXRlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA8IDBcbiAgICAgICAgPyBmdW5jdGlvbih0KSB7IHJldHVybiAtTWF0aC5wb3coLWIsIHQpICogTWF0aC5wb3coLWEsIDEgLSB0KTsgfVxuICAgICAgICA6IGZ1bmN0aW9uKHQpIHsgcmV0dXJuIE1hdGgucG93KGIsIHQpICogTWF0aC5wb3coYSwgMSAtIHQpOyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcG93MTAoeCkge1xuICAgIHJldHVybiBpc0Zpbml0ZSh4KSA/ICsoXCIxZVwiICsgeCkgOiB4IDwgMCA/IDAgOiB4O1xuICB9XG5cbiAgZnVuY3Rpb24gcG93cChiYXNlKSB7XG4gICAgcmV0dXJuIGJhc2UgPT09IDEwID8gcG93MTBcbiAgICAgICAgOiBiYXNlID09PSBNYXRoLkUgPyBNYXRoLmV4cFxuICAgICAgICA6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucG93KGJhc2UsIHgpOyB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9ncChiYXNlKSB7XG4gICAgcmV0dXJuIGJhc2UgPT09IE1hdGguRSA/IE1hdGgubG9nXG4gICAgICAgIDogYmFzZSA9PT0gMTAgJiYgTWF0aC5sb2cxMFxuICAgICAgICB8fCBiYXNlID09PSAyICYmIE1hdGgubG9nMlxuICAgICAgICB8fCAoYmFzZSA9IE1hdGgubG9nKGJhc2UpLCBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLmxvZyh4KSAvIGJhc2U7IH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVmbGVjdChmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICAgIHJldHVybiAtZigteCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZygpIHtcbiAgICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUkMSwgcmVpbnRlcnBvbGF0ZSkuZG9tYWluKFsxLCAxMF0pLFxuICAgICAgICBkb21haW4gPSBzY2FsZS5kb21haW4sXG4gICAgICAgIGJhc2UgPSAxMCxcbiAgICAgICAgbG9ncyA9IGxvZ3AoMTApLFxuICAgICAgICBwb3dzID0gcG93cCgxMCk7XG5cbiAgICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgICAgbG9ncyA9IGxvZ3AoYmFzZSksIHBvd3MgPSBwb3dwKGJhc2UpO1xuICAgICAgaWYgKGRvbWFpbigpWzBdIDwgMCkgbG9ncyA9IHJlZmxlY3QobG9ncyksIHBvd3MgPSByZWZsZWN0KHBvd3MpO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIHNjYWxlLmJhc2UgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChiYXNlID0gK18sIHJlc2NhbGUoKSkgOiBiYXNlO1xuICAgIH07XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4oXyksIHJlc2NhbGUoKSkgOiBkb21haW4oKTtcbiAgICB9O1xuXG4gICAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihjb3VudCkge1xuICAgICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgICB1ID0gZFswXSxcbiAgICAgICAgICB2ID0gZFtkLmxlbmd0aCAtIDFdLFxuICAgICAgICAgIHI7XG5cbiAgICAgIGlmIChyID0gdiA8IHUpIGkgPSB1LCB1ID0gdiwgdiA9IGk7XG5cbiAgICAgIHZhciBpID0gbG9ncyh1KSxcbiAgICAgICAgICBqID0gbG9ncyh2KSxcbiAgICAgICAgICBwLFxuICAgICAgICAgIGssXG4gICAgICAgICAgdCxcbiAgICAgICAgICBuID0gY291bnQgPT0gbnVsbCA/IDEwIDogK2NvdW50LFxuICAgICAgICAgIHogPSBbXTtcblxuICAgICAgaWYgKCEoYmFzZSAlIDEpICYmIGogLSBpIDwgbikge1xuICAgICAgICBpID0gTWF0aC5yb3VuZChpKSAtIDEsIGogPSBNYXRoLnJvdW5kKGopICsgMTtcbiAgICAgICAgaWYgKHUgPiAwKSBmb3IgKDsgaSA8IGo7ICsraSkge1xuICAgICAgICAgIGZvciAoayA9IDEsIHAgPSBwb3dzKGkpOyBrIDwgYmFzZTsgKytrKSB7XG4gICAgICAgICAgICB0ID0gcCAqIGs7XG4gICAgICAgICAgICBpZiAodCA8IHUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHQgPiB2KSBicmVhaztcbiAgICAgICAgICAgIHoucHVzaCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBmb3IgKDsgaSA8IGo7ICsraSkge1xuICAgICAgICAgIGZvciAoayA9IGJhc2UgLSAxLCBwID0gcG93cyhpKTsgayA+PSAxOyAtLWspIHtcbiAgICAgICAgICAgIHQgPSBwICogaztcbiAgICAgICAgICAgIGlmICh0IDwgdSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAodCA+IHYpIGJyZWFrO1xuICAgICAgICAgICAgei5wdXNoKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeiA9IGQzQXJyYXkudGlja3MoaSwgaiwgTWF0aC5taW4oaiAtIGksIG4pKS5tYXAocG93cyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByID8gei5yZXZlcnNlKCkgOiB6O1xuICAgIH07XG5cbiAgICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgICAgaWYgKHNwZWNpZmllciA9PSBudWxsKSBzcGVjaWZpZXIgPSBiYXNlID09PSAxMCA/IFwiLjBlXCIgOiBcIixcIjtcbiAgICAgIGlmICh0eXBlb2Ygc3BlY2lmaWVyICE9PSBcImZ1bmN0aW9uXCIpIHNwZWNpZmllciA9IGQzRm9ybWF0LmZvcm1hdChzcGVjaWZpZXIpO1xuICAgICAgaWYgKGNvdW50ID09PSBJbmZpbml0eSkgcmV0dXJuIHNwZWNpZmllcjtcbiAgICAgIGlmIChjb3VudCA9PSBudWxsKSBjb3VudCA9IDEwO1xuICAgICAgdmFyIGsgPSBNYXRoLm1heCgxLCBiYXNlICogY291bnQgLyBzY2FsZS50aWNrcygpLmxlbmd0aCk7IC8vIFRPRE8gZmFzdCBlc3RpbWF0ZT9cbiAgICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBpID0gZCAvIHBvd3MoTWF0aC5yb3VuZChsb2dzKGQpKSk7XG4gICAgICAgIGlmIChpICogYmFzZSA8IGJhc2UgLSAwLjUpIGkgKj0gYmFzZTtcbiAgICAgICAgcmV0dXJuIGkgPD0gayA/IHNwZWNpZmllcihkKSA6IFwiXCI7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZG9tYWluKG5pY2UoZG9tYWluKCksIHtcbiAgICAgICAgZmxvb3I6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5mbG9vcihsb2dzKHgpKSk7IH0sXG4gICAgICAgIGNlaWw6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHBvd3MoTWF0aC5jZWlsKGxvZ3MoeCkpKTsgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29weShzY2FsZSwgbG9nKCkuYmFzZShiYXNlKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhaXNlKHgsIGV4cG9uZW50KSB7XG4gICAgcmV0dXJuIHggPCAwID8gLU1hdGgucG93KC14LCBleHBvbmVudCkgOiBNYXRoLnBvdyh4LCBleHBvbmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBwb3coKSB7XG4gICAgdmFyIGV4cG9uZW50ID0gMSxcbiAgICAgICAgc2NhbGUgPSBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpLFxuICAgICAgICBkb21haW4gPSBzY2FsZS5kb21haW47XG5cbiAgICBmdW5jdGlvbiBkZWludGVycG9sYXRlKGEsIGIpIHtcbiAgICAgIHJldHVybiAoYiA9IHJhaXNlKGIsIGV4cG9uZW50KSAtIChhID0gcmFpc2UoYSwgZXhwb25lbnQpKSlcbiAgICAgICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIChyYWlzZSh4LCBleHBvbmVudCkgLSBhKSAvIGI7IH1cbiAgICAgICAgICA6IGNvbnN0YW50KGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlaW50ZXJwb2xhdGUoYSwgYikge1xuICAgICAgYiA9IHJhaXNlKGIsIGV4cG9uZW50KSAtIChhID0gcmFpc2UoYSwgZXhwb25lbnQpKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7IHJldHVybiByYWlzZShhICsgYiAqIHQsIDEgLyBleHBvbmVudCk7IH07XG4gICAgfVxuXG4gICAgc2NhbGUuZXhwb25lbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChleHBvbmVudCA9ICtfLCBkb21haW4oZG9tYWluKCkpKSA6IGV4cG9uZW50O1xuICAgIH07XG5cbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gY29weShzY2FsZSwgcG93KCkuZXhwb25lbnQoZXhwb25lbnQpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzcXJ0KCkge1xuICAgIHJldHVybiBwb3coKS5leHBvbmVudCgwLjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpbGUkMSgpIHtcbiAgICB2YXIgZG9tYWluID0gW10sXG4gICAgICAgIHJhbmdlID0gW10sXG4gICAgICAgIHRocmVzaG9sZHMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgaSA9IDAsIG4gPSBNYXRoLm1heCgxLCByYW5nZS5sZW5ndGgpO1xuICAgICAgdGhyZXNob2xkcyA9IG5ldyBBcnJheShuIC0gMSk7XG4gICAgICB3aGlsZSAoKytpIDwgbikgdGhyZXNob2xkc1tpIC0gMV0gPSBkM0FycmF5LnF1YW50aWxlKGRvbWFpbiwgaSAvIG4pO1xuICAgICAgcmV0dXJuIHNjYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIGlmICghaXNOYU4oeCA9ICt4KSkgcmV0dXJuIHJhbmdlW2QzQXJyYXkuYmlzZWN0KHRocmVzaG9sZHMsIHgpXTtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dIDogW1xuICAgICAgICBpID4gMCA/IHRocmVzaG9sZHNbaSAtIDFdIDogZG9tYWluWzBdLFxuICAgICAgICBpIDwgdGhyZXNob2xkcy5sZW5ndGggPyB0aHJlc2hvbGRzW2ldIDogZG9tYWluW2RvbWFpbi5sZW5ndGggLSAxXVxuICAgICAgXTtcbiAgICB9O1xuXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgICBkb21haW4gPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gXy5sZW5ndGgsIGQ7IGkgPCBuOyArK2kpIGlmIChkID0gX1tpXSwgZCAhPSBudWxsICYmICFpc05hTihkID0gK2QpKSBkb21haW4ucHVzaChkKTtcbiAgICAgIGRvbWFpbi5zb3J0KGQzQXJyYXkuYXNjZW5kaW5nKTtcbiAgICAgIHJldHVybiByZXNjYWxlKCk7XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBzbGljZS5jYWxsKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgICB9O1xuXG4gICAgc2NhbGUucXVhbnRpbGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhyZXNob2xkcy5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcXVhbnRpbGUkMSgpXG4gICAgICAgICAgLmRvbWFpbihkb21haW4pXG4gICAgICAgICAgLnJhbmdlKHJhbmdlKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhbnRpemUoKSB7XG4gICAgdmFyIHgwID0gMCxcbiAgICAgICAgeDEgPSAxLFxuICAgICAgICBuID0gMSxcbiAgICAgICAgZG9tYWluID0gWzAuNV0sXG4gICAgICAgIHJhbmdlID0gWzAsIDFdO1xuXG4gICAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgICAgaWYgKHggPD0geCkgcmV0dXJuIHJhbmdlW2QzQXJyYXkuYmlzZWN0KGRvbWFpbiwgeCwgMCwgbildO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgICB2YXIgaSA9IC0xO1xuICAgICAgZG9tYWluID0gbmV3IEFycmF5KG4pO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGRvbWFpbltpXSA9ICgoaSArIDEpICogeDEgLSAoaSAtIG4pICogeDApIC8gKG4gKyAxKTtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9ICtfWzBdLCB4MSA9ICtfWzFdLCByZXNjYWxlKCkpIDogW3gwLCB4MV07XG4gICAgfTtcblxuICAgIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAobiA9IChyYW5nZSA9IHNsaWNlLmNhbGwoXykpLmxlbmd0aCAtIDEsIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgICByZXR1cm4gaSA8IDAgPyBbTmFOLCBOYU5dXG4gICAgICAgICAgOiBpIDwgMSA/IFt4MCwgZG9tYWluWzBdXVxuICAgICAgICAgIDogaSA+PSBuID8gW2RvbWFpbltuIC0gMV0sIHgxXVxuICAgICAgICAgIDogW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gICAgfTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBxdWFudGl6ZSgpXG4gICAgICAgICAgLmRvbWFpbihbeDAsIHgxXSlcbiAgICAgICAgICAucmFuZ2UocmFuZ2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gbGluZWFyaXNoKHNjYWxlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocmVzaG9sZCgpIHtcbiAgICB2YXIgZG9tYWluID0gWzAuNV0sXG4gICAgICAgIHJhbmdlID0gWzAsIDFdLFxuICAgICAgICBuID0gMTtcblxuICAgIGZ1bmN0aW9uIHNjYWxlKHgpIHtcbiAgICAgIGlmICh4IDw9IHgpIHJldHVybiByYW5nZVtkM0FycmF5LmJpc2VjdChkb21haW4sIHgsIDAsIG4pXTtcbiAgICB9XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBzbGljZS5jYWxsKF8pLCBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoIC0gMSksIHNjYWxlKSA6IGRvbWFpbi5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgbiA9IE1hdGgubWluKGRvbWFpbi5sZW5ndGgsIHJhbmdlLmxlbmd0aCAtIDEpLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICAgIH07XG5cbiAgICBzY2FsZS5pbnZlcnRFeHRlbnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICB2YXIgaSA9IHJhbmdlLmluZGV4T2YoeSk7XG4gICAgICByZXR1cm4gW2RvbWFpbltpIC0gMV0sIGRvbWFpbltpXV07XG4gICAgfTtcblxuICAgIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aHJlc2hvbGQoKVxuICAgICAgICAgIC5kb21haW4oZG9tYWluKVxuICAgICAgICAgIC5yYW5nZShyYW5nZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIHZhciBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG4gIHZhciBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG4gIHZhciBkdXJhdGlvbkhvdXIgPSBkdXJhdGlvbk1pbnV0ZSAqIDYwO1xuICB2YXIgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbiAgdmFyIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbiAgdmFyIGR1cmF0aW9uTW9udGggPSBkdXJhdGlvbkRheSAqIDMwO1xuICB2YXIgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG4gIGZ1bmN0aW9uIGRhdGUodCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG51bWJlciQxKHQpIHtcbiAgICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG4gIH1cblxuICBmdW5jdGlvbiBjYWxlbmRhcih5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsIGZvcm1hdCkge1xuICAgIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoZGVpbnRlcnBvbGF0ZSwgZDNJbnRlcnBvbGF0ZS5pbnRlcnBvbGF0ZU51bWJlciksXG4gICAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gICAgdmFyIGZvcm1hdE1pbGxpc2Vjb25kID0gZm9ybWF0KFwiLiVMXCIpLFxuICAgICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgICBmb3JtYXRIb3VyID0gZm9ybWF0KFwiJUkgJXBcIiksXG4gICAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICAgIGZvcm1hdE1vbnRoID0gZm9ybWF0KFwiJUJcIiksXG4gICAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICAgIHZhciB0aWNrSW50ZXJ2YWxzID0gW1xuICAgICAgW3NlY29uZCwgIDEsICAgICAgZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW3NlY29uZCwgMTUsIDE1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW3NlY29uZCwgMzAsIDMwICogZHVyYXRpb25TZWNvbmRdLFxuICAgICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgICAgW21pbnV0ZSwgIDUsICA1ICogZHVyYXRpb25NaW51dGVdLFxuICAgICAgW21pbnV0ZSwgMTUsIDE1ICogZHVyYXRpb25NaW51dGVdLFxuICAgICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgICAgWyAgaG91ciwgIDEsICAgICAgZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgaG91ciwgIDMsICAzICogZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgaG91ciwgMTIsIDEyICogZHVyYXRpb25Ib3VyICBdLFxuICAgICAgWyAgIGRheSwgIDEsICAgICAgZHVyYXRpb25EYXkgICBdLFxuICAgICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgICAgWyAgd2VlaywgIDEsICAgICAgZHVyYXRpb25XZWVrICBdLFxuICAgICAgWyBtb250aCwgIDEsICAgICAgZHVyYXRpb25Nb250aCBdLFxuICAgICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgICAgWyAgeWVhciwgIDEsICAgICAgZHVyYXRpb25ZZWFyICBdXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgICAgcmV0dXJuIChzZWNvbmQoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWlsbGlzZWNvbmRcbiAgICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgICAgOiBkYXkoZGF0ZSkgPCBkYXRlID8gZm9ybWF0SG91clxuICAgICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgICA6IGZvcm1hdFllYXIpKGRhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICAgIGlmIChpbnRlcnZhbCA9PSBudWxsKSBpbnRlcnZhbCA9IDEwO1xuXG4gICAgICAvLyBJZiBhIGRlc2lyZWQgdGljayBjb3VudCBpcyBzcGVjaWZpZWQsIHBpY2sgYSByZWFzb25hYmxlIHRpY2sgaW50ZXJ2YWxcbiAgICAgIC8vIGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgdGhlIGRvbWFpbiBhbmQgYSByb3VnaCBlc3RpbWF0ZSBvZiB0aWNrIHNpemUuXG4gICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSBpbnRlcnZhbCBpcyBhbHJlYWR5IGEgdGltZSBpbnRlcnZhbCBhbmQgdXNlIGl0LlxuICAgICAgaWYgKHR5cGVvZiBpbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGludGVydmFsLFxuICAgICAgICAgICAgaSA9IGQzQXJyYXkuYmlzZWN0b3IoZnVuY3Rpb24oaSkgeyByZXR1cm4gaVsyXTsgfSkucmlnaHQodGlja0ludGVydmFscywgdGFyZ2V0KTtcbiAgICAgICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSB7XG4gICAgICAgICAgc3RlcCA9IGQzQXJyYXkudGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGludGVydmFsKTtcbiAgICAgICAgICBpbnRlcnZhbCA9IHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoaSkge1xuICAgICAgICAgIGkgPSB0aWNrSW50ZXJ2YWxzW3RhcmdldCAvIHRpY2tJbnRlcnZhbHNbaSAtIDFdWzJdIDwgdGlja0ludGVydmFsc1tpXVsyXSAvIHRhcmdldCA/IGkgLSAxIDogaV07XG4gICAgICAgICAgc3RlcCA9IGlbMV07XG4gICAgICAgICAgaW50ZXJ2YWwgPSBpWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ZXAgPSBkM0FycmF5LnRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBpbnRlcnZhbCk7XG4gICAgICAgICAgaW50ZXJ2YWwgPSBtaWxsaXNlY29uZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RlcCA9PSBudWxsID8gaW50ZXJ2YWwgOiBpbnRlcnZhbC5ldmVyeShzdGVwKTtcbiAgICB9XG5cbiAgICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoaW52ZXJ0KHkpKTtcbiAgICB9O1xuXG4gICAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBkb21haW4obWFwJDEuY2FsbChfLCBudW1iZXIkMSkpIDogZG9tYWluKCkubWFwKGRhdGUpO1xuICAgIH07XG5cbiAgICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICAgIHQwID0gZFswXSxcbiAgICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgICByID0gdDEgPCB0MCxcbiAgICAgICAgICB0O1xuICAgICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgICAgdCA9IHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgdDAsIHQxLCBzdGVwKTtcbiAgICAgIHQgPSB0ID8gdC5yYW5nZSh0MCwgdDEgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gICAgfTtcblxuICAgIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gICAgfTtcblxuICAgIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCwgc3RlcCkge1xuICAgICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICAgIHJldHVybiAoaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgc3RlcCkpXG4gICAgICAgICAgPyBkb21haW4obmljZShkLCBpbnRlcnZhbCkpXG4gICAgICAgICAgOiBzY2FsZTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gICAgfTtcblxuICAgIHJldHVybiBzY2FsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWUoKSB7XG4gICAgcmV0dXJuIGNhbGVuZGFyKGQzVGltZS50aW1lWWVhciwgZDNUaW1lLnRpbWVNb250aCwgZDNUaW1lLnRpbWVXZWVrLCBkM1RpbWUudGltZURheSwgZDNUaW1lLnRpbWVIb3VyLCBkM1RpbWUudGltZU1pbnV0ZSwgZDNUaW1lLnRpbWVTZWNvbmQsIGQzVGltZS50aW1lTWlsbGlzZWNvbmQsIGQzVGltZUZvcm1hdC50aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXRjVGltZSgpIHtcbiAgICByZXR1cm4gY2FsZW5kYXIoZDNUaW1lLnV0Y1llYXIsIGQzVGltZS51dGNNb250aCwgZDNUaW1lLnV0Y1dlZWssIGQzVGltZS51dGNEYXksIGQzVGltZS51dGNIb3VyLCBkM1RpbWUudXRjTWludXRlLCBkM1RpbWUudXRjU2Vjb25kLCBkM1RpbWUudXRjTWlsbGlzZWNvbmQsIGQzVGltZUZvcm1hdC51dGNGb3JtYXQpLmRvbWFpbihbRGF0ZS5VVEMoMjAwMCwgMCwgMSksIERhdGUuVVRDKDIwMDAsIDAsIDIpXSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb2xvcnMocykge1xuICAgIHJldHVybiBzLm1hdGNoKC8uezZ9L2cpLm1hcChmdW5jdGlvbih4KSB7XG4gICAgICByZXR1cm4gXCIjXCIgKyB4O1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGNhdGVnb3J5MTAgPSBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG5cbiAgdmFyIGNhdGVnb3J5MjBiID0gY29sb3JzKFwiMzkzYjc5NTI1NGEzNmI2ZWNmOWM5ZWRlNjM3OTM5OGNhMjUyYjVjZjZiY2VkYjljOGM2ZDMxYmQ5ZTM5ZTdiYTUyZTdjYjk0ODQzYzM5YWQ0OTRhZDY2MTZiZTc5NjljN2I0MTczYTU1MTk0Y2U2ZGJkZGU5ZWQ2XCIpO1xuXG4gIHZhciBjYXRlZ29yeTIwYyA9IGNvbG9ycyhcIjMxODJiZDZiYWVkNjllY2FlMWM2ZGJlZmU2NTUwZGZkOGQzY2ZkYWU2YmZkZDBhMjMxYTM1NDc0YzQ3NmExZDk5YmM3ZTljMDc1NmJiMTllOWFjOGJjYmRkY2RhZGFlYjYzNjM2Mzk2OTY5NmJkYmRiZGQ5ZDlkOVwiKTtcblxuICB2YXIgY2F0ZWdvcnkyMCA9IGNvbG9ycyhcIjFmNzdiNGFlYzdlOGZmN2YwZWZmYmI3ODJjYTAyYzk4ZGY4YWQ2MjcyOGZmOTg5Njk0NjdiZGM1YjBkNThjNTY0YmM0OWM5NGUzNzdjMmY3YjZkMjdmN2Y3ZmM3YzdjN2JjYmQyMmRiZGI4ZDE3YmVjZjllZGFlNVwiKTtcblxuICB2YXIgY3ViZWhlbGl4JDEgPSBkM0ludGVycG9sYXRlLmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhkM0NvbG9yLmN1YmVoZWxpeCgzMDAsIDAuNSwgMC4wKSwgZDNDb2xvci5jdWJlaGVsaXgoLTI0MCwgMC41LCAxLjApKTtcblxuICB2YXIgd2FybSA9IGQzSW50ZXJwb2xhdGUuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nKGQzQ29sb3IuY3ViZWhlbGl4KC0xMDAsIDAuNzUsIDAuMzUpLCBkM0NvbG9yLmN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbiAgdmFyIGNvb2wgPSBkM0ludGVycG9sYXRlLmludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhkM0NvbG9yLmN1YmVoZWxpeCgyNjAsIDAuNzUsIDAuMzUpLCBkM0NvbG9yLmN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbiAgdmFyIHJhaW5ib3cgPSBkM0NvbG9yLmN1YmVoZWxpeCgpO1xuXG4gIGZ1bmN0aW9uIHJhaW5ib3ckMSh0KSB7XG4gICAgaWYgKHQgPCAwIHx8IHQgPiAxKSB0IC09IE1hdGguZmxvb3IodCk7XG4gICAgdmFyIHRzID0gTWF0aC5hYnModCAtIDAuNSk7XG4gICAgcmFpbmJvdy5oID0gMzYwICogdCAtIDEwMDtcbiAgICByYWluYm93LnMgPSAxLjUgLSAxLjUgKiB0cztcbiAgICByYWluYm93LmwgPSAwLjggLSAwLjkgKiB0cztcbiAgICByZXR1cm4gcmFpbmJvdyArIFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiByYW1wKHJhbmdlKSB7XG4gICAgdmFyIG4gPSByYW5nZS5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiByYW5nZVtNYXRoLm1heCgwLCBNYXRoLm1pbihuIC0gMSwgTWF0aC5mbG9vcih0ICogbikpKV07XG4gICAgfTtcbiAgfVxuXG4gIHZhciB2aXJpZGlzID0gcmFtcChjb2xvcnMoXCI0NDAxNTQ0NDAyNTY0NTA0NTc0NTA1NTk0NjA3NWE0NjA4NWM0NjBhNWQ0NjBiNWU0NzBkNjA0NzBlNjE0NzEwNjM0NzExNjQ0NzEzNjU0ODE0Njc0ODE2Njg0ODE3Njk0ODE4NmE0ODFhNmM0ODFiNmQ0ODFjNmU0ODFkNmY0ODFmNzA0ODIwNzE0ODIxNzM0ODIzNzQ0ODI0NzU0ODI1NzY0ODI2Nzc0ODI4Nzg0ODI5Nzk0NzJhN2E0NzJjN2E0NzJkN2I0NzJlN2M0NzJmN2Q0NjMwN2U0NjMyN2U0NjMzN2Y0NjM0ODA0NTM1ODE0NTM3ODE0NTM4ODI0NDM5ODM0NDNhODM0NDNiODQ0MzNkODQ0MzNlODU0MjNmODU0MjQwODY0MjQxODY0MTQyODc0MTQ0ODc0MDQ1ODg0MDQ2ODgzZjQ3ODgzZjQ4ODkzZTQ5ODkzZTRhODkzZTRjOGEzZDRkOGEzZDRlOGEzYzRmOGEzYzUwOGIzYjUxOGIzYjUyOGIzYTUzOGIzYTU0OGMzOTU1OGMzOTU2OGMzODU4OGMzODU5OGMzNzVhOGMzNzViOGQzNjVjOGQzNjVkOGQzNTVlOGQzNTVmOGQzNDYwOGQzNDYxOGQzMzYyOGQzMzYzOGQzMjY0OGUzMjY1OGUzMTY2OGUzMTY3OGUzMTY4OGUzMDY5OGUzMDZhOGUyZjZiOGUyZjZjOGUyZTZkOGUyZTZlOGUyZTZmOGUyZDcwOGUyZDcxOGUyYzcxOGUyYzcyOGUyYzczOGUyYjc0OGUyYjc1OGUyYTc2OGUyYTc3OGUyYTc4OGUyOTc5OGUyOTdhOGUyOTdiOGUyODdjOGUyODdkOGUyNzdlOGUyNzdmOGUyNzgwOGUyNjgxOGUyNjgyOGUyNjgyOGUyNTgzOGUyNTg0OGUyNTg1OGUyNDg2OGUyNDg3OGUyMzg4OGUyMzg5OGUyMzhhOGQyMjhiOGQyMjhjOGQyMjhkOGQyMThlOGQyMThmOGQyMTkwOGQyMTkxOGMyMDkyOGMyMDkyOGMyMDkzOGMxZjk0OGMxZjk1OGIxZjk2OGIxZjk3OGIxZjk4OGIxZjk5OGExZjlhOGExZTliOGExZTljODkxZTlkODkxZjllODkxZjlmODgxZmEwODgxZmExODgxZmExODcxZmEyODcyMGEzODYyMGE0ODYyMWE1ODUyMWE2ODUyMmE3ODUyMmE4ODQyM2E5ODMyNGFhODMyNWFiODIyNWFjODIyNmFkODEyN2FkODEyOGFlODAyOWFmN2YyYWIwN2YyY2IxN2UyZGIyN2QyZWIzN2MyZmI0N2MzMWI1N2IzMmI2N2EzNGI2NzkzNWI3NzkzN2I4NzgzOGI5NzczYWJhNzYzYmJiNzUzZGJjNzQzZmJjNzM0MGJkNzI0MmJlNzE0NGJmNzA0NmMwNmY0OGMxNmU0YWMxNmQ0Y2MyNmM0ZWMzNmI1MGM0NmE1MmM1Njk1NGM1Njg1NmM2Njc1OGM3NjU1YWM4NjQ1Y2M4NjM1ZWM5NjI2MGNhNjA2M2NiNWY2NWNiNWU2N2NjNWM2OWNkNWI2Y2NkNWE2ZWNlNTg3MGNmNTc3M2QwNTY3NWQwNTQ3N2QxNTM3YWQxNTE3Y2QyNTA3ZmQzNGU4MWQzNGQ4NGQ0NGI4NmQ1NDk4OWQ1NDg4YmQ2NDY4ZWQ2NDU5MGQ3NDM5M2Q3NDE5NWQ4NDA5OGQ4M2U5YmQ5M2M5ZGQ5M2JhMGRhMzlhMmRhMzdhNWRiMzZhOGRiMzRhYWRjMzJhZGRjMzBiMGRkMmZiMmRkMmRiNWRlMmJiOGRlMjliYWRlMjhiZGRmMjZjMGRmMjVjMmRmMjNjNWUwMjFjOGUwMjBjYWUxMWZjZGUxMWRkMGUxMWNkMmUyMWJkNWUyMWFkOGUyMTlkYWUzMTlkZGUzMThkZmUzMThlMmU0MThlNWU0MTllN2U0MTllYWU1MWFlY2U1MWJlZmU1MWNmMWU1MWRmNGU2MWVmNmU2MjBmOGU2MjFmYmU3MjNmZGU3MjVcIikpO1xuXG4gIHZhciBtYWdtYSA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmXCIpKTtcblxuICB2YXIgaW5mZXJubyA9IHJhbXAoY29sb3JzKFwiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0XCIpKTtcblxuICB2YXIgcGxhc21hID0gcmFtcChjb2xvcnMoXCIwZDA4ODcxMDA3ODgxMzA3ODkxNjA3OGExOTA2OGMxYjA2OGQxZDA2OGUyMDA2OGYyMjA2OTAyNDA2OTEyNjA1OTEyODA1OTIyYTA1OTMyYzA1OTQyZTA1OTUyZjA1OTYzMTA1OTczMzA1OTczNTA0OTgzNzA0OTkzODA0OWEzYTA0OWEzYzA0OWIzZTA0OWMzZjA0OWM0MTA0OWQ0MzAzOWU0NDAzOWU0NjAzOWY0ODAzOWY0OTAzYTA0YjAzYTE0YzAyYTE0ZTAyYTI1MDAyYTI1MTAyYTM1MzAyYTM1NTAyYTQ1NjAxYTQ1ODAxYTQ1OTAxYTU1YjAxYTU1YzAxYTY1ZTAxYTY2MDAxYTY2MTAwYTc2MzAwYTc2NDAwYTc2NjAwYTc2NzAwYTg2OTAwYTg2YTAwYTg2YzAwYTg2ZTAwYTg2ZjAwYTg3MTAwYTg3MjAxYTg3NDAxYTg3NTAxYTg3NzAxYTg3ODAxYTg3YTAyYTg3YjAyYTg3ZDAzYTg3ZTAzYTg4MDA0YTg4MTA0YTc4MzA1YTc4NDA1YTc4NjA2YTY4NzA3YTY4ODA4YTY4YTA5YTU4YjBhYTU4ZDBiYTU4ZTBjYTQ4ZjBkYTQ5MTBlYTM5MjBmYTM5NDEwYTI5NTExYTE5NjEzYTE5ODE0YTA5OTE1OWY5YTE2OWY5YzE3OWU5ZDE4OWQ5ZTE5OWRhMDFhOWNhMTFiOWJhMjFkOWFhMzFlOWFhNTFmOTlhNjIwOThhNzIxOTdhODIyOTZhYTIzOTVhYjI0OTRhYzI2OTRhZDI3OTNhZTI4OTJiMDI5OTFiMTJhOTBiMjJiOGZiMzJjOGViNDJlOGRiNTJmOGNiNjMwOGJiNzMxOGFiODMyODliYTMzODhiYjM0ODhiYzM1ODdiZDM3ODZiZTM4ODViZjM5ODRjMDNhODNjMTNiODJjMjNjODFjMzNkODBjNDNlN2ZjNTQwN2VjNjQxN2RjNzQyN2NjODQzN2JjOTQ0N2FjYTQ1N2FjYjQ2NzljYzQ3NzhjYzQ5NzdjZDRhNzZjZTRiNzVjZjRjNzRkMDRkNzNkMTRlNzJkMjRmNzFkMzUxNzFkNDUyNzBkNTUzNmZkNTU0NmVkNjU1NmRkNzU2NmNkODU3NmJkOTU4NmFkYTVhNmFkYTViNjlkYjVjNjhkYzVkNjdkZDVlNjZkZTVmNjVkZTYxNjRkZjYyNjNlMDYzNjNlMTY0NjJlMjY1NjFlMjY2NjBlMzY4NWZlNDY5NWVlNTZhNWRlNTZiNWRlNjZjNWNlNzZlNWJlNzZmNWFlODcwNTllOTcxNThlOTcyNTdlYTc0NTdlYjc1NTZlYjc2NTVlYzc3NTRlZDc5NTNlZDdhNTJlZTdiNTFlZjdjNTFlZjdlNTBmMDdmNGZmMDgwNGVmMTgxNGRmMTgzNGNmMjg0NGJmMzg1NGJmMzg3NGFmNDg4NDlmNDg5NDhmNThiNDdmNThjNDZmNjhkNDVmNjhmNDRmNzkwNDRmNzkxNDNmNzkzNDJmODk0NDFmODk1NDBmOTk3M2ZmOTk4M2VmOTlhM2VmYTliM2RmYTljM2NmYTllM2JmYjlmM2FmYmExMzlmYmEyMzhmY2EzMzhmY2E1MzdmY2E2MzZmY2E4MzVmY2E5MzRmZGFiMzNmZGFjMzNmZGFlMzJmZGFmMzFmZGIxMzBmZGIyMmZmZGI0MmZmZGI1MmVmZWI3MmRmZWI4MmNmZWJhMmNmZWJiMmJmZWJkMmFmZWJlMmFmZWMwMjlmZGMyMjlmZGMzMjhmZGM1MjdmZGM2MjdmZGM4MjdmZGNhMjZmZGNiMjZmY2NkMjVmY2NlMjVmY2QwMjVmY2QyMjVmYmQzMjRmYmQ1MjRmYmQ3MjRmYWQ4MjRmYWRhMjRmOWRjMjRmOWRkMjVmOGRmMjVmOGUxMjVmN2UyMjVmN2U0MjVmNmU2MjZmNmU4MjZmNWU5MjZmNWViMjdmNGVkMjdmM2VlMjdmM2YwMjdmMmYyMjdmMWY0MjZmMWY1MjVmMGY3MjRmMGY5MjFcIikpO1xuXG4gIGZ1bmN0aW9uIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKSB7XG4gICAgdmFyIHgwID0gMCxcbiAgICAgICAgeDEgPSAxLFxuICAgICAgICBjbGFtcCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgICAgdmFyIHQgPSAoeCAtIHgwKSAvICh4MSAtIHgwKTtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0b3IoY2xhbXAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSkgOiB0KTtcbiAgICB9XG5cbiAgICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh4MCA9ICtfWzBdLCB4MSA9ICtfWzFdLCBzY2FsZSkgOiBbeDAsIHgxXTtcbiAgICB9O1xuXG4gICAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9ICEhXywgc2NhbGUpIDogY2xhbXA7XG4gICAgfTtcblxuICAgIHNjYWxlLmludGVycG9sYXRvciA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRvciA9IF8sIHNjYWxlKSA6IGludGVycG9sYXRvcjtcbiAgICB9O1xuXG4gICAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNlcXVlbnRpYWwoaW50ZXJwb2xhdG9yKS5kb21haW4oW3gwLCB4MV0pLmNsYW1wKGNsYW1wKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG4gIH1cblxuICBleHBvcnRzLnNjYWxlQmFuZCA9IGJhbmQ7XG4gIGV4cG9ydHMuc2NhbGVQb2ludCA9IHBvaW50O1xuICBleHBvcnRzLnNjYWxlSWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgZXhwb3J0cy5zY2FsZUxpbmVhciA9IGxpbmVhcjtcbiAgZXhwb3J0cy5zY2FsZUxvZyA9IGxvZztcbiAgZXhwb3J0cy5zY2FsZU9yZGluYWwgPSBvcmRpbmFsO1xuICBleHBvcnRzLnNjYWxlSW1wbGljaXQgPSBpbXBsaWNpdDtcbiAgZXhwb3J0cy5zY2FsZVBvdyA9IHBvdztcbiAgZXhwb3J0cy5zY2FsZVNxcnQgPSBzcXJ0O1xuICBleHBvcnRzLnNjYWxlUXVhbnRpbGUgPSBxdWFudGlsZSQxO1xuICBleHBvcnRzLnNjYWxlUXVhbnRpemUgPSBxdWFudGl6ZTtcbiAgZXhwb3J0cy5zY2FsZVRocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgZXhwb3J0cy5zY2FsZVRpbWUgPSB0aW1lO1xuICBleHBvcnRzLnNjYWxlVXRjID0gdXRjVGltZTtcbiAgZXhwb3J0cy5zY2hlbWVDYXRlZ29yeTEwID0gY2F0ZWdvcnkxMDtcbiAgZXhwb3J0cy5zY2hlbWVDYXRlZ29yeTIwYiA9IGNhdGVnb3J5MjBiO1xuICBleHBvcnRzLnNjaGVtZUNhdGVnb3J5MjBjID0gY2F0ZWdvcnkyMGM7XG4gIGV4cG9ydHMuc2NoZW1lQ2F0ZWdvcnkyMCA9IGNhdGVnb3J5MjA7XG4gIGV4cG9ydHMuaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0ID0gY3ViZWhlbGl4JDE7XG4gIGV4cG9ydHMuaW50ZXJwb2xhdGVSYWluYm93ID0gcmFpbmJvdyQxO1xuICBleHBvcnRzLmludGVycG9sYXRlV2FybSA9IHdhcm07XG4gIGV4cG9ydHMuaW50ZXJwb2xhdGVDb29sID0gY29vbDtcbiAgZXhwb3J0cy5pbnRlcnBvbGF0ZVZpcmlkaXMgPSB2aXJpZGlzO1xuICBleHBvcnRzLmludGVycG9sYXRlTWFnbWEgPSBtYWdtYTtcbiAgZXhwb3J0cy5pbnRlcnBvbGF0ZUluZmVybm8gPSBpbmZlcm5vO1xuICBleHBvcnRzLmludGVycG9sYXRlUGxhc21hID0gcGxhc21hO1xuICBleHBvcnRzLnNjYWxlU2VxdWVudGlhbCA9IHNlcXVlbnRpYWw7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpOyIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtc2VsZWN0aW9uLyBWZXJzaW9uIDEuMC4yLiBDb3B5cmlnaHQgMjAxNiBNaWtlIEJvc3RvY2suXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnZXhwb3J0cyddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pKSk7XG59KHRoaXMsIGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuICB2YXIgbmFtZXNwYWNlcyA9IHtcbiAgICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB4aHRtbDogeGh0bWwsXG4gICAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICAgIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG4gIH07XG5cbiAgZnVuY3Rpb24gbmFtZXNwYWNlKG5hbWUpIHtcbiAgICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICAgIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdG9yKG5hbWUpIHtcbiAgICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gICAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG4gIH1cblxuICB2YXIgbmV4dElkID0gMDtcblxuICBmdW5jdGlvbiBsb2NhbCgpIHtcbiAgICByZXR1cm4gbmV3IExvY2FsO1xuICB9XG5cbiAgZnVuY3Rpb24gTG9jYWwoKSB7XG4gICAgdGhpcy5fID0gXCJAXCIgKyAoKytuZXh0SWQpLnRvU3RyaW5nKDM2KTtcbiAgfVxuXG4gIExvY2FsLnByb3RvdHlwZSA9IGxvY2FsLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogTG9jYWwsXG4gICAgZ2V0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgaWQgPSB0aGlzLl87XG4gICAgICB3aGlsZSAoIShpZCBpbiBub2RlKSkgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHJldHVybjtcbiAgICAgIHJldHVybiBub2RlW2lkXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24obm9kZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiBub2RlW3RoaXMuX10gPSB2YWx1ZTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuXyBpbiBub2RlICYmIGRlbGV0ZSBub2RlW3RoaXMuX107XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbWF0Y2hlciA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgfTtcbiAgfTtcblxuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50Lm1hdGNoZXMpIHtcbiAgICAgIHZhciB2ZW5kb3JNYXRjaGVzID0gZWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgICB8fCBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgICAgfHwgZWxlbWVudC5tb3pNYXRjaGVzU2VsZWN0b3JcbiAgICAgICAgICB8fCBlbGVtZW50Lm9NYXRjaGVzU2VsZWN0b3I7XG4gICAgICBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB2ZW5kb3JNYXRjaGVzLmNhbGwodGhpcywgc2VsZWN0b3IpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWF0Y2hlciQxID0gbWF0Y2hlcjtcblxuICB2YXIgZmlsdGVyRXZlbnRzID0ge307XG5cbiAgZXhwb3J0cy5ldmVudCA9IG51bGw7XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBlbGVtZW50JDEgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgaWYgKCEoXCJvbm1vdXNlZW50ZXJcIiBpbiBlbGVtZW50JDEpKSB7XG4gICAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICAgIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApO1xuICAgIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgaWYgKCFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0aGlzICYmICEocmVsYXRlZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSAmIDgpKSkge1xuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQxKSB7XG4gICAgICB2YXIgZXZlbnQwID0gZXhwb3J0cy5ldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICAgIGV4cG9ydHMuZXZlbnQgPSBldmVudDE7XG4gICAgICB0cnkge1xuICAgICAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIHRoaXMuX19kYXRhX18sIGluZGV4LCBncm91cCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBleHBvcnRzLmV2ZW50ID0gZXZlbnQwO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgICAgaWYgKCFvbikgcmV0dXJuO1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgICB2YXIgd3JhcCA9IGZpbHRlckV2ZW50cy5oYXNPd25Qcm9wZXJ0eSh0eXBlbmFtZS50eXBlKSA/IGZpbHRlckNvbnRleHRMaXN0ZW5lciA6IGNvbnRleHRMaXN0ZW5lcjtcbiAgICByZXR1cm4gZnVuY3Rpb24oZCwgaSwgZ3JvdXApIHtcbiAgICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciA9IGxpc3RlbmVyLCBvLmNhcHR1cmUgPSBjYXB0dXJlKTtcbiAgICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgICAgbyA9IHt0eXBlOiB0eXBlbmFtZS50eXBlLCBuYW1lOiB0eXBlbmFtZS5uYW1lLCB2YWx1ZTogdmFsdWUsIGxpc3RlbmVyOiBsaXN0ZW5lciwgY2FwdHVyZTogY2FwdHVyZX07XG4gICAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgICBlbHNlIG9uLnB1c2gobyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9vbih0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgICBpZiAoY2FwdHVyZSA9PSBudWxsKSBjYXB0dXJlID0gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIGNhcHR1cmUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgICB2YXIgZXZlbnQwID0gZXhwb3J0cy5ldmVudDtcbiAgICBldmVudDEuc291cmNlRXZlbnQgPSBleHBvcnRzLmV2ZW50O1xuICAgIGV4cG9ydHMuZXZlbnQgPSBldmVudDE7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhwb3J0cy5ldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzb3VyY2VFdmVudCgpIHtcbiAgICB2YXIgY3VycmVudCA9IGV4cG9ydHMuZXZlbnQsIHNvdXJjZTtcbiAgICB3aGlsZSAoc291cmNlID0gY3VycmVudC5zb3VyY2VFdmVudCkgY3VycmVudCA9IHNvdXJjZTtcbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBvaW50KG5vZGUsIGV2ZW50KSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG5cbiAgICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgICB2YXIgcG9pbnQgPSBzdmcuY3JlYXRlU1ZHUG9pbnQoKTtcbiAgICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICAgIHJldHVybiBbcG9pbnQueCwgcG9pbnQueV07XG4gICAgfVxuXG4gICAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICB9XG5cbiAgZnVuY3Rpb24gbW91c2Uobm9kZSkge1xuICAgIHZhciBldmVudCA9IHNvdXJjZUV2ZW50KCk7XG4gICAgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzKSBldmVudCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgIHJldHVybiBwb2ludChub2RlLCBldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBub25lKCkge31cblxuICBmdW5jdGlvbiBzZWxlY3RvcihzZWxlY3Rvcikge1xuICAgIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Qoc2VsZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5KCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdG9yQWxsKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3RBbGwoc2VsZWN0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICAgIHN1Ymdyb3Vwcy5wdXNoKHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSk7XG4gICAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9maWx0ZXIobWF0Y2gpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlciQxKG1hdGNoKTtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNwYXJzZSh1cGRhdGUpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VudGVyKCkge1xuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICAgIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICAgIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xuICB9XG5cbiAgRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICAgIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gICAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gICAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY29uc3RhbnQoeCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cblxuICB2YXIga2V5UHJlZml4ID0gXCIkXCI7IC8vIFByb3RlY3QgYWdhaW5zdCBrZXlzIGxpa2Ug4oCcX19wcm90b19f4oCdLlxuXG4gIGZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBub2RlLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gICAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICAgIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICAgIHZhciBpLFxuICAgICAgICBub2RlLFxuICAgICAgICBub2RlQnlLZXlWYWx1ZSA9IHt9LFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAgICBrZXlWYWx1ZTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAgIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgICBrZXlWYWx1ZSA9IGtleVByZWZpeCArIGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSk7XG4gICAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICAgIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlW2tleVZhbHVlc1tpXV0gPT09IG5vZGUpKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9kYXRhKHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBkYXRhID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaiA9IC0xO1xuICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gICAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgICBkYXRhID0gdmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpLFxuICAgICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICAgIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICAgIHJldHVybiB1cGRhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZXhpdCgpIHtcbiAgICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbWVyZ2Uoc2VsZWN0aW9uKSB7XG5cbiAgICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gc2VsZWN0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9vcmRlcigpIHtcblxuICAgIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgICAgbmV4dCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9zb3J0KGNvbXBhcmUpIHtcbiAgICBpZiAoIWNvbXBhcmUpIGNvbXBhcmUgPSBhc2NlbmRpbmc7XG5cbiAgICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2VsZWN0aW9uKHNvcnRncm91cHMsIHRoaXMuX3BhcmVudHMpLm9yZGVyKCk7XG4gIH1cblxuICBmdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICAgIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jYWxsKCkge1xuICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fbm9kZXMoKSB7XG4gICAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHsgbm9kZXNbKytpXSA9IHRoaXM7IH0pO1xuICAgIHJldHVybiBub2RlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9ub2RlKCkge1xuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fc2l6ZSgpIHtcbiAgICB2YXIgc2l6ZSA9IDA7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkgeyArK3NpemU7IH0pO1xuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5ub2RlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZWFjaChjYWxsYmFjaykge1xuXG4gICAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIHZhbHVlKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYXR0ckZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2F0dHIobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgICByZXR1cm4gZnVsbG5hbWUubG9jYWxcbiAgICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJGdW5jdGlvbk5TIDogYXR0ckZ1bmN0aW9uKVxuICAgICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdFZpZXcobm9kZSkge1xuICAgIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3N0eWxlKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICAgIHZhciBub2RlO1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgICA6IGRlZmF1bHRWaWV3KG5vZGUgPSB0aGlzLm5vZGUoKSlcbiAgICAgICAgICAgIC5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3Byb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG4gIH1cblxuICBmdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICAgIHRoaXMuX25vZGUgPSBub2RlO1xuICAgIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xuICB9XG5cbiAgQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG4gIH1cblxuICBmdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl9jbGFzc2VkKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNlbGVjdGlvbl90ZXh0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gICAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2h0bWwodmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhaXNlKCkge1xuICAgIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fcmFpc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG4gIH1cblxuICBmdW5jdGlvbiBsb3dlcigpIHtcbiAgICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2xvd2VyKCkge1xuICAgIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2FwcGVuZChuYW1lKSB7XG4gICAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25faW5zZXJ0KG5hbWUsIGJlZm9yZSkge1xuICAgIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX3JlbW92ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb25fZGF0dW0odmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQobm9kZSwgdHlwZSwgcGFyYW1zKSB7XG4gICAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2hDb25zdGFudCh0eXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2VsZWN0aW9uX2Rpc3BhdGNoKHR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgICAgOiBkaXNwYXRjaENvbnN0YW50KSh0eXBlLCBwYXJhbXMpKTtcbiAgfVxuXG4gIHZhciByb290ID0gW251bGxdO1xuXG4gIGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gICAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG4gIH1cblxuICBTZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogU2VsZWN0aW9uLFxuICAgIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gICAgZmlsdGVyOiBzZWxlY3Rpb25fZmlsdGVyLFxuICAgIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICAgIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gICAgZXhpdDogc2VsZWN0aW9uX2V4aXQsXG4gICAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICAgIHNvcnQ6IHNlbGVjdGlvbl9zb3J0LFxuICAgIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICAgIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gICAgbm9kZTogc2VsZWN0aW9uX25vZGUsXG4gICAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gICAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgICBlYWNoOiBzZWxlY3Rpb25fZWFjaCxcbiAgICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICAgIHByb3BlcnR5OiBzZWxlY3Rpb25fcHJvcGVydHksXG4gICAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gICAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gICAgaHRtbDogc2VsZWN0aW9uX2h0bWwsXG4gICAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICAgIGFwcGVuZDogc2VsZWN0aW9uX2FwcGVuZCxcbiAgICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gICAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICAgIGRhdHVtOiBzZWxlY3Rpb25fZGF0dW0sXG4gICAgb246IHNlbGVjdGlvbl9vbixcbiAgICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoXG4gIH07XG5cbiAgZnVuY3Rpb24gc2VsZWN0KHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZWxlY3RBbGwoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gbmV3IFNlbGVjdGlvbihbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcildLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgICAgOiBuZXcgU2VsZWN0aW9uKFtzZWxlY3RvciA9PSBudWxsID8gW10gOiBzZWxlY3Rvcl0sIHJvb3QpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG91Y2gobm9kZSwgdG91Y2hlcywgaWRlbnRpZmllcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykgaWRlbnRpZmllciA9IHRvdWNoZXMsIHRvdWNoZXMgPSBzb3VyY2VFdmVudCgpLmNoYW5nZWRUb3VjaGVzO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0b3VjaGVzID8gdG91Y2hlcy5sZW5ndGggOiAwLCB0b3VjaDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0b3VjaCA9IHRvdWNoZXNbaV0pLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KG5vZGUsIHRvdWNoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdWNoZXMobm9kZSwgdG91Y2hlcykge1xuICAgIGlmICh0b3VjaGVzID09IG51bGwpIHRvdWNoZXMgPSBzb3VyY2VFdmVudCgpLnRvdWNoZXM7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHRvdWNoZXMgPyB0b3VjaGVzLmxlbmd0aCA6IDAsIHBvaW50cyA9IG5ldyBBcnJheShuKTsgaSA8IG47ICsraSkge1xuICAgICAgcG9pbnRzW2ldID0gcG9pbnQobm9kZSwgdG91Y2hlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvaW50cztcbiAgfVxuXG4gIGV4cG9ydHMuY3JlYXRvciA9IGNyZWF0b3I7XG4gIGV4cG9ydHMubG9jYWwgPSBsb2NhbDtcbiAgZXhwb3J0cy5tYXRjaGVyID0gbWF0Y2hlciQxO1xuICBleHBvcnRzLm1vdXNlID0gbW91c2U7XG4gIGV4cG9ydHMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuICBleHBvcnRzLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuICBleHBvcnRzLnNlbGVjdCA9IHNlbGVjdDtcbiAgZXhwb3J0cy5zZWxlY3RBbGwgPSBzZWxlY3RBbGw7XG4gIGV4cG9ydHMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICBleHBvcnRzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gIGV4cG9ydHMuc2VsZWN0b3JBbGwgPSBzZWxlY3RvckFsbDtcbiAgZXhwb3J0cy50b3VjaCA9IHRvdWNoO1xuICBleHBvcnRzLnRvdWNoZXMgPSB0b3VjaGVzO1xuICBleHBvcnRzLndpbmRvdyA9IGRlZmF1bHRWaWV3O1xuICBleHBvcnRzLmN1c3RvbUV2ZW50ID0gY3VzdG9tRXZlbnQ7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpOyIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtdGltZS1mb3JtYXQvIFZlcnNpb24gMi4wLjMuIENvcHlyaWdodCAyMDE2IE1pa2UgQm9zdG9jay5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cywgcmVxdWlyZSgnZDMtdGltZScpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnLCAnZDMtdGltZSddLCBmYWN0b3J5KSA6XG4gIChmYWN0b3J5KChnbG9iYWwuZDMgPSBnbG9iYWwuZDMgfHwge30pLGdsb2JhbC5kMykpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMsZDNUaW1lKSB7ICd1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3WWVhcih5KSB7XG4gIHJldHVybiB7eTogeSwgbTogMCwgZDogMSwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcIlNcIjogZm9ybWF0U2Vjb25kcyxcbiAgICBcIlVcIjogZm9ybWF0V2Vla051bWJlclN1bmRheSxcbiAgICBcIndcIjogZm9ybWF0V2Vla2RheU51bWJlcixcbiAgICBcIldcIjogZm9ybWF0V2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0WWVhcixcbiAgICBcIllcIjogZm9ybWF0RnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFpvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHV0Y0Zvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFVUQ1Nob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0VVRDV2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0VVRDU2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0VVRDTW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdFVUQ0RheU9mTW9udGgsXG4gICAgXCJIXCI6IGZvcm1hdFVUQ0hvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0VVRDSG91cjEyLFxuICAgIFwialwiOiBmb3JtYXRVVENEYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdFVUQ01pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0VVRDTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdFVUQ01pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFVUQ1BlcmlvZCxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlcixcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwid1wiOiBwYXJzZVdlZWtkYXlOdW1iZXIsXG4gICAgXCJXXCI6IHBhcnNlV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogcGFyc2VMb2NhbGVEYXRlLFxuICAgIFwiWFwiOiBwYXJzZUxvY2FsZVRpbWUsXG4gICAgXCJ5XCI6IHBhcnNlWWVhcixcbiAgICBcIllcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIlpcIjogcGFyc2Vab25lLFxuICAgIFwiJVwiOiBwYXJzZUxpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgLy8gVGhlc2UgcmVjdXJzaXZlIGRpcmVjdGl2ZSBkZWZpbml0aW9ucyBtdXN0IGJlIGRlZmVycmVkLlxuICBmb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIGZvcm1hdHMpO1xuICBmb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCBmb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCB1dGNGb3JtYXRzKTtcbiAgdXRjRm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgdXRjRm9ybWF0cyk7XG5cbiAgZnVuY3Rpb24gbmV3Rm9ybWF0KHNwZWNpZmllciwgZm9ybWF0cykge1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKSB7XG4gICAgICB2YXIgc3RyaW5nID0gW10sXG4gICAgICAgICAgaSA9IC0xLFxuICAgICAgICAgIGogPSAwLFxuICAgICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICAgIGMsXG4gICAgICAgICAgcGFkLFxuICAgICAgICAgIGZvcm1hdDtcblxuICAgICAgaWYgKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSBkYXRlID0gbmV3IERhdGUoK2RhdGUpO1xuXG4gICAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgICBpZiAoc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSkgPT09IDM3KSB7XG4gICAgICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgICAgICBpZiAoKHBhZCA9IHBhZHNbYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKV0pICE9IG51bGwpIGMgPSBzcGVjaWZpZXIuY2hhckF0KCsraSk7XG4gICAgICAgICAgZWxzZSBwYWQgPSBjID09PSBcImVcIiA/IFwiIFwiIDogXCIwXCI7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9IGZvcm1hdHNbY10pIGMgPSBmb3JtYXQoZGF0ZSwgcGFkKTtcbiAgICAgICAgICBzdHJpbmcucHVzaChjKTtcbiAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RyaW5nLnB1c2goc3BlY2lmaWVyLnNsaWNlKGosIGkpKTtcbiAgICAgIHJldHVybiBzdHJpbmcuam9pbihcIlwiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gbmV3UGFyc2Uoc3BlY2lmaWVyLCBuZXdEYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgICAgdmFyIGQgPSBuZXdZZWFyKDE5MDApLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKTtcbiAgICAgIGlmIChpICE9IHN0cmluZy5sZW5ndGgpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBUaGUgYW0tcG0gZmxhZyBpcyAwIGZvciBBTSwgYW5kIDEgZm9yIFBNLlxuICAgICAgaWYgKFwicFwiIGluIGQpIGQuSCA9IGQuSCAlIDEyICsgZC5wICogMTI7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIldcIiBpbiBkIHx8IFwiVVwiIGluIGQpIHtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IFwiV1wiIGluIGQgPyAxIDogMDtcbiAgICAgICAgdmFyIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld1llYXIoZC55KSkuZ2V0VVRDRGF5KCkgOiBuZXdEYXRlKG5ld1llYXIoZC55KSkuZ2V0RGF5KCk7XG4gICAgICAgIGQubSA9IDA7XG4gICAgICAgIGQuZCA9IFwiV1wiIGluIGQgPyAoZC53ICsgNikgJSA3ICsgZC5XICogNyAtIChkYXkgKyA1KSAlIDcgOiBkLncgKyBkLlUgKiA3IC0gKGRheSArIDYpICUgNztcbiAgICAgIH1cblxuICAgICAgLy8gSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBhbGwgZmllbGRzIGFyZSBpbnRlcnByZXRlZCBhcyBVVEMgYW5kIHRoZW5cbiAgICAgIC8vIG9mZnNldCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCB0aW1lIHpvbmUuXG4gICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICBkLkggKz0gZC5aIC8gMTAwIHwgMDtcbiAgICAgICAgZC5NICs9IGQuWiAlIDEwMDtcbiAgICAgICAgcmV0dXJuIHV0Y0RhdGUoZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIE90aGVyd2lzZSwgYWxsIGZpZWxkcyBhcmUgaW4gbG9jYWwgdGltZS5cbiAgICAgIHJldHVybiBuZXdEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRXZWVrZGF5KGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRXZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHNob3J0V2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBtb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBtb250aExvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCBmb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgbG9jYWxEYXRlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIsIHV0Y0RhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9O1xudmFyIG51bWJlclJlID0gL15cXHMqXFxkKy87XG52YXIgcGVyY2VudFJlID0gL14lLztcbnZhciByZXF1b3RlUmUgPSAvW1xcXFxcXF5cXCRcXCpcXCtcXD9cXHxcXFtcXF1cXChcXClcXC5cXHtcXH1dL2c7XG5cbmZ1bmN0aW9uIHBhZCh2YWx1ZSwgZmlsbCwgd2lkdGgpIHtcbiAgdmFyIHNpZ24gPSB2YWx1ZSA8IDAgPyBcIi1cIiA6IFwiXCIsXG4gICAgICBzdHJpbmcgPSAoc2lnbiA/IC12YWx1ZSA6IHZhbHVlKSArIFwiXCIsXG4gICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICByZXR1cm4gc2lnbiArIChsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgKyBzdHJpbmcgOiBzdHJpbmcpO1xufVxuXG5mdW5jdGlvbiByZXF1b3RlKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZShyZXF1b3RlUmUsIFwiXFxcXCQmXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZShuYW1lcykge1xuICByZXR1cm4gbmV3IFJlZ0V4cChcIl4oPzpcIiArIG5hbWVzLm1hcChyZXF1b3RlKS5qb2luKFwifFwiKSArIFwiKVwiLCBcImlcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExvb2t1cChuYW1lcykge1xuICB2YXIgbWFwID0ge30sIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIG1hcFtuYW1lc1tpXS50b0xvd2VyQ2FzZSgpXSA9IGk7XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLncgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJNb25kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzpcXDo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgZDNUaW1lLnRpbWVEYXkuY291bnQoZDNUaW1lLnRpbWVZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKGQzVGltZS50aW1lU3VuZGF5LmNvdW50KGQzVGltZS50aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKGQzVGltZS50aW1lTW9uZGF5LmNvdW50KGQzVGltZS50aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcbiAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcbiAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIGQzVGltZS51dGNEYXkuY291bnQoZDNUaW1lLnV0Y1llYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQoZDNUaW1lLnV0Y1N1bmRheS5jb3VudChkM1RpbWUudXRjWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKGQzVGltZS51dGNNb25kYXkuY291bnQoZDNUaW1lLnV0Y1llYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxudmFyIGxvY2FsZSQxO1xuXG5cblxuXG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkYXRlVGltZTogXCIleCwgJVhcIixcbiAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXG4gIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXG4gIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcbiAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUkMSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgZXhwb3J0cy50aW1lRm9ybWF0ID0gbG9jYWxlJDEuZm9ybWF0O1xuICBleHBvcnRzLnRpbWVQYXJzZSA9IGxvY2FsZSQxLnBhcnNlO1xuICBleHBvcnRzLnV0Y0Zvcm1hdCA9IGxvY2FsZSQxLnV0Y0Zvcm1hdDtcbiAgZXhwb3J0cy51dGNQYXJzZSA9IGxvY2FsZSQxLnV0Y1BhcnNlO1xuICByZXR1cm4gbG9jYWxlJDE7XG59XG5cbnZhciBpc29TcGVjaWZpZXIgPSBcIiVZLSVtLSVkVCVIOiVNOiVTLiVMWlwiO1xuXG5mdW5jdGlvbiBmb3JtYXRJc29OYXRpdmUoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpO1xufVxuXG52YXIgZm9ybWF0SXNvID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmdcbiAgICA/IGZvcm1hdElzb05hdGl2ZVxuICAgIDogZXhwb3J0cy51dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZnVuY3Rpb24gcGFyc2VJc29OYXRpdmUoc3RyaW5nKSB7XG4gIHZhciBkYXRlID0gbmV3IERhdGUoc3RyaW5nKTtcbiAgcmV0dXJuIGlzTmFOKGRhdGUpID8gbnVsbCA6IGRhdGU7XG59XG5cbnZhciBwYXJzZUlzbyA9ICtuZXcgRGF0ZShcIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWlwiKVxuICAgID8gcGFyc2VJc29OYXRpdmVcbiAgICA6IGV4cG9ydHMudXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0cy50aW1lRm9ybWF0RGVmYXVsdExvY2FsZSA9IGRlZmF1bHRMb2NhbGU7XG5leHBvcnRzLnRpbWVGb3JtYXRMb2NhbGUgPSBmb3JtYXRMb2NhbGU7XG5leHBvcnRzLmlzb0Zvcm1hdCA9IGZvcm1hdElzbztcbmV4cG9ydHMuaXNvUGFyc2UgPSBwYXJzZUlzbztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsIi8vIGh0dHBzOi8vZDNqcy5vcmcvZDMtdGltZS8gVmVyc2lvbiAxLjAuNC4gQ29weXJpZ2h0IDIwMTYgTWlrZSBCb3N0b2NrLlxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLmQzID0gZ2xvYmFsLmQzIHx8IHt9KSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG52YXIgdDAgPSBuZXcgRGF0ZTtcbnZhciB0MSA9IG5ldyBEYXRlO1xuXG5mdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBpbnRlcnZhbDtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdO1xuICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XG4gICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgIGlmICghKHN0YXJ0IDwgc3RvcCkgfHwgIShzdGVwID4gMCkpIHJldHVybiByYW5nZTsgLy8gYWxzbyBoYW5kbGVzIEludmFsaWQgRGF0ZVxuICAgIGRvIHJhbmdlLnB1c2gobmV3IERhdGUoK3N0YXJ0KSk7IHdoaWxlIChvZmZzZXRpKHN0YXJ0LCBzdGVwKSwgZmxvb3JpKHN0YXJ0KSwgc3RhcnQgPCBzdG9wKVxuICAgIHJldHVybiByYW5nZTtcbiAgfTtcblxuICBpbnRlcnZhbC5maWx0ZXIgPSBmdW5jdGlvbih0ZXN0KSB7XG4gICAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlIChmbG9vcmkoZGF0ZSksICF0ZXN0KGRhdGUpKSBkYXRlLnNldFRpbWUoZGF0ZSAtIDEpO1xuICAgIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHdoaWxlICgtLXN0ZXAgPj0gMCkgd2hpbGUgKG9mZnNldGkoZGF0ZSwgMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgfSk7XG4gIH07XG5cbiAgaWYgKGNvdW50KSB7XG4gICAgaW50ZXJ2YWwuY291bnQgPSBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgICB0MC5zZXRUaW1lKCtzdGFydCksIHQxLnNldFRpbWUoK2VuZCk7XG4gICAgICBmbG9vcmkodDApLCBmbG9vcmkodDEpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAsIHQxKSk7XG4gICAgfTtcblxuICAgIGludGVydmFsLmV2ZXJ5ID0gZnVuY3Rpb24oc3RlcCkge1xuICAgICAgc3RlcCA9IE1hdGguZmxvb3Ioc3RlcCk7XG4gICAgICByZXR1cm4gIWlzRmluaXRlKHN0ZXApIHx8ICEoc3RlcCA+IDApID8gbnVsbFxuICAgICAgICAgIDogIShzdGVwID4gMSkgPyBpbnRlcnZhbFxuICAgICAgICAgIDogaW50ZXJ2YWwuZmlsdGVyKGZpZWxkXG4gICAgICAgICAgICAgID8gZnVuY3Rpb24oZCkgeyByZXR1cm4gZmllbGQoZCkgJSBzdGVwID09PSAwOyB9XG4gICAgICAgICAgICAgIDogZnVuY3Rpb24oZCkgeyByZXR1cm4gaW50ZXJ2YWwuY291bnQoMCwgZCkgJSBzdGVwID09PSAwOyB9KTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGludGVydmFsO1xufVxuXG52YXIgbWlsbGlzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbnZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xudmFyIGR1cmF0aW9uTWludXRlID0gNmU0O1xudmFyIGR1cmF0aW9uSG91ciA9IDM2ZTU7XG52YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbnZhciBkdXJhdGlvbldlZWsgPSA2MDQ4ZTU7XG5cbnZhciBzZWNvbmQgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvblNlY29uZCkgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvblNlY29uZCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ1NlY29uZHMoKTtcbn0pO1xuXG52YXIgc2Vjb25kcyA9IHNlY29uZC5yYW5nZTtcblxudmFyIG1pbnV0ZSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoZGF0ZSAvIGR1cmF0aW9uTWludXRlKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbnZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuXG52YXIgaG91ciA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgdmFyIG9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIGR1cmF0aW9uTWludXRlICUgZHVyYXRpb25Ib3VyO1xuICBpZiAob2Zmc2V0IDwgMCkgb2Zmc2V0ICs9IGR1cmF0aW9uSG91cjtcbiAgZGF0ZS5zZXRUaW1lKE1hdGguZmxvb3IoKCtkYXRlIC0gb2Zmc2V0KSAvIGR1cmF0aW9uSG91cikgKiBkdXJhdGlvbkhvdXIgKyBvZmZzZXQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG59KTtcblxudmFyIGhvdXJzID0gaG91ci5yYW5nZTtcblxudmFyIGRheSA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgLSAxO1xufSk7XG5cbnZhciBkYXlzID0gZGF5LnJhbmdlO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG52YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbnZhciBtb25kYXkgPSB3ZWVrZGF5KDEpO1xudmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xudmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG52YXIgdGh1cnNkYXkgPSB3ZWVrZGF5KDQpO1xudmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG52YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG52YXIgc3VuZGF5cyA9IHN1bmRheS5yYW5nZTtcbnZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xudmFyIHR1ZXNkYXlzID0gdHVlc2RheS5yYW5nZTtcbnZhciB3ZWRuZXNkYXlzID0gd2VkbmVzZGF5LnJhbmdlO1xudmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xudmFyIGZyaWRheXMgPSBmcmlkYXkucmFuZ2U7XG52YXIgc2F0dXJkYXlzID0gc2F0dXJkYXkucmFuZ2U7XG5cbnZhciBtb250aCA9IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG52YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG5cbnZhciB5ZWFyID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnllYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldE1vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG52YXIgeWVhcnMgPSB5ZWFyLnJhbmdlO1xuXG52YXIgdXRjTWludXRlID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ1NlY29uZHMoMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01pbnV0ZXMoKTtcbn0pO1xuXG52YXIgdXRjTWludXRlcyA9IHV0Y01pbnV0ZS5yYW5nZTtcblxudmFyIHV0Y0hvdXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbnZhciB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG5cbnZhciB1dGNEYXkgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENEYXRlKCkgLSAxO1xufSk7XG5cbnZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuXG5mdW5jdGlvbiB1dGNXZWVrZGF5KGkpIHtcbiAgcmV0dXJuIG5ld0ludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgLSAoZGF0ZS5nZXRVVENEYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbnZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xudmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG52YXIgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG52YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbnZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG52YXIgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbnZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbnZhciB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xudmFyIHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG52YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xudmFyIHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG52YXIgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG52YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbnZhciB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcblxudmFyIHV0Y01vbnRoID0gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbnZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcblxudmFyIHV0Y1llYXIgPSBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbnZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG5cbmV4cG9ydHMudGltZUludGVydmFsID0gbmV3SW50ZXJ2YWw7XG5leHBvcnRzLnRpbWVNaWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kO1xuZXhwb3J0cy50aW1lTWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzO1xuZXhwb3J0cy51dGNNaWxsaXNlY29uZCA9IG1pbGxpc2Vjb25kO1xuZXhwb3J0cy51dGNNaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG5leHBvcnRzLnRpbWVTZWNvbmQgPSBzZWNvbmQ7XG5leHBvcnRzLnRpbWVTZWNvbmRzID0gc2Vjb25kcztcbmV4cG9ydHMudXRjU2Vjb25kID0gc2Vjb25kO1xuZXhwb3J0cy51dGNTZWNvbmRzID0gc2Vjb25kcztcbmV4cG9ydHMudGltZU1pbnV0ZSA9IG1pbnV0ZTtcbmV4cG9ydHMudGltZU1pbnV0ZXMgPSBtaW51dGVzO1xuZXhwb3J0cy50aW1lSG91ciA9IGhvdXI7XG5leHBvcnRzLnRpbWVIb3VycyA9IGhvdXJzO1xuZXhwb3J0cy50aW1lRGF5ID0gZGF5O1xuZXhwb3J0cy50aW1lRGF5cyA9IGRheXM7XG5leHBvcnRzLnRpbWVXZWVrID0gc3VuZGF5O1xuZXhwb3J0cy50aW1lV2Vla3MgPSBzdW5kYXlzO1xuZXhwb3J0cy50aW1lU3VuZGF5ID0gc3VuZGF5O1xuZXhwb3J0cy50aW1lU3VuZGF5cyA9IHN1bmRheXM7XG5leHBvcnRzLnRpbWVNb25kYXkgPSBtb25kYXk7XG5leHBvcnRzLnRpbWVNb25kYXlzID0gbW9uZGF5cztcbmV4cG9ydHMudGltZVR1ZXNkYXkgPSB0dWVzZGF5O1xuZXhwb3J0cy50aW1lVHVlc2RheXMgPSB0dWVzZGF5cztcbmV4cG9ydHMudGltZVdlZG5lc2RheSA9IHdlZG5lc2RheTtcbmV4cG9ydHMudGltZVdlZG5lc2RheXMgPSB3ZWRuZXNkYXlzO1xuZXhwb3J0cy50aW1lVGh1cnNkYXkgPSB0aHVyc2RheTtcbmV4cG9ydHMudGltZVRodXJzZGF5cyA9IHRodXJzZGF5cztcbmV4cG9ydHMudGltZUZyaWRheSA9IGZyaWRheTtcbmV4cG9ydHMudGltZUZyaWRheXMgPSBmcmlkYXlzO1xuZXhwb3J0cy50aW1lU2F0dXJkYXkgPSBzYXR1cmRheTtcbmV4cG9ydHMudGltZVNhdHVyZGF5cyA9IHNhdHVyZGF5cztcbmV4cG9ydHMudGltZU1vbnRoID0gbW9udGg7XG5leHBvcnRzLnRpbWVNb250aHMgPSBtb250aHM7XG5leHBvcnRzLnRpbWVZZWFyID0geWVhcjtcbmV4cG9ydHMudGltZVllYXJzID0geWVhcnM7XG5leHBvcnRzLnV0Y01pbnV0ZSA9IHV0Y01pbnV0ZTtcbmV4cG9ydHMudXRjTWludXRlcyA9IHV0Y01pbnV0ZXM7XG5leHBvcnRzLnV0Y0hvdXIgPSB1dGNIb3VyO1xuZXhwb3J0cy51dGNIb3VycyA9IHV0Y0hvdXJzO1xuZXhwb3J0cy51dGNEYXkgPSB1dGNEYXk7XG5leHBvcnRzLnV0Y0RheXMgPSB1dGNEYXlzO1xuZXhwb3J0cy51dGNXZWVrID0gdXRjU3VuZGF5O1xuZXhwb3J0cy51dGNXZWVrcyA9IHV0Y1N1bmRheXM7XG5leHBvcnRzLnV0Y1N1bmRheSA9IHV0Y1N1bmRheTtcbmV4cG9ydHMudXRjU3VuZGF5cyA9IHV0Y1N1bmRheXM7XG5leHBvcnRzLnV0Y01vbmRheSA9IHV0Y01vbmRheTtcbmV4cG9ydHMudXRjTW9uZGF5cyA9IHV0Y01vbmRheXM7XG5leHBvcnRzLnV0Y1R1ZXNkYXkgPSB1dGNUdWVzZGF5O1xuZXhwb3J0cy51dGNUdWVzZGF5cyA9IHV0Y1R1ZXNkYXlzO1xuZXhwb3J0cy51dGNXZWRuZXNkYXkgPSB1dGNXZWRuZXNkYXk7XG5leHBvcnRzLnV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXlzO1xuZXhwb3J0cy51dGNUaHVyc2RheSA9IHV0Y1RodXJzZGF5O1xuZXhwb3J0cy51dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheXM7XG5leHBvcnRzLnV0Y0ZyaWRheSA9IHV0Y0ZyaWRheTtcbmV4cG9ydHMudXRjRnJpZGF5cyA9IHV0Y0ZyaWRheXM7XG5leHBvcnRzLnV0Y1NhdHVyZGF5ID0gdXRjU2F0dXJkYXk7XG5leHBvcnRzLnV0Y1NhdHVyZGF5cyA9IHV0Y1NhdHVyZGF5cztcbmV4cG9ydHMudXRjTW9udGggPSB1dGNNb250aDtcbmV4cG9ydHMudXRjTW9udGhzID0gdXRjTW9udGhzO1xuZXhwb3J0cy51dGNZZWFyID0gdXRjWWVhcjtcbmV4cG9ydHMudXRjWWVhcnMgPSB1dGNZZWFycztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsImltcG9ydCBoZWxwZXIgZnJvbSBcIi4vbGVnZW5kXCJcbmltcG9ydCB7IGRpc3BhdGNoIH0gZnJvbSBcImQzLWRpc3BhdGNoXCJcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzLXNjYWxlXCJcbmltcG9ydCB7IGZvcm1hdExvY2FsZSwgZm9ybWF0U3BlY2lmaWVyIH0gZnJvbSBcImQzLWZvcm1hdFwiXG5cbmltcG9ydCB7IHN1bSB9IGZyb20gXCJkMy1hcnJheVwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbG9yKCkge1xuICBsZXQgc2NhbGUgPSBzY2FsZUxpbmVhcigpLFxuICAgIHNoYXBlID0gXCJyZWN0XCIsXG4gICAgc2hhcGVXaWR0aCA9IDE1LFxuICAgIHNoYXBlSGVpZ2h0ID0gMTUsXG4gICAgc2hhcGVSYWRpdXMgPSAxMCxcbiAgICBzaGFwZVBhZGRpbmcgPSAyLFxuICAgIGNlbGxzID0gWzVdLFxuICAgIGNlbGxGaWx0ZXIsXG4gICAgbGFiZWxzID0gW10sXG4gICAgY2xhc3NQcmVmaXggPSBcIlwiLFxuICAgIHVzZUNsYXNzID0gZmFsc2UsXG4gICAgdGl0bGUgPSBcIlwiLFxuICAgIGxvY2FsZSA9IGhlbHBlci5kM19kZWZhdWx0TG9jYWxlLFxuICAgIHNwZWNpZmllciA9IGhlbHBlci5kM19kZWZhdWx0Rm9ybWF0U3BlY2lmaWVyLFxuICAgIGxhYmVsT2Zmc2V0ID0gMTAsXG4gICAgbGFiZWxBbGlnbiA9IFwibWlkZGxlXCIsXG4gICAgbGFiZWxEZWxpbWl0ZXIgPSBoZWxwZXIuZDNfZGVmYXVsdERlbGltaXRlcixcbiAgICBsYWJlbFdyYXAsXG4gICAgb3JpZW50ID0gXCJ2ZXJ0aWNhbFwiLFxuICAgIGFzY2VuZGluZyA9IGZhbHNlLFxuICAgIHBhdGgsXG4gICAgdGl0bGVXaWR0aCxcbiAgICBsZWdlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2goXCJjZWxsb3ZlclwiLCBcImNlbGxvdXRcIiwgXCJjZWxsY2xpY2tcIilcblxuICBmdW5jdGlvbiBsZWdlbmQoc3ZnKSB7XG4gICAgY29uc3QgdHlwZSA9IGhlbHBlci5kM19jYWxjVHlwZShcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGFzY2VuZGluZyxcbiAgICAgICAgY2VsbHMsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgbG9jYWxlLmZvcm1hdChzcGVjaWZpZXIpLFxuICAgICAgICBsYWJlbERlbGltaXRlclxuICAgICAgKSxcbiAgICAgIGxlZ2VuZEcgPSBzdmcuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKFtzY2FsZV0pXG5cbiAgICBsZWdlbmRHXG4gICAgICAuZW50ZXIoKVxuICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpXG5cbiAgICBpZiAoY2VsbEZpbHRlcikge1xuICAgICAgaGVscGVyLmQzX2ZpbHRlckNlbGxzKHR5cGUsIGNlbGxGaWx0ZXIpXG4gICAgfVxuXG4gICAgbGV0IGNlbGwgPSBzdmdcbiAgICAgIC5zZWxlY3QoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kQ2VsbHNcIilcbiAgICAgIC5zZWxlY3RBbGwoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKVxuICAgICAgLmRhdGEodHlwZS5kYXRhKVxuXG4gICAgY29uc3QgY2VsbEVudGVyID0gY2VsbFxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpXG4gICAgY2VsbEVudGVyLmFwcGVuZChzaGFwZSkuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIilcblxuICAgIGxldCBzaGFwZXMgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoXG4gICAgICAgIFwiZy5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsIFwiICsgc2hhcGUgKyBcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIlxuICAgICAgKVxuICAgICAgLmRhdGEodHlwZS5kYXRhKVxuXG4gICAgLy9hZGQgZXZlbnQgaGFuZGxlcnNcbiAgICBoZWxwZXIuZDNfYWRkRXZlbnRzKGNlbGxFbnRlciwgbGVnZW5kRGlzcGF0Y2hlcilcblxuICAgIGNlbGxcbiAgICAgIC5leGl0KClcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMClcbiAgICAgIC5yZW1vdmUoKVxuICAgIHNoYXBlc1xuICAgICAgLmV4aXQoKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCAwKVxuICAgICAgLnJlbW92ZSgpXG5cbiAgICBzaGFwZXMgPSBzaGFwZXMubWVyZ2Uoc2hhcGVzKVxuXG4gICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoXG4gICAgICBzaGFwZSxcbiAgICAgIHNoYXBlcyxcbiAgICAgIHNoYXBlSGVpZ2h0LFxuICAgICAgc2hhcGVXaWR0aCxcbiAgICAgIHNoYXBlUmFkaXVzLFxuICAgICAgcGF0aFxuICAgIClcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoXG4gICAgICBzdmcsXG4gICAgICBjZWxsRW50ZXIsXG4gICAgICB0eXBlLmxhYmVscyxcbiAgICAgIGNsYXNzUHJlZml4LFxuICAgICAgbGFiZWxXcmFwXG4gICAgKVxuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKVxuXG4gICAgLy8gc2V0cyBwbGFjZW1lbnRcbiAgICBjb25zdCB0ZXh0U2l6ZSA9IHRleHQubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSksXG4gICAgICBzaGFwZVNpemUgPSBzaGFwZXMubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSlcbiAgICAvL3NldHMgc2NhbGVcbiAgICAvL2V2ZXJ5dGhpbmcgaXMgZmlsbCBleGNlcHQgZm9yIGxpbmUgd2hpY2ggaXMgc3Ryb2tlLFxuICAgIGlmICghdXNlQ2xhc3MpIHtcbiAgICAgIGlmIChzaGFwZSA9PSBcImxpbmVcIikge1xuICAgICAgICBzaGFwZXMuc3R5bGUoXCJzdHJva2VcIiwgdHlwZS5mZWF0dXJlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2hhcGVzLnN0eWxlKFwiZmlsbFwiLCB0eXBlLmZlYXR1cmUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNoYXBlcy5hdHRyKFwiY2xhc3NcIiwgZCA9PiBgJHtjbGFzc1ByZWZpeH1zd2F0Y2ggJHt0eXBlLmZlYXR1cmUoZCl9YClcbiAgICB9XG5cbiAgICBsZXQgY2VsbFRyYW5zLFxuICAgICAgdGV4dFRyYW5zLFxuICAgICAgdGV4dEFsaWduID0gbGFiZWxBbGlnbiA9PSBcInN0YXJ0XCIgPyAwIDogbGFiZWxBbGlnbiA9PSBcIm1pZGRsZVwiID8gMC41IDogMVxuXG4gICAgLy9wb3NpdGlvbnMgY2VsbHMgYW5kIHRleHRcbiAgICBpZiAob3JpZW50ID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGNvbnN0IGNlbGxTaXplID0gdGV4dFNpemUubWFwKChkLCBpKSA9PlxuICAgICAgICBNYXRoLm1heChkLmhlaWdodCwgc2hhcGVTaXplW2ldLmhlaWdodClcbiAgICAgIClcblxuICAgICAgY2VsbFRyYW5zID0gKGQsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gc3VtKGNlbGxTaXplLnNsaWNlKDAsIGkpKVxuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgwLCAke2hlaWdodCArIGkgKiBzaGFwZVBhZGRpbmd9KWBcbiAgICAgIH1cblxuICAgICAgdGV4dFRyYW5zID0gKGQsIGkpID0+XG4gICAgICAgIGB0cmFuc2xhdGUoICR7c2hhcGVTaXplW2ldLndpZHRoICtcbiAgICAgICAgICBzaGFwZVNpemVbaV0ueCArXG4gICAgICAgICAgbGFiZWxPZmZzZXR9LCAke3NoYXBlU2l6ZVtpXS55ICsgc2hhcGVTaXplW2ldLmhlaWdodCAvIDIgKyA1fSlgXG4gICAgfSBlbHNlIGlmIChvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBjZWxsVHJhbnMgPSAoZCwgaSkgPT5cbiAgICAgICAgYHRyYW5zbGF0ZSgke2kgKiAoc2hhcGVTaXplW2ldLndpZHRoICsgc2hhcGVQYWRkaW5nKX0sMClgXG4gICAgICB0ZXh0VHJhbnMgPSAoZCwgaSkgPT4gYHRyYW5zbGF0ZSgke3NoYXBlU2l6ZVtpXS53aWR0aCAqIHRleHRBbGlnbiArXG4gICAgICAgIHNoYXBlU2l6ZVtpXS54fSxcbiAgICAgICAgICAke3NoYXBlU2l6ZVtpXS5oZWlnaHQgKyBzaGFwZVNpemVbaV0ueSArIGxhYmVsT2Zmc2V0ICsgOH0pYFxuICAgIH1cblxuICAgIGhlbHBlci5kM19wbGFjZW1lbnQob3JpZW50LCBjZWxsLCBjZWxsVHJhbnMsIHRleHQsIHRleHRUcmFucywgbGFiZWxBbGlnbilcbiAgICBoZWxwZXIuZDNfdGl0bGUoc3ZnLCB0aXRsZSwgY2xhc3NQcmVmaXgsIHRpdGxlV2lkdGgpXG5cbiAgICBjZWxsLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMSlcbiAgfVxuXG4gIGxlZ2VuZC5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZVxuICAgIHNjYWxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jZWxscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjZWxsc1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2VsbEZpbHRlclxuICAgIGNlbGxGaWx0ZXIgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlID0gZnVuY3Rpb24oXywgZCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlXG4gICAgaWYgKFxuICAgICAgXyA9PSBcInJlY3RcIiB8fFxuICAgICAgXyA9PSBcImNpcmNsZVwiIHx8XG4gICAgICBfID09IFwibGluZVwiIHx8XG4gICAgICAoXyA9PSBcInBhdGhcIiAmJiB0eXBlb2YgZCA9PT0gXCJzdHJpbmdcIilcbiAgICApIHtcbiAgICAgIHNoYXBlID0gX1xuICAgICAgcGF0aCA9IGRcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVXaWR0aFxuICAgIHNoYXBlV2lkdGggPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5zaGFwZUhlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZUhlaWdodFxuICAgIHNoYXBlSGVpZ2h0ID0gK19cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQuc2hhcGVSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVSYWRpdXNcbiAgICBzaGFwZVJhZGl1cyA9ICtfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVBhZGRpbmdcbiAgICBzaGFwZVBhZGRpbmcgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbHMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxzXG4gICAgbGFiZWxzID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbEFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsQWxpZ25cbiAgICBpZiAoXyA9PSBcInN0YXJ0XCIgfHwgXyA9PSBcImVuZFwiIHx8IF8gPT0gXCJtaWRkbGVcIikge1xuICAgICAgbGFiZWxBbGlnbiA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxvY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb2NhbGVcbiAgICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoXylcbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGVnZW5kLmxvY2FsZSgpLmZvcm1hdChzcGVjaWZpZXIpXG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKF8pXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxhYmVsT2Zmc2V0ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsT2Zmc2V0XG4gICAgbGFiZWxPZmZzZXQgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbERlbGltaXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbERlbGltaXRlclxuICAgIGxhYmVsRGVsaW1pdGVyID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbFdyYXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxXcmFwXG4gICAgbGFiZWxXcmFwID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC51c2VDbGFzcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB1c2VDbGFzc1xuICAgIGlmIChfID09PSB0cnVlIHx8IF8gPT09IGZhbHNlKSB7XG4gICAgICB1c2VDbGFzcyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLm9yaWVudCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBvcmllbnRcbiAgICBfID0gXy50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKF8gPT0gXCJob3Jpem9udGFsXCIgfHwgXyA9PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIG9yaWVudCA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmFzY2VuZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBhc2NlbmRpbmdcbiAgICBhc2NlbmRpbmcgPSAhIV9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQuY2xhc3NQcmVmaXggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2xhc3NQcmVmaXhcbiAgICBjbGFzc1ByZWZpeCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQudGl0bGUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGVcbiAgICB0aXRsZSA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQudGl0bGVXaWR0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aXRsZVdpZHRoXG4gICAgdGl0bGVXaWR0aCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQudGV4dFdyYXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGV4dFdyYXBcbiAgICB0ZXh0V3JhcCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQub24gPSBmdW5jdGlvbigpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGxlZ2VuZERpc3BhdGNoZXIub24uYXBwbHkobGVnZW5kRGlzcGF0Y2hlciwgYXJndW1lbnRzKVxuICAgIHJldHVybiB2YWx1ZSA9PT0gbGVnZW5kRGlzcGF0Y2hlciA/IGxlZ2VuZCA6IHZhbHVlXG4gIH1cblxuICByZXR1cm4gbGVnZW5kXG59XG4iLCJleHBvcnQgY29uc3QgdGhyZXNob2xkTGFiZWxzID0gZnVuY3Rpb24oe1xuICBpLFxuICBnZW5MZW5ndGgsXG4gIGdlbmVyYXRlZExhYmVscyxcbiAgbGFiZWxEZWxpbWl0ZXJcbn0pIHtcbiAgaWYgKGkgPT09IDApIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBnZW5lcmF0ZWRMYWJlbHNbaV0uc3BsaXQoYCAke2xhYmVsRGVsaW1pdGVyfSBgKVxuICAgIHJldHVybiBgTGVzcyB0aGFuICR7dmFsdWVzWzFdfWBcbiAgfSBlbHNlIGlmIChpID09PSBnZW5MZW5ndGggLSAxKSB7XG4gICAgY29uc3QgdmFsdWVzID0gZ2VuZXJhdGVkTGFiZWxzW2ldLnNwbGl0KGAgJHtsYWJlbERlbGltaXRlcn0gYClcbiAgICByZXR1cm4gYCR7dmFsdWVzWzBdfSBvciBtb3JlYFxuICB9XG4gIHJldHVybiBnZW5lcmF0ZWRMYWJlbHNbaV1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICB0aHJlc2hvbGRMYWJlbHNcbn1cbiIsImltcG9ydCB7IHNlbGVjdCB9IGZyb20gXCJkMy1zZWxlY3Rpb25cIlxuaW1wb3J0IHsgZm9ybWF0LCBmb3JtYXRQcmVmaXggfSBmcm9tIFwiZDMtZm9ybWF0XCJcblxuY29uc3QgZDNfaWRlbnRpdHkgPSBkID0+IGRcblxuY29uc3QgZDNfcmV2ZXJzZSA9IGFyciA9PiB7XG4gIGNvbnN0IG1pcnJvciA9IFtdXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG1pcnJvcltpXSA9IGFycltsIC0gaSAtIDFdXG4gIH1cbiAgcmV0dXJuIG1pcnJvclxufVxuXG4vL1RleHQgd3JhcHBpbmcgY29kZSBhZGFwdGVkIGZyb20gTWlrZSBCb3N0b2NrXG5jb25zdCBkM190ZXh0V3JhcHBpbmcgPSAodGV4dCwgd2lkdGgpID0+IHtcbiAgdGV4dC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0ZXh0ID0gc2VsZWN0KHRoaXMpLFxuICAgICAgd29yZHMgPSB0ZXh0XG4gICAgICAgIC50ZXh0KClcbiAgICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgICAgLnJldmVyc2UoKSxcbiAgICAgIHdvcmQsXG4gICAgICBsaW5lID0gW10sXG4gICAgICBsaW5lTnVtYmVyID0gMCxcbiAgICAgIGxpbmVIZWlnaHQgPSAxLjIsIC8vZW1zXG4gICAgICB5ID0gdGV4dC5hdHRyKFwieVwiKSxcbiAgICAgIGR5ID0gcGFyc2VGbG9hdCh0ZXh0LmF0dHIoXCJkeVwiKSkgfHwgMCxcbiAgICAgIHRzcGFuID0gdGV4dFxuICAgICAgICAudGV4dChudWxsKVxuICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcbiAgICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgZHkgKyBcImVtXCIpXG5cbiAgICB3aGlsZSAoKHdvcmQgPSB3b3Jkcy5wb3AoKSkpIHtcbiAgICAgIGxpbmUucHVzaCh3b3JkKVxuICAgICAgdHNwYW4udGV4dChsaW5lLmpvaW4oXCIgXCIpKVxuICAgICAgaWYgKHRzcGFuLm5vZGUoKS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSA+IHdpZHRoICYmIGxpbmUubGVuZ3RoID4gMSkge1xuICAgICAgICBsaW5lLnBvcCgpXG4gICAgICAgIHRzcGFuLnRleHQobGluZS5qb2luKFwiIFwiKSlcbiAgICAgICAgbGluZSA9IFt3b3JkXVxuICAgICAgICB0c3BhbiA9IHRleHRcbiAgICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgICAuYXR0cihcImR5XCIsIGxpbmVIZWlnaHQgKyBkeSArIFwiZW1cIilcbiAgICAgICAgICAudGV4dCh3b3JkKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZDNfbWVyZ2VMYWJlbHMgPSAoZ2VuID0gW10sIGxhYmVscywgZG9tYWluLCByYW5nZSwgbGFiZWxEZWxpbWl0ZXIpID0+IHtcbiAgaWYgKHR5cGVvZiBsYWJlbHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBpZiAobGFiZWxzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGdlblxuXG4gICAgbGV0IGkgPSBsYWJlbHMubGVuZ3RoXG4gICAgZm9yICg7IGkgPCBnZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxhYmVscy5wdXNoKGdlbltpXSlcbiAgICB9XG4gICAgcmV0dXJuIGxhYmVsc1xuICB9IGVsc2UgaWYgKHR5cGVvZiBsYWJlbHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IGN1c3RvbUxhYmVscyA9IFtdXG4gICAgY29uc3QgZ2VuTGVuZ3RoID0gZ2VuLmxlbmd0aFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ2VuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1c3RvbUxhYmVscy5wdXNoKFxuICAgICAgICBsYWJlbHMoe1xuICAgICAgICAgIGksXG4gICAgICAgICAgZ2VuTGVuZ3RoLFxuICAgICAgICAgIGdlbmVyYXRlZExhYmVsczogZ2VuLFxuICAgICAgICAgIGRvbWFpbixcbiAgICAgICAgICByYW5nZSxcbiAgICAgICAgICBsYWJlbERlbGltaXRlclxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gY3VzdG9tTGFiZWxzXG4gIH1cblxuICByZXR1cm4gZ2VuXG59XG5cbmNvbnN0IGQzX2xpbmVhckxlZ2VuZCA9IChzY2FsZSwgY2VsbHMsIGxhYmVsRm9ybWF0KSA9PiB7XG4gIGxldCBkYXRhID0gW11cblxuICBpZiAoY2VsbHMubGVuZ3RoID4gMSkge1xuICAgIGRhdGEgPSBjZWxsc1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRvbWFpbiA9IHNjYWxlLmRvbWFpbigpLFxuICAgICAgaW5jcmVtZW50ID0gKGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0gLSBkb21haW5bMF0pIC8gKGNlbGxzIC0gMSlcbiAgICBsZXQgaSA9IDBcblxuICAgIGZvciAoOyBpIDwgY2VsbHM7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKGRvbWFpblswXSArIGkgKiBpbmNyZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbGFiZWxzID0gZGF0YS5tYXAobGFiZWxGb3JtYXQpXG4gIHJldHVybiB7XG4gICAgZGF0YTogZGF0YSxcbiAgICBsYWJlbHM6IGxhYmVscyxcbiAgICBmZWF0dXJlOiBkID0+IHNjYWxlKGQpXG4gIH1cbn1cblxuY29uc3QgZDNfcXVhbnRMZWdlbmQgPSAoc2NhbGUsIGxhYmVsRm9ybWF0LCBsYWJlbERlbGltaXRlcikgPT4ge1xuICBjb25zdCBsYWJlbHMgPSBzY2FsZS5yYW5nZSgpLm1hcChkID0+IHtcbiAgICBjb25zdCBpbnZlcnQgPSBzY2FsZS5pbnZlcnRFeHRlbnQoZClcbiAgICByZXR1cm4gKFxuICAgICAgbGFiZWxGb3JtYXQoaW52ZXJ0WzBdKSArXG4gICAgICBcIiBcIiArXG4gICAgICBsYWJlbERlbGltaXRlciArXG4gICAgICBcIiBcIiArXG4gICAgICBsYWJlbEZvcm1hdChpbnZlcnRbMV0pXG4gICAgKVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgZGF0YTogc2NhbGUucmFuZ2UoKSxcbiAgICBsYWJlbHM6IGxhYmVscyxcbiAgICBmZWF0dXJlOiBkM19pZGVudGl0eVxuICB9XG59XG5cbmNvbnN0IGQzX29yZGluYWxMZWdlbmQgPSBzY2FsZSA9PiAoe1xuICBkYXRhOiBzY2FsZS5kb21haW4oKSxcbiAgbGFiZWxzOiBzY2FsZS5kb21haW4oKSxcbiAgZmVhdHVyZTogZCA9PiBzY2FsZShkKVxufSlcblxuY29uc3QgZDNfY2VsbE92ZXIgPSAoY2VsbERpc3BhdGNoZXIsIGQsIG9iaikgPT4ge1xuICBjZWxsRGlzcGF0Y2hlci5jYWxsKFwiY2VsbG92ZXJcIiwgb2JqLCBkKVxufVxuXG5jb25zdCBkM19jZWxsT3V0ID0gKGNlbGxEaXNwYXRjaGVyLCBkLCBvYmopID0+IHtcbiAgY2VsbERpc3BhdGNoZXIuY2FsbChcImNlbGxvdXRcIiwgb2JqLCBkKVxufVxuXG5jb25zdCBkM19jZWxsQ2xpY2sgPSAoY2VsbERpc3BhdGNoZXIsIGQsIG9iaikgPT4ge1xuICBjZWxsRGlzcGF0Y2hlci5jYWxsKFwiY2VsbGNsaWNrXCIsIG9iaiwgZClcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBkM19kcmF3U2hhcGVzOiAoXG4gICAgc2hhcGUsXG4gICAgc2hhcGVzLFxuICAgIHNoYXBlSGVpZ2h0LFxuICAgIHNoYXBlV2lkdGgsXG4gICAgc2hhcGVSYWRpdXMsXG4gICAgcGF0aFxuICApID0+IHtcbiAgICBpZiAoc2hhcGUgPT09IFwicmVjdFwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcImhlaWdodFwiLCBzaGFwZUhlaWdodCkuYXR0cihcIndpZHRoXCIsIHNoYXBlV2lkdGgpXG4gICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gXCJjaXJjbGVcIikge1xuICAgICAgc2hhcGVzLmF0dHIoXCJyXCIsIHNoYXBlUmFkaXVzKVxuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwibGluZVwiKSB7XG4gICAgICBzaGFwZXNcbiAgICAgICAgLmF0dHIoXCJ4MVwiLCAwKVxuICAgICAgICAuYXR0cihcIngyXCIsIHNoYXBlV2lkdGgpXG4gICAgICAgIC5hdHRyKFwieTFcIiwgMClcbiAgICAgICAgLmF0dHIoXCJ5MlwiLCAwKVxuICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09IFwicGF0aFwiKSB7XG4gICAgICBzaGFwZXMuYXR0cihcImRcIiwgcGF0aClcbiAgICB9XG4gIH0sXG5cbiAgZDNfYWRkVGV4dDogZnVuY3Rpb24oc3ZnLCBlbnRlciwgbGFiZWxzLCBjbGFzc1ByZWZpeCwgbGFiZWxXaWR0aCkge1xuICAgIGVudGVyLmFwcGVuZChcInRleHRcIikuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsYWJlbFwiKVxuICAgIGNvbnN0IHRleHQgPSBzdmdcbiAgICAgIC5zZWxlY3RBbGwoYGcuJHtjbGFzc1ByZWZpeH1jZWxsIHRleHQuJHtjbGFzc1ByZWZpeH1sYWJlbGApXG4gICAgICAuZGF0YShsYWJlbHMpXG4gICAgICAudGV4dChkM19pZGVudGl0eSlcblxuICAgIGlmIChsYWJlbFdpZHRoKSB7XG4gICAgICBzdmdcbiAgICAgICAgLnNlbGVjdEFsbChgZy4ke2NsYXNzUHJlZml4fWNlbGwgdGV4dC4ke2NsYXNzUHJlZml4fWxhYmVsYClcbiAgICAgICAgLmNhbGwoZDNfdGV4dFdyYXBwaW5nLCBsYWJlbFdpZHRoKVxuICAgIH1cblxuICAgIHJldHVybiB0ZXh0XG4gIH0sXG5cbiAgZDNfY2FsY1R5cGU6IGZ1bmN0aW9uKFxuICAgIHNjYWxlLFxuICAgIGFzY2VuZGluZyxcbiAgICBjZWxscyxcbiAgICBsYWJlbHMsXG4gICAgbGFiZWxGb3JtYXQsXG4gICAgbGFiZWxEZWxpbWl0ZXJcbiAgKSB7XG4gICAgY29uc3QgdHlwZSA9IHNjYWxlLmludmVydEV4dGVudFxuICAgICAgPyBkM19xdWFudExlZ2VuZChzY2FsZSwgbGFiZWxGb3JtYXQsIGxhYmVsRGVsaW1pdGVyKVxuICAgICAgOiBzY2FsZS50aWNrc1xuICAgICAgICA/IGQzX2xpbmVhckxlZ2VuZChzY2FsZSwgY2VsbHMsIGxhYmVsRm9ybWF0KVxuICAgICAgICA6IGQzX29yZGluYWxMZWdlbmQoc2NhbGUpXG5cbiAgICAvL2ZvciBkMy5zY2FsZVNlcXVlbnRpYWwgdGhhdCBkb2Vzbid0IGhhdmUgYSByYW5nZSBmdW5jdGlvblxuICAgIGNvbnN0IHJhbmdlID0gKHNjYWxlLnJhbmdlICYmIHNjYWxlLnJhbmdlKCkpIHx8IHNjYWxlLmRvbWFpbigpXG4gICAgdHlwZS5sYWJlbHMgPSBkM19tZXJnZUxhYmVscyhcbiAgICAgIHR5cGUubGFiZWxzLFxuICAgICAgbGFiZWxzLFxuICAgICAgc2NhbGUuZG9tYWluKCksXG4gICAgICByYW5nZSxcbiAgICAgIGxhYmVsRGVsaW1pdGVyXG4gICAgKVxuXG4gICAgaWYgKGFzY2VuZGluZykge1xuICAgICAgdHlwZS5sYWJlbHMgPSBkM19yZXZlcnNlKHR5cGUubGFiZWxzKVxuICAgICAgdHlwZS5kYXRhID0gZDNfcmV2ZXJzZSh0eXBlLmRhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBkM19maWx0ZXJDZWxsczogKHR5cGUsIGNlbGxGaWx0ZXIpID0+IHtcbiAgICBsZXQgZmlsdGVyQ2VsbHMgPSB0eXBlLmRhdGFcbiAgICAgIC5tYXAoKGQsIGkpID0+ICh7IGRhdGE6IGQsIGxhYmVsOiB0eXBlLmxhYmVsc1tpXSB9KSlcbiAgICAgIC5maWx0ZXIoY2VsbEZpbHRlcilcbiAgICBjb25zdCBkYXRhVmFsdWVzID0gZmlsdGVyQ2VsbHMubWFwKGQgPT4gZC5kYXRhKVxuICAgIGNvbnN0IGxhYmVsVmFsdWVzID0gZmlsdGVyQ2VsbHMubWFwKGQgPT4gZC5sYWJlbClcbiAgICB0eXBlLmRhdGEgPSB0eXBlLmRhdGEuZmlsdGVyKGQgPT4gZGF0YVZhbHVlcy5pbmRleE9mKGQpICE9PSAtMSlcbiAgICB0eXBlLmxhYmVscyA9IHR5cGUubGFiZWxzLmZpbHRlcihkID0+IGxhYmVsVmFsdWVzLmluZGV4T2YoZCkgIT09IC0xKVxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZDNfcGxhY2VtZW50OiAob3JpZW50LCBjZWxsLCBjZWxsVHJhbnMsIHRleHQsIHRleHRUcmFucywgbGFiZWxBbGlnbikgPT4ge1xuICAgIGNlbGwuYXR0cihcInRyYW5zZm9ybVwiLCBjZWxsVHJhbnMpXG4gICAgdGV4dC5hdHRyKFwidHJhbnNmb3JtXCIsIHRleHRUcmFucylcbiAgICBpZiAob3JpZW50ID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgdGV4dC5zdHlsZShcInRleHQtYW5jaG9yXCIsIGxhYmVsQWxpZ24pXG4gICAgfVxuICB9LFxuXG4gIGQzX2FkZEV2ZW50czogZnVuY3Rpb24oY2VsbHMsIGRpc3BhdGNoZXIpIHtcbiAgICBjZWxsc1xuICAgICAgLm9uKFwibW91c2VvdmVyLmxlZ2VuZFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICAgIGQzX2NlbGxPdmVyKGRpc3BhdGNoZXIsIGQsIHRoaXMpXG4gICAgICB9KVxuICAgICAgLm9uKFwibW91c2VvdXQubGVnZW5kXCIsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgZDNfY2VsbE91dChkaXNwYXRjaGVyLCBkLCB0aGlzKVxuICAgICAgfSlcbiAgICAgIC5vbihcImNsaWNrLmxlZ2VuZFwiLCBmdW5jdGlvbihkKSB7XG4gICAgICAgIGQzX2NlbGxDbGljayhkaXNwYXRjaGVyLCBkLCB0aGlzKVxuICAgICAgfSlcbiAgfSxcblxuICBkM190aXRsZTogKHN2ZywgdGl0bGUsIGNsYXNzUHJlZml4LCB0aXRsZVdpZHRoKSA9PiB7XG4gICAgaWYgKHRpdGxlICE9PSBcIlwiKSB7XG4gICAgICBjb25zdCB0aXRsZVRleHQgPSBzdmcuc2VsZWN0QWxsKFwidGV4dC5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRUaXRsZVwiKVxuXG4gICAgICB0aXRsZVRleHRcbiAgICAgICAgLmRhdGEoW3RpdGxlXSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIilcblxuICAgICAgc3ZnLnNlbGVjdEFsbChcInRleHQuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIikudGV4dCh0aXRsZSlcblxuICAgICAgaWYgKHRpdGxlV2lkdGgpIHtcbiAgICAgICAgc3ZnXG4gICAgICAgICAgLnNlbGVjdEFsbChcInRleHQuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIilcbiAgICAgICAgICAuY2FsbChkM190ZXh0V3JhcHBpbmcsIHRpdGxlV2lkdGgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNlbGxzU3ZnID0gc3ZnLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKVxuICAgICAgY29uc3QgeU9mZnNldCA9IHN2Z1xuICAgICAgICAgIC5zZWxlY3QoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kVGl0bGVcIilcbiAgICAgICAgICAubm9kZXMoKVxuICAgICAgICAgIC5tYXAoZCA9PiBkLmdldEJCb3goKS5oZWlnaHQpWzBdLFxuICAgICAgICB4T2Zmc2V0ID0gLWNlbGxzU3ZnLm5vZGVzKCkubWFwKGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgICByZXR1cm4gZC5nZXRCQm94KCkueFxuICAgICAgICB9KVswXVxuICAgICAgY2VsbHNTdmcuYXR0cihcInRyYW5zZm9ybVwiLCBcInRyYW5zbGF0ZShcIiArIHhPZmZzZXQgKyBcIixcIiArIHlPZmZzZXQgKyBcIilcIilcbiAgICB9XG4gIH0sXG5cbiAgZDNfZGVmYXVsdExvY2FsZToge1xuICAgIGZvcm1hdCxcbiAgICBmb3JtYXRQcmVmaXhcbiAgfSxcblxuICBkM19kZWZhdWx0Rm9ybWF0U3BlY2lmaWVyOiBcIi4wMWZcIixcblxuICBkM19kZWZhdWx0RGVsaW1pdGVyOiBcInRvXCJcbn1cbiIsImltcG9ydCBoZWxwZXIgZnJvbSBcIi4vbGVnZW5kXCJcbmltcG9ydCB7IGRpc3BhdGNoIH0gZnJvbSBcImQzLWRpc3BhdGNoXCJcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzLXNjYWxlXCJcbmltcG9ydCB7IGZvcm1hdExvY2FsZSwgZm9ybWF0U3BlY2lmaWVyIH0gZnJvbSBcImQzLWZvcm1hdFwiXG5pbXBvcnQgeyBzdW0sIG1heCB9IGZyb20gXCJkMy1hcnJheVwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpemUoKSB7XG4gIGxldCBzY2FsZSA9IHNjYWxlTGluZWFyKCksXG4gICAgc2hhcGUgPSBcInJlY3RcIixcbiAgICBzaGFwZVdpZHRoID0gMTUsXG4gICAgc2hhcGVQYWRkaW5nID0gMixcbiAgICBjZWxscyA9IFs1XSxcbiAgICBjZWxsRmlsdGVyLFxuICAgIGxhYmVscyA9IFtdLFxuICAgIGNsYXNzUHJlZml4ID0gXCJcIixcbiAgICB0aXRsZSA9IFwiXCIsXG4gICAgbG9jYWxlID0gaGVscGVyLmQzX2RlZmF1bHRMb2NhbGUsXG4gICAgc3BlY2lmaWVyID0gaGVscGVyLmQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXIsXG4gICAgbGFiZWxPZmZzZXQgPSAxMCxcbiAgICBsYWJlbEFsaWduID0gXCJtaWRkbGVcIixcbiAgICBsYWJlbERlbGltaXRlciA9IGhlbHBlci5kM19kZWZhdWx0RGVsaW1pdGVyLFxuICAgIGxhYmVsV3JhcCxcbiAgICBvcmllbnQgPSBcInZlcnRpY2FsXCIsXG4gICAgYXNjZW5kaW5nID0gZmFsc2UsXG4gICAgcGF0aCxcbiAgICB0aXRsZVdpZHRoLFxuICAgIGxlZ2VuZERpc3BhdGNoZXIgPSBkaXNwYXRjaChcImNlbGxvdmVyXCIsIFwiY2VsbG91dFwiLCBcImNlbGxjbGlja1wiKVxuXG4gIGZ1bmN0aW9uIGxlZ2VuZChzdmcpIHtcbiAgICBjb25zdCB0eXBlID0gaGVscGVyLmQzX2NhbGNUeXBlKFxuICAgICAgICBzY2FsZSxcbiAgICAgICAgYXNjZW5kaW5nLFxuICAgICAgICBjZWxscyxcbiAgICAgICAgbGFiZWxzLFxuICAgICAgICBsb2NhbGUuZm9ybWF0KHNwZWNpZmllciksXG4gICAgICAgIGxhYmVsRGVsaW1pdGVyXG4gICAgICApLFxuICAgICAgbGVnZW5kRyA9IHN2Zy5zZWxlY3RBbGwoXCJnXCIpLmRhdGEoW3NjYWxlXSlcblxuICAgIGlmIChjZWxsRmlsdGVyKSB7XG4gICAgICBoZWxwZXIuZDNfZmlsdGVyQ2VsbHModHlwZSwgY2VsbEZpbHRlcilcbiAgICB9XG5cbiAgICBsZWdlbmRHXG4gICAgICAuZW50ZXIoKVxuICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgIC5hdHRyKFwiY2xhc3NcIiwgY2xhc3NQcmVmaXggKyBcImxlZ2VuZENlbGxzXCIpXG5cbiAgICBsZXQgY2VsbCA9IHN2Z1xuICAgICAgLnNlbGVjdChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKVxuICAgICAgLnNlbGVjdEFsbChcIi5cIiArIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpXG4gICAgICAuZGF0YSh0eXBlLmRhdGEpXG4gICAgY29uc3QgY2VsbEVudGVyID0gY2VsbFxuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJjZWxsXCIpXG4gICAgY2VsbEVudGVyLmFwcGVuZChzaGFwZSkuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJzd2F0Y2hcIilcblxuICAgIGxldCBzaGFwZXMgPSBzdmcuc2VsZWN0QWxsKFxuICAgICAgXCJnLlwiICsgY2xhc3NQcmVmaXggKyBcImNlbGwgXCIgKyBzaGFwZSArIFwiLlwiICsgY2xhc3NQcmVmaXggKyBcInN3YXRjaFwiXG4gICAgKVxuXG4gICAgLy9hZGQgZXZlbnQgaGFuZGxlcnNcbiAgICBoZWxwZXIuZDNfYWRkRXZlbnRzKGNlbGxFbnRlciwgbGVnZW5kRGlzcGF0Y2hlcilcblxuICAgIGNlbGxcbiAgICAgIC5leGl0KClcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMClcbiAgICAgIC5yZW1vdmUoKVxuXG4gICAgc2hhcGVzXG4gICAgICAuZXhpdCgpXG4gICAgICAudHJhbnNpdGlvbigpXG4gICAgICAuc3R5bGUoXCJvcGFjaXR5XCIsIDApXG4gICAgICAucmVtb3ZlKClcbiAgICBzaGFwZXMgPSBzaGFwZXMubWVyZ2Uoc2hhcGVzKVxuXG4gICAgLy9jcmVhdGVzIHNoYXBlXG4gICAgaWYgKHNoYXBlID09PSBcImxpbmVcIikge1xuICAgICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoc2hhcGUsIHNoYXBlcywgMCwgc2hhcGVXaWR0aClcbiAgICAgIHNoYXBlcy5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIHR5cGUuZmVhdHVyZSlcbiAgICB9IGVsc2Uge1xuICAgICAgaGVscGVyLmQzX2RyYXdTaGFwZXMoXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBzaGFwZXMsXG4gICAgICAgIHR5cGUuZmVhdHVyZSxcbiAgICAgICAgdHlwZS5mZWF0dXJlLFxuICAgICAgICB0eXBlLmZlYXR1cmUsXG4gICAgICAgIHBhdGhcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoXG4gICAgICBzdmcsXG4gICAgICBjZWxsRW50ZXIsXG4gICAgICB0eXBlLmxhYmVscyxcbiAgICAgIGNsYXNzUHJlZml4LFxuICAgICAgbGFiZWxXcmFwXG4gICAgKVxuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKVxuXG4gICAgLy9zZXRzIHBsYWNlbWVudFxuXG4gICAgY29uc3QgdGV4dFNpemUgPSB0ZXh0Lm5vZGVzKCkubWFwKGQgPT4gZC5nZXRCQm94KCkpLFxuICAgICAgc2hhcGVTaXplID0gc2hhcGVzLm5vZGVzKCkubWFwKChkLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGJib3ggPSBkLmdldEJCb3goKVxuICAgICAgICBjb25zdCBzdHJva2UgPSBzY2FsZSh0eXBlLmRhdGFbaV0pXG5cbiAgICAgICAgaWYgKHNoYXBlID09PSBcImxpbmVcIiAmJiBvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgICAgYmJveC5oZWlnaHQgPSBiYm94LmhlaWdodCArIHN0cm9rZVxuICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSBcImxpbmVcIiAmJiBvcmllbnQgPT09IFwidmVydGljYWxcIikge1xuICAgICAgICAgIGJib3gud2lkdGggPSBiYm94LndpZHRoXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJib3hcbiAgICAgIH0pXG5cbiAgICBjb25zdCBtYXhIID0gbWF4KHNoYXBlU2l6ZSwgZCA9PiBkLmhlaWdodCArIGQueSksXG4gICAgICBtYXhXID0gbWF4KHNoYXBlU2l6ZSwgZCA9PiBkLndpZHRoICsgZC54KVxuXG4gICAgbGV0IGNlbGxUcmFucyxcbiAgICAgIHRleHRUcmFucyxcbiAgICAgIHRleHRBbGlnbiA9IGxhYmVsQWxpZ24gPT0gXCJzdGFydFwiID8gMCA6IGxhYmVsQWxpZ24gPT0gXCJtaWRkbGVcIiA/IDAuNSA6IDFcblxuICAgIC8vcG9zaXRpb25zIGNlbGxzIGFuZCB0ZXh0XG4gICAgaWYgKG9yaWVudCA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICBjb25zdCBjZWxsU2l6ZSA9IHRleHRTaXplLm1hcCgoZCwgaSkgPT5cbiAgICAgICAgTWF0aC5tYXgoZC5oZWlnaHQsIHNoYXBlU2l6ZVtpXS5oZWlnaHQpXG4gICAgICApXG4gICAgICBjb25zdCB5ID1cbiAgICAgICAgc2hhcGUgPT0gXCJjaXJjbGVcIiB8fCBzaGFwZSA9PSBcImxpbmVcIiA/IHNoYXBlU2l6ZVswXS5oZWlnaHQgLyAyIDogMFxuICAgICAgY2VsbFRyYW5zID0gKGQsIGkpID0+IHtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gc3VtKGNlbGxTaXplLnNsaWNlKDAsIGkpKVxuXG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKDAsICR7eSArIGhlaWdodCArIGkgKiBzaGFwZVBhZGRpbmd9KWBcbiAgICAgIH1cblxuICAgICAgdGV4dFRyYW5zID0gKGQsIGkpID0+IGB0cmFuc2xhdGUoICR7bWF4VyArIGxhYmVsT2Zmc2V0fSxcbiAgICAgICAgICAke3NoYXBlU2l6ZVtpXS55ICsgc2hhcGVTaXplW2ldLmhlaWdodCAvIDIgKyA1fSlgXG4gICAgfSBlbHNlIGlmIChvcmllbnQgPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICBjZWxsVHJhbnMgPSAoZCwgaSkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHN1bShzaGFwZVNpemUuc2xpY2UoMCwgaSksIGQgPT4gZC53aWR0aClcbiAgICAgICAgY29uc3QgeSA9IHNoYXBlID09IFwiY2lyY2xlXCIgfHwgc2hhcGUgPT0gXCJsaW5lXCIgPyBtYXhIIC8gMiA6IDBcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt3aWR0aCArIGkgKiBzaGFwZVBhZGRpbmd9LCAke3l9KWBcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gc2hhcGUgPT0gXCJsaW5lXCIgPyBtYXhIIC8gMiA6IG1heEhcbiAgICAgIHRleHRUcmFucyA9IChkLCBpKSA9PiB7XG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlKCAke3NoYXBlU2l6ZVtpXS53aWR0aCAqIHRleHRBbGlnbiArIHNoYXBlU2l6ZVtpXS54fSxcbiAgICAgICAgICAgICAgJHtvZmZzZXQgKyBsYWJlbE9mZnNldH0pYFxuICAgICAgfVxuICAgIH1cblxuICAgIGhlbHBlci5kM19wbGFjZW1lbnQob3JpZW50LCBjZWxsLCBjZWxsVHJhbnMsIHRleHQsIHRleHRUcmFucywgbGFiZWxBbGlnbilcbiAgICBoZWxwZXIuZDNfdGl0bGUoc3ZnLCB0aXRsZSwgY2xhc3NQcmVmaXgsIHRpdGxlV2lkdGgpXG5cbiAgICBjZWxsLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMSlcbiAgfVxuXG4gIGxlZ2VuZC5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZVxuICAgIHNjYWxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jZWxscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjZWxsc1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2VsbEZpbHRlclxuICAgIGNlbGxGaWx0ZXIgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlID0gZnVuY3Rpb24oXywgZCkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHNoYXBlXG4gICAgaWYgKF8gPT0gXCJyZWN0XCIgfHwgXyA9PSBcImNpcmNsZVwiIHx8IF8gPT0gXCJsaW5lXCIpIHtcbiAgICAgIHNoYXBlID0gX1xuICAgICAgcGF0aCA9IGRcbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVXaWR0aFxuICAgIHNoYXBlV2lkdGggPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5zaGFwZVBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gc2hhcGVQYWRkaW5nXG4gICAgc2hhcGVQYWRkaW5nID0gK19cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsc1xuICAgIGxhYmVscyA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxBbGlnbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbEFsaWduXG4gICAgaWYgKF8gPT0gXCJzdGFydFwiIHx8IF8gPT0gXCJlbmRcIiB8fCBfID09IFwibWlkZGxlXCIpIHtcbiAgICAgIGxhYmVsQWxpZ24gPSBfXG4gICAgfVxuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sb2NhbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbG9jYWxlXG4gICAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKF8pXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxhYmVsRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxlZ2VuZC5sb2NhbGUoKS5mb3JtYXQoc3BlY2lmaWVyKVxuICAgIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihfKVxuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbE9mZnNldCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbE9mZnNldFxuICAgIGxhYmVsT2Zmc2V0ID0gK19cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxEZWxpbWl0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxEZWxpbWl0ZXJcbiAgICBsYWJlbERlbGltaXRlciA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxXcmFwID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsV3JhcFxuICAgIGxhYmVsV3JhcCA9IF9cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQub3JpZW50ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIG9yaWVudFxuICAgIF8gPSBfLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoXyA9PSBcImhvcml6b250YWxcIiB8fCBfID09IFwidmVydGljYWxcIikge1xuICAgICAgb3JpZW50ID0gX1xuICAgIH1cbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQuYXNjZW5kaW5nID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGFzY2VuZGluZ1xuICAgIGFzY2VuZGluZyA9ICEhX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jbGFzc1ByZWZpeCA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjbGFzc1ByZWZpeFxuICAgIGNsYXNzUHJlZml4ID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC50aXRsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiB0aXRsZVxuICAgIHRpdGxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC50aXRsZVdpZHRoID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpdGxlV2lkdGhcbiAgICB0aXRsZVdpZHRoID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IHZhbHVlID0gbGVnZW5kRGlzcGF0Y2hlci5vbi5hcHBseShsZWdlbmREaXNwYXRjaGVyLCBhcmd1bWVudHMpXG4gICAgcmV0dXJuIHZhbHVlID09PSBsZWdlbmREaXNwYXRjaGVyID8gbGVnZW5kIDogdmFsdWVcbiAgfVxuXG4gIHJldHVybiBsZWdlbmRcbn1cbiIsImltcG9ydCBoZWxwZXIgZnJvbSBcIi4vbGVnZW5kXCJcbmltcG9ydCB7IGRpc3BhdGNoIH0gZnJvbSBcImQzLWRpc3BhdGNoXCJcbmltcG9ydCB7IHNjYWxlTGluZWFyIH0gZnJvbSBcImQzLXNjYWxlXCJcbmltcG9ydCB7IGZvcm1hdExvY2FsZSwgZm9ybWF0U3BlY2lmaWVyIH0gZnJvbSBcImQzLWZvcm1hdFwiXG5pbXBvcnQgeyBzdW0sIG1heCB9IGZyb20gXCJkMy1hcnJheVwiXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN5bWJvbCgpIHtcbiAgbGV0IHNjYWxlID0gc2NhbGVMaW5lYXIoKSxcbiAgICBzaGFwZSA9IFwicGF0aFwiLFxuICAgIHNoYXBlV2lkdGggPSAxNSxcbiAgICBzaGFwZUhlaWdodCA9IDE1LFxuICAgIHNoYXBlUmFkaXVzID0gMTAsXG4gICAgc2hhcGVQYWRkaW5nID0gNSxcbiAgICBjZWxscyA9IFs1XSxcbiAgICBjZWxsRmlsdGVyLFxuICAgIGxhYmVscyA9IFtdLFxuICAgIGNsYXNzUHJlZml4ID0gXCJcIixcbiAgICB0aXRsZSA9IFwiXCIsXG4gICAgbG9jYWxlID0gaGVscGVyLmQzX2RlZmF1bHRMb2NhbGUsXG4gICAgc3BlY2lmaWVyID0gaGVscGVyLmQzX2RlZmF1bHRGb3JtYXRTcGVjaWZpZXIsXG4gICAgbGFiZWxBbGlnbiA9IFwibWlkZGxlXCIsXG4gICAgbGFiZWxPZmZzZXQgPSAxMCxcbiAgICBsYWJlbERlbGltaXRlciA9IGhlbHBlci5kM19kZWZhdWx0RGVsaW1pdGVyLFxuICAgIGxhYmVsV3JhcCxcbiAgICBvcmllbnQgPSBcInZlcnRpY2FsXCIsXG4gICAgYXNjZW5kaW5nID0gZmFsc2UsXG4gICAgdGl0bGVXaWR0aCxcbiAgICBsZWdlbmREaXNwYXRjaGVyID0gZGlzcGF0Y2goXCJjZWxsb3ZlclwiLCBcImNlbGxvdXRcIiwgXCJjZWxsY2xpY2tcIilcblxuICBmdW5jdGlvbiBsZWdlbmQoc3ZnKSB7XG4gICAgY29uc3QgdHlwZSA9IGhlbHBlci5kM19jYWxjVHlwZShcbiAgICAgICAgc2NhbGUsXG4gICAgICAgIGFzY2VuZGluZyxcbiAgICAgICAgY2VsbHMsXG4gICAgICAgIGxhYmVscyxcbiAgICAgICAgbG9jYWxlLmZvcm1hdChzcGVjaWZpZXIpLFxuICAgICAgICBsYWJlbERlbGltaXRlclxuICAgICAgKSxcbiAgICAgIGxlZ2VuZEcgPSBzdmcuc2VsZWN0QWxsKFwiZ1wiKS5kYXRhKFtzY2FsZV0pXG5cbiAgICBpZiAoY2VsbEZpbHRlcikge1xuICAgICAgaGVscGVyLmQzX2ZpbHRlckNlbGxzKHR5cGUsIGNlbGxGaWx0ZXIpXG4gICAgfVxuXG4gICAgbGVnZW5kR1xuICAgICAgLmVudGVyKClcbiAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAuYXR0cihcImNsYXNzXCIsIGNsYXNzUHJlZml4ICsgXCJsZWdlbmRDZWxsc1wiKVxuXG4gICAgbGV0IGNlbGwgPSBzdmdcbiAgICAgIC5zZWxlY3QoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwibGVnZW5kQ2VsbHNcIilcbiAgICAgIC5zZWxlY3RBbGwoXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKVxuICAgICAgLmRhdGEodHlwZS5kYXRhKVxuICAgIGNvbnN0IGNlbGxFbnRlciA9IGNlbGxcbiAgICAgIC5lbnRlcigpXG4gICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwiY2VsbFwiKVxuICAgIGNlbGxFbnRlci5hcHBlbmQoc2hhcGUpLmF0dHIoXCJjbGFzc1wiLCBjbGFzc1ByZWZpeCArIFwic3dhdGNoXCIpXG5cbiAgICBsZXQgc2hhcGVzID0gc3ZnLnNlbGVjdEFsbChcImcuXCIgKyBjbGFzc1ByZWZpeCArIFwiY2VsbCBcIiArIHNoYXBlICsgXCIuXCIgKyBjbGFzc1ByZWZpeCArIFwic3dhdGNoXCIpXG5cbiAgICAvL2FkZCBldmVudCBoYW5kbGVyc1xuICAgIGhlbHBlci5kM19hZGRFdmVudHMoY2VsbEVudGVyLCBsZWdlbmREaXNwYXRjaGVyKVxuXG4gICAgLy9yZW1vdmUgb2xkIHNoYXBlc1xuICAgIGNlbGxcbiAgICAgIC5leGl0KClcbiAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgMClcbiAgICAgIC5yZW1vdmUoKVxuICAgIHNoYXBlc1xuICAgICAgLmV4aXQoKVxuICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCAwKVxuICAgICAgLnJlbW92ZSgpXG4gICAgc2hhcGVzID0gc2hhcGVzLm1lcmdlKHNoYXBlcylcblxuICAgIGhlbHBlci5kM19kcmF3U2hhcGVzKFxuICAgICAgc2hhcGUsXG4gICAgICBzaGFwZXMsXG4gICAgICBzaGFwZUhlaWdodCxcbiAgICAgIHNoYXBlV2lkdGgsXG4gICAgICBzaGFwZVJhZGl1cyxcbiAgICAgIHR5cGUuZmVhdHVyZVxuICAgIClcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmQzX2FkZFRleHQoXG4gICAgICBzdmcsXG4gICAgICBjZWxsRW50ZXIsXG4gICAgICB0eXBlLmxhYmVscyxcbiAgICAgIGNsYXNzUHJlZml4LFxuICAgICAgbGFiZWxXcmFwXG4gICAgKVxuXG4gICAgLy8gd2UgbmVlZCB0byBtZXJnZSB0aGUgc2VsZWN0aW9uLCBvdGhlcndpc2UgY2hhbmdlcyBpbiB0aGUgbGVnZW5kIChlLmcuIGNoYW5nZSBvZiBvcmllbnRhdGlvbikgYXJlIGFwcGxpZWQgb25seSB0byB0aGUgbmV3IGNlbGxzIGFuZCBub3QgdGhlIGV4aXN0aW5nIG9uZXMuXG4gICAgY2VsbCA9IGNlbGxFbnRlci5tZXJnZShjZWxsKVxuXG4gICAgLy8gc2V0cyBwbGFjZW1lbnRcbiAgICBjb25zdCB0ZXh0U2l6ZSA9IHRleHQubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSksXG4gICAgICBzaGFwZVNpemUgPSBzaGFwZXMubm9kZXMoKS5tYXAoZCA9PiBkLmdldEJCb3goKSlcblxuICAgIGNvbnN0IG1heEggPSBtYXgoc2hhcGVTaXplLCBkID0+IGQuaGVpZ2h0KSxcbiAgICAgIG1heFcgPSBtYXgoc2hhcGVTaXplLCBkID0+IGQud2lkdGgpXG5cbiAgICBsZXQgY2VsbFRyYW5zLFxuICAgICAgdGV4dFRyYW5zLFxuICAgICAgdGV4dEFsaWduID0gbGFiZWxBbGlnbiA9PSBcInN0YXJ0XCIgPyAwIDogbGFiZWxBbGlnbiA9PSBcIm1pZGRsZVwiID8gMC41IDogMVxuXG4gICAgLy9wb3NpdGlvbnMgY2VsbHMgYW5kIHRleHRcbiAgICBpZiAob3JpZW50ID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGNvbnN0IGNlbGxTaXplID0gdGV4dFNpemUubWFwKChkLCBpKSA9PiBNYXRoLm1heChtYXhILCBkLmhlaWdodCkpXG5cbiAgICAgIGNlbGxUcmFucyA9IChkLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHN1bShjZWxsU2l6ZS5zbGljZSgwLCBpKSlcbiAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoMCwgJHtoZWlnaHQgKyBpICogc2hhcGVQYWRkaW5nfSApYFxuICAgICAgfVxuICAgICAgdGV4dFRyYW5zID0gKGQsIGkpID0+IGB0cmFuc2xhdGUoICR7bWF4VyArIGxhYmVsT2Zmc2V0fSxcbiAgICAgICAgICAgICAgJHtzaGFwZVNpemVbaV0ueSArIHNoYXBlU2l6ZVtpXS5oZWlnaHQgLyAyICsgNX0pYFxuICAgIH0gZWxzZSBpZiAob3JpZW50ID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgY2VsbFRyYW5zID0gKGQsIGkpID0+IGB0cmFuc2xhdGUoICR7aSAqIChtYXhXICsgc2hhcGVQYWRkaW5nKX0sMClgXG4gICAgICB0ZXh0VHJhbnMgPSAoZCwgaSkgPT4gYHRyYW5zbGF0ZSggJHtzaGFwZVNpemVbaV0ud2lkdGggKiB0ZXh0QWxpZ24gK1xuICAgICAgICBzaGFwZVNpemVbaV0ueH0sXG4gICAgICAgICAgICAgICR7bWF4SCArIGxhYmVsT2Zmc2V0fSlgXG4gICAgfVxuXG4gICAgaGVscGVyLmQzX3BsYWNlbWVudChvcmllbnQsIGNlbGwsIGNlbGxUcmFucywgdGV4dCwgdGV4dFRyYW5zLCBsYWJlbEFsaWduKVxuICAgIGhlbHBlci5kM190aXRsZShzdmcsIHRpdGxlLCBjbGFzc1ByZWZpeCwgdGl0bGVXaWR0aClcbiAgICBjZWxsLnRyYW5zaXRpb24oKS5zdHlsZShcIm9wYWNpdHlcIiwgMSlcbiAgfVxuXG4gIGxlZ2VuZC5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzY2FsZVxuICAgIHNjYWxlID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5jZWxscyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBjZWxsc1xuICAgIGlmIChfLmxlbmd0aCA+IDEgfHwgXyA+PSAyKSB7XG4gICAgICBjZWxscyA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNlbGxGaWx0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gY2VsbEZpbHRlclxuICAgIGNlbGxGaWx0ZXIgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnNoYXBlUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBzaGFwZVBhZGRpbmdcbiAgICBzaGFwZVBhZGRpbmcgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbHMgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxzXG4gICAgbGFiZWxzID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbEFsaWduID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsQWxpZ25cbiAgICBpZiAoXyA9PSBcInN0YXJ0XCIgfHwgXyA9PSBcImVuZFwiIHx8IF8gPT0gXCJtaWRkbGVcIikge1xuICAgICAgbGFiZWxBbGlnbiA9IF9cbiAgICB9XG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxvY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsb2NhbGVcbiAgICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoXylcbiAgICByZXR1cm4gbGVnZW5kXG4gIH1cblxuICBsZWdlbmQubGFiZWxGb3JtYXQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGVnZW5kLmxvY2FsZSgpLmZvcm1hdChzcGVjaWZpZXIpXG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKF8pXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmxhYmVsT2Zmc2V0ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGxhYmVsT2Zmc2V0XG4gICAgbGFiZWxPZmZzZXQgPSArX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbERlbGltaXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBsYWJlbERlbGltaXRlclxuICAgIGxhYmVsRGVsaW1pdGVyID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5sYWJlbFdyYXAgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gbGFiZWxXcmFwXG4gICAgbGFiZWxXcmFwID0gX1xuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5vcmllbnQgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gb3JpZW50XG4gICAgXyA9IF8udG9Mb3dlckNhc2UoKVxuICAgIGlmIChfID09IFwiaG9yaXpvbnRhbFwiIHx8IF8gPT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICBvcmllbnQgPSBfXG4gICAgfVxuICAgIHJldHVybiBsZWdlbmRcbiAgfVxuXG4gIGxlZ2VuZC5hc2NlbmRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gYXNjZW5kaW5nXG4gICAgYXNjZW5kaW5nID0gISFfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLmNsYXNzUHJlZml4ID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGNsYXNzUHJlZml4XG4gICAgY2xhc3NQcmVmaXggPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnRpdGxlID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIHRpdGxlXG4gICAgdGl0bGUgPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLnRpdGxlV2lkdGggPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gdGl0bGVXaWR0aFxuICAgIHRpdGxlV2lkdGggPSBfXG4gICAgcmV0dXJuIGxlZ2VuZFxuICB9XG5cbiAgbGVnZW5kLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgdmFsdWUgPSBsZWdlbmREaXNwYXRjaGVyLm9uLmFwcGx5KGxlZ2VuZERpc3BhdGNoZXIsIGFyZ3VtZW50cylcbiAgICByZXR1cm4gdmFsdWUgPT09IGxlZ2VuZERpc3BhdGNoZXIgPyBsZWdlbmQgOiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIGxlZ2VuZFxufVxuIiwiaW1wb3J0IGNvbG9yIGZyb20gJy4vY29sb3InXG5pbXBvcnQgc2l6ZSBmcm9tICcuL3NpemUnXG5pbXBvcnQgc3ltYm9sIGZyb20gJy4vc3ltYm9sJ1xuaW1wb3J0IGhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJ1xuXG5kMy5sZWdlbmRDb2xvciA9IGNvbG9yXG5kMy5sZWdlbmRTaXplID0gc2l6ZVxuZDMubGVnZW5kU3ltYm9sID0gc3ltYm9sXG5kMy5sZWdlbmRIZWxwZXJzID0gaGVscGVyc1xuIl19\n","/*!\n * tinygradient (v1.1.5)\n * @copyright 2014-2021 Damien \"Mistic\" Sorel \n * @licence MIT\n */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('tinycolor2')) :\n typeof define === 'function' && define.amd ? define(['tinycolor2'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.tinygradient = factory(global.tinycolor));\n}(this, (function (tinycolor2) { 'use strict';\n\n function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n var tinycolor2__default = /*#__PURE__*/_interopDefaultLegacy(tinycolor2);\n\n /**\n * @typedef {Object} TinyGradient.StopInput\n * @property {ColorInput} color\n * @property {number} pos\n */\n\n /**\n * @typedef {Object} TinyGradient.StepValue\n * @type {number} [r]\n * @type {number} [g]\n * @type {number} [b]\n * @type {number} [h]\n * @type {number} [s]\n * @type {number} [v]\n * @type {number} [a]\n */\n\n /**\n * @type {StepValue}\n */\n\n var RGBA_MAX = {\n r: 256,\n g: 256,\n b: 256,\n a: 1\n };\n /**\n * @type {StepValue}\n */\n\n var HSVA_MAX = {\n h: 360,\n s: 1,\n v: 1,\n a: 1\n };\n /**\n * Linearly compute the step size between start and end (not normalized)\n * @param {StepValue} start\n * @param {StepValue} end\n * @param {number} steps - number of desired steps\n * @return {StepValue}\n */\n\n function stepize(start, end, steps) {\n var step = {};\n\n for (var k in start) {\n if (start.hasOwnProperty(k)) {\n step[k] = steps === 0 ? 0 : (end[k] - start[k]) / steps;\n }\n }\n\n return step;\n }\n /**\n * Compute the final step color\n * @param {StepValue} step - from `stepize`\n * @param {StepValue} start\n * @param {number} i - color index\n * @param {StepValue} max - rgba or hsva of maximum values for each channel\n * @return {StepValue}\n */\n\n\n function interpolate(step, start, i, max) {\n var color = {};\n\n for (var k in start) {\n if (start.hasOwnProperty(k)) {\n color[k] = step[k] * i + start[k];\n color[k] = color[k] < 0 ? color[k] + max[k] : max[k] !== 1 ? color[k] % max[k] : color[k];\n }\n }\n\n return color;\n }\n /**\n * Generate gradient with RGBa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @return {tinycolor[]} color1 included, color2 excluded\n */\n\n\n function interpolateRgb(stop1, stop2, steps) {\n var start = stop1.color.toRgb();\n var end = stop2.color.toRgb();\n var step = stepize(start, end, steps);\n var gradient = [stop1.color];\n\n for (var i = 1; i < steps; i++) {\n var color = interpolate(step, start, i, RGBA_MAX);\n gradient.push(tinycolor2__default['default'](color));\n }\n\n return gradient;\n }\n /**\n * Generate gradient with HSVa interpolation\n * @param {StopInput} stop1\n * @param {StopInput} stop2\n * @param {number} steps\n * @param {boolean|'long'|'short'} mode\n * @return {tinycolor[]} color1 included, color2 excluded\n */\n\n\n function interpolateHsv(stop1, stop2, steps, mode) {\n var start = stop1.color.toHsv();\n var end = stop2.color.toHsv(); // rgb interpolation if one of the steps in grayscale\n\n if (start.s === 0 || end.s === 0) {\n return interpolateRgb(stop1, stop2, steps);\n }\n\n var trigonometric;\n\n if (typeof mode === 'boolean') {\n trigonometric = mode;\n } else {\n var trigShortest = start.h < end.h && end.h - start.h < 180 || start.h > end.h && start.h - end.h > 180;\n trigonometric = mode === 'long' && trigShortest || mode === 'short' && !trigShortest;\n }\n\n var step = stepize(start, end, steps);\n var gradient = [stop1.color]; // recompute hue\n\n var diff;\n\n if (start.h <= end.h && !trigonometric || start.h >= end.h && trigonometric) {\n diff = end.h - start.h;\n } else if (trigonometric) {\n diff = 360 - end.h + start.h;\n } else {\n diff = 360 - start.h + end.h;\n }\n\n step.h = Math.pow(-1, trigonometric ? 1 : 0) * Math.abs(diff) / steps;\n\n for (var i = 1; i < steps; i++) {\n var color = interpolate(step, start, i, HSVA_MAX);\n gradient.push(tinycolor2__default['default'](color));\n }\n\n return gradient;\n }\n /**\n * Compute substeps between each stops\n * @param {StopInput[]} stops\n * @param {number} steps\n * @return {number[]}\n */\n\n\n function computeSubsteps(stops, steps) {\n var l = stops.length; // validation\n\n steps = parseInt(steps, 10);\n\n if (isNaN(steps) || steps < 2) {\n throw new Error('Invalid number of steps (< 2)');\n }\n\n if (steps < l) {\n throw new Error('Number of steps cannot be inferior to number of stops');\n } // compute substeps from stop positions\n\n\n var substeps = [];\n\n for (var i = 1; i < l; i++) {\n var step = (steps - 1) * (stops[i].pos - stops[i - 1].pos);\n substeps.push(Math.max(1, Math.round(step)));\n } // adjust number of steps\n\n\n var totalSubsteps = 1;\n\n for (var n = l - 1; n--;) {\n totalSubsteps += substeps[n];\n }\n\n while (totalSubsteps !== steps) {\n if (totalSubsteps < steps) {\n var min = Math.min.apply(null, substeps);\n substeps[substeps.indexOf(min)]++;\n totalSubsteps++;\n } else {\n var max = Math.max.apply(null, substeps);\n substeps[substeps.indexOf(max)]--;\n totalSubsteps--;\n }\n }\n\n return substeps;\n }\n /**\n * Compute the color at a specific position\n * @param {StopInput[]} stops\n * @param {number} pos\n * @param {string} method\n * @param {StepValue} max\n * @returns {tinycolor}\n */\n\n\n function computeAt(stops, pos, method, max) {\n if (pos < 0 || pos > 1) {\n throw new Error('Position must be between 0 and 1');\n }\n\n var start, end;\n\n for (var i = 0, l = stops.length; i < l - 1; i++) {\n if (pos >= stops[i].pos && pos < stops[i + 1].pos) {\n start = stops[i];\n end = stops[i + 1];\n break;\n }\n }\n\n if (!start) {\n start = end = stops[stops.length - 1];\n }\n\n var step = stepize(start.color[method](), end.color[method](), (end.pos - start.pos) * 100);\n var color = interpolate(step, start.color[method](), (pos - start.pos) * 100, max);\n return tinycolor2__default['default'](color);\n }\n\n var TinyGradient = /*#__PURE__*/function () {\n /**\n * @param {StopInput[]|ColorInput[]} stops\n * @returns {TinyGradient}\n */\n function TinyGradient(stops) {\n // validation\n if (stops.length < 2) {\n throw new Error('Invalid number of stops (< 2)');\n }\n\n var havingPositions = stops[0].pos !== undefined;\n var l = stops.length;\n var p = -1;\n var lastColorLess = false; // create tinycolor objects and clean positions\n\n this.stops = stops.map(function (stop, i) {\n var hasPosition = stop.pos !== undefined;\n\n if (havingPositions ^ hasPosition) {\n throw new Error('Cannot mix positionned and not posionned color stops');\n }\n\n if (hasPosition) {\n var hasColor = stop.color !== undefined;\n\n if (!hasColor && (lastColorLess || i === 0 || i === l - 1)) {\n throw new Error('Cannot define two consecutive position-only stops');\n }\n\n lastColorLess = !hasColor;\n stop = {\n color: hasColor ? tinycolor2__default['default'](stop.color) : null,\n colorLess: !hasColor,\n pos: stop.pos\n };\n\n if (stop.pos < 0 || stop.pos > 1) {\n throw new Error('Color stops positions must be between 0 and 1');\n } else if (stop.pos < p) {\n throw new Error('Color stops positions are not ordered');\n }\n\n p = stop.pos;\n } else {\n stop = {\n color: tinycolor2__default['default'](stop.color !== undefined ? stop.color : stop),\n pos: i / (l - 1)\n };\n }\n\n return stop;\n });\n\n if (this.stops[0].pos !== 0) {\n this.stops.unshift({\n color: this.stops[0].color,\n pos: 0\n });\n l++;\n }\n\n if (this.stops[l - 1].pos !== 1) {\n this.stops.push({\n color: this.stops[l - 1].color,\n pos: 1\n });\n }\n }\n /**\n * Return new instance with reversed stops\n * @return {TinyGradient}\n */\n\n\n var _proto = TinyGradient.prototype;\n\n _proto.reverse = function reverse() {\n var stops = [];\n this.stops.forEach(function (stop) {\n stops.push({\n color: stop.color,\n pos: 1 - stop.pos\n });\n });\n return new TinyGradient(stops.reverse());\n }\n /**\n * Return new instance with looped stops\n * @return {TinyGradient}\n */\n ;\n\n _proto.loop = function loop() {\n var stops1 = [];\n var stops2 = [];\n this.stops.forEach(function (stop) {\n stops1.push({\n color: stop.color,\n pos: stop.pos / 2\n });\n });\n this.stops.slice(0, -1).forEach(function (stop) {\n stops2.push({\n color: stop.color,\n pos: 1 - stop.pos / 2\n });\n });\n return new TinyGradient(stops1.concat(stops2.reverse()));\n }\n /**\n * Generate gradient with RGBa interpolation\n * @param {number} steps\n * @return {tinycolor[]}\n */\n ;\n\n _proto.rgb = function rgb(steps) {\n var _this = this;\n\n var substeps = computeSubsteps(this.stops, steps);\n var gradient = [];\n this.stops.forEach(function (stop, i) {\n if (stop.colorLess) {\n stop.color = interpolateRgb(_this.stops[i - 1], _this.stops[i + 1], 2)[1];\n }\n });\n\n for (var i = 0, l = this.stops.length; i < l - 1; i++) {\n var rgb = interpolateRgb(this.stops[i], this.stops[i + 1], substeps[i]);\n gradient.splice.apply(gradient, [gradient.length, 0].concat(rgb));\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n return gradient;\n }\n /**\n * Generate gradient with HSVa interpolation\n * @param {number} steps\n * @param {boolean|'long'|'short'} [mode=false]\n * - false to step in clockwise\n * - true to step in trigonometric order\n * - 'short' to use the shortest way\n * - 'long' to use the longest way\n * @return {tinycolor[]}\n */\n ;\n\n _proto.hsv = function hsv(steps, mode) {\n var _this2 = this;\n\n var substeps = computeSubsteps(this.stops, steps);\n var gradient = [];\n this.stops.forEach(function (stop, i) {\n if (stop.colorLess) {\n stop.color = interpolateHsv(_this2.stops[i - 1], _this2.stops[i + 1], 2, mode)[1];\n }\n });\n\n for (var i = 0, l = this.stops.length; i < l - 1; i++) {\n var hsv = interpolateHsv(this.stops[i], this.stops[i + 1], substeps[i], mode);\n gradient.splice.apply(gradient, [gradient.length, 0].concat(hsv));\n }\n\n gradient.push(this.stops[this.stops.length - 1].color);\n return gradient;\n }\n /**\n * Generate CSS3 command (no prefix) for this gradient\n * @param {String} [mode=linear] - 'linear' or 'radial'\n * @param {String} [direction] - default is 'to right' or 'ellipse at center'\n * @return {String}\n */\n ;\n\n _proto.css = function css(mode, direction) {\n mode = mode || 'linear';\n direction = direction || (mode === 'linear' ? 'to right' : 'ellipse at center');\n var css = mode + '-gradient(' + direction;\n this.stops.forEach(function (stop) {\n css += ', ' + (stop.colorLess ? '' : stop.color.toRgbString() + ' ') + stop.pos * 100 + '%';\n });\n css += ')';\n return css;\n }\n /**\n * Returns the color at specific position with RGBa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n ;\n\n _proto.rgbAt = function rgbAt(pos) {\n return computeAt(this.stops, pos, 'toRgb', RGBA_MAX);\n }\n /**\n * Returns the color at specific position with HSVa interpolation\n * @param {number} pos, between 0 and 1\n * @return {tinycolor}\n */\n ;\n\n _proto.hsvAt = function hsvAt(pos) {\n return computeAt(this.stops, pos, 'toHsv', HSVA_MAX);\n };\n\n return TinyGradient;\n }();\n /**\n * @param {StopInput[]|ColorInput[]|StopInput...|ColorInput...} stops\n * @returns {TinyGradient}\n */\n\n\n var tinygradient = function tinygradient(stops) {\n // varargs\n if (arguments.length === 1) {\n if (!Array.isArray(arguments[0])) {\n throw new Error('\"stops\" is not an array');\n }\n\n stops = arguments[0];\n } else {\n stops = Array.prototype.slice.call(arguments);\n }\n\n return new TinyGradient(stops);\n };\n\n return tinygradient;\n\n})));\n//# sourceMappingURL=browser.js.map\n","/**\n * marked v12.0.2 - a markdown parser\n * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){\"use strict\";function t(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}function n(t){e.defaults=t}e.defaults={async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null};const s=/[&<>\"']/,r=new RegExp(s.source,\"g\"),i=/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,l=new RegExp(i.source,\"g\"),o={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},a=e=>o[e];function c(e,t){if(t){if(s.test(e))return e.replace(r,a)}else if(i.test(e))return e.replace(l,a);return e}const h=/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/gi;function p(e){return e.replace(h,((e,t)=>\"colon\"===(t=t.toLowerCase())?\":\":\"#\"===t.charAt(0)?\"x\"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):\"\"))}const u=/(^|[^\\[])\\^/g;function k(e,t){let n=\"string\"==typeof e?e:e.source;t=t||\"\";const s={replace:(e,t)=>{let r=\"string\"==typeof t?t:t.source;return r=r.replace(u,\"$1\"),n=n.replace(e,r),s},getRegex:()=>new RegExp(n,t)};return s}function g(e){try{e=encodeURI(e).replace(/%25/g,\"%\")}catch(e){return null}return e}const f={exec:()=>null};function d(e,t){const n=e.replace(/\\|/g,((e,t,n)=>{let s=!1,r=t;for(;--r>=0&&\"\\\\\"===n[r];)s=!s;return s?\"|\":\" |\"})).split(/ \\|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length0)return{type:\"space\",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?e:x(e,\"\\n\")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=function(e,t){const n=e.match(/^(\\s+)(?:```)/);if(null===n)return t;const s=n[1];return t.split(\"\\n\").map((e=>{const t=e.match(/^\\s+/);if(null===t)return e;const[n]=t;return n.length>=s.length?e.slice(s.length):e})).join(\"\\n\")}(e,t[3]||\"\");return{type:\"code\",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=x(e,\"#\");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=t[0].replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\"\\n $1\");e=x(e.replace(/^ *>[ \\t]?/gm,\"\"),\"\\n\");const n=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:\"blockquote\",raw:t[0],tokens:s,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const s=n.length>1,r={type:\"list\",raw:\"\",ordered:s,start:s?+n.slice(0,-1):\"\",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:\"[*+-]\");const i=new RegExp(`^( {0,3}${n})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);let l=\"\",o=\"\",a=!1;for(;e;){let n=!1;if(!(t=i.exec(e)))break;if(this.rules.block.hr.test(e))break;l=t[0],e=e.substring(l.length);let s=t[2].split(\"\\n\",1)[0].replace(/^\\t+/,(e=>\" \".repeat(3*e.length))),c=e.split(\"\\n\",1)[0],h=0;this.options.pedantic?(h=2,o=s.trimStart()):(h=t[2].search(/[^ ]/),h=h>4?1:h,o=s.slice(h),h+=t[1].length);let p=!1;if(!s&&/^ *$/.test(c)&&(l+=c+\"\\n\",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`),n=new RegExp(`^ {0,${Math.min(3,h-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),r=new RegExp(`^ {0,${Math.min(3,h-1)}}(?:\\`\\`\\`|~~~)`),i=new RegExp(`^ {0,${Math.min(3,h-1)}}#`);for(;e;){const a=e.split(\"\\n\",1)[0];if(c=a,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g,\" \")),r.test(c))break;if(i.test(c))break;if(t.test(c))break;if(n.test(e))break;if(c.search(/[^ ]/)>=h||!c.trim())o+=\"\\n\"+c.slice(h);else{if(p)break;if(s.search(/[^ ]/)>=4)break;if(r.test(s))break;if(i.test(s))break;if(n.test(s))break;o+=\"\\n\"+c}p||c.trim()||(p=!0),l+=a+\"\\n\",e=e.substring(a.length+1),s=c.slice(h)}}r.loose||(a?r.loose=!0:/\\n *\\n *$/.test(l)&&(a=!0));let u,k=null;this.options.gfm&&(k=/^\\[[ xX]\\] /.exec(o),k&&(u=\"[ ] \"!==k[0],o=o.replace(/^\\[[ xX]\\] +/,\"\"))),r.items.push({type:\"list_item\",raw:l,task:!!k,checked:u,loose:!1,text:o,tokens:[]}),r.raw+=l}r.items[r.items.length-1].raw=l.trimEnd(),r.items[r.items.length-1].text=o.trimEnd(),r.raw=r.raw.trimEnd();for(let e=0;e\"space\"===e.type)),n=t.length>0&&t.some((e=>/\\n.*\\n/.test(e.raw)));r.loose=n}if(r.loose)for(let e=0;e$/,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:e,raw:t[0],href:n,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(!t)return;if(!/[:|]/.test(t[2]))return;const n=d(t[1]),s=t[2].replace(/^\\||\\| *$/g,\"\").split(\"|\"),r=t[3]&&t[3].trim()?t[3].replace(/\\n[ \\t]*$/,\"\").split(\"\\n\"):[],i={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(const e of s)/^ *-+: *$/.test(e)?i.align.push(\"right\"):/^ *:-+: *$/.test(e)?i.align.push(\"center\"):/^ *:-+ *$/.test(e)?i.align.push(\"left\"):i.align.push(null);for(const e of n)i.header.push({text:e,tokens:this.lexer.inline(e)});for(const e of r)i.rows.push(d(e,i.header.length).map((e=>({text:e,tokens:this.lexer.inline(e)}))));return i}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:\"=\"===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e=\"\\n\"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:c(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^
    /i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\\/(pre|code|kbd|script)(\\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=x(e.slice(0,-1),\"\\\\\");if((e.length-t.length)%2==0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;let n=0;for(let s=0;s-1){const n=(0===t[0].indexOf(\"!\")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=\"\"}}let n=t[2],s=\"\";if(this.options.pedantic){const e=/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(n);e&&(n=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):\"\";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),b(t,{href:n?n.replace(this.rules.inline.anyPunctuation,\"$1\"):n,title:s?s.replace(this.rules.inline.anyPunctuation,\"$1\"):s},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\\s+/g,\" \").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:\"text\",raw:e,text:e}}return b(n,e,n[0],this.lexer)}}emStrong(e,t,n=\"\"){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s)return;if(s[3]&&n.match(/[\\p{L}\\p{N}]/u))return;if(!(s[1]||s[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){const n=[...s[0]].length-1;let r,i,l=n,o=0;const a=\"*\"===s[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(a.lastIndex=0,t=t.slice(-1*e.length+n);null!=(s=a.exec(t));){if(r=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!r)continue;if(i=[...r].length,s[3]||s[4]){l+=i;continue}if((s[5]||s[6])&&n%3&&!((n+i)%3)){o+=i;continue}if(l-=i,l>0)continue;i=Math.min(i,i+l+o);const t=[...s[0]][0].length,a=e.slice(0,n+s.index+t+i);if(Math.min(n,i)%2){const e=a.slice(1,-1);return{type:\"em\",raw:a,text:e,tokens:this.lexer.inlineTokens(e)}}const c=a.slice(2,-2);return{type:\"strong\",raw:a,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\\n/g,\" \");const n=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return n&&s&&(e=e.substring(1,e.length-1)),e=c(e,!0),{type:\"codespan\",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return\"@\"===t[2]?(e=c(t[1]),n=\"mailto:\"+e):(e=c(t[1]),n=e),{type:\"link\",raw:t[0],text:e,href:n,tokens:[{type:\"text\",raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(\"@\"===t[2])e=c(t[0]),n=\"mailto:\"+e;else{let s;do{s=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\"}while(s!==t[0]);e=c(t[0]),n=\"www.\"===t[1]?\"http://\"+t[0]:t[0]}return{type:\"link\",raw:t[0],text:e,href:n,tokens:[{type:\"text\",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:c(t[0]),{type:\"text\",raw:t[0],text:e}}}}const m=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,y=/(?:[*+-]|\\d{1,9}[.)])/,$=k(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/).replace(/bull/g,y).replace(/blockCode/g,/ {4}/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).getRegex(),z=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,T=/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,R=k(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/).replace(\"label\",T).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),_=k(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,y).getRegex(),A=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",S=/|$))/,I=k(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|\\\\n*|$)|\\\\n*|$)|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$))\",\"i\").replace(\"comment\",S).replace(\"tag\",A).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),E=k(z).replace(\"hr\",m).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",A).getRegex(),q={blockquote:k(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",E).getRegex(),code:/^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,def:R,fences:/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,heading:/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,hr:m,html:I,lheading:$,list:_,newline:/^(?: *(?:\\n|$))+/,paragraph:E,table:f,text:/^[^\\n]+/},Z=k(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",m).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\" {4}[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",A).getRegex(),L={...q,table:Z,paragraph:k(z).replace(\"hr\",m).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",Z).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\")|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",A).getRegex()},P={...q,html:k(\"^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))\").replace(\"comment\",S).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:f,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:k(z).replace(\"hr\",m).replace(\"heading\",\" *#{1,6} *[^\\n]\").replace(\"lheading\",$).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Q=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,v=/^( {2,}|\\\\)\\n(?!\\s*$)/,B=\"\\\\p{P}\\\\p{S}\",C=k(/^((?![*_])[\\spunctuation])/,\"u\").replace(/punctuation/g,B).getRegex(),M=k(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/,\"u\").replace(/punct/g,B).getRegex(),O=k(\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])\",\"gu\").replace(/punct/g,B).getRegex(),D=k(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\\\s]|$)|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])|[\\\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])\",\"gu\").replace(/punct/g,B).getRegex(),j=k(/\\\\([punct])/,\"gu\").replace(/punct/g,B).getRegex(),H=k(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),U=k(S).replace(\"(?:--\\x3e|$)\",\"--\\x3e\").getRegex(),X=k(\"^comment|^|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^|^\").replace(\"comment\",U).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),F=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,N=k(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/).replace(\"label\",F).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),G=k(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",F).replace(\"ref\",T).getRegex(),J=k(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",T).getRegex(),K={_backpedal:f,anyPunctuation:j,autolink:H,blockSkip:/\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g,br:v,code:/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,del:f,emStrongLDelim:M,emStrongRDelimAst:O,emStrongRDelimUnd:D,escape:Q,link:N,nolink:J,punctuation:C,reflink:G,reflinkSearch:k(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",G).replace(\"nolink\",J).getRegex(),tag:X,text:/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\t+\" \".repeat(n.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.space(e))e=e.substring(n.raw.length),1===n.raw.length&&t.length>0?t[t.length-1].raw+=\"\\n\":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||\"paragraph\"!==s.type&&\"text\"!==s.type?t.push(n):(s.raw+=\"\\n\"+n.raw,s.text+=\"\\n\"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),s=t[t.length-1],!s||\"paragraph\"!==s.type&&\"text\"!==s.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(s.raw+=\"\\n\"+n.raw,s.text+=\"\\n\"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else{if(r=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startBlock.forEach((e=>{s=e.call({lexer:this},n),\"number\"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(this.state.top&&(n=this.tokenizer.paragraph(r)))s=t[t.length-1],i&&\"paragraph\"===s.type?(s.raw+=\"\\n\"+n.raw,s.text+=\"\\n\"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n),i=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&\"text\"===s.type?(s.raw+=\"\\n\"+n.raw,s.text+=\"\\n\"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(n);else if(e){const t=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,s,r,i,l,o,a=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(a));)e.includes(i[0].slice(i[0].lastIndexOf(\"[\")+1,-1))&&(a=a.slice(0,i.index)+\"[\"+\"a\".repeat(i[0].length-2)+\"]\"+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(a));)a=a.slice(0,i.index)+\"[\"+\"a\".repeat(i[0].length-2)+\"]\"+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.anyPunctuation.exec(a));)a=a.slice(0,i.index)+\"++\"+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(l||(o=\"\"),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),s=t[t.length-1],s&&\"text\"===n.type&&\"text\"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),s=t[t.length-1],s&&\"text\"===n.type&&\"text\"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,a,o))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e))){if(r=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startInline.forEach((e=>{s=e.call({lexer:this},n),\"number\"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(r))e=e.substring(n.raw.length),\"_\"!==n.raw.slice(-1)&&(o=n.raw.slice(-1)),l=!0,s=t[t.length-1],s&&\"text\"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);else if(e){const t=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(n.raw.length),t.push(n);return t}}class se{options;constructor(t){this.options=t||e.defaults}code(e,t,n){const s=(t||\"\").match(/^\\S*/)?.[0];return e=e.replace(/\\n$/,\"\")+\"\\n\",s?'
    '+(n?e:c(e,!0))+\"
    \\n\":\"
    \"+(n?e:c(e,!0))+\"
    \\n\"}blockquote(e){return`
    \\n${e}
    \\n`}html(e,t){return e}heading(e,t,n){return`${e}\\n`}hr(){return\"
    \\n\"}list(e,t,n){const s=t?\"ol\":\"ul\";return\"<\"+s+(t&&1!==n?' start=\"'+n+'\"':\"\")+\">\\n\"+e+\"\\n\"}listitem(e,t,n){return`
  • ${e}
  • \\n`}checkbox(e){return\"'}paragraph(e){return`

    ${e}

    \\n`}table(e,t){return t&&(t=`${t}`),\"\\n\\n\"+e+\"\\n\"+t+\"
    \\n\"}tablerow(e){return`\\n${e}\\n`}tablecell(e,t){const n=t.header?\"th\":\"td\";return(t.align?`<${n} align=\"${t.align}\">`:`<${n}>`)+e+`\\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return\"
    \"}del(e){return`${e}`}link(e,t,n){const s=g(e);if(null===s)return n;let r='
    \"+n+\"\",r}image(e,t,n){const s=g(e);if(null===s)return n;let r=`\"${n}\"`;return\",r}text(e){return e}}class re{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return\"\"+n}image(e,t,n){return\"\"+n}br(){return\"\"}}class ie{options;renderer;textRenderer;constructor(t){this.options=t||e.defaults,this.options.renderer=this.options.renderer||new se,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new re}static parse(e,t){return new ie(t).parse(e)}static parseInline(e,t){return new ie(t).parseInline(e)}parse(e,t=!0){let n=\"\";for(let s=0;s0&&\"paragraph\"===n.tokens[0].type?(n.tokens[0].text=e+\" \"+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&\"text\"===n.tokens[0].tokens[0].type&&(n.tokens[0].tokens[0].text=e+\" \"+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:\"text\",text:e+\" \"}):o+=e+\" \"}o+=this.parse(n.tokens,i),l+=this.renderer.listitem(o,r,!!s)}n+=this.renderer.list(l,t,s);continue}case\"html\":{const e=r;n+=this.renderer.html(e.text,e.block);continue}case\"paragraph\":{const e=r;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case\"text\":{let i=r,l=i.tokens?this.parseInline(i.tokens):i.text;for(;s+1{const r=e[s].flat(1/0);n=n.concat(this.walkTokens(r,t))})):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{const n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error(\"extension name required\");if(\"renderer\"in e){const n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=n.apply(this,t)),s}:e.renderer}if(\"tokenizer\"in e){if(!e.level||\"block\"!==e.level&&\"inline\"!==e.level)throw new Error(\"extension level must be 'block' or 'inline'\");const n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(\"block\"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:\"inline\"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}\"childTokens\"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){const t=this.defaults.renderer||new se(this.defaults);for(const n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if(\"options\"===n)continue;const s=n,r=e.renderer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n||\"\"}}n.renderer=t}if(e.tokenizer){const t=this.defaults.tokenizer||new w(this.defaults);for(const n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(n))continue;const s=n,r=e.tokenizer[s],i=t[s];t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){const t=this.defaults.hooks||new le;for(const n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if(\"options\"===n)continue;const s=n,r=e.hooks[s],i=t[s];le.passThroughHooks.has(n)?t[s]=e=>{if(this.defaults.async)return Promise.resolve(r.call(t,e)).then((e=>i.call(t,e)));const n=r.call(t,e);return i.call(t,n)}:t[s]=(...e)=>{let n=r.apply(t,e);return!1===n&&(n=i.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){const t=this.defaults.walkTokens,s=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(s.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}})),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ne.lex(e,t??this.defaults)}parser(e,t){return ie.parse(e,t??this.defaults)}#e(e,t){return(n,s)=>{const r={...s},i={...this.defaults,...r};!0===this.defaults.async&&!1===r.async&&(i.silent||console.warn(\"marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.\"),i.async=!0);const l=this.#t(!!i.silent,!!i.async);if(null==n)return l(new Error(\"marked(): input parameter is undefined or null\"));if(\"string\"!=typeof n)return l(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(i.hooks&&(i.hooks.options=i),i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(n):n).then((t=>e(t,i))).then((e=>i.hooks?i.hooks.processAllTokens(e):e)).then((e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then((()=>e)):e)).then((e=>t(e,i))).then((e=>i.hooks?i.hooks.postprocess(e):e)).catch(l);try{i.hooks&&(n=i.hooks.preprocess(n));let s=e(n,i);i.hooks&&(s=i.hooks.processAllTokens(s)),i.walkTokens&&this.walkTokens(s,i.walkTokens);let r=t(s,i);return i.hooks&&(r=i.hooks.postprocess(r)),r}catch(e){return l(e)}}}#t(e,t){return n=>{if(n.message+=\"\\nPlease report this to https://github.com/markedjs/marked.\",e){const e=\"

    An error occurred:

    \"+c(n.message+\"\",!0)+\"
    \";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}}const ae=new oe;function ce(e,t){return ae.parse(e,t)}ce.options=ce.setOptions=function(e){return ae.setOptions(e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.getDefaults=t,ce.defaults=e.defaults,ce.use=function(...e){return ae.use(...e),ce.defaults=ae.defaults,n(ce.defaults),ce},ce.walkTokens=function(e,t){return ae.walkTokens(e,t)},ce.parseInline=ae.parseInline,ce.Parser=ie,ce.parser=ie.parse,ce.Renderer=se,ce.TextRenderer=re,ce.Lexer=ne,ce.lexer=ne.lex,ce.Tokenizer=w,ce.Hooks=le,ce.parse=ce;const he=ce.options,pe=ce.setOptions,ue=ce.use,ke=ce.walkTokens,ge=ce.parseInline,fe=ce,de=ie.parse,xe=ne.lex;e.Hooks=le,e.Lexer=ne,e.Marked=oe,e.Parser=ie,e.Renderer=se,e.TextRenderer=re,e.Tokenizer=w,e.getDefaults=t,e.lexer=xe,e.marked=ce,e.options=he,e.parse=fe,e.parseInline=ge,e.parser=de,e.setOptions=pe,e.use=ue,e.walkTokens=ke}));\n"],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[]} \ No newline at end of file diff --git a/site/mitre/styles.css b/site/mitre/styles.css new file mode 100644 index 0000000..b502d5c --- /dev/null +++ b/site/mitre/styles.css @@ -0,0 +1,896 @@ +/*!********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[6].rules[0].oneOf[0].use[2]!./node_modules/@angular/material/prebuilt-themes/indigo-pink.css ***! + \********************************************************************************************************************************************************************************************************************************************************/ +.mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, 0.1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus::before{content:""}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus::before{content:""}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}html{--mat-ripple-color:rgba(0, 0, 0, 0.1)}html{--mat-option-selected-state-label-text-color:#3f51b5;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}.mat-accent{--mat-option-selected-state-label-text-color:#ff4081;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}.mat-warn{--mat-option-selected-state-label-text-color:#f44336;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}html{--mat-optgroup-label-text-color:rgba(0, 0, 0, 0.87)}.mat-primary{--mat-full-pseudo-checkbox-selected-icon-color:#3f51b5;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#3f51b5;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}html{--mat-full-pseudo-checkbox-selected-icon-color:#ff4081;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#ff4081;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}.mat-accent{--mat-full-pseudo-checkbox-selected-icon-color:#ff4081;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#ff4081;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}.mat-warn{--mat-full-pseudo-checkbox-selected-icon-color:#f44336;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#f44336;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}html{--mat-app-background-color:#fafafa;--mat-app-text-color:rgba(0, 0, 0, 0.87)}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12)}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12)}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-theme-loaded-marker{display:none}html{--mat-option-label-text-font:Roboto, sans-serif;--mat-option-label-text-line-height:24px;--mat-option-label-text-size:16px;--mat-option-label-text-tracking:0.03125em;--mat-option-label-text-weight:400}html{--mat-optgroup-label-text-font:Roboto, sans-serif;--mat-optgroup-label-text-line-height:24px;--mat-optgroup-label-text-size:16px;--mat-optgroup-label-text-tracking:0.03125em;--mat-optgroup-label-text-weight:400}html{--mdc-elevated-card-container-shape:4px;--mdc-outlined-card-container-shape:4px;--mdc-outlined-card-outline-width:1px}html{--mdc-elevated-card-container-color:white;--mdc-elevated-card-container-elevation:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mdc-outlined-card-container-color:white;--mdc-outlined-card-outline-color:rgba(0, 0, 0, 0.12);--mdc-outlined-card-container-elevation:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mat-card-subtitle-text-color:rgba(0, 0, 0, 0.54)}html{--mat-card-title-text-font:Roboto, sans-serif;--mat-card-title-text-line-height:32px;--mat-card-title-text-size:20px;--mat-card-title-text-tracking:0.0125em;--mat-card-title-text-weight:500;--mat-card-subtitle-text-font:Roboto, sans-serif;--mat-card-subtitle-text-line-height:22px;--mat-card-subtitle-text-size:14px;--mat-card-subtitle-text-tracking:0.0071428571em;--mat-card-subtitle-text-weight:500}html{--mdc-linear-progress-active-indicator-height:4px;--mdc-linear-progress-track-height:4px;--mdc-linear-progress-track-shape:0}.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color:#3f51b5;--mdc-linear-progress-track-color:rgba(63, 81, 181, 0.25)}.mat-mdc-progress-bar.mat-accent{--mdc-linear-progress-active-indicator-color:#ff4081;--mdc-linear-progress-track-color:rgba(255, 64, 129, 0.25)}.mat-mdc-progress-bar.mat-warn{--mdc-linear-progress-active-indicator-color:#f44336;--mdc-linear-progress-track-color:rgba(244, 67, 54, 0.25)}html{--mdc-plain-tooltip-container-shape:4px;--mdc-plain-tooltip-supporting-text-line-height:16px}html{--mdc-plain-tooltip-container-color:#616161;--mdc-plain-tooltip-supporting-text-color:#fff}html{--mdc-plain-tooltip-supporting-text-font:Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size:12px;--mdc-plain-tooltip-supporting-text-weight:400;--mdc-plain-tooltip-supporting-text-tracking:0.0333333333em}html{--mdc-filled-text-field-active-indicator-height:1px;--mdc-filled-text-field-focus-active-indicator-height:2px;--mdc-filled-text-field-container-shape:4px;--mdc-outlined-text-field-outline-width:1px;--mdc-outlined-text-field-focus-outline-width:2px;--mdc-outlined-text-field-container-shape:4px}html{--mdc-filled-text-field-caret-color:#3f51b5;--mdc-filled-text-field-focus-active-indicator-color:#3f51b5;--mdc-filled-text-field-focus-label-text-color:rgba(63, 81, 181, 0.87);--mdc-filled-text-field-container-color:whitesmoke;--mdc-filled-text-field-disabled-container-color:#fafafa;--mdc-filled-text-field-label-text-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-hover-label-text-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-filled-text-field-input-text-color:rgba(0, 0, 0, 0.87);--mdc-filled-text-field-disabled-input-text-color:rgba(0, 0, 0, 0.38);--mdc-filled-text-field-input-text-placeholder-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-error-hover-label-text-color:#f44336;--mdc-filled-text-field-error-focus-label-text-color:#f44336;--mdc-filled-text-field-error-label-text-color:#f44336;--mdc-filled-text-field-error-caret-color:#f44336;--mdc-filled-text-field-active-indicator-color:rgba(0, 0, 0, 0.42);--mdc-filled-text-field-disabled-active-indicator-color:rgba(0, 0, 0, 0.06);--mdc-filled-text-field-hover-active-indicator-color:rgba(0, 0, 0, 0.87);--mdc-filled-text-field-error-active-indicator-color:#f44336;--mdc-filled-text-field-error-focus-active-indicator-color:#f44336;--mdc-filled-text-field-error-hover-active-indicator-color:#f44336;--mdc-outlined-text-field-caret-color:#3f51b5;--mdc-outlined-text-field-focus-outline-color:#3f51b5;--mdc-outlined-text-field-focus-label-text-color:rgba(63, 81, 181, 0.87);--mdc-outlined-text-field-label-text-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-hover-label-text-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-input-text-color:rgba(0, 0, 0, 0.87);--mdc-outlined-text-field-disabled-input-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-input-text-placeholder-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-error-caret-color:#f44336;--mdc-outlined-text-field-error-focus-label-text-color:#f44336;--mdc-outlined-text-field-error-label-text-color:#f44336;--mdc-outlined-text-field-error-hover-label-text-color:#f44336;--mdc-outlined-text-field-outline-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-disabled-outline-color:rgba(0, 0, 0, 0.06);--mdc-outlined-text-field-hover-outline-color:rgba(0, 0, 0, 0.87);--mdc-outlined-text-field-error-focus-outline-color:#f44336;--mdc-outlined-text-field-error-hover-outline-color:#f44336;--mdc-outlined-text-field-error-outline-color:#f44336;--mat-form-field-focus-select-arrow-color:rgba(63, 81, 181, 0.87);--mat-form-field-disabled-input-text-placeholder-color:rgba(0, 0, 0, 0.38);--mat-form-field-state-layer-color:rgba(0, 0, 0, 0.87);--mat-form-field-error-text-color:#f44336;--mat-form-field-select-option-text-color:inherit;--mat-form-field-select-disabled-option-text-color:GrayText;--mat-form-field-leading-icon-color:unset;--mat-form-field-disabled-leading-icon-color:unset;--mat-form-field-trailing-icon-color:unset;--mat-form-field-disabled-trailing-icon-color:unset;--mat-form-field-error-focus-trailing-icon-color:unset;--mat-form-field-error-hover-trailing-icon-color:unset;--mat-form-field-error-trailing-icon-color:unset;--mat-form-field-enabled-select-arrow-color:rgba(0, 0, 0, 0.54);--mat-form-field-disabled-select-arrow-color:rgba(0, 0, 0, 0.38);--mat-form-field-hover-state-layer-opacity:0.04;--mat-form-field-focus-state-layer-opacity:0.08}.mat-mdc-form-field.mat-accent{--mdc-filled-text-field-caret-color:#ff4081;--mdc-filled-text-field-focus-active-indicator-color:#ff4081;--mdc-filled-text-field-focus-label-text-color:rgba(255, 64, 129, 0.87);--mdc-outlined-text-field-caret-color:#ff4081;--mdc-outlined-text-field-focus-outline-color:#ff4081;--mdc-outlined-text-field-focus-label-text-color:rgba(255, 64, 129, 0.87);--mat-form-field-focus-select-arrow-color:rgba(255, 64, 129, 0.87)}.mat-mdc-form-field.mat-warn{--mdc-filled-text-field-caret-color:#f44336;--mdc-filled-text-field-focus-active-indicator-color:#f44336;--mdc-filled-text-field-focus-label-text-color:rgba(244, 67, 54, 0.87);--mdc-outlined-text-field-caret-color:#f44336;--mdc-outlined-text-field-focus-outline-color:#f44336;--mdc-outlined-text-field-focus-label-text-color:rgba(244, 67, 54, 0.87);--mat-form-field-focus-select-arrow-color:rgba(244, 67, 54, 0.87)}html{--mat-form-field-container-height:56px;--mat-form-field-filled-label-display:block;--mat-form-field-container-vertical-padding:16px;--mat-form-field-filled-with-label-container-padding-top:24px;--mat-form-field-filled-with-label-container-padding-bottom:8px}html{--mdc-filled-text-field-label-text-font:Roboto, sans-serif;--mdc-filled-text-field-label-text-size:16px;--mdc-filled-text-field-label-text-tracking:0.03125em;--mdc-filled-text-field-label-text-weight:400;--mdc-outlined-text-field-label-text-font:Roboto, sans-serif;--mdc-outlined-text-field-label-text-size:16px;--mdc-outlined-text-field-label-text-tracking:0.03125em;--mdc-outlined-text-field-label-text-weight:400;--mat-form-field-container-text-font:Roboto, sans-serif;--mat-form-field-container-text-line-height:24px;--mat-form-field-container-text-size:16px;--mat-form-field-container-text-tracking:0.03125em;--mat-form-field-container-text-weight:400;--mat-form-field-outlined-label-text-populated-size:16px;--mat-form-field-subscript-text-font:Roboto, sans-serif;--mat-form-field-subscript-text-line-height:20px;--mat-form-field-subscript-text-size:12px;--mat-form-field-subscript-text-tracking:0.0333333333em;--mat-form-field-subscript-text-weight:400}html{--mat-select-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}html{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(63, 81, 181, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html .mat-mdc-form-field.mat-accent{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(255, 64, 129, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html .mat-mdc-form-field.mat-warn{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(244, 67, 54, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html{--mat-select-arrow-transform:translateY(-8px)}html{--mat-select-trigger-text-font:Roboto, sans-serif;--mat-select-trigger-text-line-height:24px;--mat-select-trigger-text-size:16px;--mat-select-trigger-text-tracking:0.03125em;--mat-select-trigger-text-weight:400}html{--mat-autocomplete-container-shape:4px;--mat-autocomplete-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}html{--mat-autocomplete-background-color:white}html{--mdc-dialog-container-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);--mdc-dialog-container-shadow-color:#000;--mdc-dialog-container-shape:4px;--mat-dialog-container-max-width:80vw;--mat-dialog-container-small-max-width:80vw;--mat-dialog-container-min-width:0;--mat-dialog-actions-alignment:start;--mat-dialog-actions-padding:8px;--mat-dialog-content-padding:20px 24px;--mat-dialog-with-actions-content-padding:20px 24px;--mat-dialog-headline-padding:0 24px 9px}html{--mdc-dialog-container-color:white;--mdc-dialog-subhead-color:rgba(0, 0, 0, 0.87);--mdc-dialog-supporting-text-color:rgba(0, 0, 0, 0.6)}html{--mdc-dialog-subhead-font:Roboto, sans-serif;--mdc-dialog-subhead-line-height:32px;--mdc-dialog-subhead-size:20px;--mdc-dialog-subhead-weight:500;--mdc-dialog-subhead-tracking:0.0125em;--mdc-dialog-supporting-text-font:Roboto, sans-serif;--mdc-dialog-supporting-text-line-height:24px;--mdc-dialog-supporting-text-size:16px;--mdc-dialog-supporting-text-weight:400;--mdc-dialog-supporting-text-tracking:0.03125em}.mat-mdc-standard-chip{--mdc-chip-container-shape-family:rounded;--mdc-chip-container-shape-radius:16px 16px 16px 16px;--mdc-chip-with-avatar-avatar-shape-family:rounded;--mdc-chip-with-avatar-avatar-shape-radius:14px 14px 14px 14px;--mdc-chip-with-avatar-avatar-size:28px;--mdc-chip-with-icon-icon-size:18px;--mdc-chip-outline-width:0;--mdc-chip-outline-color:transparent;--mdc-chip-disabled-outline-color:transparent;--mdc-chip-focus-outline-color:transparent;--mdc-chip-hover-state-layer-opacity:0.04;--mdc-chip-with-avatar-disabled-avatar-opacity:1;--mdc-chip-flat-selected-outline-width:0;--mdc-chip-selected-hover-state-layer-opacity:0.04;--mdc-chip-with-trailing-icon-disabled-trailing-icon-opacity:1;--mdc-chip-with-icon-disabled-icon-opacity:1;--mat-chip-disabled-container-opacity:0.4;--mat-chip-trailing-action-opacity:0.54;--mat-chip-trailing-action-focus-opacity:1;--mat-chip-trailing-action-state-layer-color:transparent;--mat-chip-selected-trailing-action-state-layer-color:transparent;--mat-chip-trailing-action-hover-state-layer-opacity:0;--mat-chip-trailing-action-focus-state-layer-opacity:0}.mat-mdc-standard-chip{--mdc-chip-disabled-label-text-color:#212121;--mdc-chip-elevated-container-color:#e0e0e0;--mdc-chip-elevated-selected-container-color:#e0e0e0;--mdc-chip-elevated-disabled-container-color:#e0e0e0;--mdc-chip-flat-disabled-selected-container-color:#e0e0e0;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:#212121;--mdc-chip-selected-label-text-color:#212121;--mdc-chip-with-icon-icon-color:#212121;--mdc-chip-with-icon-disabled-icon-color:#212121;--mdc-chip-with-icon-selected-icon-color:#212121;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:#212121;--mdc-chip-with-trailing-icon-trailing-icon-color:#212121;--mat-chip-selected-disabled-trailing-icon-color:#212121;--mat-chip-selected-trailing-icon-color:#212121}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-primary,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-primary{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#3f51b5;--mdc-chip-elevated-selected-container-color:#3f51b5;--mdc-chip-elevated-disabled-container-color:#3f51b5;--mdc-chip-flat-disabled-selected-container-color:#3f51b5;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-accent,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-accent{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#ff4081;--mdc-chip-elevated-selected-container-color:#ff4081;--mdc-chip-elevated-disabled-container-color:#ff4081;--mdc-chip-flat-disabled-selected-container-color:#ff4081;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-warn,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-warn{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#f44336;--mdc-chip-elevated-selected-container-color:#f44336;--mdc-chip-elevated-disabled-container-color:#f44336;--mdc-chip-flat-disabled-selected-container-color:#f44336;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height:32px}.mat-mdc-standard-chip{--mdc-chip-label-text-font:Roboto, sans-serif;--mdc-chip-label-text-line-height:20px;--mdc-chip-label-text-size:14px;--mdc-chip-label-text-tracking:0.0178571429em;--mdc-chip-label-text-weight:400}html{--mdc-switch-disabled-selected-icon-opacity:0.38;--mdc-switch-disabled-track-opacity:0.12;--mdc-switch-disabled-unselected-icon-opacity:0.38;--mdc-switch-handle-height:20px;--mdc-switch-handle-shape:10px;--mdc-switch-handle-width:20px;--mdc-switch-selected-icon-size:18px;--mdc-switch-track-height:14px;--mdc-switch-track-shape:7px;--mdc-switch-track-width:36px;--mdc-switch-unselected-icon-size:18px;--mdc-switch-selected-focus-state-layer-opacity:0.12;--mdc-switch-selected-hover-state-layer-opacity:0.04;--mdc-switch-selected-pressed-state-layer-opacity:0.1;--mdc-switch-unselected-focus-state-layer-opacity:0.12;--mdc-switch-unselected-hover-state-layer-opacity:0.04;--mdc-switch-unselected-pressed-state-layer-opacity:0.1;--mat-switch-disabled-selected-handle-opacity:0.38;--mat-switch-disabled-unselected-handle-opacity:0.38;--mat-switch-unselected-handle-size:20px;--mat-switch-selected-handle-size:20px;--mat-switch-pressed-handle-size:20px;--mat-switch-with-icon-handle-size:20px;--mat-switch-selected-handle-horizontal-margin:0;--mat-switch-selected-with-icon-handle-horizontal-margin:0;--mat-switch-selected-pressed-handle-horizontal-margin:0;--mat-switch-unselected-handle-horizontal-margin:0;--mat-switch-unselected-with-icon-handle-horizontal-margin:0;--mat-switch-unselected-pressed-handle-horizontal-margin:0;--mat-switch-visible-track-opacity:1;--mat-switch-hidden-track-opacity:1;--mat-switch-visible-track-transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);--mat-switch-hidden-track-transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);--mat-switch-track-outline-width:1px;--mat-switch-track-outline-color:transparent;--mat-switch-selected-track-outline-width:1px;--mat-switch-disabled-unselected-track-outline-width:1px;--mat-switch-disabled-unselected-track-outline-color:transparent}html{--mdc-switch-selected-focus-state-layer-color:#3949ab;--mdc-switch-selected-handle-color:#3949ab;--mdc-switch-selected-hover-state-layer-color:#3949ab;--mdc-switch-selected-pressed-state-layer-color:#3949ab;--mdc-switch-selected-focus-handle-color:#1a237e;--mdc-switch-selected-hover-handle-color:#1a237e;--mdc-switch-selected-pressed-handle-color:#1a237e;--mdc-switch-selected-focus-track-color:#7986cb;--mdc-switch-selected-hover-track-color:#7986cb;--mdc-switch-selected-pressed-track-color:#7986cb;--mdc-switch-selected-track-color:#7986cb;--mdc-switch-disabled-selected-handle-color:#424242;--mdc-switch-disabled-selected-icon-color:#fff;--mdc-switch-disabled-selected-track-color:#424242;--mdc-switch-disabled-unselected-handle-color:#424242;--mdc-switch-disabled-unselected-icon-color:#fff;--mdc-switch-disabled-unselected-track-color:#424242;--mdc-switch-handle-surface-color:var(--mdc-theme-surface, #fff);--mdc-switch-handle-elevation-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mdc-switch-handle-shadow-color:black;--mdc-switch-disabled-handle-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mdc-switch-selected-icon-color:#fff;--mdc-switch-unselected-focus-handle-color:#212121;--mdc-switch-unselected-focus-state-layer-color:#424242;--mdc-switch-unselected-focus-track-color:#e0e0e0;--mdc-switch-unselected-handle-color:#616161;--mdc-switch-unselected-hover-handle-color:#212121;--mdc-switch-unselected-hover-state-layer-color:#424242;--mdc-switch-unselected-hover-track-color:#e0e0e0;--mdc-switch-unselected-icon-color:#fff;--mdc-switch-unselected-pressed-handle-color:#212121;--mdc-switch-unselected-pressed-state-layer-color:#424242;--mdc-switch-unselected-pressed-track-color:#e0e0e0;--mdc-switch-unselected-track-color:#e0e0e0;--mdc-switch-disabled-label-text-color: rgba(0, 0, 0, 0.38)}html .mat-mdc-slide-toggle{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}html .mat-mdc-slide-toggle.mat-accent{--mdc-switch-selected-focus-state-layer-color:#d81b60;--mdc-switch-selected-handle-color:#d81b60;--mdc-switch-selected-hover-state-layer-color:#d81b60;--mdc-switch-selected-pressed-state-layer-color:#d81b60;--mdc-switch-selected-focus-handle-color:#880e4f;--mdc-switch-selected-hover-handle-color:#880e4f;--mdc-switch-selected-pressed-handle-color:#880e4f;--mdc-switch-selected-focus-track-color:#f06292;--mdc-switch-selected-hover-track-color:#f06292;--mdc-switch-selected-pressed-track-color:#f06292;--mdc-switch-selected-track-color:#f06292}html .mat-mdc-slide-toggle.mat-warn{--mdc-switch-selected-focus-state-layer-color:#e53935;--mdc-switch-selected-handle-color:#e53935;--mdc-switch-selected-hover-state-layer-color:#e53935;--mdc-switch-selected-pressed-state-layer-color:#e53935;--mdc-switch-selected-focus-handle-color:#b71c1c;--mdc-switch-selected-hover-handle-color:#b71c1c;--mdc-switch-selected-pressed-handle-color:#b71c1c;--mdc-switch-selected-focus-track-color:#e57373;--mdc-switch-selected-hover-track-color:#e57373;--mdc-switch-selected-pressed-track-color:#e57373;--mdc-switch-selected-track-color:#e57373}html{--mdc-switch-state-layer-size:40px}html .mat-mdc-slide-toggle{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mdc-radio-disabled-selected-icon-opacity:0.38;--mdc-radio-disabled-unselected-icon-opacity:0.38;--mdc-radio-state-layer-size:40px}.mat-mdc-radio-button{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}.mat-mdc-radio-button.mat-primary{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#3f51b5;--mdc-radio-selected-hover-icon-color:#3f51b5;--mdc-radio-selected-icon-color:#3f51b5;--mdc-radio-selected-pressed-icon-color:#3f51b5;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#3f51b5;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-radio-button.mat-accent{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#ff4081;--mdc-radio-selected-hover-icon-color:#ff4081;--mdc-radio-selected-icon-color:#ff4081;--mdc-radio-selected-pressed-icon-color:#ff4081;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#ff4081;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-radio-button.mat-warn{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#f44336;--mdc-radio-selected-hover-icon-color:#f44336;--mdc-radio-selected-icon-color:#f44336;--mdc-radio-selected-pressed-icon-color:#f44336;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#f44336;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}html{--mdc-radio-state-layer-size:40px;--mat-radio-touch-target-display:block}.mat-mdc-radio-button{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mat-slider-value-indicator-width:auto;--mat-slider-value-indicator-height:32px;--mat-slider-value-indicator-caret-display:block;--mat-slider-value-indicator-border-radius:4px;--mat-slider-value-indicator-padding:0 12px;--mat-slider-value-indicator-text-transform:none;--mat-slider-value-indicator-container-transform:translateX(-50%);--mdc-slider-active-track-height:6px;--mdc-slider-active-track-shape:9999px;--mdc-slider-handle-height:20px;--mdc-slider-handle-shape:50%;--mdc-slider-handle-width:20px;--mdc-slider-inactive-track-height:4px;--mdc-slider-inactive-track-shape:9999px;--mdc-slider-with-overlap-handle-outline-width:1px;--mdc-slider-with-tick-marks-active-container-opacity:0.6;--mdc-slider-with-tick-marks-container-shape:50%;--mdc-slider-with-tick-marks-container-size:2px;--mdc-slider-with-tick-marks-inactive-container-opacity:0.6}html{--mdc-slider-handle-color:#3f51b5;--mdc-slider-focus-handle-color:#3f51b5;--mdc-slider-hover-handle-color:#3f51b5;--mdc-slider-active-track-color:#3f51b5;--mdc-slider-inactive-track-color:#3f51b5;--mdc-slider-with-tick-marks-inactive-container-color:#3f51b5;--mdc-slider-with-tick-marks-active-container-color:white;--mdc-slider-disabled-active-track-color:#000;--mdc-slider-disabled-handle-color:#000;--mdc-slider-disabled-inactive-track-color:#000;--mdc-slider-label-container-color:#000;--mdc-slider-label-label-text-color:#fff;--mdc-slider-with-overlap-handle-outline-color:#fff;--mdc-slider-with-tick-marks-disabled-container-color:#000;--mdc-slider-handle-elevation:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mat-slider-ripple-color:#3f51b5;--mat-slider-hover-state-layer-color:rgba(63, 81, 181, 0.05);--mat-slider-focus-state-layer-color:rgba(63, 81, 181, 0.2);--mat-slider-value-indicator-opacity:0.6}html .mat-accent{--mat-slider-ripple-color:#ff4081;--mat-slider-hover-state-layer-color:rgba(255, 64, 129, 0.05);--mat-slider-focus-state-layer-color:rgba(255, 64, 129, 0.2);--mdc-slider-handle-color:#ff4081;--mdc-slider-focus-handle-color:#ff4081;--mdc-slider-hover-handle-color:#ff4081;--mdc-slider-active-track-color:#ff4081;--mdc-slider-inactive-track-color:#ff4081;--mdc-slider-with-tick-marks-inactive-container-color:#ff4081;--mdc-slider-with-tick-marks-active-container-color:white}html .mat-warn{--mat-slider-ripple-color:#f44336;--mat-slider-hover-state-layer-color:rgba(244, 67, 54, 0.05);--mat-slider-focus-state-layer-color:rgba(244, 67, 54, 0.2);--mdc-slider-handle-color:#f44336;--mdc-slider-focus-handle-color:#f44336;--mdc-slider-hover-handle-color:#f44336;--mdc-slider-active-track-color:#f44336;--mdc-slider-inactive-track-color:#f44336;--mdc-slider-with-tick-marks-inactive-container-color:#f44336;--mdc-slider-with-tick-marks-active-container-color:white}html{--mdc-slider-label-label-text-font:Roboto, sans-serif;--mdc-slider-label-label-text-size:14px;--mdc-slider-label-label-text-line-height:22px;--mdc-slider-label-label-text-tracking:0.0071428571em;--mdc-slider-label-label-text-weight:500}html{--mat-menu-container-shape:4px;--mat-menu-divider-bottom-spacing:0;--mat-menu-divider-top-spacing:0;--mat-menu-item-spacing:16px;--mat-menu-item-icon-size:24px;--mat-menu-item-leading-spacing:16px;--mat-menu-item-trailing-spacing:16px;--mat-menu-item-with-icon-leading-spacing:16px;--mat-menu-item-with-icon-trailing-spacing:16px}html{--mat-menu-item-label-text-color:rgba(0, 0, 0, 0.87);--mat-menu-item-icon-color:rgba(0, 0, 0, 0.87);--mat-menu-item-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-menu-item-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-menu-container-color:white;--mat-menu-divider-color:rgba(0, 0, 0, 0.12)}html{--mat-menu-item-label-text-font:Roboto, sans-serif;--mat-menu-item-label-text-size:16px;--mat-menu-item-label-text-tracking:0.03125em;--mat-menu-item-label-text-line-height:24px;--mat-menu-item-label-text-weight:400}html{--mdc-list-list-item-container-shape:0;--mdc-list-list-item-leading-avatar-shape:50%;--mdc-list-list-item-container-color:transparent;--mdc-list-list-item-selected-container-color:transparent;--mdc-list-list-item-leading-avatar-color:transparent;--mdc-list-list-item-leading-icon-size:24px;--mdc-list-list-item-leading-avatar-size:40px;--mdc-list-list-item-trailing-icon-size:24px;--mdc-list-list-item-disabled-state-layer-color:transparent;--mdc-list-list-item-disabled-state-layer-opacity:0;--mdc-list-list-item-disabled-label-text-opacity:0.38;--mdc-list-list-item-disabled-leading-icon-opacity:0.38;--mdc-list-list-item-disabled-trailing-icon-opacity:0.38;--mat-list-active-indicator-color:transparent;--mat-list-active-indicator-shape:4px}html{--mdc-list-list-item-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-supporting-text-color:rgba(0, 0, 0, 0.54);--mdc-list-list-item-leading-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-trailing-supporting-text-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-selected-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-disabled-label-text-color:black;--mdc-list-list-item-disabled-leading-icon-color:black;--mdc-list-list-item-disabled-trailing-icon-color:black;--mdc-list-list-item-hover-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-hover-leading-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-hover-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-focus-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-hover-state-layer-color:black;--mdc-list-list-item-hover-state-layer-opacity:0.04;--mdc-list-list-item-focus-state-layer-color:black;--mdc-list-list-item-focus-state-layer-opacity:0.12}.mdc-list-item__start,.mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#3f51b5;--mdc-radio-selected-hover-icon-color:#3f51b5;--mdc-radio-selected-icon-color:#3f51b5;--mdc-radio-selected-pressed-icon-color:#3f51b5}.mat-accent .mdc-list-item__start,.mat-accent .mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#ff4081;--mdc-radio-selected-hover-icon-color:#ff4081;--mdc-radio-selected-icon-color:#ff4081;--mdc-radio-selected-pressed-icon-color:#ff4081}.mat-warn .mdc-list-item__start,.mat-warn .mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#f44336;--mdc-radio-selected-hover-icon-color:#f44336;--mdc-radio-selected-icon-color:#f44336;--mdc-radio-selected-pressed-icon-color:#f44336}.mat-mdc-list-option{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#3f51b5;--mdc-checkbox-selected-hover-icon-color:#3f51b5;--mdc-checkbox-selected-icon-color:#3f51b5;--mdc-checkbox-selected-pressed-icon-color:#3f51b5;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#3f51b5;--mdc-checkbox-selected-hover-state-layer-color:#3f51b5;--mdc-checkbox-selected-pressed-state-layer-color:#3f51b5;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-option.mat-accent{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#ff4081;--mdc-checkbox-selected-hover-icon-color:#ff4081;--mdc-checkbox-selected-icon-color:#ff4081;--mdc-checkbox-selected-pressed-icon-color:#ff4081;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#ff4081;--mdc-checkbox-selected-hover-state-layer-color:#ff4081;--mdc-checkbox-selected-pressed-state-layer-color:#ff4081;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-option.mat-warn{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#f44336;--mdc-checkbox-selected-hover-icon-color:#f44336;--mdc-checkbox-selected-icon-color:#f44336;--mdc-checkbox-selected-pressed-icon-color:#f44336;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#f44336;--mdc-checkbox-selected-hover-state-layer-color:#f44336;--mdc-checkbox-selected-pressed-state-layer-color:#f44336;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--selected .mdc-list-item__primary-text,.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--activated .mdc-list-item__primary-text{color:#3f51b5}.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--selected.mdc-list-item--with-leading-icon .mdc-list-item__start,.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--activated.mdc-list-item--with-leading-icon .mdc-list-item__start{color:#3f51b5}.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__content,.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__end{opacity:1}html{--mdc-list-list-item-one-line-container-height:48px;--mdc-list-list-item-two-line-container-height:64px;--mdc-list-list-item-three-line-container-height:88px;--mat-list-list-item-leading-icon-start-space:16px;--mat-list-list-item-leading-icon-end-space:32px}.mdc-list-item__start,.mdc-list-item__end{--mdc-radio-state-layer-size:40px}.mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}html{--mdc-list-list-item-label-text-font:Roboto, sans-serif;--mdc-list-list-item-label-text-line-height:24px;--mdc-list-list-item-label-text-size:16px;--mdc-list-list-item-label-text-tracking:0.03125em;--mdc-list-list-item-label-text-weight:400;--mdc-list-list-item-supporting-text-font:Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height:20px;--mdc-list-list-item-supporting-text-size:14px;--mdc-list-list-item-supporting-text-tracking:0.0178571429em;--mdc-list-list-item-supporting-text-weight:400;--mdc-list-list-item-trailing-supporting-text-font:Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height:20px;--mdc-list-list-item-trailing-supporting-text-size:12px;--mdc-list-list-item-trailing-supporting-text-tracking:0.0333333333em;--mdc-list-list-item-trailing-supporting-text-weight:400}.mdc-list-group__subheader{font:400 16px/28px Roboto, sans-serif;letter-spacing:.009375em}html{--mat-paginator-container-text-color:rgba(0, 0, 0, 0.87);--mat-paginator-container-background-color:white;--mat-paginator-enabled-icon-color:rgba(0, 0, 0, 0.54);--mat-paginator-disabled-icon-color:rgba(0, 0, 0, 0.12)}html{--mat-paginator-container-size:56px;--mat-paginator-form-field-container-height:40px;--mat-paginator-form-field-container-vertical-padding:8px}html{--mat-paginator-container-text-font:Roboto, sans-serif;--mat-paginator-container-text-line-height:20px;--mat-paginator-container-text-size:12px;--mat-paginator-container-text-tracking:0.0333333333em;--mat-paginator-container-text-weight:400;--mat-paginator-select-trigger-text-size:12px}html{--mdc-tab-indicator-active-indicator-height:2px;--mdc-tab-indicator-active-indicator-shape:0;--mdc-secondary-navigation-tab-container-height:48px;--mat-tab-header-divider-color:transparent;--mat-tab-header-divider-height:0}.mat-mdc-tab-group,.mat-mdc-tab-nav-bar{--mdc-tab-indicator-active-indicator-color:#3f51b5;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#3f51b5;--mat-tab-header-active-ripple-color:#3f51b5;--mat-tab-header-inactive-ripple-color:#3f51b5;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#3f51b5;--mat-tab-header-active-hover-label-text-color:#3f51b5;--mat-tab-header-active-focus-indicator-color:#3f51b5;--mat-tab-header-active-hover-indicator-color:#3f51b5}.mat-mdc-tab-group.mat-accent,.mat-mdc-tab-nav-bar.mat-accent{--mdc-tab-indicator-active-indicator-color:#ff4081;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#ff4081;--mat-tab-header-active-ripple-color:#ff4081;--mat-tab-header-inactive-ripple-color:#ff4081;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#ff4081;--mat-tab-header-active-hover-label-text-color:#ff4081;--mat-tab-header-active-focus-indicator-color:#ff4081;--mat-tab-header-active-hover-indicator-color:#ff4081}.mat-mdc-tab-group.mat-warn,.mat-mdc-tab-nav-bar.mat-warn{--mdc-tab-indicator-active-indicator-color:#f44336;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#f44336;--mat-tab-header-active-ripple-color:#f44336;--mat-tab-header-inactive-ripple-color:#f44336;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#f44336;--mat-tab-header-active-hover-label-text-color:#f44336;--mat-tab-header-active-focus-indicator-color:#f44336;--mat-tab-header-active-hover-indicator-color:#f44336}.mat-mdc-tab-group.mat-background-primary,.mat-mdc-tab-nav-bar.mat-background-primary{--mat-tab-header-with-background-background-color:#3f51b5;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-group.mat-background-accent,.mat-mdc-tab-nav-bar.mat-background-accent{--mat-tab-header-with-background-background-color:#ff4081;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-group.mat-background-warn,.mat-mdc-tab-nav-bar.mat-background-warn{--mat-tab-header-with-background-background-color:#f44336;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-header{--mdc-secondary-navigation-tab-container-height:48px}.mat-mdc-tab-header{--mat-tab-header-label-text-font:Roboto, sans-serif;--mat-tab-header-label-text-size:14px;--mat-tab-header-label-text-tracking:0.0892857143em;--mat-tab-header-label-text-line-height:36px;--mat-tab-header-label-text-weight:500}html{--mdc-checkbox-disabled-selected-checkmark-color:#fff;--mdc-checkbox-selected-focus-state-layer-opacity:0.16;--mdc-checkbox-selected-hover-state-layer-opacity:0.04;--mdc-checkbox-selected-pressed-state-layer-opacity:0.16;--mdc-checkbox-unselected-focus-state-layer-opacity:0.16;--mdc-checkbox-unselected-hover-state-layer-opacity:0.04;--mdc-checkbox-unselected-pressed-state-layer-opacity:0.16}html{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#ff4081;--mdc-checkbox-selected-hover-icon-color:#ff4081;--mdc-checkbox-selected-icon-color:#ff4081;--mdc-checkbox-selected-pressed-icon-color:#ff4081;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#ff4081;--mdc-checkbox-selected-hover-state-layer-color:#ff4081;--mdc-checkbox-selected-pressed-state-layer-color:#ff4081;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black;--mat-checkbox-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-checkbox{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}.mat-mdc-checkbox.mat-primary{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#3f51b5;--mdc-checkbox-selected-hover-icon-color:#3f51b5;--mdc-checkbox-selected-icon-color:#3f51b5;--mdc-checkbox-selected-pressed-icon-color:#3f51b5;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#3f51b5;--mdc-checkbox-selected-hover-state-layer-color:#3f51b5;--mdc-checkbox-selected-pressed-state-layer-color:#3f51b5;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-checkbox.mat-warn{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#f44336;--mdc-checkbox-selected-hover-icon-color:#f44336;--mdc-checkbox-selected-icon-color:#f44336;--mdc-checkbox-selected-pressed-icon-color:#f44336;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#f44336;--mdc-checkbox-selected-hover-state-layer-color:#f44336;--mdc-checkbox-selected-pressed-state-layer-color:#f44336;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}html{--mdc-checkbox-state-layer-size:40px;--mat-checkbox-touch-target-display:block}.mat-mdc-checkbox{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mdc-text-button-container-shape:4px;--mdc-text-button-keep-touch-target:false;--mdc-filled-button-container-shape:4px;--mdc-filled-button-keep-touch-target:false;--mdc-protected-button-container-shape:4px;--mdc-protected-button-keep-touch-target:false;--mdc-outlined-button-keep-touch-target:false;--mdc-outlined-button-outline-width:1px;--mdc-outlined-button-container-shape:4px;--mat-text-button-horizontal-padding:8px;--mat-text-button-with-icon-horizontal-padding:8px;--mat-text-button-icon-spacing:8px;--mat-text-button-icon-offset:0;--mat-filled-button-horizontal-padding:16px;--mat-filled-button-icon-spacing:8px;--mat-filled-button-icon-offset:-4px;--mat-protected-button-horizontal-padding:16px;--mat-protected-button-icon-spacing:8px;--mat-protected-button-icon-offset:-4px;--mat-outlined-button-horizontal-padding:15px;--mat-outlined-button-icon-spacing:8px;--mat-outlined-button-icon-offset:-4px}html{--mdc-text-button-label-text-color:black;--mdc-text-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mat-text-button-state-layer-color:black;--mat-text-button-disabled-state-layer-color:black;--mat-text-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-text-button-hover-state-layer-opacity:0.04;--mat-text-button-focus-state-layer-opacity:0.12;--mat-text-button-pressed-state-layer-opacity:0.12;--mdc-filled-button-container-color:white;--mdc-filled-button-label-text-color:black;--mdc-filled-button-disabled-container-color:rgba(0, 0, 0, 0.12);--mdc-filled-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mat-filled-button-state-layer-color:black;--mat-filled-button-disabled-state-layer-color:black;--mat-filled-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-filled-button-hover-state-layer-opacity:0.04;--mat-filled-button-focus-state-layer-opacity:0.12;--mat-filled-button-pressed-state-layer-opacity:0.12;--mdc-protected-button-container-color:white;--mdc-protected-button-label-text-color:black;--mdc-protected-button-disabled-container-color:rgba(0, 0, 0, 0.12);--mdc-protected-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-protected-button-container-elevation-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-disabled-container-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-focus-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-hover-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-pressed-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-protected-button-container-shadow-color:#000;--mat-protected-button-state-layer-color:black;--mat-protected-button-disabled-state-layer-color:black;--mat-protected-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-protected-button-hover-state-layer-opacity:0.04;--mat-protected-button-focus-state-layer-opacity:0.12;--mat-protected-button-pressed-state-layer-opacity:0.12;--mdc-outlined-button-disabled-outline-color:rgba(0, 0, 0, 0.12);--mdc-outlined-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-button-label-text-color:black;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:black;--mat-outlined-button-disabled-state-layer-color:black;--mat-outlined-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-outlined-button-hover-state-layer-opacity:0.04;--mat-outlined-button-focus-state-layer-opacity:0.12;--mat-outlined-button-pressed-state-layer-opacity:0.12}.mat-mdc-button.mat-primary{--mdc-text-button-label-text-color:#3f51b5;--mat-text-button-state-layer-color:#3f51b5;--mat-text-button-ripple-color:rgba(63, 81, 181, 0.1)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color:#ff4081;--mat-text-button-state-layer-color:#ff4081;--mat-text-button-ripple-color:rgba(255, 64, 129, 0.1)}.mat-mdc-button.mat-warn{--mdc-text-button-label-text-color:#f44336;--mat-text-button-state-layer-color:#f44336;--mat-text-button-ripple-color:rgba(244, 67, 54, 0.1)}.mat-mdc-unelevated-button.mat-primary{--mdc-filled-button-container-color:#3f51b5;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-unelevated-button.mat-accent{--mdc-filled-button-container-color:#ff4081;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-unelevated-button.mat-warn{--mdc-filled-button-container-color:#f44336;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-primary{--mdc-protected-button-container-color:#3f51b5;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-accent{--mdc-protected-button-container-color:#ff4081;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-warn{--mdc-protected-button-container-color:#f44336;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-outlined-button.mat-primary{--mdc-outlined-button-label-text-color:#3f51b5;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#3f51b5;--mat-outlined-button-ripple-color:rgba(63, 81, 181, 0.1)}.mat-mdc-outlined-button.mat-accent{--mdc-outlined-button-label-text-color:#ff4081;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#ff4081;--mat-outlined-button-ripple-color:rgba(255, 64, 129, 0.1)}.mat-mdc-outlined-button.mat-warn{--mdc-outlined-button-label-text-color:#f44336;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#f44336;--mat-outlined-button-ripple-color:rgba(244, 67, 54, 0.1)}html{--mdc-text-button-container-height:36px;--mdc-filled-button-container-height:36px;--mdc-outlined-button-container-height:36px;--mdc-protected-button-container-height:36px;--mat-text-button-touch-target-display:block;--mat-filled-button-touch-target-display:block;--mat-protected-button-touch-target-display:block;--mat-outlined-button-touch-target-display:block}html{--mdc-text-button-label-text-font:Roboto, sans-serif;--mdc-text-button-label-text-size:14px;--mdc-text-button-label-text-tracking:0.0892857143em;--mdc-text-button-label-text-weight:500;--mdc-text-button-label-text-transform:none;--mdc-filled-button-label-text-font:Roboto, sans-serif;--mdc-filled-button-label-text-size:14px;--mdc-filled-button-label-text-tracking:0.0892857143em;--mdc-filled-button-label-text-weight:500;--mdc-filled-button-label-text-transform:none;--mdc-outlined-button-label-text-font:Roboto, sans-serif;--mdc-outlined-button-label-text-size:14px;--mdc-outlined-button-label-text-tracking:0.0892857143em;--mdc-outlined-button-label-text-weight:500;--mdc-outlined-button-label-text-transform:none;--mdc-protected-button-label-text-font:Roboto, sans-serif;--mdc-protected-button-label-text-size:14px;--mdc-protected-button-label-text-tracking:0.0892857143em;--mdc-protected-button-label-text-weight:500;--mdc-protected-button-label-text-transform:none}html{--mdc-icon-button-icon-size:24px}html{--mdc-icon-button-icon-color:inherit;--mdc-icon-button-disabled-icon-color:rgba(0, 0, 0, 0.38);--mat-icon-button-state-layer-color:black;--mat-icon-button-disabled-state-layer-color:black;--mat-icon-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-icon-button-hover-state-layer-opacity:0.04;--mat-icon-button-focus-state-layer-opacity:0.12;--mat-icon-button-pressed-state-layer-opacity:0.12}html .mat-mdc-icon-button.mat-primary{--mdc-icon-button-icon-color:#3f51b5;--mat-icon-button-state-layer-color:#3f51b5;--mat-icon-button-ripple-color:rgba(63, 81, 181, 0.1)}html .mat-mdc-icon-button.mat-accent{--mdc-icon-button-icon-color:#ff4081;--mat-icon-button-state-layer-color:#ff4081;--mat-icon-button-ripple-color:rgba(255, 64, 129, 0.1)}html .mat-mdc-icon-button.mat-warn{--mdc-icon-button-icon-color:#f44336;--mat-icon-button-state-layer-color:#f44336;--mat-icon-button-ripple-color:rgba(244, 67, 54, 0.1)}html{--mat-icon-button-touch-target-display:block}.mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size:48px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:12px}html{--mdc-fab-container-shape:50%;--mdc-fab-icon-size:24px;--mdc-fab-small-container-shape:50%;--mdc-fab-small-icon-size:24px;--mdc-extended-fab-container-height:48px;--mdc-extended-fab-container-shape:24px}html{--mdc-fab-container-color:white;--mdc-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-fab-container-shadow-color:#000;--mat-fab-foreground-color:black;--mat-fab-state-layer-color:black;--mat-fab-disabled-state-layer-color:black;--mat-fab-ripple-color:rgba(0, 0, 0, 0.1);--mat-fab-hover-state-layer-opacity:0.04;--mat-fab-focus-state-layer-opacity:0.12;--mat-fab-pressed-state-layer-opacity:0.12;--mat-fab-disabled-state-container-color:rgba(0, 0, 0, 0.12);--mat-fab-disabled-state-foreground-color:rgba(0, 0, 0, 0.38);--mdc-fab-small-container-color:white;--mdc-fab-small-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-fab-small-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-small-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-small-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-fab-small-container-shadow-color:#000;--mat-fab-small-foreground-color:black;--mat-fab-small-state-layer-color:black;--mat-fab-small-disabled-state-layer-color:black;--mat-fab-small-ripple-color:rgba(0, 0, 0, 0.1);--mat-fab-small-hover-state-layer-opacity:0.04;--mat-fab-small-focus-state-layer-opacity:0.12;--mat-fab-small-pressed-state-layer-opacity:0.12;--mat-fab-small-disabled-state-container-color:rgba(0, 0, 0, 0.12);--mat-fab-small-disabled-state-foreground-color:rgba(0, 0, 0, 0.38);--mdc-extended-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-extended-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-extended-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-extended-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-extended-fab-container-shadow-color:#000}html .mat-mdc-fab.mat-primary{--mdc-fab-container-color:#3f51b5;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-fab.mat-accent{--mdc-fab-container-color:#ff4081;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-fab.mat-warn{--mdc-fab-container-color:#f44336;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-primary{--mdc-fab-small-container-color:#3f51b5;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-accent{--mdc-fab-small-container-color:#ff4081;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-warn{--mdc-fab-small-container-color:#f44336;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html{--mat-fab-touch-target-display:block;--mat-fab-small-touch-target-display:block}html{--mdc-extended-fab-label-text-font:Roboto, sans-serif;--mdc-extended-fab-label-text-size:14px;--mdc-extended-fab-label-text-tracking:0.0892857143em;--mdc-extended-fab-label-text-weight:500}html{--mdc-snackbar-container-shape:4px}html{--mdc-snackbar-container-color:#333333;--mdc-snackbar-supporting-text-color:rgba(255, 255, 255, 0.87);--mat-snack-bar-button-color:#ff4081}html{--mdc-snackbar-supporting-text-font:Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height:20px;--mdc-snackbar-supporting-text-size:14px;--mdc-snackbar-supporting-text-weight:400}html{--mat-table-row-item-outline-width:1px}html{--mat-table-background-color:white;--mat-table-header-headline-color:rgba(0, 0, 0, 0.87);--mat-table-row-item-label-text-color:rgba(0, 0, 0, 0.87);--mat-table-row-item-outline-color:rgba(0, 0, 0, 0.12)}html{--mat-table-header-container-height:56px;--mat-table-footer-container-height:52px;--mat-table-row-item-container-height:52px}html{--mat-table-header-headline-font:Roboto, sans-serif;--mat-table-header-headline-line-height:22px;--mat-table-header-headline-size:14px;--mat-table-header-headline-weight:500;--mat-table-header-headline-tracking:0.0071428571em;--mat-table-row-item-label-text-font:Roboto, sans-serif;--mat-table-row-item-label-text-line-height:20px;--mat-table-row-item-label-text-size:14px;--mat-table-row-item-label-text-weight:400;--mat-table-row-item-label-text-tracking:0.0178571429em;--mat-table-footer-supporting-text-font:Roboto, sans-serif;--mat-table-footer-supporting-text-line-height:20px;--mat-table-footer-supporting-text-size:14px;--mat-table-footer-supporting-text-weight:400;--mat-table-footer-supporting-text-tracking:0.0178571429em}html{--mdc-circular-progress-active-indicator-width:4px;--mdc-circular-progress-size:48px}html{--mdc-circular-progress-active-indicator-color:#3f51b5}html .mat-accent{--mdc-circular-progress-active-indicator-color:#ff4081}html .mat-warn{--mdc-circular-progress-active-indicator-color:#f44336}html{--mat-badge-container-shape:50%;--mat-badge-container-size:unset;--mat-badge-small-size-container-size:unset;--mat-badge-large-size-container-size:unset;--mat-badge-legacy-container-size:22px;--mat-badge-legacy-small-size-container-size:16px;--mat-badge-legacy-large-size-container-size:28px;--mat-badge-container-offset:-11px 0;--mat-badge-small-size-container-offset:-8px 0;--mat-badge-large-size-container-offset:-14px 0;--mat-badge-container-overlap-offset:-11px;--mat-badge-small-size-container-overlap-offset:-8px;--mat-badge-large-size-container-overlap-offset:-14px;--mat-badge-container-padding:0;--mat-badge-small-size-container-padding:0;--mat-badge-large-size-container-padding:0}html{--mat-badge-background-color:#3f51b5;--mat-badge-text-color:white;--mat-badge-disabled-state-background-color:#b9b9b9;--mat-badge-disabled-state-text-color:rgba(0, 0, 0, 0.38)}.mat-badge-accent{--mat-badge-background-color:#ff4081;--mat-badge-text-color:white}.mat-badge-warn{--mat-badge-background-color:#f44336;--mat-badge-text-color:white}html{--mat-badge-text-font:Roboto, sans-serif;--mat-badge-text-size:12px;--mat-badge-text-weight:600;--mat-badge-small-size-text-size:9px;--mat-badge-large-size-text-size:24px}html{--mat-bottom-sheet-container-shape:4px}html{--mat-bottom-sheet-container-text-color:rgba(0, 0, 0, 0.87);--mat-bottom-sheet-container-background-color:white}html{--mat-bottom-sheet-container-text-font:Roboto, sans-serif;--mat-bottom-sheet-container-text-line-height:20px;--mat-bottom-sheet-container-text-size:14px;--mat-bottom-sheet-container-text-tracking:0.0178571429em;--mat-bottom-sheet-container-text-weight:400}html{--mat-legacy-button-toggle-height:36px;--mat-legacy-button-toggle-shape:2px;--mat-legacy-button-toggle-focus-state-layer-opacity:1;--mat-standard-button-toggle-shape:4px;--mat-standard-button-toggle-hover-state-layer-opacity:0.04;--mat-standard-button-toggle-focus-state-layer-opacity:0.12}html{--mat-legacy-button-toggle-text-color:rgba(0, 0, 0, 0.38);--mat-legacy-button-toggle-state-layer-color:rgba(0, 0, 0, 0.12);--mat-legacy-button-toggle-selected-state-text-color:rgba(0, 0, 0, 0.54);--mat-legacy-button-toggle-selected-state-background-color:#e0e0e0;--mat-legacy-button-toggle-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-legacy-button-toggle-disabled-state-background-color:#eeeeee;--mat-legacy-button-toggle-disabled-selected-state-background-color:#bdbdbd;--mat-standard-button-toggle-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-background-color:white;--mat-standard-button-toggle-state-layer-color:black;--mat-standard-button-toggle-selected-state-background-color:#e0e0e0;--mat-standard-button-toggle-selected-state-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-standard-button-toggle-disabled-state-background-color:white;--mat-standard-button-toggle-disabled-selected-state-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-disabled-selected-state-background-color:#bdbdbd;--mat-standard-button-toggle-divider-color:#e0e0e0}html{--mat-standard-button-toggle-height:48px}html{--mat-legacy-button-toggle-label-text-font:Roboto, sans-serif;--mat-legacy-button-toggle-label-text-line-height:24px;--mat-legacy-button-toggle-label-text-size:16px;--mat-legacy-button-toggle-label-text-tracking:0.03125em;--mat-legacy-button-toggle-label-text-weight:400;--mat-standard-button-toggle-label-text-font:Roboto, sans-serif;--mat-standard-button-toggle-label-text-line-height:24px;--mat-standard-button-toggle-label-text-size:16px;--mat-standard-button-toggle-label-text-tracking:0.03125em;--mat-standard-button-toggle-label-text-weight:400}html{--mat-datepicker-calendar-container-shape:4px;--mat-datepicker-calendar-container-touch-shape:4px;--mat-datepicker-calendar-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mat-datepicker-calendar-container-touch-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12)}html{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#3f51b5;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(63, 81, 181, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(63, 81, 181, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(63, 81, 181, 0.3);--mat-datepicker-toggle-active-state-icon-color:#3f51b5;--mat-datepicker-calendar-date-in-range-state-background-color:rgba(63, 81, 181, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e;--mat-datepicker-toggle-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-body-label-text-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-period-button-text-color:black;--mat-datepicker-calendar-period-button-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-navigation-button-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-header-divider-color:rgba(0, 0, 0, 0.12);--mat-datepicker-calendar-header-text-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-date-today-outline-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-date-today-disabled-state-outline-color:rgba(0, 0, 0, 0.18);--mat-datepicker-calendar-date-text-color:rgba(0, 0, 0, 0.87);--mat-datepicker-calendar-date-outline-color:transparent;--mat-datepicker-calendar-date-disabled-state-text-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-date-preview-state-outline-color:rgba(0, 0, 0, 0.24);--mat-datepicker-range-input-separator-color:rgba(0, 0, 0, 0.87);--mat-datepicker-range-input-disabled-state-separator-color:rgba(0, 0, 0, 0.38);--mat-datepicker-range-input-disabled-state-text-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-container-background-color:white;--mat-datepicker-calendar-container-text-color:rgba(0, 0, 0, 0.87)}.mat-datepicker-content.mat-accent{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#ff4081;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(255, 64, 129, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(255, 64, 129, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(255, 64, 129, 0.3);--mat-datepicker-calendar-date-in-range-state-background-color:rgba(255, 64, 129, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e}.mat-datepicker-content.mat-warn{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#f44336;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(244, 67, 54, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(244, 67, 54, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(244, 67, 54, 0.3);--mat-datepicker-calendar-date-in-range-state-background-color:rgba(244, 67, 54, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e}.mat-datepicker-toggle-active.mat-accent{--mat-datepicker-toggle-active-state-icon-color:#ff4081}.mat-datepicker-toggle-active.mat-warn{--mat-datepicker-toggle-active-state-icon-color:#f44336}.mat-calendar-controls{--mat-icon-button-touch-target-display:none}.mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size:40px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:8px}html{--mat-datepicker-calendar-text-font:Roboto, sans-serif;--mat-datepicker-calendar-text-size:13px;--mat-datepicker-calendar-body-label-text-size:14px;--mat-datepicker-calendar-body-label-text-weight:500;--mat-datepicker-calendar-period-button-text-size:14px;--mat-datepicker-calendar-period-button-text-weight:500;--mat-datepicker-calendar-header-text-size:11px;--mat-datepicker-calendar-header-text-weight:400}html{--mat-divider-width:1px}html{--mat-divider-color:rgba(0, 0, 0, 0.12)}html{--mat-expansion-container-shape:4px;--mat-expansion-legacy-header-indicator-display:inline-block;--mat-expansion-header-indicator-display:none}html{--mat-expansion-container-background-color:white;--mat-expansion-container-text-color:rgba(0, 0, 0, 0.87);--mat-expansion-actions-divider-color:rgba(0, 0, 0, 0.12);--mat-expansion-header-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-expansion-header-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-expansion-header-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-expansion-header-text-color:rgba(0, 0, 0, 0.87);--mat-expansion-header-description-color:rgba(0, 0, 0, 0.54);--mat-expansion-header-indicator-color:rgba(0, 0, 0, 0.54)}html{--mat-expansion-header-collapsed-state-height:48px;--mat-expansion-header-expanded-state-height:64px}html{--mat-expansion-header-text-font:Roboto, sans-serif;--mat-expansion-header-text-size:14px;--mat-expansion-header-text-weight:500;--mat-expansion-header-text-line-height:inherit;--mat-expansion-header-text-tracking:inherit;--mat-expansion-container-text-font:Roboto, sans-serif;--mat-expansion-container-text-line-height:20px;--mat-expansion-container-text-size:14px;--mat-expansion-container-text-tracking:0.0178571429em;--mat-expansion-container-text-weight:400}html{--mat-grid-list-tile-header-primary-text-size:14px;--mat-grid-list-tile-header-secondary-text-size:12px;--mat-grid-list-tile-footer-primary-text-size:14px;--mat-grid-list-tile-footer-secondary-text-size:12px}html{--mat-icon-color:inherit}.mat-icon.mat-primary{--mat-icon-color:#3f51b5}.mat-icon.mat-accent{--mat-icon-color:#ff4081}.mat-icon.mat-warn{--mat-icon-color:#f44336}html{--mat-sidenav-container-shape:0;--mat-sidenav-container-elevation-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);--mat-sidenav-container-width:auto}html{--mat-sidenav-container-divider-color:rgba(0, 0, 0, 0.12);--mat-sidenav-container-background-color:white;--mat-sidenav-container-text-color:rgba(0, 0, 0, 0.87);--mat-sidenav-content-background-color:#fafafa;--mat-sidenav-content-text-color:rgba(0, 0, 0, 0.87);--mat-sidenav-scrim-color:rgba(0, 0, 0, 0.6)}html{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#3f51b5;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#3f51b5;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#3f51b5;--mat-stepper-header-edit-state-icon-foreground-color:white;--mat-stepper-container-color:white;--mat-stepper-line-color:rgba(0, 0, 0, 0.12);--mat-stepper-header-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-stepper-header-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-stepper-header-label-text-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-optional-label-text-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-selected-state-label-text-color:rgba(0, 0, 0, 0.87);--mat-stepper-header-error-state-label-text-color:#f44336;--mat-stepper-header-icon-background-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-error-state-icon-foreground-color:#f44336;--mat-stepper-header-error-state-icon-background-color:transparent}html .mat-step-header.mat-accent{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#ff4081;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#ff4081;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#ff4081;--mat-stepper-header-edit-state-icon-foreground-color:white}html .mat-step-header.mat-warn{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#f44336;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#f44336;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#f44336;--mat-stepper-header-edit-state-icon-foreground-color:white}html{--mat-stepper-header-height:72px}html{--mat-stepper-container-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-size:14px;--mat-stepper-header-label-text-weight:400;--mat-stepper-header-error-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-weight:400}html{--mat-sort-arrow-color:#757575}html{--mat-toolbar-container-background-color:whitesmoke;--mat-toolbar-container-text-color:rgba(0, 0, 0, 0.87)}.mat-toolbar.mat-primary{--mat-toolbar-container-background-color:#3f51b5;--mat-toolbar-container-text-color:white}.mat-toolbar.mat-accent{--mat-toolbar-container-background-color:#ff4081;--mat-toolbar-container-text-color:white}.mat-toolbar.mat-warn{--mat-toolbar-container-background-color:#f44336;--mat-toolbar-container-text-color:white}html{--mat-toolbar-standard-height:64px;--mat-toolbar-mobile-height:56px}html{--mat-toolbar-title-text-font:Roboto, sans-serif;--mat-toolbar-title-text-line-height:32px;--mat-toolbar-title-text-size:20px;--mat-toolbar-title-text-tracking:0.0125em;--mat-toolbar-title-text-weight:500}html{--mat-tree-container-background-color:white;--mat-tree-node-text-color:rgba(0, 0, 0, 0.87)}html{--mat-tree-node-min-height:48px}html{--mat-tree-node-text-font:Roboto, sans-serif;--mat-tree-node-text-size:14px;--mat-tree-node-text-weight:400}.mat-h1,.mat-headline-5,.mat-typography .mat-h1,.mat-typography .mat-headline-5,.mat-typography h1{font:400 24px/32px Roboto, sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-headline-6,.mat-typography .mat-h2,.mat-typography .mat-headline-6,.mat-typography h2{font:500 20px/32px Roboto, sans-serif;letter-spacing:.0125em;margin:0 0 16px}.mat-h3,.mat-subtitle-1,.mat-typography .mat-h3,.mat-typography .mat-subtitle-1,.mat-typography h3{font:400 16px/28px Roboto, sans-serif;letter-spacing:.009375em;margin:0 0 16px}.mat-h4,.mat-body-1,.mat-typography .mat-h4,.mat-typography .mat-body-1,.mat-typography h4{font:400 16px/24px Roboto, sans-serif;letter-spacing:.03125em;margin:0 0 16px}.mat-h5,.mat-typography .mat-h5,.mat-typography h5{font:400 calc(14px*.83)/20px Roboto, sans-serif;margin:0 0 12px}.mat-h6,.mat-typography .mat-h6,.mat-typography h6{font:400 calc(14px*.67)/20px Roboto, sans-serif;margin:0 0 12px}.mat-body-strong,.mat-subtitle-2,.mat-typography .mat-body-strong,.mat-typography .mat-subtitle-2{font:500 14px/22px Roboto, sans-serif;letter-spacing:.0071428571em}.mat-body,.mat-body-2,.mat-typography .mat-body,.mat-typography .mat-body-2,.mat-typography{font:400 14px/20px Roboto, sans-serif;letter-spacing:.0178571429em}.mat-body p,.mat-body-2 p,.mat-typography .mat-body p,.mat-typography .mat-body-2 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption,.mat-typography .mat-small,.mat-typography .mat-caption{font:400 12px/20px Roboto, sans-serif;letter-spacing:.0333333333em}.mat-headline-1,.mat-typography .mat-headline-1{font:300 96px/96px Roboto, sans-serif;letter-spacing:-0.015625em;margin:0 0 56px}.mat-headline-2,.mat-typography .mat-headline-2{font:300 60px/60px Roboto, sans-serif;letter-spacing:-.0083333333em;margin:0 0 64px}.mat-headline-3,.mat-typography .mat-headline-3{font:400 48px/50px Roboto, sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-headline-4,.mat-typography .mat-headline-4{font:400 34px/40px Roboto, sans-serif;letter-spacing:.0073529412em;margin:0 0 64px} +/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[6].rules[0].oneOf[0].use[2]!./node_modules/resolve-url-loader/index.js??ruleSet[1].rules[6].rules[1].use[0]!./node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[6].rules[1].use[1]!./src/styles.scss?ngGlobalStyle ***! + \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ +@charset "UTF-8"; +/* You can add global styles to this file, and also import other style files */ +/* roboto-cyrillic-ext-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-cyrillic-ext-400-normal.woff2') format("woff2"), url('roboto-cyrillic-ext-400-normal.woff') format("woff"); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* roboto-cyrillic-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-cyrillic-400-normal.woff2') format("woff2"), url('roboto-cyrillic-400-normal.woff') format("woff"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* roboto-greek-ext-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-greek-ext-400-normal.woff2') format("woff2"), url('roboto-greek-ext-400-normal.woff') format("woff"); + unicode-range: U+1F00-1FFF; +} +/* roboto-greek-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-greek-400-normal.woff2') format("woff2"), url('roboto-greek-400-normal.woff') format("woff"); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* roboto-vietnamese-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-vietnamese-400-normal.woff2') format("woff2"), url('roboto-vietnamese-400-normal.woff') format("woff"); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* roboto-latin-ext-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-latin-ext-400-normal.woff2') format("woff2"), url('roboto-latin-ext-400-normal.woff') format("woff"); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* roboto-latin-400-normal */ +@font-face { + font-family: "Roboto"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-latin-400-normal.woff2') format("woff2"), url('roboto-latin-400-normal.woff') format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/* roboto-mono-cyrillic-ext-400-normal */ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-mono-cyrillic-ext-400-normal.woff2') format("woff2"), url('roboto-mono-cyrillic-ext-400-normal.woff') format("woff"); + unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; +} +/* roboto-mono-cyrillic-400-normal */ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-mono-cyrillic-400-normal.woff2') format("woff2"), url('roboto-mono-cyrillic-400-normal.woff') format("woff"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* roboto-mono-greek-400-normal */ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-mono-greek-400-normal.woff2') format("woff2"), url('roboto-mono-greek-400-normal.woff') format("woff"); + unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; +} +/* roboto-mono-vietnamese-400-normal */ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-mono-vietnamese-400-normal.woff2') format("woff2"), url('roboto-mono-vietnamese-400-normal.woff') format("woff"); + unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; +} +/* roboto-mono-latin-ext-400-normal */ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-mono-latin-ext-400-normal.woff2') format("woff2"), url('roboto-mono-latin-ext-400-normal.woff') format("woff"); + unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; +} +/* roboto-mono-latin-400-normal */ +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-display: swap; + font-weight: 400; + src: url('roboto-mono-latin-400-normal.woff2') format("woff2"), url('roboto-mono-latin-400-normal.woff') format("woff"); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; +} +/** + * Colors used across the Navigator. Shared by the ATT&CK Website. + * For each color-pair: + * - "color" refers to the color itself + * - "on-color" refers to the most readable text-color to appear on top of the color. + * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to + * appear with inner content. For example, "link" is only intended to be used for link text, which inherently + * cannot have inner text. + */ +@media print { + @page { + size: A3; + margin: 0; + } +} +@font-face { + font-family: "Material Icons"; + font-style: normal; + font-display: block; + font-weight: 400; + src: local("Material Icons"), local("MaterialIcons-Regular"), url('MaterialIcons-Regular.ttf') format("truetype"); +} +.material-icons { + font-family: "Material Icons"; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + /* Support for IE. */ + font-feature-settings: "liga"; +} + +.text-deemphasis { + color: #6b7279; + font-size: 12px !important; + letter-spacing: normal; +} + +body { + margin: 0; + overflow-y: scroll; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; +} + +@media (prefers-color-scheme: dark) { + .theme-use-system .svgcontainer { + background-color: white; + } +} +.theme-override-dark .svgcontainer { + background-color: white; +} + +.mdc-button, .mat-mdc-button-base { + letter-spacing: normal !important; +} + +.mat-dialog .mat-mdc-dialog-actions { + justify-content: center; +} +.mat-dialog .mat-mdc-dialog-title { + text-align: center; +} +.mat-dialog .mat-mdc-dialog-content { + color: black !important; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-dialog .mat-mdc-dialog-content { + color: white !important; + } +} +.theme-override-dark .mat-dialog .mat-mdc-dialog-content { + color: white !important; +} + +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .mdc-dialog__surface { + background-color: #2e2e3f; + } +} +.theme-override-dark .mat-mdc-dialog-container .mdc-dialog__surface { + background-color: #2e2e3f; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .mdc-dialog__title, + .theme-use-system .mat-mdc-dialog-container .mdc-dialog__content { + color: white !important; + } +} +.theme-override-dark .mat-mdc-dialog-container .mdc-dialog__title, +.theme-override-dark .mat-mdc-dialog-container .mdc-dialog__content { + color: white !important; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .mat-mdc-button-base { + border-color: #4c4c68; + } +} +.theme-override-dark .mat-mdc-dialog-container .mat-mdc-button-base { + border-color: #4c4c68; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .mat-mdc-button-base { + color: white; + } +} +.theme-override-dark .mat-mdc-dialog-container .mat-mdc-button-base { + color: white; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .help-dialog h1 { + border-color: white; + } +} +.theme-override-dark .mat-mdc-dialog-container .help-dialog h1 { + border-color: white; +} +.mat-mdc-dialog-container .content { + overflow-y: scroll; + max-height: 60vh; + font-size: 11pt; +} +.mat-mdc-dialog-container .content p, +.mat-mdc-dialog-container .content ul { + margin-block-start: 1em; + margin-block-end: 1em; +} +.mat-mdc-dialog-container .content code { + color: black; + padding: 1px 2px; + word-break: break-word; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .content code { + background-color: #1a1a23; + } +} +.theme-override-dark .mat-mdc-dialog-container .content code { + background-color: #1a1a23; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .content code { + border-color: #ddd !important; + } +} +.theme-override-dark .mat-mdc-dialog-container .content code { + border-color: #ddd !important; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container .content code { + color: white !important; + } +} +.theme-override-dark .mat-mdc-dialog-container .content code { + color: white !important; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container a { + color: #7588e8 !important; + } +} +.theme-override-dark .mat-mdc-dialog-container a { + color: #7588e8 !important; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-mdc-dialog-container a:active, + .theme-use-system .mat-mdc-dialog-container a:visited { + color: #e847e8; + } +} +.theme-override-dark .mat-mdc-dialog-container a:active, +.theme-override-dark .mat-mdc-dialog-container a:visited { + color: #e847e8; +} +.mat-mdc-dialog-container .top-button { + display: inline; + float: right; + margin-top: 14px; +} + +.noselect { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ /* Konqueror HTML */ /* Firefox */ /* Internet Explorer/Edge */ + user-select: none; + /* Non-prefixed version, currently + supported by Chrome and Opera */ +} + +.controlsContainer { + text-align: right; + display: block; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer { + background-color: #ddd; + } +} +.theme-override-light .controlsContainer { + background-color: #ddd; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer { + background-color: #2e2e3f; + } +} +.theme-override-dark .controlsContainer { + background-color: #2e2e3f; +} +@media print { + .controlsContainer { + display: none; + } +} +.controlsContainer ul { + margin: 0; + padding: 0; +} +.controlsContainer .label .control-row-item + .control-row-item { + margin-right: 6px; +} +.controlsContainer .control-sections > li { + list-style: none; + display: inline-block; + border-left: 1px solid #c9c9c9; + padding: 0 5px 0 5px; + position: relative; +} +.controlsContainer .control-sections > li .section-label { + font-size: 8pt; + top: -12px; + position: absolute; + padding: 0 5px; + border-radius: 2px 2px 0 0; + text-align: center; + cursor: default; + -webkit-user-select: none; + user-select: none; + white-space: nowrap; + z-index: 1; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .section-label { + background-color: #ddd; + } +} +.theme-override-light .controlsContainer .control-sections > li .section-label { + background-color: #ddd; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .section-label { + background-color: #2e2e3f; + } +} +.theme-override-dark .controlsContainer .control-sections > li .section-label { + background-color: #2e2e3f; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .section-label { + color: #555; + } +} +.theme-override-light .controlsContainer .control-sections > li .section-label { + color: #555; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .section-label { + color: white; + } +} +.theme-override-dark .controlsContainer .control-sections > li .section-label { + color: white; +} +.controlsContainer .control-sections > li .control-row-item { + display: inline-block; + position: relative; + height: 34px; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item > :not(.disabled) { + color: black; + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item > :not(.disabled) { + color: black; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item > :not(.disabled) { + color: white; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item > :not(.disabled) { + color: white; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item > .disabled { + color: #aaaaaa; + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item > .disabled { + color: #aaaaaa; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item > .disabled { + color: rgba(255, 255, 255, 0.25); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item > .disabled { + color: rgba(255, 255, 255, 0.25); +} +.controlsContainer .control-sections > li .control-row-item .control-row-button { + border-radius: 3px; + padding: 5px; + height: 24px; + cursor: pointer; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .control-row-button:hover { + background-color: #d0d0d0; + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item .control-row-button:hover { + background-color: #d0d0d0; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .control-row-button:hover { + background-color: #4c4c68; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .control-row-button:hover { + background-color: #4c4c68; +} +.controlsContainer .control-sections > li .control-row-item .control-row-button.dropdown::after { + font-size: 5pt; + content: "▼"; +} +.controlsContainer .control-sections > li .control-row-item .control-row-button span { + vertical-align: middle; +} +.controlsContainer .control-sections > li .control-row-item .control-row-button .control-label { + padding-right: 5px; +} +.controlsContainer .control-sections > li .control-row-item .dropdown-container { + position: absolute; + z-index: 100; + width: max-content; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container { + background-color: white; + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container { + background-color: white; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container { + background-color: #2e2e3f; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container { + background-color: #2e2e3f; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container { + border: 1px solid black; + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container { + border: 1px solid black; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container { + border: 1px solid #4c4c68; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container { + border: 1px solid #4c4c68; +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container { + box-shadow: 0px 10px 5px rgba(0, 0, 0, 0.5); + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container { + box-shadow: 0px 10px 5px rgba(0, 0, 0, 0.5); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container { + box-shadow: 0px 10px 5px #2e2e3f; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container { + box-shadow: 0px 10px 5px #2e2e3f; +} +.controlsContainer .control-sections > li .control-row-item .dropdown-container.left { + right: 0; +} +.controlsContainer .control-sections > li .control-row-item .dropdown-container.inputfield { + width: 150px; + padding: 0px 10px 10px; + z-index: 1000; +} +.controlsContainer .control-sections > li .control-row-item .dropdown-container.inputfield .mat-mdc-form-field { + width: 100%; +} +.controlsContainer .control-sections > li .control-row-item .dropdown-container.inputfield .mat-mdc-form-field:first-child { + padding-top: 5px; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-floating-label { + color: rgba(255, 255, 255, 0.9); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-floating-label { + color: rgba(255, 255, 255, 0.9); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element, + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element::placeholder { + color: white; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element, +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element::placeholder { + color: white; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element:disabled { + color: rgba(255, 255, 255, 0.25); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-input-element:disabled { + color: rgba(255, 255, 255, 0.25); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mdc-line-ripple::before { + border-bottom-color: white; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mdc-line-ripple::before { + border-bottom-color: white; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before { + border-bottom-color: transparent; + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before { + border-bottom-color: transparent; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before { + background-image: linear-gradient(to right, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before { + background-image: linear-gradient(to right, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-value-text { + color: rgba(255, 255, 255, 0.9); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-value-text { + color: rgba(255, 255, 255, 0.9); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-arrow { + color: rgba(255, 255, 255, 0.9); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .mat-mdc-select-arrow { + color: rgba(255, 255, 255, 0.9); +} +@media (prefers-color-scheme: light) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text { + color: rgba(0, 0, 0, 0.38); + } +} +.theme-override-light .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text { + color: rgba(0, 0, 0, 0.38); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text { + color: rgba(255, 255, 255, 0.25); + } +} +.theme-override-dark .controlsContainer .control-sections > li .control-row-item .dropdown-container .disabled-text { + color: rgba(255, 255, 255, 0.25); +} + +.checkbox-custom { + opacity: 0; + position: absolute; +} +.checkbox-custom:disabled { + cursor: default; +} + +.checkbox-custom, +.checkbox-custom-label { + display: inline-block; + vertical-align: middle; + margin: 5px; + cursor: pointer; +} + +.checkbox-custom-label { + position: relative; +} +.checkbox-custom-label.disabled { + cursor: default; +} +@media (prefers-color-scheme: light) { + .theme-use-system .checkbox-custom-label.disabled { + color: rgba(0, 0, 0, 0.46); + } +} +.theme-override-light .checkbox-custom-label.disabled { + color: rgba(0, 0, 0, 0.46); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .checkbox-custom-label.disabled { + color: rgba(255, 255, 255, 0.25); + } +} +.theme-override-dark .checkbox-custom-label.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.checkbox-custom + .checkbox-custom-label:before { + content: ""; + background: #fff; + border: 3px solid #ddd; + display: inline-block; + vertical-align: middle; + width: 10px; + height: 10px; + padding: 2px; + margin-right: 5px; + text-align: center; +} + +@media (prefers-color-scheme: light) { + .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before { + background: rgb(96, 197, 255); + } +} +.theme-override-light .checkbox-custom:checked + .checkbox-custom-label:before { + background: rgb(96, 197, 255); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before { + background: #464dff; + } +} +.theme-override-dark .checkbox-custom:checked + .checkbox-custom-label:before { + background: #464dff; +} +@media (prefers-color-scheme: light) { + .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px rgb(96, 197, 255); + } +} +.theme-override-light .checkbox-custom:checked + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px rgb(96, 197, 255); +} +@media (prefers-color-scheme: dark) { + .theme-use-system .checkbox-custom:checked + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px #464dff; + } +} +.theme-override-dark .checkbox-custom:checked + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px #464dff; +} + +@media (prefers-color-scheme: light) { + .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + background: #b0b0b0; + } +} +.theme-override-light .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + background: #b0b0b0; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + background: #a3a3a3; + } +} +.theme-override-dark .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + background: #a3a3a3; +} +@media (prefers-color-scheme: light) { + .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px #b0b0b0; + } +} +.theme-override-light .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px #b0b0b0; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px #a3a3a3; + } +} +.theme-override-dark .checkbox-custom:checked:disabled + .checkbox-custom-label:before { + box-shadow: inset 0px 0px 0px 1px #a3a3a3; +} + +.dialog-custom .mat-mdc-dialog-container { + padding: 0 !important; +} + +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-side.mat-drawer-end { + border-left: none; + } +} +.theme-override-dark .mat-drawer-side.mat-drawer-end { + border-left: none; +} + +@media (prefers-color-scheme: light) { + .theme-use-system .mat-drawer-inner-container { + background-color: #f1f1f1; + } +} +.theme-override-light .mat-drawer-inner-container { + background-color: #f1f1f1; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container { + background-color: #2e2e3f; + } +} +.theme-override-dark .mat-drawer-inner-container { + background-color: #2e2e3f; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container a { + color: #7588e8; + } +} +.theme-override-dark .mat-drawer-inner-container a { + color: #7588e8; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container a:visited, + .theme-use-system .mat-drawer-inner-container a:active { + color: #e847e8; + } +} +.theme-override-dark .mat-drawer-inner-container a:visited, +.theme-override-dark .mat-drawer-inner-container a:active { + color: #e847e8; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__leading, + .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__notch, + .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__trailing, .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__leading, + .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__notch, + .theme-use-system .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__trailing { + border-color: white !important; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__leading, +.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__notch, +.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field .mdc-notched-outline__trailing, .theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__leading, +.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__notch, +.theme-override-dark .mat-drawer-inner-container .mat-mdc-form-field:hover .mdc-notched-outline__trailing { + border-color: white !important; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-mdc-card { + background-color: #3f3f56; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-mdc-card { + background-color: #3f3f56; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-mdc-card { + color: white; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-mdc-card { + color: white; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-expansion-panel .mat-expansion-panel-header, + .theme-use-system .mat-drawer-inner-container .mat-expansion-panel-body { + background-color: #3f3f56; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-expansion-panel .mat-expansion-panel-header, +.theme-override-dark .mat-drawer-inner-container .mat-expansion-panel-body { + background-color: #3f3f56; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-expansion-panel-header-title { + color: white; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-expansion-panel-header-title { + color: white; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-divider { + border-top-color: #4c4c68; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-divider { + border-top-color: #4c4c68; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-mdc-button-base { + background-color: #4c4c68; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-mdc-button-base { + background-color: #4c4c68; +} +@media (prefers-color-scheme: dark) { + .theme-use-system .mat-drawer-inner-container .mat-mdc-button-base { + color: white; + } +} +.theme-override-dark .mat-drawer-inner-container .mat-mdc-button-base { + color: white; +} + +.mat-mdc-dialog-container .markdown { + padding: 25px; +} + +.popover { + position: absolute; + border-radius: 4px !important; + width: unset !important; +} + +.mat-mdc-form-field .mdc-text-field--filled, .mat-mdc-form-field .mdc-text-field--filled:hover { + background-color: transparent !important; +} + +.hide-subscript .mat-mdc-form-field-subscript-wrapper { + display: none !important; +} + +.mat-mdc-floating-label, .mat-mdc-form-field-hint { + letter-spacing: normal !important; +} + +.mat-expansion-panel-body { + padding-bottom: 24px !important; +} + +/*# sourceMappingURL=styles.css.map*/ \ No newline at end of file diff --git a/site/mitre/styles.css.map b/site/mitre/styles.css.map new file mode 100644 index 0000000..5bcaea1 --- /dev/null +++ b/site/mitre/styles.css.map @@ -0,0 +1 @@ +{"version":3,"file":"styles.css","mappings":"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","sources":["./node_modules/@angular/material/prebuilt-themes/indigo-pink.css","./src/styles.scss","./node_modules/@fontsource/roboto/index.css","./node_modules/@fontsource/roboto-mono/index.css","./src/colors.scss"],"sourcesContent":[".mat-ripple{overflow:hidden;position:relative}.mat-ripple:not(:empty){transform:translateZ(0)}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale3d(0, 0, 0);background-color:var(--mat-ripple-color, rgba(0, 0, 0, 0.1))}.cdk-high-contrast-active .mat-ripple-element{display:none}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap;outline:0;-webkit-appearance:none;-moz-appearance:none;left:0}[dir=rtl] .cdk-visually-hidden{left:auto;right:0}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}.mat-focus-indicator{position:relative}.mat-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-focus-indicator-display, none);border:var(--mat-focus-indicator-border-width, 3px) var(--mat-focus-indicator-border-style, solid) var(--mat-focus-indicator-border-color, transparent);border-radius:var(--mat-focus-indicator-border-radius, 4px)}.mat-focus-indicator:focus::before{content:\"\"}.cdk-high-contrast-active{--mat-focus-indicator-display: block}.mat-mdc-focus-indicator{position:relative}.mat-mdc-focus-indicator::before{top:0;left:0;right:0;bottom:0;position:absolute;box-sizing:border-box;pointer-events:none;display:var(--mat-mdc-focus-indicator-display, none);border:var(--mat-mdc-focus-indicator-border-width, 3px) var(--mat-mdc-focus-indicator-border-style, solid) var(--mat-mdc-focus-indicator-border-color, transparent);border-radius:var(--mat-mdc-focus-indicator-border-radius, 4px)}.mat-mdc-focus-indicator:focus::before{content:\"\"}.cdk-high-contrast-active{--mat-mdc-focus-indicator-display: block}.mat-app-background{background-color:var(--mat-app-background-color, transparent);color:var(--mat-app-text-color, inherit)}html{--mat-ripple-color:rgba(0, 0, 0, 0.1)}html{--mat-option-selected-state-label-text-color:#3f51b5;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}.mat-accent{--mat-option-selected-state-label-text-color:#ff4081;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}.mat-warn{--mat-option-selected-state-label-text-color:#f44336;--mat-option-label-text-color:rgba(0, 0, 0, 0.87);--mat-option-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-option-selected-state-layer-color:rgba(0, 0, 0, 0.04)}html{--mat-optgroup-label-text-color:rgba(0, 0, 0, 0.87)}.mat-primary{--mat-full-pseudo-checkbox-selected-icon-color:#3f51b5;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#3f51b5;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}html{--mat-full-pseudo-checkbox-selected-icon-color:#ff4081;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#ff4081;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}.mat-accent{--mat-full-pseudo-checkbox-selected-icon-color:#ff4081;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#ff4081;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}.mat-warn{--mat-full-pseudo-checkbox-selected-icon-color:#f44336;--mat-full-pseudo-checkbox-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mat-full-pseudo-checkbox-disabled-selected-checkmark-color:#fafafa;--mat-full-pseudo-checkbox-disabled-unselected-icon-color:#b0b0b0;--mat-full-pseudo-checkbox-disabled-selected-icon-color:#b0b0b0;--mat-minimal-pseudo-checkbox-selected-checkmark-color:#f44336;--mat-minimal-pseudo-checkbox-disabled-selected-checkmark-color:#b0b0b0}html{--mat-app-background-color:#fafafa;--mat-app-text-color:rgba(0, 0, 0, 0.87)}.mat-elevation-z0,.mat-mdc-elevation-specific.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z1,.mat-mdc-elevation-specific.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z2,.mat-mdc-elevation-specific.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z3,.mat-mdc-elevation-specific.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z4,.mat-mdc-elevation-specific.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z5,.mat-mdc-elevation-specific.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 5px 8px 0px rgba(0, 0, 0, 0.14), 0px 1px 14px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z6,.mat-mdc-elevation-specific.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12)}.mat-elevation-z7,.mat-mdc-elevation-specific.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0, 0, 0, 0.2), 0px 7px 10px 1px rgba(0, 0, 0, 0.14), 0px 2px 16px 1px rgba(0, 0, 0, 0.12)}.mat-elevation-z8,.mat-mdc-elevation-specific.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z9,.mat-mdc-elevation-specific.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0, 0, 0, 0.2), 0px 9px 12px 1px rgba(0, 0, 0, 0.14), 0px 3px 16px 2px rgba(0, 0, 0, 0.12)}.mat-elevation-z10,.mat-mdc-elevation-specific.mat-elevation-z10{box-shadow:0px 6px 6px -3px rgba(0, 0, 0, 0.2), 0px 10px 14px 1px rgba(0, 0, 0, 0.14), 0px 4px 18px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z11,.mat-mdc-elevation-specific.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0, 0, 0, 0.2), 0px 11px 15px 1px rgba(0, 0, 0, 0.14), 0px 4px 20px 3px rgba(0, 0, 0, 0.12)}.mat-elevation-z12,.mat-mdc-elevation-specific.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z13,.mat-mdc-elevation-specific.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 13px 19px 2px rgba(0, 0, 0, 0.14), 0px 5px 24px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z14,.mat-mdc-elevation-specific.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0, 0, 0, 0.2), 0px 14px 21px 2px rgba(0, 0, 0, 0.14), 0px 5px 26px 4px rgba(0, 0, 0, 0.12)}.mat-elevation-z15,.mat-mdc-elevation-specific.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0, 0, 0, 0.2), 0px 15px 22px 2px rgba(0, 0, 0, 0.14), 0px 6px 28px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z16,.mat-mdc-elevation-specific.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z17,.mat-mdc-elevation-specific.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0, 0, 0, 0.2), 0px 17px 26px 2px rgba(0, 0, 0, 0.14), 0px 6px 32px 5px rgba(0, 0, 0, 0.12)}.mat-elevation-z18,.mat-mdc-elevation-specific.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0, 0, 0, 0.2), 0px 18px 28px 2px rgba(0, 0, 0, 0.14), 0px 7px 34px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z19,.mat-mdc-elevation-specific.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0, 0, 0, 0.2), 0px 19px 29px 2px rgba(0, 0, 0, 0.14), 0px 7px 36px 6px rgba(0, 0, 0, 0.12)}.mat-elevation-z20,.mat-mdc-elevation-specific.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 20px 31px 3px rgba(0, 0, 0, 0.14), 0px 8px 38px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z21,.mat-mdc-elevation-specific.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0, 0, 0, 0.2), 0px 21px 33px 3px rgba(0, 0, 0, 0.14), 0px 8px 40px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z22,.mat-mdc-elevation-specific.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0, 0, 0, 0.2), 0px 22px 35px 3px rgba(0, 0, 0, 0.14), 0px 8px 42px 7px rgba(0, 0, 0, 0.12)}.mat-elevation-z23,.mat-mdc-elevation-specific.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0, 0, 0, 0.2), 0px 23px 36px 3px rgba(0, 0, 0, 0.14), 0px 9px 44px 8px rgba(0, 0, 0, 0.12)}.mat-elevation-z24,.mat-mdc-elevation-specific.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12)}.mat-theme-loaded-marker{display:none}html{--mat-option-label-text-font:Roboto, sans-serif;--mat-option-label-text-line-height:24px;--mat-option-label-text-size:16px;--mat-option-label-text-tracking:0.03125em;--mat-option-label-text-weight:400}html{--mat-optgroup-label-text-font:Roboto, sans-serif;--mat-optgroup-label-text-line-height:24px;--mat-optgroup-label-text-size:16px;--mat-optgroup-label-text-tracking:0.03125em;--mat-optgroup-label-text-weight:400}html{--mdc-elevated-card-container-shape:4px;--mdc-outlined-card-container-shape:4px;--mdc-outlined-card-outline-width:1px}html{--mdc-elevated-card-container-color:white;--mdc-elevated-card-container-elevation:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mdc-outlined-card-container-color:white;--mdc-outlined-card-outline-color:rgba(0, 0, 0, 0.12);--mdc-outlined-card-container-elevation:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mat-card-subtitle-text-color:rgba(0, 0, 0, 0.54)}html{--mat-card-title-text-font:Roboto, sans-serif;--mat-card-title-text-line-height:32px;--mat-card-title-text-size:20px;--mat-card-title-text-tracking:0.0125em;--mat-card-title-text-weight:500;--mat-card-subtitle-text-font:Roboto, sans-serif;--mat-card-subtitle-text-line-height:22px;--mat-card-subtitle-text-size:14px;--mat-card-subtitle-text-tracking:0.0071428571em;--mat-card-subtitle-text-weight:500}html{--mdc-linear-progress-active-indicator-height:4px;--mdc-linear-progress-track-height:4px;--mdc-linear-progress-track-shape:0}.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color:#3f51b5;--mdc-linear-progress-track-color:rgba(63, 81, 181, 0.25)}.mat-mdc-progress-bar.mat-accent{--mdc-linear-progress-active-indicator-color:#ff4081;--mdc-linear-progress-track-color:rgba(255, 64, 129, 0.25)}.mat-mdc-progress-bar.mat-warn{--mdc-linear-progress-active-indicator-color:#f44336;--mdc-linear-progress-track-color:rgba(244, 67, 54, 0.25)}html{--mdc-plain-tooltip-container-shape:4px;--mdc-plain-tooltip-supporting-text-line-height:16px}html{--mdc-plain-tooltip-container-color:#616161;--mdc-plain-tooltip-supporting-text-color:#fff}html{--mdc-plain-tooltip-supporting-text-font:Roboto, sans-serif;--mdc-plain-tooltip-supporting-text-size:12px;--mdc-plain-tooltip-supporting-text-weight:400;--mdc-plain-tooltip-supporting-text-tracking:0.0333333333em}html{--mdc-filled-text-field-active-indicator-height:1px;--mdc-filled-text-field-focus-active-indicator-height:2px;--mdc-filled-text-field-container-shape:4px;--mdc-outlined-text-field-outline-width:1px;--mdc-outlined-text-field-focus-outline-width:2px;--mdc-outlined-text-field-container-shape:4px}html{--mdc-filled-text-field-caret-color:#3f51b5;--mdc-filled-text-field-focus-active-indicator-color:#3f51b5;--mdc-filled-text-field-focus-label-text-color:rgba(63, 81, 181, 0.87);--mdc-filled-text-field-container-color:whitesmoke;--mdc-filled-text-field-disabled-container-color:#fafafa;--mdc-filled-text-field-label-text-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-hover-label-text-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-filled-text-field-input-text-color:rgba(0, 0, 0, 0.87);--mdc-filled-text-field-disabled-input-text-color:rgba(0, 0, 0, 0.38);--mdc-filled-text-field-input-text-placeholder-color:rgba(0, 0, 0, 0.6);--mdc-filled-text-field-error-hover-label-text-color:#f44336;--mdc-filled-text-field-error-focus-label-text-color:#f44336;--mdc-filled-text-field-error-label-text-color:#f44336;--mdc-filled-text-field-error-caret-color:#f44336;--mdc-filled-text-field-active-indicator-color:rgba(0, 0, 0, 0.42);--mdc-filled-text-field-disabled-active-indicator-color:rgba(0, 0, 0, 0.06);--mdc-filled-text-field-hover-active-indicator-color:rgba(0, 0, 0, 0.87);--mdc-filled-text-field-error-active-indicator-color:#f44336;--mdc-filled-text-field-error-focus-active-indicator-color:#f44336;--mdc-filled-text-field-error-hover-active-indicator-color:#f44336;--mdc-outlined-text-field-caret-color:#3f51b5;--mdc-outlined-text-field-focus-outline-color:#3f51b5;--mdc-outlined-text-field-focus-label-text-color:rgba(63, 81, 181, 0.87);--mdc-outlined-text-field-label-text-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-hover-label-text-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-input-text-color:rgba(0, 0, 0, 0.87);--mdc-outlined-text-field-disabled-input-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-input-text-placeholder-color:rgba(0, 0, 0, 0.6);--mdc-outlined-text-field-error-caret-color:#f44336;--mdc-outlined-text-field-error-focus-label-text-color:#f44336;--mdc-outlined-text-field-error-label-text-color:#f44336;--mdc-outlined-text-field-error-hover-label-text-color:#f44336;--mdc-outlined-text-field-outline-color:rgba(0, 0, 0, 0.38);--mdc-outlined-text-field-disabled-outline-color:rgba(0, 0, 0, 0.06);--mdc-outlined-text-field-hover-outline-color:rgba(0, 0, 0, 0.87);--mdc-outlined-text-field-error-focus-outline-color:#f44336;--mdc-outlined-text-field-error-hover-outline-color:#f44336;--mdc-outlined-text-field-error-outline-color:#f44336;--mat-form-field-focus-select-arrow-color:rgba(63, 81, 181, 0.87);--mat-form-field-disabled-input-text-placeholder-color:rgba(0, 0, 0, 0.38);--mat-form-field-state-layer-color:rgba(0, 0, 0, 0.87);--mat-form-field-error-text-color:#f44336;--mat-form-field-select-option-text-color:inherit;--mat-form-field-select-disabled-option-text-color:GrayText;--mat-form-field-leading-icon-color:unset;--mat-form-field-disabled-leading-icon-color:unset;--mat-form-field-trailing-icon-color:unset;--mat-form-field-disabled-trailing-icon-color:unset;--mat-form-field-error-focus-trailing-icon-color:unset;--mat-form-field-error-hover-trailing-icon-color:unset;--mat-form-field-error-trailing-icon-color:unset;--mat-form-field-enabled-select-arrow-color:rgba(0, 0, 0, 0.54);--mat-form-field-disabled-select-arrow-color:rgba(0, 0, 0, 0.38);--mat-form-field-hover-state-layer-opacity:0.04;--mat-form-field-focus-state-layer-opacity:0.08}.mat-mdc-form-field.mat-accent{--mdc-filled-text-field-caret-color:#ff4081;--mdc-filled-text-field-focus-active-indicator-color:#ff4081;--mdc-filled-text-field-focus-label-text-color:rgba(255, 64, 129, 0.87);--mdc-outlined-text-field-caret-color:#ff4081;--mdc-outlined-text-field-focus-outline-color:#ff4081;--mdc-outlined-text-field-focus-label-text-color:rgba(255, 64, 129, 0.87);--mat-form-field-focus-select-arrow-color:rgba(255, 64, 129, 0.87)}.mat-mdc-form-field.mat-warn{--mdc-filled-text-field-caret-color:#f44336;--mdc-filled-text-field-focus-active-indicator-color:#f44336;--mdc-filled-text-field-focus-label-text-color:rgba(244, 67, 54, 0.87);--mdc-outlined-text-field-caret-color:#f44336;--mdc-outlined-text-field-focus-outline-color:#f44336;--mdc-outlined-text-field-focus-label-text-color:rgba(244, 67, 54, 0.87);--mat-form-field-focus-select-arrow-color:rgba(244, 67, 54, 0.87)}html{--mat-form-field-container-height:56px;--mat-form-field-filled-label-display:block;--mat-form-field-container-vertical-padding:16px;--mat-form-field-filled-with-label-container-padding-top:24px;--mat-form-field-filled-with-label-container-padding-bottom:8px}html{--mdc-filled-text-field-label-text-font:Roboto, sans-serif;--mdc-filled-text-field-label-text-size:16px;--mdc-filled-text-field-label-text-tracking:0.03125em;--mdc-filled-text-field-label-text-weight:400;--mdc-outlined-text-field-label-text-font:Roboto, sans-serif;--mdc-outlined-text-field-label-text-size:16px;--mdc-outlined-text-field-label-text-tracking:0.03125em;--mdc-outlined-text-field-label-text-weight:400;--mat-form-field-container-text-font:Roboto, sans-serif;--mat-form-field-container-text-line-height:24px;--mat-form-field-container-text-size:16px;--mat-form-field-container-text-tracking:0.03125em;--mat-form-field-container-text-weight:400;--mat-form-field-outlined-label-text-populated-size:16px;--mat-form-field-subscript-text-font:Roboto, sans-serif;--mat-form-field-subscript-text-line-height:20px;--mat-form-field-subscript-text-size:12px;--mat-form-field-subscript-text-tracking:0.0333333333em;--mat-form-field-subscript-text-weight:400}html{--mat-select-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}html{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(63, 81, 181, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html .mat-mdc-form-field.mat-accent{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(255, 64, 129, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html .mat-mdc-form-field.mat-warn{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, 0.87);--mat-select-disabled-trigger-text-color:rgba(0, 0, 0, 0.38);--mat-select-placeholder-text-color:rgba(0, 0, 0, 0.6);--mat-select-enabled-arrow-color:rgba(0, 0, 0, 0.54);--mat-select-disabled-arrow-color:rgba(0, 0, 0, 0.38);--mat-select-focused-arrow-color:rgba(244, 67, 54, 0.87);--mat-select-invalid-arrow-color:rgba(244, 67, 54, 0.87)}html{--mat-select-arrow-transform:translateY(-8px)}html{--mat-select-trigger-text-font:Roboto, sans-serif;--mat-select-trigger-text-line-height:24px;--mat-select-trigger-text-size:16px;--mat-select-trigger-text-tracking:0.03125em;--mat-select-trigger-text-weight:400}html{--mat-autocomplete-container-shape:4px;--mat-autocomplete-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12)}html{--mat-autocomplete-background-color:white}html{--mdc-dialog-container-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12);--mdc-dialog-container-shadow-color:#000;--mdc-dialog-container-shape:4px;--mat-dialog-container-max-width:80vw;--mat-dialog-container-small-max-width:80vw;--mat-dialog-container-min-width:0;--mat-dialog-actions-alignment:start;--mat-dialog-actions-padding:8px;--mat-dialog-content-padding:20px 24px;--mat-dialog-with-actions-content-padding:20px 24px;--mat-dialog-headline-padding:0 24px 9px}html{--mdc-dialog-container-color:white;--mdc-dialog-subhead-color:rgba(0, 0, 0, 0.87);--mdc-dialog-supporting-text-color:rgba(0, 0, 0, 0.6)}html{--mdc-dialog-subhead-font:Roboto, sans-serif;--mdc-dialog-subhead-line-height:32px;--mdc-dialog-subhead-size:20px;--mdc-dialog-subhead-weight:500;--mdc-dialog-subhead-tracking:0.0125em;--mdc-dialog-supporting-text-font:Roboto, sans-serif;--mdc-dialog-supporting-text-line-height:24px;--mdc-dialog-supporting-text-size:16px;--mdc-dialog-supporting-text-weight:400;--mdc-dialog-supporting-text-tracking:0.03125em}.mat-mdc-standard-chip{--mdc-chip-container-shape-family:rounded;--mdc-chip-container-shape-radius:16px 16px 16px 16px;--mdc-chip-with-avatar-avatar-shape-family:rounded;--mdc-chip-with-avatar-avatar-shape-radius:14px 14px 14px 14px;--mdc-chip-with-avatar-avatar-size:28px;--mdc-chip-with-icon-icon-size:18px;--mdc-chip-outline-width:0;--mdc-chip-outline-color:transparent;--mdc-chip-disabled-outline-color:transparent;--mdc-chip-focus-outline-color:transparent;--mdc-chip-hover-state-layer-opacity:0.04;--mdc-chip-with-avatar-disabled-avatar-opacity:1;--mdc-chip-flat-selected-outline-width:0;--mdc-chip-selected-hover-state-layer-opacity:0.04;--mdc-chip-with-trailing-icon-disabled-trailing-icon-opacity:1;--mdc-chip-with-icon-disabled-icon-opacity:1;--mat-chip-disabled-container-opacity:0.4;--mat-chip-trailing-action-opacity:0.54;--mat-chip-trailing-action-focus-opacity:1;--mat-chip-trailing-action-state-layer-color:transparent;--mat-chip-selected-trailing-action-state-layer-color:transparent;--mat-chip-trailing-action-hover-state-layer-opacity:0;--mat-chip-trailing-action-focus-state-layer-opacity:0}.mat-mdc-standard-chip{--mdc-chip-disabled-label-text-color:#212121;--mdc-chip-elevated-container-color:#e0e0e0;--mdc-chip-elevated-selected-container-color:#e0e0e0;--mdc-chip-elevated-disabled-container-color:#e0e0e0;--mdc-chip-flat-disabled-selected-container-color:#e0e0e0;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:#212121;--mdc-chip-selected-label-text-color:#212121;--mdc-chip-with-icon-icon-color:#212121;--mdc-chip-with-icon-disabled-icon-color:#212121;--mdc-chip-with-icon-selected-icon-color:#212121;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:#212121;--mdc-chip-with-trailing-icon-trailing-icon-color:#212121;--mat-chip-selected-disabled-trailing-icon-color:#212121;--mat-chip-selected-trailing-icon-color:#212121}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-primary,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-primary{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#3f51b5;--mdc-chip-elevated-selected-container-color:#3f51b5;--mdc-chip-elevated-disabled-container-color:#3f51b5;--mdc-chip-flat-disabled-selected-container-color:#3f51b5;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-accent,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-accent{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#ff4081;--mdc-chip-elevated-selected-container-color:#ff4081;--mdc-chip-elevated-disabled-container-color:#ff4081;--mdc-chip-flat-disabled-selected-container-color:#ff4081;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-standard-chip.mat-mdc-chip-selected.mat-warn,.mat-mdc-standard-chip.mat-mdc-chip-highlighted.mat-warn{--mdc-chip-disabled-label-text-color:white;--mdc-chip-elevated-container-color:#f44336;--mdc-chip-elevated-selected-container-color:#f44336;--mdc-chip-elevated-disabled-container-color:#f44336;--mdc-chip-flat-disabled-selected-container-color:#f44336;--mdc-chip-focus-state-layer-color:black;--mdc-chip-hover-state-layer-color:black;--mdc-chip-selected-hover-state-layer-color:black;--mdc-chip-focus-state-layer-opacity:0.12;--mdc-chip-selected-focus-state-layer-color:black;--mdc-chip-selected-focus-state-layer-opacity:0.12;--mdc-chip-label-text-color:white;--mdc-chip-selected-label-text-color:white;--mdc-chip-with-icon-icon-color:white;--mdc-chip-with-icon-disabled-icon-color:white;--mdc-chip-with-icon-selected-icon-color:white;--mdc-chip-with-trailing-icon-disabled-trailing-icon-color:white;--mdc-chip-with-trailing-icon-trailing-icon-color:white;--mat-chip-selected-disabled-trailing-icon-color:white;--mat-chip-selected-trailing-icon-color:white}.mat-mdc-chip.mat-mdc-standard-chip{--mdc-chip-container-height:32px}.mat-mdc-standard-chip{--mdc-chip-label-text-font:Roboto, sans-serif;--mdc-chip-label-text-line-height:20px;--mdc-chip-label-text-size:14px;--mdc-chip-label-text-tracking:0.0178571429em;--mdc-chip-label-text-weight:400}html{--mdc-switch-disabled-selected-icon-opacity:0.38;--mdc-switch-disabled-track-opacity:0.12;--mdc-switch-disabled-unselected-icon-opacity:0.38;--mdc-switch-handle-height:20px;--mdc-switch-handle-shape:10px;--mdc-switch-handle-width:20px;--mdc-switch-selected-icon-size:18px;--mdc-switch-track-height:14px;--mdc-switch-track-shape:7px;--mdc-switch-track-width:36px;--mdc-switch-unselected-icon-size:18px;--mdc-switch-selected-focus-state-layer-opacity:0.12;--mdc-switch-selected-hover-state-layer-opacity:0.04;--mdc-switch-selected-pressed-state-layer-opacity:0.1;--mdc-switch-unselected-focus-state-layer-opacity:0.12;--mdc-switch-unselected-hover-state-layer-opacity:0.04;--mdc-switch-unselected-pressed-state-layer-opacity:0.1;--mat-switch-disabled-selected-handle-opacity:0.38;--mat-switch-disabled-unselected-handle-opacity:0.38;--mat-switch-unselected-handle-size:20px;--mat-switch-selected-handle-size:20px;--mat-switch-pressed-handle-size:20px;--mat-switch-with-icon-handle-size:20px;--mat-switch-selected-handle-horizontal-margin:0;--mat-switch-selected-with-icon-handle-horizontal-margin:0;--mat-switch-selected-pressed-handle-horizontal-margin:0;--mat-switch-unselected-handle-horizontal-margin:0;--mat-switch-unselected-with-icon-handle-horizontal-margin:0;--mat-switch-unselected-pressed-handle-horizontal-margin:0;--mat-switch-visible-track-opacity:1;--mat-switch-hidden-track-opacity:1;--mat-switch-visible-track-transition:transform 75ms 0ms cubic-bezier(0, 0, 0.2, 1);--mat-switch-hidden-track-transition:transform 75ms 0ms cubic-bezier(0.4, 0, 0.6, 1);--mat-switch-track-outline-width:1px;--mat-switch-track-outline-color:transparent;--mat-switch-selected-track-outline-width:1px;--mat-switch-disabled-unselected-track-outline-width:1px;--mat-switch-disabled-unselected-track-outline-color:transparent}html{--mdc-switch-selected-focus-state-layer-color:#3949ab;--mdc-switch-selected-handle-color:#3949ab;--mdc-switch-selected-hover-state-layer-color:#3949ab;--mdc-switch-selected-pressed-state-layer-color:#3949ab;--mdc-switch-selected-focus-handle-color:#1a237e;--mdc-switch-selected-hover-handle-color:#1a237e;--mdc-switch-selected-pressed-handle-color:#1a237e;--mdc-switch-selected-focus-track-color:#7986cb;--mdc-switch-selected-hover-track-color:#7986cb;--mdc-switch-selected-pressed-track-color:#7986cb;--mdc-switch-selected-track-color:#7986cb;--mdc-switch-disabled-selected-handle-color:#424242;--mdc-switch-disabled-selected-icon-color:#fff;--mdc-switch-disabled-selected-track-color:#424242;--mdc-switch-disabled-unselected-handle-color:#424242;--mdc-switch-disabled-unselected-icon-color:#fff;--mdc-switch-disabled-unselected-track-color:#424242;--mdc-switch-handle-surface-color:var(--mdc-theme-surface, #fff);--mdc-switch-handle-elevation-shadow:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mdc-switch-handle-shadow-color:black;--mdc-switch-disabled-handle-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mdc-switch-selected-icon-color:#fff;--mdc-switch-unselected-focus-handle-color:#212121;--mdc-switch-unselected-focus-state-layer-color:#424242;--mdc-switch-unselected-focus-track-color:#e0e0e0;--mdc-switch-unselected-handle-color:#616161;--mdc-switch-unselected-hover-handle-color:#212121;--mdc-switch-unselected-hover-state-layer-color:#424242;--mdc-switch-unselected-hover-track-color:#e0e0e0;--mdc-switch-unselected-icon-color:#fff;--mdc-switch-unselected-pressed-handle-color:#212121;--mdc-switch-unselected-pressed-state-layer-color:#424242;--mdc-switch-unselected-pressed-track-color:#e0e0e0;--mdc-switch-unselected-track-color:#e0e0e0;--mdc-switch-disabled-label-text-color: rgba(0, 0, 0, 0.38)}html .mat-mdc-slide-toggle{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}html .mat-mdc-slide-toggle.mat-accent{--mdc-switch-selected-focus-state-layer-color:#d81b60;--mdc-switch-selected-handle-color:#d81b60;--mdc-switch-selected-hover-state-layer-color:#d81b60;--mdc-switch-selected-pressed-state-layer-color:#d81b60;--mdc-switch-selected-focus-handle-color:#880e4f;--mdc-switch-selected-hover-handle-color:#880e4f;--mdc-switch-selected-pressed-handle-color:#880e4f;--mdc-switch-selected-focus-track-color:#f06292;--mdc-switch-selected-hover-track-color:#f06292;--mdc-switch-selected-pressed-track-color:#f06292;--mdc-switch-selected-track-color:#f06292}html .mat-mdc-slide-toggle.mat-warn{--mdc-switch-selected-focus-state-layer-color:#e53935;--mdc-switch-selected-handle-color:#e53935;--mdc-switch-selected-hover-state-layer-color:#e53935;--mdc-switch-selected-pressed-state-layer-color:#e53935;--mdc-switch-selected-focus-handle-color:#b71c1c;--mdc-switch-selected-hover-handle-color:#b71c1c;--mdc-switch-selected-pressed-handle-color:#b71c1c;--mdc-switch-selected-focus-track-color:#e57373;--mdc-switch-selected-hover-track-color:#e57373;--mdc-switch-selected-pressed-track-color:#e57373;--mdc-switch-selected-track-color:#e57373}html{--mdc-switch-state-layer-size:40px}html .mat-mdc-slide-toggle{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mdc-radio-disabled-selected-icon-opacity:0.38;--mdc-radio-disabled-unselected-icon-opacity:0.38;--mdc-radio-state-layer-size:40px}.mat-mdc-radio-button{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}.mat-mdc-radio-button.mat-primary{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#3f51b5;--mdc-radio-selected-hover-icon-color:#3f51b5;--mdc-radio-selected-icon-color:#3f51b5;--mdc-radio-selected-pressed-icon-color:#3f51b5;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#3f51b5;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-radio-button.mat-accent{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#ff4081;--mdc-radio-selected-hover-icon-color:#ff4081;--mdc-radio-selected-icon-color:#ff4081;--mdc-radio-selected-pressed-icon-color:#ff4081;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#ff4081;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-radio-button.mat-warn{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#f44336;--mdc-radio-selected-hover-icon-color:#f44336;--mdc-radio-selected-icon-color:#f44336;--mdc-radio-selected-pressed-icon-color:#f44336;--mat-radio-ripple-color:black;--mat-radio-checked-ripple-color:#f44336;--mat-radio-disabled-label-color:rgba(0, 0, 0, 0.38)}html{--mdc-radio-state-layer-size:40px;--mat-radio-touch-target-display:block}.mat-mdc-radio-button{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mat-slider-value-indicator-width:auto;--mat-slider-value-indicator-height:32px;--mat-slider-value-indicator-caret-display:block;--mat-slider-value-indicator-border-radius:4px;--mat-slider-value-indicator-padding:0 12px;--mat-slider-value-indicator-text-transform:none;--mat-slider-value-indicator-container-transform:translateX(-50%);--mdc-slider-active-track-height:6px;--mdc-slider-active-track-shape:9999px;--mdc-slider-handle-height:20px;--mdc-slider-handle-shape:50%;--mdc-slider-handle-width:20px;--mdc-slider-inactive-track-height:4px;--mdc-slider-inactive-track-shape:9999px;--mdc-slider-with-overlap-handle-outline-width:1px;--mdc-slider-with-tick-marks-active-container-opacity:0.6;--mdc-slider-with-tick-marks-container-shape:50%;--mdc-slider-with-tick-marks-container-size:2px;--mdc-slider-with-tick-marks-inactive-container-opacity:0.6}html{--mdc-slider-handle-color:#3f51b5;--mdc-slider-focus-handle-color:#3f51b5;--mdc-slider-hover-handle-color:#3f51b5;--mdc-slider-active-track-color:#3f51b5;--mdc-slider-inactive-track-color:#3f51b5;--mdc-slider-with-tick-marks-inactive-container-color:#3f51b5;--mdc-slider-with-tick-marks-active-container-color:white;--mdc-slider-disabled-active-track-color:#000;--mdc-slider-disabled-handle-color:#000;--mdc-slider-disabled-inactive-track-color:#000;--mdc-slider-label-container-color:#000;--mdc-slider-label-label-text-color:#fff;--mdc-slider-with-overlap-handle-outline-color:#fff;--mdc-slider-with-tick-marks-disabled-container-color:#000;--mdc-slider-handle-elevation:0px 2px 1px -1px rgba(0, 0, 0, 0.2), 0px 1px 1px 0px rgba(0, 0, 0, 0.14), 0px 1px 3px 0px rgba(0, 0, 0, 0.12);--mat-slider-ripple-color:#3f51b5;--mat-slider-hover-state-layer-color:rgba(63, 81, 181, 0.05);--mat-slider-focus-state-layer-color:rgba(63, 81, 181, 0.2);--mat-slider-value-indicator-opacity:0.6}html .mat-accent{--mat-slider-ripple-color:#ff4081;--mat-slider-hover-state-layer-color:rgba(255, 64, 129, 0.05);--mat-slider-focus-state-layer-color:rgba(255, 64, 129, 0.2);--mdc-slider-handle-color:#ff4081;--mdc-slider-focus-handle-color:#ff4081;--mdc-slider-hover-handle-color:#ff4081;--mdc-slider-active-track-color:#ff4081;--mdc-slider-inactive-track-color:#ff4081;--mdc-slider-with-tick-marks-inactive-container-color:#ff4081;--mdc-slider-with-tick-marks-active-container-color:white}html .mat-warn{--mat-slider-ripple-color:#f44336;--mat-slider-hover-state-layer-color:rgba(244, 67, 54, 0.05);--mat-slider-focus-state-layer-color:rgba(244, 67, 54, 0.2);--mdc-slider-handle-color:#f44336;--mdc-slider-focus-handle-color:#f44336;--mdc-slider-hover-handle-color:#f44336;--mdc-slider-active-track-color:#f44336;--mdc-slider-inactive-track-color:#f44336;--mdc-slider-with-tick-marks-inactive-container-color:#f44336;--mdc-slider-with-tick-marks-active-container-color:white}html{--mdc-slider-label-label-text-font:Roboto, sans-serif;--mdc-slider-label-label-text-size:14px;--mdc-slider-label-label-text-line-height:22px;--mdc-slider-label-label-text-tracking:0.0071428571em;--mdc-slider-label-label-text-weight:500}html{--mat-menu-container-shape:4px;--mat-menu-divider-bottom-spacing:0;--mat-menu-divider-top-spacing:0;--mat-menu-item-spacing:16px;--mat-menu-item-icon-size:24px;--mat-menu-item-leading-spacing:16px;--mat-menu-item-trailing-spacing:16px;--mat-menu-item-with-icon-leading-spacing:16px;--mat-menu-item-with-icon-trailing-spacing:16px}html{--mat-menu-item-label-text-color:rgba(0, 0, 0, 0.87);--mat-menu-item-icon-color:rgba(0, 0, 0, 0.87);--mat-menu-item-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-menu-item-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-menu-container-color:white;--mat-menu-divider-color:rgba(0, 0, 0, 0.12)}html{--mat-menu-item-label-text-font:Roboto, sans-serif;--mat-menu-item-label-text-size:16px;--mat-menu-item-label-text-tracking:0.03125em;--mat-menu-item-label-text-line-height:24px;--mat-menu-item-label-text-weight:400}html{--mdc-list-list-item-container-shape:0;--mdc-list-list-item-leading-avatar-shape:50%;--mdc-list-list-item-container-color:transparent;--mdc-list-list-item-selected-container-color:transparent;--mdc-list-list-item-leading-avatar-color:transparent;--mdc-list-list-item-leading-icon-size:24px;--mdc-list-list-item-leading-avatar-size:40px;--mdc-list-list-item-trailing-icon-size:24px;--mdc-list-list-item-disabled-state-layer-color:transparent;--mdc-list-list-item-disabled-state-layer-opacity:0;--mdc-list-list-item-disabled-label-text-opacity:0.38;--mdc-list-list-item-disabled-leading-icon-opacity:0.38;--mdc-list-list-item-disabled-trailing-icon-opacity:0.38;--mat-list-active-indicator-color:transparent;--mat-list-active-indicator-shape:4px}html{--mdc-list-list-item-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-supporting-text-color:rgba(0, 0, 0, 0.54);--mdc-list-list-item-leading-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-trailing-supporting-text-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-selected-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-disabled-label-text-color:black;--mdc-list-list-item-disabled-leading-icon-color:black;--mdc-list-list-item-disabled-trailing-icon-color:black;--mdc-list-list-item-hover-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-hover-leading-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-hover-trailing-icon-color:rgba(0, 0, 0, 0.38);--mdc-list-list-item-focus-label-text-color:rgba(0, 0, 0, 0.87);--mdc-list-list-item-hover-state-layer-color:black;--mdc-list-list-item-hover-state-layer-opacity:0.04;--mdc-list-list-item-focus-state-layer-color:black;--mdc-list-list-item-focus-state-layer-opacity:0.12}.mdc-list-item__start,.mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#3f51b5;--mdc-radio-selected-hover-icon-color:#3f51b5;--mdc-radio-selected-icon-color:#3f51b5;--mdc-radio-selected-pressed-icon-color:#3f51b5}.mat-accent .mdc-list-item__start,.mat-accent .mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#ff4081;--mdc-radio-selected-hover-icon-color:#ff4081;--mdc-radio-selected-icon-color:#ff4081;--mdc-radio-selected-pressed-icon-color:#ff4081}.mat-warn .mdc-list-item__start,.mat-warn .mdc-list-item__end{--mdc-radio-disabled-selected-icon-color:black;--mdc-radio-disabled-unselected-icon-color:black;--mdc-radio-unselected-hover-icon-color:#212121;--mdc-radio-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-radio-selected-focus-icon-color:#f44336;--mdc-radio-selected-hover-icon-color:#f44336;--mdc-radio-selected-icon-color:#f44336;--mdc-radio-selected-pressed-icon-color:#f44336}.mat-mdc-list-option{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#3f51b5;--mdc-checkbox-selected-hover-icon-color:#3f51b5;--mdc-checkbox-selected-icon-color:#3f51b5;--mdc-checkbox-selected-pressed-icon-color:#3f51b5;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#3f51b5;--mdc-checkbox-selected-hover-state-layer-color:#3f51b5;--mdc-checkbox-selected-pressed-state-layer-color:#3f51b5;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-option.mat-accent{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#ff4081;--mdc-checkbox-selected-hover-icon-color:#ff4081;--mdc-checkbox-selected-icon-color:#ff4081;--mdc-checkbox-selected-pressed-icon-color:#ff4081;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#ff4081;--mdc-checkbox-selected-hover-state-layer-color:#ff4081;--mdc-checkbox-selected-pressed-state-layer-color:#ff4081;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-option.mat-warn{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#f44336;--mdc-checkbox-selected-hover-icon-color:#f44336;--mdc-checkbox-selected-icon-color:#f44336;--mdc-checkbox-selected-pressed-icon-color:#f44336;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#f44336;--mdc-checkbox-selected-hover-state-layer-color:#f44336;--mdc-checkbox-selected-pressed-state-layer-color:#f44336;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--selected .mdc-list-item__primary-text,.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--activated .mdc-list-item__primary-text{color:#3f51b5}.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--selected.mdc-list-item--with-leading-icon .mdc-list-item__start,.mat-mdc-list-base.mat-mdc-list-base .mdc-list-item--activated.mdc-list-item--with-leading-icon .mdc-list-item__start{color:#3f51b5}.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__content,.mat-mdc-list-base .mdc-list-item--disabled .mdc-list-item__end{opacity:1}html{--mdc-list-list-item-one-line-container-height:48px;--mdc-list-list-item-two-line-container-height:64px;--mdc-list-list-item-three-line-container-height:88px;--mat-list-list-item-leading-icon-start-space:16px;--mat-list-list-item-leading-icon-end-space:32px}.mdc-list-item__start,.mdc-list-item__end{--mdc-radio-state-layer-size:40px}.mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,.mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,.mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:56px}.mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,.mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,.mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:72px}html{--mdc-list-list-item-label-text-font:Roboto, sans-serif;--mdc-list-list-item-label-text-line-height:24px;--mdc-list-list-item-label-text-size:16px;--mdc-list-list-item-label-text-tracking:0.03125em;--mdc-list-list-item-label-text-weight:400;--mdc-list-list-item-supporting-text-font:Roboto, sans-serif;--mdc-list-list-item-supporting-text-line-height:20px;--mdc-list-list-item-supporting-text-size:14px;--mdc-list-list-item-supporting-text-tracking:0.0178571429em;--mdc-list-list-item-supporting-text-weight:400;--mdc-list-list-item-trailing-supporting-text-font:Roboto, sans-serif;--mdc-list-list-item-trailing-supporting-text-line-height:20px;--mdc-list-list-item-trailing-supporting-text-size:12px;--mdc-list-list-item-trailing-supporting-text-tracking:0.0333333333em;--mdc-list-list-item-trailing-supporting-text-weight:400}.mdc-list-group__subheader{font:400 16px/28px Roboto, sans-serif;letter-spacing:.009375em}html{--mat-paginator-container-text-color:rgba(0, 0, 0, 0.87);--mat-paginator-container-background-color:white;--mat-paginator-enabled-icon-color:rgba(0, 0, 0, 0.54);--mat-paginator-disabled-icon-color:rgba(0, 0, 0, 0.12)}html{--mat-paginator-container-size:56px;--mat-paginator-form-field-container-height:40px;--mat-paginator-form-field-container-vertical-padding:8px}html{--mat-paginator-container-text-font:Roboto, sans-serif;--mat-paginator-container-text-line-height:20px;--mat-paginator-container-text-size:12px;--mat-paginator-container-text-tracking:0.0333333333em;--mat-paginator-container-text-weight:400;--mat-paginator-select-trigger-text-size:12px}html{--mdc-tab-indicator-active-indicator-height:2px;--mdc-tab-indicator-active-indicator-shape:0;--mdc-secondary-navigation-tab-container-height:48px;--mat-tab-header-divider-color:transparent;--mat-tab-header-divider-height:0}.mat-mdc-tab-group,.mat-mdc-tab-nav-bar{--mdc-tab-indicator-active-indicator-color:#3f51b5;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#3f51b5;--mat-tab-header-active-ripple-color:#3f51b5;--mat-tab-header-inactive-ripple-color:#3f51b5;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#3f51b5;--mat-tab-header-active-hover-label-text-color:#3f51b5;--mat-tab-header-active-focus-indicator-color:#3f51b5;--mat-tab-header-active-hover-indicator-color:#3f51b5}.mat-mdc-tab-group.mat-accent,.mat-mdc-tab-nav-bar.mat-accent{--mdc-tab-indicator-active-indicator-color:#ff4081;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#ff4081;--mat-tab-header-active-ripple-color:#ff4081;--mat-tab-header-inactive-ripple-color:#ff4081;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#ff4081;--mat-tab-header-active-hover-label-text-color:#ff4081;--mat-tab-header-active-focus-indicator-color:#ff4081;--mat-tab-header-active-hover-indicator-color:#ff4081}.mat-mdc-tab-group.mat-warn,.mat-mdc-tab-nav-bar.mat-warn{--mdc-tab-indicator-active-indicator-color:#f44336;--mat-tab-header-disabled-ripple-color:rgba(0, 0, 0, 0.38);--mat-tab-header-pagination-icon-color:black;--mat-tab-header-inactive-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-label-text-color:#f44336;--mat-tab-header-active-ripple-color:#f44336;--mat-tab-header-inactive-ripple-color:#f44336;--mat-tab-header-inactive-focus-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-inactive-hover-label-text-color:rgba(0, 0, 0, 0.6);--mat-tab-header-active-focus-label-text-color:#f44336;--mat-tab-header-active-hover-label-text-color:#f44336;--mat-tab-header-active-focus-indicator-color:#f44336;--mat-tab-header-active-hover-indicator-color:#f44336}.mat-mdc-tab-group.mat-background-primary,.mat-mdc-tab-nav-bar.mat-background-primary{--mat-tab-header-with-background-background-color:#3f51b5;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-group.mat-background-accent,.mat-mdc-tab-nav-bar.mat-background-accent{--mat-tab-header-with-background-background-color:#ff4081;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-group.mat-background-warn,.mat-mdc-tab-nav-bar.mat-background-warn{--mat-tab-header-with-background-background-color:#f44336;--mat-tab-header-with-background-foreground-color:white}.mat-mdc-tab-header{--mdc-secondary-navigation-tab-container-height:48px}.mat-mdc-tab-header{--mat-tab-header-label-text-font:Roboto, sans-serif;--mat-tab-header-label-text-size:14px;--mat-tab-header-label-text-tracking:0.0892857143em;--mat-tab-header-label-text-line-height:36px;--mat-tab-header-label-text-weight:500}html{--mdc-checkbox-disabled-selected-checkmark-color:#fff;--mdc-checkbox-selected-focus-state-layer-opacity:0.16;--mdc-checkbox-selected-hover-state-layer-opacity:0.04;--mdc-checkbox-selected-pressed-state-layer-opacity:0.16;--mdc-checkbox-unselected-focus-state-layer-opacity:0.16;--mdc-checkbox-unselected-hover-state-layer-opacity:0.04;--mdc-checkbox-unselected-pressed-state-layer-opacity:0.16}html{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#ff4081;--mdc-checkbox-selected-hover-icon-color:#ff4081;--mdc-checkbox-selected-icon-color:#ff4081;--mdc-checkbox-selected-pressed-icon-color:#ff4081;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#ff4081;--mdc-checkbox-selected-hover-state-layer-color:#ff4081;--mdc-checkbox-selected-pressed-state-layer-color:#ff4081;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black;--mat-checkbox-disabled-label-color:rgba(0, 0, 0, 0.38)}.mat-mdc-checkbox{--mdc-form-field-label-text-color:rgba(0, 0, 0, 0.87)}.mat-mdc-checkbox.mat-primary{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#3f51b5;--mdc-checkbox-selected-hover-icon-color:#3f51b5;--mdc-checkbox-selected-icon-color:#3f51b5;--mdc-checkbox-selected-pressed-icon-color:#3f51b5;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#3f51b5;--mdc-checkbox-selected-hover-state-layer-color:#3f51b5;--mdc-checkbox-selected-pressed-state-layer-color:#3f51b5;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}.mat-mdc-checkbox.mat-warn{--mdc-checkbox-disabled-selected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-disabled-unselected-icon-color:rgba(0, 0, 0, 0.38);--mdc-checkbox-selected-checkmark-color:white;--mdc-checkbox-selected-focus-icon-color:#f44336;--mdc-checkbox-selected-hover-icon-color:#f44336;--mdc-checkbox-selected-icon-color:#f44336;--mdc-checkbox-selected-pressed-icon-color:#f44336;--mdc-checkbox-unselected-focus-icon-color:#212121;--mdc-checkbox-unselected-hover-icon-color:#212121;--mdc-checkbox-unselected-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-unselected-pressed-icon-color:rgba(0, 0, 0, 0.54);--mdc-checkbox-selected-focus-state-layer-color:#f44336;--mdc-checkbox-selected-hover-state-layer-color:#f44336;--mdc-checkbox-selected-pressed-state-layer-color:#f44336;--mdc-checkbox-unselected-focus-state-layer-color:black;--mdc-checkbox-unselected-hover-state-layer-color:black;--mdc-checkbox-unselected-pressed-state-layer-color:black}html{--mdc-checkbox-state-layer-size:40px;--mat-checkbox-touch-target-display:block}.mat-mdc-checkbox{--mdc-form-field-label-text-font:Roboto, sans-serif;--mdc-form-field-label-text-line-height:20px;--mdc-form-field-label-text-size:14px;--mdc-form-field-label-text-tracking:0.0178571429em;--mdc-form-field-label-text-weight:400}html{--mdc-text-button-container-shape:4px;--mdc-text-button-keep-touch-target:false;--mdc-filled-button-container-shape:4px;--mdc-filled-button-keep-touch-target:false;--mdc-protected-button-container-shape:4px;--mdc-protected-button-keep-touch-target:false;--mdc-outlined-button-keep-touch-target:false;--mdc-outlined-button-outline-width:1px;--mdc-outlined-button-container-shape:4px;--mat-text-button-horizontal-padding:8px;--mat-text-button-with-icon-horizontal-padding:8px;--mat-text-button-icon-spacing:8px;--mat-text-button-icon-offset:0;--mat-filled-button-horizontal-padding:16px;--mat-filled-button-icon-spacing:8px;--mat-filled-button-icon-offset:-4px;--mat-protected-button-horizontal-padding:16px;--mat-protected-button-icon-spacing:8px;--mat-protected-button-icon-offset:-4px;--mat-outlined-button-horizontal-padding:15px;--mat-outlined-button-icon-spacing:8px;--mat-outlined-button-icon-offset:-4px}html{--mdc-text-button-label-text-color:black;--mdc-text-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mat-text-button-state-layer-color:black;--mat-text-button-disabled-state-layer-color:black;--mat-text-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-text-button-hover-state-layer-opacity:0.04;--mat-text-button-focus-state-layer-opacity:0.12;--mat-text-button-pressed-state-layer-opacity:0.12;--mdc-filled-button-container-color:white;--mdc-filled-button-label-text-color:black;--mdc-filled-button-disabled-container-color:rgba(0, 0, 0, 0.12);--mdc-filled-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mat-filled-button-state-layer-color:black;--mat-filled-button-disabled-state-layer-color:black;--mat-filled-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-filled-button-hover-state-layer-opacity:0.04;--mat-filled-button-focus-state-layer-opacity:0.12;--mat-filled-button-pressed-state-layer-opacity:0.12;--mdc-protected-button-container-color:white;--mdc-protected-button-label-text-color:black;--mdc-protected-button-disabled-container-color:rgba(0, 0, 0, 0.12);--mdc-protected-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-protected-button-container-elevation-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-disabled-container-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-focus-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-hover-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mdc-protected-button-pressed-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-protected-button-container-shadow-color:#000;--mat-protected-button-state-layer-color:black;--mat-protected-button-disabled-state-layer-color:black;--mat-protected-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-protected-button-hover-state-layer-opacity:0.04;--mat-protected-button-focus-state-layer-opacity:0.12;--mat-protected-button-pressed-state-layer-opacity:0.12;--mdc-outlined-button-disabled-outline-color:rgba(0, 0, 0, 0.12);--mdc-outlined-button-disabled-label-text-color:rgba(0, 0, 0, 0.38);--mdc-outlined-button-label-text-color:black;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:black;--mat-outlined-button-disabled-state-layer-color:black;--mat-outlined-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-outlined-button-hover-state-layer-opacity:0.04;--mat-outlined-button-focus-state-layer-opacity:0.12;--mat-outlined-button-pressed-state-layer-opacity:0.12}.mat-mdc-button.mat-primary{--mdc-text-button-label-text-color:#3f51b5;--mat-text-button-state-layer-color:#3f51b5;--mat-text-button-ripple-color:rgba(63, 81, 181, 0.1)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color:#ff4081;--mat-text-button-state-layer-color:#ff4081;--mat-text-button-ripple-color:rgba(255, 64, 129, 0.1)}.mat-mdc-button.mat-warn{--mdc-text-button-label-text-color:#f44336;--mat-text-button-state-layer-color:#f44336;--mat-text-button-ripple-color:rgba(244, 67, 54, 0.1)}.mat-mdc-unelevated-button.mat-primary{--mdc-filled-button-container-color:#3f51b5;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-unelevated-button.mat-accent{--mdc-filled-button-container-color:#ff4081;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-unelevated-button.mat-warn{--mdc-filled-button-container-color:#f44336;--mdc-filled-button-label-text-color:white;--mat-filled-button-state-layer-color:white;--mat-filled-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-primary{--mdc-protected-button-container-color:#3f51b5;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-accent{--mdc-protected-button-container-color:#ff4081;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-raised-button.mat-warn{--mdc-protected-button-container-color:#f44336;--mdc-protected-button-label-text-color:white;--mat-protected-button-state-layer-color:white;--mat-protected-button-ripple-color:rgba(255, 255, 255, 0.1)}.mat-mdc-outlined-button.mat-primary{--mdc-outlined-button-label-text-color:#3f51b5;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#3f51b5;--mat-outlined-button-ripple-color:rgba(63, 81, 181, 0.1)}.mat-mdc-outlined-button.mat-accent{--mdc-outlined-button-label-text-color:#ff4081;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#ff4081;--mat-outlined-button-ripple-color:rgba(255, 64, 129, 0.1)}.mat-mdc-outlined-button.mat-warn{--mdc-outlined-button-label-text-color:#f44336;--mdc-outlined-button-outline-color:rgba(0, 0, 0, 0.12);--mat-outlined-button-state-layer-color:#f44336;--mat-outlined-button-ripple-color:rgba(244, 67, 54, 0.1)}html{--mdc-text-button-container-height:36px;--mdc-filled-button-container-height:36px;--mdc-outlined-button-container-height:36px;--mdc-protected-button-container-height:36px;--mat-text-button-touch-target-display:block;--mat-filled-button-touch-target-display:block;--mat-protected-button-touch-target-display:block;--mat-outlined-button-touch-target-display:block}html{--mdc-text-button-label-text-font:Roboto, sans-serif;--mdc-text-button-label-text-size:14px;--mdc-text-button-label-text-tracking:0.0892857143em;--mdc-text-button-label-text-weight:500;--mdc-text-button-label-text-transform:none;--mdc-filled-button-label-text-font:Roboto, sans-serif;--mdc-filled-button-label-text-size:14px;--mdc-filled-button-label-text-tracking:0.0892857143em;--mdc-filled-button-label-text-weight:500;--mdc-filled-button-label-text-transform:none;--mdc-outlined-button-label-text-font:Roboto, sans-serif;--mdc-outlined-button-label-text-size:14px;--mdc-outlined-button-label-text-tracking:0.0892857143em;--mdc-outlined-button-label-text-weight:500;--mdc-outlined-button-label-text-transform:none;--mdc-protected-button-label-text-font:Roboto, sans-serif;--mdc-protected-button-label-text-size:14px;--mdc-protected-button-label-text-tracking:0.0892857143em;--mdc-protected-button-label-text-weight:500;--mdc-protected-button-label-text-transform:none}html{--mdc-icon-button-icon-size:24px}html{--mdc-icon-button-icon-color:inherit;--mdc-icon-button-disabled-icon-color:rgba(0, 0, 0, 0.38);--mat-icon-button-state-layer-color:black;--mat-icon-button-disabled-state-layer-color:black;--mat-icon-button-ripple-color:rgba(0, 0, 0, 0.1);--mat-icon-button-hover-state-layer-opacity:0.04;--mat-icon-button-focus-state-layer-opacity:0.12;--mat-icon-button-pressed-state-layer-opacity:0.12}html .mat-mdc-icon-button.mat-primary{--mdc-icon-button-icon-color:#3f51b5;--mat-icon-button-state-layer-color:#3f51b5;--mat-icon-button-ripple-color:rgba(63, 81, 181, 0.1)}html .mat-mdc-icon-button.mat-accent{--mdc-icon-button-icon-color:#ff4081;--mat-icon-button-state-layer-color:#ff4081;--mat-icon-button-ripple-color:rgba(255, 64, 129, 0.1)}html .mat-mdc-icon-button.mat-warn{--mdc-icon-button-icon-color:#f44336;--mat-icon-button-state-layer-color:#f44336;--mat-icon-button-ripple-color:rgba(244, 67, 54, 0.1)}html{--mat-icon-button-touch-target-display:block}.mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size:48px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:12px}html{--mdc-fab-container-shape:50%;--mdc-fab-icon-size:24px;--mdc-fab-small-container-shape:50%;--mdc-fab-small-icon-size:24px;--mdc-extended-fab-container-height:48px;--mdc-extended-fab-container-shape:24px}html{--mdc-fab-container-color:white;--mdc-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-fab-container-shadow-color:#000;--mat-fab-foreground-color:black;--mat-fab-state-layer-color:black;--mat-fab-disabled-state-layer-color:black;--mat-fab-ripple-color:rgba(0, 0, 0, 0.1);--mat-fab-hover-state-layer-opacity:0.04;--mat-fab-focus-state-layer-opacity:0.12;--mat-fab-pressed-state-layer-opacity:0.12;--mat-fab-disabled-state-container-color:rgba(0, 0, 0, 0.12);--mat-fab-disabled-state-foreground-color:rgba(0, 0, 0, 0.38);--mdc-fab-small-container-color:white;--mdc-fab-small-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-fab-small-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-small-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-fab-small-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-fab-small-container-shadow-color:#000;--mat-fab-small-foreground-color:black;--mat-fab-small-state-layer-color:black;--mat-fab-small-disabled-state-layer-color:black;--mat-fab-small-ripple-color:rgba(0, 0, 0, 0.1);--mat-fab-small-hover-state-layer-opacity:0.04;--mat-fab-small-focus-state-layer-opacity:0.12;--mat-fab-small-pressed-state-layer-opacity:0.12;--mat-fab-small-disabled-state-container-color:rgba(0, 0, 0, 0.12);--mat-fab-small-disabled-state-foreground-color:rgba(0, 0, 0, 0.38);--mdc-extended-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);--mdc-extended-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-extended-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);--mdc-extended-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);--mdc-extended-fab-container-shadow-color:#000}html .mat-mdc-fab.mat-primary{--mdc-fab-container-color:#3f51b5;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-fab.mat-accent{--mdc-fab-container-color:#ff4081;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-fab.mat-warn{--mdc-fab-container-color:#f44336;--mat-fab-foreground-color:white;--mat-fab-state-layer-color:white;--mat-fab-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-primary{--mdc-fab-small-container-color:#3f51b5;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-accent{--mdc-fab-small-container-color:#ff4081;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html .mat-mdc-mini-fab.mat-warn{--mdc-fab-small-container-color:#f44336;--mat-fab-small-foreground-color:white;--mat-fab-small-state-layer-color:white;--mat-fab-small-ripple-color:rgba(255, 255, 255, 0.1)}html{--mat-fab-touch-target-display:block;--mat-fab-small-touch-target-display:block}html{--mdc-extended-fab-label-text-font:Roboto, sans-serif;--mdc-extended-fab-label-text-size:14px;--mdc-extended-fab-label-text-tracking:0.0892857143em;--mdc-extended-fab-label-text-weight:500}html{--mdc-snackbar-container-shape:4px}html{--mdc-snackbar-container-color:#333333;--mdc-snackbar-supporting-text-color:rgba(255, 255, 255, 0.87);--mat-snack-bar-button-color:#ff4081}html{--mdc-snackbar-supporting-text-font:Roboto, sans-serif;--mdc-snackbar-supporting-text-line-height:20px;--mdc-snackbar-supporting-text-size:14px;--mdc-snackbar-supporting-text-weight:400}html{--mat-table-row-item-outline-width:1px}html{--mat-table-background-color:white;--mat-table-header-headline-color:rgba(0, 0, 0, 0.87);--mat-table-row-item-label-text-color:rgba(0, 0, 0, 0.87);--mat-table-row-item-outline-color:rgba(0, 0, 0, 0.12)}html{--mat-table-header-container-height:56px;--mat-table-footer-container-height:52px;--mat-table-row-item-container-height:52px}html{--mat-table-header-headline-font:Roboto, sans-serif;--mat-table-header-headline-line-height:22px;--mat-table-header-headline-size:14px;--mat-table-header-headline-weight:500;--mat-table-header-headline-tracking:0.0071428571em;--mat-table-row-item-label-text-font:Roboto, sans-serif;--mat-table-row-item-label-text-line-height:20px;--mat-table-row-item-label-text-size:14px;--mat-table-row-item-label-text-weight:400;--mat-table-row-item-label-text-tracking:0.0178571429em;--mat-table-footer-supporting-text-font:Roboto, sans-serif;--mat-table-footer-supporting-text-line-height:20px;--mat-table-footer-supporting-text-size:14px;--mat-table-footer-supporting-text-weight:400;--mat-table-footer-supporting-text-tracking:0.0178571429em}html{--mdc-circular-progress-active-indicator-width:4px;--mdc-circular-progress-size:48px}html{--mdc-circular-progress-active-indicator-color:#3f51b5}html .mat-accent{--mdc-circular-progress-active-indicator-color:#ff4081}html .mat-warn{--mdc-circular-progress-active-indicator-color:#f44336}html{--mat-badge-container-shape:50%;--mat-badge-container-size:unset;--mat-badge-small-size-container-size:unset;--mat-badge-large-size-container-size:unset;--mat-badge-legacy-container-size:22px;--mat-badge-legacy-small-size-container-size:16px;--mat-badge-legacy-large-size-container-size:28px;--mat-badge-container-offset:-11px 0;--mat-badge-small-size-container-offset:-8px 0;--mat-badge-large-size-container-offset:-14px 0;--mat-badge-container-overlap-offset:-11px;--mat-badge-small-size-container-overlap-offset:-8px;--mat-badge-large-size-container-overlap-offset:-14px;--mat-badge-container-padding:0;--mat-badge-small-size-container-padding:0;--mat-badge-large-size-container-padding:0}html{--mat-badge-background-color:#3f51b5;--mat-badge-text-color:white;--mat-badge-disabled-state-background-color:#b9b9b9;--mat-badge-disabled-state-text-color:rgba(0, 0, 0, 0.38)}.mat-badge-accent{--mat-badge-background-color:#ff4081;--mat-badge-text-color:white}.mat-badge-warn{--mat-badge-background-color:#f44336;--mat-badge-text-color:white}html{--mat-badge-text-font:Roboto, sans-serif;--mat-badge-text-size:12px;--mat-badge-text-weight:600;--mat-badge-small-size-text-size:9px;--mat-badge-large-size-text-size:24px}html{--mat-bottom-sheet-container-shape:4px}html{--mat-bottom-sheet-container-text-color:rgba(0, 0, 0, 0.87);--mat-bottom-sheet-container-background-color:white}html{--mat-bottom-sheet-container-text-font:Roboto, sans-serif;--mat-bottom-sheet-container-text-line-height:20px;--mat-bottom-sheet-container-text-size:14px;--mat-bottom-sheet-container-text-tracking:0.0178571429em;--mat-bottom-sheet-container-text-weight:400}html{--mat-legacy-button-toggle-height:36px;--mat-legacy-button-toggle-shape:2px;--mat-legacy-button-toggle-focus-state-layer-opacity:1;--mat-standard-button-toggle-shape:4px;--mat-standard-button-toggle-hover-state-layer-opacity:0.04;--mat-standard-button-toggle-focus-state-layer-opacity:0.12}html{--mat-legacy-button-toggle-text-color:rgba(0, 0, 0, 0.38);--mat-legacy-button-toggle-state-layer-color:rgba(0, 0, 0, 0.12);--mat-legacy-button-toggle-selected-state-text-color:rgba(0, 0, 0, 0.54);--mat-legacy-button-toggle-selected-state-background-color:#e0e0e0;--mat-legacy-button-toggle-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-legacy-button-toggle-disabled-state-background-color:#eeeeee;--mat-legacy-button-toggle-disabled-selected-state-background-color:#bdbdbd;--mat-standard-button-toggle-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-background-color:white;--mat-standard-button-toggle-state-layer-color:black;--mat-standard-button-toggle-selected-state-background-color:#e0e0e0;--mat-standard-button-toggle-selected-state-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-standard-button-toggle-disabled-state-background-color:white;--mat-standard-button-toggle-disabled-selected-state-text-color:rgba(0, 0, 0, 0.87);--mat-standard-button-toggle-disabled-selected-state-background-color:#bdbdbd;--mat-standard-button-toggle-divider-color:#e0e0e0}html{--mat-standard-button-toggle-height:48px}html{--mat-legacy-button-toggle-label-text-font:Roboto, sans-serif;--mat-legacy-button-toggle-label-text-line-height:24px;--mat-legacy-button-toggle-label-text-size:16px;--mat-legacy-button-toggle-label-text-tracking:0.03125em;--mat-legacy-button-toggle-label-text-weight:400;--mat-standard-button-toggle-label-text-font:Roboto, sans-serif;--mat-standard-button-toggle-label-text-line-height:24px;--mat-standard-button-toggle-label-text-size:16px;--mat-standard-button-toggle-label-text-tracking:0.03125em;--mat-standard-button-toggle-label-text-weight:400}html{--mat-datepicker-calendar-container-shape:4px;--mat-datepicker-calendar-container-touch-shape:4px;--mat-datepicker-calendar-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);--mat-datepicker-calendar-container-touch-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12)}html{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#3f51b5;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(63, 81, 181, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(63, 81, 181, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(63, 81, 181, 0.3);--mat-datepicker-toggle-active-state-icon-color:#3f51b5;--mat-datepicker-calendar-date-in-range-state-background-color:rgba(63, 81, 181, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e;--mat-datepicker-toggle-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-body-label-text-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-period-button-text-color:black;--mat-datepicker-calendar-period-button-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-navigation-button-icon-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-header-divider-color:rgba(0, 0, 0, 0.12);--mat-datepicker-calendar-header-text-color:rgba(0, 0, 0, 0.54);--mat-datepicker-calendar-date-today-outline-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-date-today-disabled-state-outline-color:rgba(0, 0, 0, 0.18);--mat-datepicker-calendar-date-text-color:rgba(0, 0, 0, 0.87);--mat-datepicker-calendar-date-outline-color:transparent;--mat-datepicker-calendar-date-disabled-state-text-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-date-preview-state-outline-color:rgba(0, 0, 0, 0.24);--mat-datepicker-range-input-separator-color:rgba(0, 0, 0, 0.87);--mat-datepicker-range-input-disabled-state-separator-color:rgba(0, 0, 0, 0.38);--mat-datepicker-range-input-disabled-state-text-color:rgba(0, 0, 0, 0.38);--mat-datepicker-calendar-container-background-color:white;--mat-datepicker-calendar-container-text-color:rgba(0, 0, 0, 0.87)}.mat-datepicker-content.mat-accent{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#ff4081;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(255, 64, 129, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(255, 64, 129, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(255, 64, 129, 0.3);--mat-datepicker-calendar-date-in-range-state-background-color:rgba(255, 64, 129, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e}.mat-datepicker-content.mat-warn{--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#f44336;--mat-datepicker-calendar-date-selected-disabled-state-background-color:rgba(244, 67, 54, 0.4);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:rgba(244, 67, 54, 0.3);--mat-datepicker-calendar-date-hover-state-background-color:rgba(244, 67, 54, 0.3);--mat-datepicker-calendar-date-in-range-state-background-color:rgba(244, 67, 54, 0.2);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:rgba(249, 171, 0, 0.2);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:#46a35e}.mat-datepicker-toggle-active.mat-accent{--mat-datepicker-toggle-active-state-icon-color:#ff4081}.mat-datepicker-toggle-active.mat-warn{--mat-datepicker-toggle-active-state-icon-color:#f44336}.mat-calendar-controls{--mat-icon-button-touch-target-display:none}.mat-calendar-controls .mat-mdc-icon-button.mat-mdc-button-base{--mdc-icon-button-state-layer-size:40px;width:var(--mdc-icon-button-state-layer-size);height:var(--mdc-icon-button-state-layer-size);padding:8px}html{--mat-datepicker-calendar-text-font:Roboto, sans-serif;--mat-datepicker-calendar-text-size:13px;--mat-datepicker-calendar-body-label-text-size:14px;--mat-datepicker-calendar-body-label-text-weight:500;--mat-datepicker-calendar-period-button-text-size:14px;--mat-datepicker-calendar-period-button-text-weight:500;--mat-datepicker-calendar-header-text-size:11px;--mat-datepicker-calendar-header-text-weight:400}html{--mat-divider-width:1px}html{--mat-divider-color:rgba(0, 0, 0, 0.12)}html{--mat-expansion-container-shape:4px;--mat-expansion-legacy-header-indicator-display:inline-block;--mat-expansion-header-indicator-display:none}html{--mat-expansion-container-background-color:white;--mat-expansion-container-text-color:rgba(0, 0, 0, 0.87);--mat-expansion-actions-divider-color:rgba(0, 0, 0, 0.12);--mat-expansion-header-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-expansion-header-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-expansion-header-disabled-state-text-color:rgba(0, 0, 0, 0.26);--mat-expansion-header-text-color:rgba(0, 0, 0, 0.87);--mat-expansion-header-description-color:rgba(0, 0, 0, 0.54);--mat-expansion-header-indicator-color:rgba(0, 0, 0, 0.54)}html{--mat-expansion-header-collapsed-state-height:48px;--mat-expansion-header-expanded-state-height:64px}html{--mat-expansion-header-text-font:Roboto, sans-serif;--mat-expansion-header-text-size:14px;--mat-expansion-header-text-weight:500;--mat-expansion-header-text-line-height:inherit;--mat-expansion-header-text-tracking:inherit;--mat-expansion-container-text-font:Roboto, sans-serif;--mat-expansion-container-text-line-height:20px;--mat-expansion-container-text-size:14px;--mat-expansion-container-text-tracking:0.0178571429em;--mat-expansion-container-text-weight:400}html{--mat-grid-list-tile-header-primary-text-size:14px;--mat-grid-list-tile-header-secondary-text-size:12px;--mat-grid-list-tile-footer-primary-text-size:14px;--mat-grid-list-tile-footer-secondary-text-size:12px}html{--mat-icon-color:inherit}.mat-icon.mat-primary{--mat-icon-color:#3f51b5}.mat-icon.mat-accent{--mat-icon-color:#ff4081}.mat-icon.mat-warn{--mat-icon-color:#f44336}html{--mat-sidenav-container-shape:0;--mat-sidenav-container-elevation-shadow:0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);--mat-sidenav-container-width:auto}html{--mat-sidenav-container-divider-color:rgba(0, 0, 0, 0.12);--mat-sidenav-container-background-color:white;--mat-sidenav-container-text-color:rgba(0, 0, 0, 0.87);--mat-sidenav-content-background-color:#fafafa;--mat-sidenav-content-text-color:rgba(0, 0, 0, 0.87);--mat-sidenav-scrim-color:rgba(0, 0, 0, 0.6)}html{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#3f51b5;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#3f51b5;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#3f51b5;--mat-stepper-header-edit-state-icon-foreground-color:white;--mat-stepper-container-color:white;--mat-stepper-line-color:rgba(0, 0, 0, 0.12);--mat-stepper-header-hover-state-layer-color:rgba(0, 0, 0, 0.04);--mat-stepper-header-focus-state-layer-color:rgba(0, 0, 0, 0.04);--mat-stepper-header-label-text-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-optional-label-text-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-selected-state-label-text-color:rgba(0, 0, 0, 0.87);--mat-stepper-header-error-state-label-text-color:#f44336;--mat-stepper-header-icon-background-color:rgba(0, 0, 0, 0.54);--mat-stepper-header-error-state-icon-foreground-color:#f44336;--mat-stepper-header-error-state-icon-background-color:transparent}html .mat-step-header.mat-accent{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#ff4081;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#ff4081;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#ff4081;--mat-stepper-header-edit-state-icon-foreground-color:white}html .mat-step-header.mat-warn{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#f44336;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#f44336;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#f44336;--mat-stepper-header-edit-state-icon-foreground-color:white}html{--mat-stepper-header-height:72px}html{--mat-stepper-container-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-size:14px;--mat-stepper-header-label-text-weight:400;--mat-stepper-header-error-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-weight:400}html{--mat-sort-arrow-color:#757575}html{--mat-toolbar-container-background-color:whitesmoke;--mat-toolbar-container-text-color:rgba(0, 0, 0, 0.87)}.mat-toolbar.mat-primary{--mat-toolbar-container-background-color:#3f51b5;--mat-toolbar-container-text-color:white}.mat-toolbar.mat-accent{--mat-toolbar-container-background-color:#ff4081;--mat-toolbar-container-text-color:white}.mat-toolbar.mat-warn{--mat-toolbar-container-background-color:#f44336;--mat-toolbar-container-text-color:white}html{--mat-toolbar-standard-height:64px;--mat-toolbar-mobile-height:56px}html{--mat-toolbar-title-text-font:Roboto, sans-serif;--mat-toolbar-title-text-line-height:32px;--mat-toolbar-title-text-size:20px;--mat-toolbar-title-text-tracking:0.0125em;--mat-toolbar-title-text-weight:500}html{--mat-tree-container-background-color:white;--mat-tree-node-text-color:rgba(0, 0, 0, 0.87)}html{--mat-tree-node-min-height:48px}html{--mat-tree-node-text-font:Roboto, sans-serif;--mat-tree-node-text-size:14px;--mat-tree-node-text-weight:400}.mat-h1,.mat-headline-5,.mat-typography .mat-h1,.mat-typography .mat-headline-5,.mat-typography h1{font:400 24px/32px Roboto, sans-serif;letter-spacing:normal;margin:0 0 16px}.mat-h2,.mat-headline-6,.mat-typography .mat-h2,.mat-typography .mat-headline-6,.mat-typography h2{font:500 20px/32px Roboto, sans-serif;letter-spacing:.0125em;margin:0 0 16px}.mat-h3,.mat-subtitle-1,.mat-typography .mat-h3,.mat-typography .mat-subtitle-1,.mat-typography h3{font:400 16px/28px Roboto, sans-serif;letter-spacing:.009375em;margin:0 0 16px}.mat-h4,.mat-body-1,.mat-typography .mat-h4,.mat-typography .mat-body-1,.mat-typography h4{font:400 16px/24px Roboto, sans-serif;letter-spacing:.03125em;margin:0 0 16px}.mat-h5,.mat-typography .mat-h5,.mat-typography h5{font:400 calc(14px*.83)/20px Roboto, sans-serif;margin:0 0 12px}.mat-h6,.mat-typography .mat-h6,.mat-typography h6{font:400 calc(14px*.67)/20px Roboto, sans-serif;margin:0 0 12px}.mat-body-strong,.mat-subtitle-2,.mat-typography .mat-body-strong,.mat-typography .mat-subtitle-2{font:500 14px/22px Roboto, sans-serif;letter-spacing:.0071428571em}.mat-body,.mat-body-2,.mat-typography .mat-body,.mat-typography .mat-body-2,.mat-typography{font:400 14px/20px Roboto, sans-serif;letter-spacing:.0178571429em}.mat-body p,.mat-body-2 p,.mat-typography .mat-body p,.mat-typography .mat-body-2 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption,.mat-typography .mat-small,.mat-typography .mat-caption{font:400 12px/20px Roboto, sans-serif;letter-spacing:.0333333333em}.mat-headline-1,.mat-typography .mat-headline-1{font:300 96px/96px Roboto, sans-serif;letter-spacing:-0.015625em;margin:0 0 56px}.mat-headline-2,.mat-typography .mat-headline-2{font:300 60px/60px Roboto, sans-serif;letter-spacing:-.0083333333em;margin:0 0 64px}.mat-headline-3,.mat-typography .mat-headline-3{font:400 48px/50px Roboto, sans-serif;letter-spacing:normal;margin:0 0 64px}.mat-headline-4,.mat-typography .mat-headline-4{font:400 34px/40px Roboto, sans-serif;letter-spacing:.0073529412em;margin:0 0 64px}","/* You can add global styles to this file, and also import other style files */\n@import '@angular/material/prebuilt-themes/indigo-pink.css';\n@import '@fontsource/roboto';\n@import '@fontsource/roboto-mono';\n@import 'colors.scss';\n\n@media print {\n @page {\n size: A3;\n margin: 0;\n }\n}\n\n@font-face {\n font-family: 'Material Icons';\n font-style: normal;\n font-display: block;\n font-weight: 400;\n src:\n local('Material Icons'),\n local('MaterialIcons-Regular'),\n url(assets/icons/MaterialIcons-Regular.ttf) format('truetype');\n}\n\n.material-icons {\n font-family: 'Material Icons';\n font-weight: normal;\n font-style: normal;\n font-size: 24px; /* Preferred icon size */\n display: inline-block;\n line-height: 1;\n text-transform: none;\n letter-spacing: normal;\n word-wrap: normal;\n white-space: nowrap;\n direction: ltr;\n\n /* Support for all WebKit browsers. */\n -webkit-font-smoothing: antialiased;\n /* Support for Safari and Chrome. */\n text-rendering: optimizeLegibility;\n\n /* Support for Firefox. */\n -moz-osx-font-smoothing: grayscale;\n\n /* Support for IE. */\n font-feature-settings: 'liga';\n}\n\n.text-deemphasis {\n color: on-color-deemphasis(body);\n font-size: 12px !important;\n letter-spacing: normal;\n}\n\nbody {\n margin: 0;\n overflow-y: scroll;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n}\n\n.svgcontainer {\n @include adaptive-color-dark-only('background-color', white);\n}\n\n.mdc-button, .mat-mdc-button-base {\n letter-spacing: normal !important;\n}\n\n.mat-dialog {\n .mat-mdc-dialog-actions {\n justify-content: center;\n }\n .mat-mdc-dialog-title {\n text-align: center;\n }\n .mat-mdc-dialog-content {\n color: black !important;\n @include adaptive-color-dark-only('color', on-color(dark) !important);\n }\n}\n\n.mat-mdc-dialog-container {\n .mdc-dialog__surface {\n @include adaptive-color-dark-only('background-color', color(dark-2));\n }\n .mdc-dialog__title,\n .mdc-dialog__content {\n @include adaptive-color-dark-only('color', on-color(dark) !important);\n }\n .mat-mdc-button-base {\n @include adaptive-color-dark-only('border-color', color(dark-4));\n @include adaptive-color-dark-only('color', on-color(dark));\n }\n\n .help-dialog h1 {\n @include adaptive-color-dark-only('border-color', on-color(dark-1));\n }\n\n .content {\n overflow-y: scroll;\n max-height: 60vh;\n font-size: 11pt;\n\n p,\n ul {\n margin-block-start: 1em;\n margin-block-end: 1em;\n }\n\n code {\n @include adaptive-color-dark-only('background-color', color(dark-1));\n @include adaptive-color-dark-only('border-color', color(panel-dark) !important);\n @include adaptive-color-dark-only('color', on-color(dark) !important);\n color: black;\n padding: 1px 2px;\n word-break: break-word;\n }\n }\n\n a {\n @include adaptive-color-dark-only('color', color(dark-link) !important);\n }\n\n a:active,\n a:visited {\n @include adaptive-color-dark-only('color', color(dark-link-active));\n }\n\n .top-button {\n display: inline;\n float: right;\n margin-top: 14px;\n }\n}\n\n.noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Safari */\n -khtml-user-select: none; /* Konqueror HTML */\n -moz-user-select: none; /* Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none;\n /* Non-prefixed version, currently\n supported by Chrome and Opera */\n}\n\n// ___ ___ _ _ _____ ___ ___ _ ___\n// / __/ _ \\| \\| |_ _| _ \\/ _ \\| | / __|\n// | (_| (_) | .` | | | | / (_) | |__\\__ \\\n// \\___\\___/|_|\\_| |_| |_|_\\\\___/|____|___/\n\n// panel with controls\n.controlsContainer {\n @include adaptive-color('background-color', color(panel-dark), color(dark-2));\n\n text-align: right;\n display: block;\n @media print {\n display: none;\n }\n\n ul {\n margin: 0;\n padding: 0;\n }\n\n .label{\n .control-row-item + .control-row-item{\n margin-right: 6px;\n }\n }\n\n .control-sections > li {\n list-style: none;\n display: inline-block;\n // &:not(:last-child){\n border-left: 1px solid darken(color(panel-dark), 8%);\n padding: 0 5px 0 5px;\n position: relative;\n\n // label for a section of controls, e.g layer controls or technique controls\n .section-label {\n @include adaptive-color('background-color', color(panel-dark), color(dark-2));\n @include adaptive-color('color', color(tab-text-color), on-color(dark));\n font-size: 8pt;\n top: -12px;\n position: absolute;\n padding: 0 5px;\n border-radius: 2px 2px 0 0;\n text-align: center;\n cursor: default;\n user-select: none;\n white-space: nowrap;\n z-index: 1;\n }\n\n .control-row-item {\n display: inline-block;\n position: relative;\n height: 34px;\n\n & > :not(.disabled) {\n @include adaptive-color('color', black, white);\n }\n\n & > .disabled {\n @include adaptive-color('color', #aaaaaa, rgb(255 255 255 / 25%));\n }\n\n .control-row-button {\n border-radius: 3px;\n padding: 5px;\n height: 24px;\n cursor: pointer;\n\n &:hover {\n @include adaptive-color('background-color', darken(color(panel-dark), 5%), color(dark-4));\n }\n\n &.dropdown::after {\n font-size: 5pt;\n content: '▼';\n }\n span{\n vertical-align: middle;\n }\n .control-label {\n padding-right: 5px;\n }\n }\n\n // dropdown controls container\n .dropdown-container {\n @include adaptive-color('background-color', white, color(dark-2));\n @include adaptive-color('border', 1px solid black, 1px solid color(dark-4));\n @include adaptive-color('box-shadow', 0px 10px 5px rgba(0, 0, 0, 0.5), 0px 10px 5px color(dark-2));\n\n &.left {\n right: 0;\n }\n\n position: absolute;\n z-index: 100; //draw on top of other controls\n width: max-content;\n\n &.inputfield {\n width: 150px;\n padding: 0px 10px 10px;\n z-index: 1000;\n\n .mat-mdc-form-field {\n width: 100%;\n\n &:first-child {\n padding-top: 5px;\n }\n }\n }\n .mat-mdc-floating-label {\n @include adaptive-color-dark-only('color', rgba(255, 255, 255, 0.9));\n }\n\n .mat-mdc-input-element,\n .mat-mdc-input-element::placeholder {\n @include adaptive-color-dark-only('color', on-color(dark));\n }\n .mat-mdc-input-element:disabled {\n @include adaptive-color-dark-only('color', color(dark-disabled));\n }\n .mdc-line-ripple::before {\n @include adaptive-color-dark-only('border-bottom-color', on-color(dark));\n }\n .mat-mdc-form-field.mat-form-field-disabled .mdc-line-ripple::before {\n @include adaptive-color-dark-only('border-bottom-color', transparent);\n @include adaptive-color-dark-only(\n 'background-image',\n linear-gradient(to right, rgba(255, 255, 255, 0.9) 0%, rgba(255, 255, 255, 0.7) 33%, transparent 0%)\n );\n }\n .mat-mdc-select-value-text {\n @include adaptive-color-dark-only('color', rgba(255, 255, 255, 0.9));\n }\n .mat-mdc-select-arrow {\n @include adaptive-color-dark-only('color', rgba(255, 255, 255, 0.9));\n }\n\n .disabled-text {\n @include adaptive-color('color', rgba(0, 0, 0, 0.38), color(dark-disabled));\n }\n }\n }\n }\n}\n\n//////////////////////\n// Checkbox Styling //\n//////////////////////\n\n.checkbox-custom {\n opacity: 0;\n position: absolute;\n\n &:disabled {\n cursor: default;\n }\n}\n\n.checkbox-custom,\n.checkbox-custom-label {\n display: inline-block;\n vertical-align: middle;\n margin: 5px;\n cursor: pointer;\n}\n\n.checkbox-custom-label {\n position: relative;\n\n &.disabled {\n @include adaptive-color('color', rgba(0, 0, 0, 0.46), color(dark-disabled));\n cursor: default;\n }\n}\n\n.checkbox-custom + .checkbox-custom-label:before {\n content: '';\n background: #fff;\n border: 3px solid color(panel-dark);\n display: inline-block;\n vertical-align: middle;\n width: 10px;\n height: 10px;\n padding: 2px;\n margin-right: 5px;\n text-align: center;\n}\n\n.checkbox-custom:checked + .checkbox-custom-label:before {\n @include adaptive-color('background', color(cell-highlight-color), color(cell-highlight-dark-color));\n @include adaptive-color('box-shadow', inset 0px 0px 0px 1px color(cell-highlight-color), inset 0px 0px 0px 1px color(cell-highlight-dark-color));\n}\n\n.checkbox-custom:checked:disabled + .checkbox-custom-label:before {\n @include adaptive-color('background', desaturate(color(cell-highlight-color), 100%), desaturate(color(cell-highlight-dark-color), 100%));\n @include adaptive-color(\n 'box-shadow',\n inset 0px 0px 0px 1px desaturate(color(cell-highlight-color), 100%),\n inset 0px 0px 0px 1px desaturate(color(cell-highlight-dark-color), 100%)\n );\n}\n\n//////////////////////\n/// Dialog Styling ///\n//////////////////////\n.dialog-custom .mat-mdc-dialog-container {\n padding: 0 !important;\n}\n\n.mat-drawer-side.mat-drawer-end {\n @include adaptive-color-dark-only('border-left', none);\n}\n\n.mat-drawer-inner-container {\n @include adaptive-color('background-color', color(panel-light), color(dark-2));\n\n a {\n @include adaptive-color-dark-only('color', color(dark-link));\n }\n a:visited,\n a:active {\n @include adaptive-color-dark-only('color', color(dark-link-active));\n }\n .mat-mdc-form-field, .mat-mdc-form-field:hover {\n .mdc-notched-outline__leading,\n .mdc-notched-outline__notch,\n .mdc-notched-outline__trailing {\n @include adaptive-color-dark-only('border-color', on-color(dark) !important);\n }\n }\n\n .mat-mdc-card {\n @include adaptive-color-dark-only('background-color', color(dark-3));\n @include adaptive-color-dark-only('color', on-color(dark));\n }\n\n .mat-expansion-panel .mat-expansion-panel-header,\n .mat-expansion-panel-body {\n @include adaptive-color-dark-only('background-color', color(dark-3));\n }\n\n .mat-expansion-panel-header-title {\n @include adaptive-color-dark-only('color', on-color(dark));\n }\n\n .mat-divider {\n @include adaptive-color-dark-only('border-top-color', color(dark-4));\n }\n\n .mat-mdc-button-base {\n @include adaptive-color-dark-only('background-color', color(dark-4));\n @include adaptive-color-dark-only('color', on-color(dark));\n }\n}\n\n.mat-mdc-dialog-container .markdown {\n padding: 25px;\n}\n\n// patch popover style\n.popover {\n //positioning because we didn't import bootstrap\n position: absolute;\n // add border radius\n border-radius: 4px !important;\n //don't force 20rem width, conform to content of popover\n width: unset !important;\n}\n\n// form field styling\n.mat-mdc-form-field {\n .mdc-text-field--filled, .mdc-text-field--filled:hover {\n background-color: transparent !important;\n }\n}\n.hide-subscript {\n .mat-mdc-form-field-subscript-wrapper {\n display: none !important;\n }\n}\n.mat-mdc-floating-label, .mat-mdc-form-field-hint {\n letter-spacing: normal !important;\n}\n\n// expansion panel styling\n.mat-expansion-panel-body {\n padding-bottom: 24px !important;\n}","/* roboto-cyrillic-ext-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-cyrillic-ext-400-normal.woff2) format('woff2'), url(mitre/roboto-cyrillic-ext-400-normal.woff) format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n\n/* roboto-cyrillic-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-cyrillic-400-normal.woff2) format('woff2'), url(mitre/roboto-cyrillic-400-normal.woff) format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n\n/* roboto-greek-ext-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-greek-ext-400-normal.woff2) format('woff2'), url(mitre/roboto-greek-ext-400-normal.woff) format('woff');\n unicode-range: U+1F00-1FFF;\n}\n\n/* roboto-greek-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-greek-400-normal.woff2) format('woff2'), url(mitre/roboto-greek-400-normal.woff) format('woff');\n unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;\n}\n\n/* roboto-vietnamese-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-vietnamese-400-normal.woff2) format('woff2'), url(mitre/roboto-vietnamese-400-normal.woff) format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;\n}\n\n/* roboto-latin-ext-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-latin-ext-400-normal.woff2) format('woff2'), url(mitre/roboto-latin-ext-400-normal.woff) format('woff');\n unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n\n/* roboto-latin-400-normal */\n@font-face {\n font-family: 'Roboto';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-latin-400-normal.woff2) format('woff2'), url(mitre/roboto-latin-400-normal.woff) format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}","/* roboto-mono-cyrillic-ext-400-normal */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-mono-cyrillic-ext-400-normal.woff2) format('woff2'), url(mitre/roboto-mono-cyrillic-ext-400-normal.woff) format('woff');\n unicode-range: U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;\n}\n\n/* roboto-mono-cyrillic-400-normal */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-mono-cyrillic-400-normal.woff2) format('woff2'), url(mitre/roboto-mono-cyrillic-400-normal.woff) format('woff');\n unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;\n}\n\n/* roboto-mono-greek-400-normal */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-mono-greek-400-normal.woff2) format('woff2'), url(mitre/roboto-mono-greek-400-normal.woff) format('woff');\n unicode-range: U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;\n}\n\n/* roboto-mono-vietnamese-400-normal */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-mono-vietnamese-400-normal.woff2) format('woff2'), url(mitre/roboto-mono-vietnamese-400-normal.woff) format('woff');\n unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;\n}\n\n/* roboto-mono-latin-ext-400-normal */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-mono-latin-ext-400-normal.woff2) format('woff2'), url(mitre/roboto-mono-latin-ext-400-normal.woff) format('woff');\n unicode-range: U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;\n}\n\n/* roboto-mono-latin-400-normal */\n@font-face {\n font-family: 'Roboto Mono';\n font-style: normal;\n font-display: swap;\n font-weight: 400;\n src: url(mitre/roboto-mono-latin-400-normal.woff2) format('woff2'), url(mitre/roboto-mono-latin-400-normal.woff) format('woff');\n unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;\n}","$column-hover-color: rgb(235, 235, 235);\n$disabled-color: darken($column-hover-color, 20%);\n\n// ATT&CK Brand colors\n$attack-colors: (\n attack-orange: #c63f1f,\n attack-blue: #062f4f,\n);\n\n/**\n * Colors used across the Navigator. Shared by the ATT&CK Website.\n * For each color-pair:\n * - \"color\" refers to the color itself\n * - \"on-color\" refers to the most readable text-color to appear on top of the color.\n * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to\n * appear with inner content. For example, \"link\" is only intended to be used for link text, which inherently\n * cannot have inner text.\n */\n$colors: (\n primary: (\n color: map-get($attack-colors, attack-orange),\n on-color: white,\n ),\n //used for header and some nav elements\n secondary:\n (\n color: map-get($attack-colors, attack-blue),\n on-color: white,\n ),\n //used for footer and some buttons\n body:\n (\n color: white,\n on-color: #39434c,\n ),\n //primary page body\n light:\n (\n color: white,\n on-color: #39434c,\n ),\n dark: (\n color: #08080b,\n on-color: white,\n ),\n // dark theme colors variations 0-3 (from darkest to lightest)\n dark-1:\n (\n color: #1a1a23,\n on-color: white,\n ),\n dark-2: (\n color: #2e2e3f,\n on-color: #fa6341,\n ),\n // accent dark color scheme (used for :hover selectors)\n dark-3:\n (\n color: #3f3f56,\n on-color: white,\n ),\n dark-4: (\n color: #4c4c68,\n on-color: white,\n ),\n dark-disabled: (\n color: rgb(255 255 255 / 25%),\n ),\n dark-link: (\n color: #7588e8,\n ),\n dark-link-active: (\n color: #e847e8,\n ),\n link: (\n color: #4f7cac,\n ),\n // hyperlinks\n matrix-header:\n (\n color: gray,\n on-color: white,\n ),\n // color of matrix headers\n cell-highlight-color:\n (\n color: rgb(96, 197, 255),\n ),\n cell-highlight-dark-color: (\n color: #464dff,\n ),\n hover-cell-font-color: (\n color: rgb(0, 0, 0),\n ),\n panel-dark: (\n color: #ddd,\n ),\n panel-light: (\n color: lighten(#ddd, 8%),\n ),\n tab-text-color: (\n color: #555,\n ),\n button-dark: (\n color: #b8b8b8,\n ),\n //bootstrap colors\n bootstrap-primary:\n (\n color: #428bca,\n on-color: white,\n ),\n bootstrap-success: (\n color: #5cb85c,\n on-color: white,\n ),\n bootstrap-danger: (\n color: #d9534f,\n on-color: black,\n ),\n bootstrap-warning: (\n color: #f0ad4e,\n on-color: black,\n ),\n bootstrap-info: (\n color: #5bc0de,\n on-color: white,\n ),\n);\n\n// accessor helper for $colors. Gets the color of the named pair\n@function color($name) {\n @return map-get(map-get($colors, $name), 'color');\n}\n\n// given a color name, get an alternate version of the color, for patterning\n// if the base color is dark, the alternate will be slightly lighter.\n// if the base color is light, the alternate will be slightly darker.\n// contrast, an optional argument, multiplies to create a more distant or similar color. >1 is more distant, <1 is more similar.\n@function color-alternate($name, $contrast: 1) {\n @return mix(invert(color($name)), color($name), $weight: $contrast * 5%);\n}\n\n// accessor helper for $colors. Gets the on-color of the named pair\n@function on-color($name) {\n @return map-get(map-get($colors, $name), 'on-color');\n}\n\n// given a color-name, get an emphasized version of the on-color.\n// The emphasized on-color is less like the background color.\n@function on-color-emphasis($name) {\n @return mix(invert(color($name)), on-color($name));\n}\n// given a color-name, get an deemphasized version of the on-color.\n// The deemphasized on-color is more like the background color.\n@function on-color-deemphasis($name) {\n @return mix(color($name), on-color($name), 25%);\n}\n\n// given a color name, compute a border color for the color\n@function border-color($name) {\n @return mix(invert(color($name)), color($name), 12.5%);\n // @return rgba(invert(color($name)), 0.125);\n}\n\n// IMPORTANT USAGE NOTE:\n// to use adaptive colors, you MUST disable view encapsulation on the component\n// you're applying the styles within. Otherwise ancestor classes cannot be assessed\n// by the mixins to determine the app theme configuration.\n\n/// assign the property with different values in the light and dark themes\n/// @param {property} $property the property you want to set the value of\n/// @param {value} $light-value the value to assign when in the light theme\n/// @param {value} $dark-value the value to assign when in the dark theme\n@mixin adaptive-color($property, $light-value, $dark-value) {\n @include adaptive-color-light-only($property, $light-value);\n @include adaptive-color-dark-only($property, $dark-value);\n}\n\n/// assign the property with the given value only when in the light theme\n/// @param {property} $property the property you want to set the value of\n/// @param {value} $light-value the value to assign when in the light theme\n@mixin adaptive-color-light-only($property, $light-value) {\n .theme-use-system & {\n // when the ancestor class shows that the app is configured to use the system theme,\n // use a media query to assign the light value\n @media (prefers-color-scheme: light) {\n #{$property}: $light-value;\n }\n }\n .theme-override-light & {\n // when the ancestor class shows that the app is configured to use the light theme,\n // assign the light value\n #{$property}: $light-value;\n }\n}\n\n/// assign the property with the given value only when in the dark theme\n/// @param {property} $property the property you want to set the value of\n/// @param {value} $light-value the value to assign when in the light theme\n/// @param {value} $dark-value the value to assign when in the dark theme\n@mixin adaptive-color-dark-only($property, $dark-value) {\n .theme-use-system & {\n // when the ancestor class shows that the app is configured to use the system theme,\n // use a media query to assign the dark value\n @media (prefers-color-scheme: dark) {\n #{$property}: $dark-value;\n }\n }\n .theme-override-dark & {\n // when the ancestor class shows that the app is configured to use the dark theme,\n // assign the dark value\n #{$property}: $dark-value;\n }\n}\n"],"names":[],"sourceRoot":"webpack:///","x_google_ignoreList":[0,2,3]} \ No newline at end of file diff --git a/site/mitre/vendor.js b/site/mitre/vendor.js new file mode 100644 index 0000000..ae90038 --- /dev/null +++ b/site/mitre/vendor.js @@ -0,0 +1,229863 @@ +(self["webpackChunknav_app"] = self["webpackChunknav_app"] || []).push([["vendor"],{ + +/***/ 54578: +/*!*****************************************!*\ + !*** ./node_modules/base64-js/index.js ***! + \*****************************************/ +/***/ ((__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(''); +} + +/***/ }), + +/***/ 163: +/*!**************************************!*\ + !*** ./node_modules/buffer/index.js ***! + \**************************************/ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + +"use strict"; +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + + + +var base64 = __webpack_require__(/*! base64-js */ 54578); +var ieee754 = __webpack_require__(/*! ieee754 */ 17383); +var 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; +var 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 { + var arr = new Uint8Array(1); + var 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 + var 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'); + } + var valueOf = value.valueOf && value.valueOf(); + if (valueOf != null && valueOf !== value) { + return Buffer.from(valueOf, encodingOrOffset, length); + } + var 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); + } + var length = byteLength(string, encoding) | 0; + var buf = createBuffer(length); + var 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) { + var length = array.length < 0 ? 0 : checked(array.length) | 0; + var buf = createBuffer(length); + for (var i = 0; i < length; i += 1) { + buf[i] = array[i] & 255; + } + return buf; +} +function fromArrayView(arrayView) { + if (isInstance(arrayView, Uint8Array)) { + var 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'); + } + var 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)) { + var len = checked(obj.length) | 0; + var 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; + 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 (!Array.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 (isInstance(buf, Uint8Array)) { + if (pos + buf.length > buffer.length) { + Buffer.from(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); + } + var len = string.length; + var mustMatch = arguments.length > 2 && arguments[2] === true; + if (!mustMatch && 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': + 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) { + 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 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) { + 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; + 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() { + var str = ''; + var 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; + 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 (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) { + 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; + } + } + var strLen = string.length; + if (length > strLen / 2) { + length = strLen / 2; + } + for (var i = 0; i < length; ++i) { + var 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'); + } + 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': + 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); + 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 += hexSliceLookupTable[buf[i]]; + } + return out; +} +function utf16leSlice(buf, start, end) { + var bytes = buf.slice(start, end); + var res = ''; + // If bytes.length is odd, the last 8 bits must be ignored (same as node.js) + for (var 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) { + 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 = 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); + 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 = 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 = 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.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) { + 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); + var 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); + var 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.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) { + 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 = 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 = 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; +}; +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 (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; +}; +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; + } + var 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) { + var 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; + var i; + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val; + } + } else { + var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding); + var 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; +}; + +// HELPER FUNCTIONS +// ================ + +var 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; + 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; +} + +// 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 +var hexSliceLookupTable = function () { + var alphabet = '0123456789abcdef'; + var table = new Array(256); + for (var i = 0; i < 16; ++i) { + var i16 = i * 16; + for (var j = 0; j < 16; ++j) { + table[i16 + j] = alphabet[i] + alphabet[j]; + } + } + return table; +}(); + +/***/ }), + +/***/ 94504: +/*!********************************************!*\ + !*** ./node_modules/complex.js/complex.js ***! + \********************************************/ +/***/ (function(module, exports) { + +var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/** + * @license Complex.js v2.1.1 12/05/2020 + * + * Copyright (c) 2020, Robert Eisele (robert@xarg.org) + * Dual licensed under the MIT or GPL Version 2 licenses. + **/ + +/** + * + * This class allows the manipulation of complex numbers. + * You can pass a complex number in different formats. Either as object, double, string or two integer parameters. + * + * Object form + * { re: , im: } + * { arg: , abs: } + * { phi: , r: } + * + * Array / Vector form + * [ real, imaginary ] + * + * Double form + * 99.3 - Single double value + * + * String form + * '23.1337' - Simple real number + * '15+3i' - a simple complex number + * '3-i' - a simple complex number + * + * Example: + * + * var c = new Complex('99.3+8i'); + * c.mul({r: 3, i: 9}).div(4.9).sub(3, 2); + * + */ + +(function (root) { + 'use strict'; + + var cosh = Math.cosh || function (x) { + return Math.abs(x) < 1e-9 ? 1 - x : (Math.exp(x) + Math.exp(-x)) * 0.5; + }; + var sinh = Math.sinh || function (x) { + return Math.abs(x) < 1e-9 ? x : (Math.exp(x) - Math.exp(-x)) * 0.5; + }; + + /** + * Calculates cos(x) - 1 using Taylor series if x is small (-¼π ≤ x ≤ ¼π). + * + * @param {number} x + * @returns {number} cos(x) - 1 + */ + var cosm1 = function (x) { + var b = Math.PI / 4; + if (-b > x || x > b) { + return Math.cos(x) - 1.0; + } + + /* Calculate horner form of polynomial of taylor series in Q + var fac = 1, alt = 1, pol = {}; + for (var i = 0; i <= 16; i++) { + fac*= i || 1; + if (i % 2 == 0) { + pol[i] = new Fraction(1, alt * fac); + alt = -alt; + } + } + console.log(new Polynomial(pol).toHorner()); // (((((((1/20922789888000x^2-1/87178291200)x^2+1/479001600)x^2-1/3628800)x^2+1/40320)x^2-1/720)x^2+1/24)x^2-1/2)x^2+1 + */ + + var xx = x * x; + return xx * (xx * (xx * (xx * (xx * (xx * (xx * (xx / 20922789888000 - 1 / 87178291200) + 1 / 479001600) - 1 / 3628800) + 1 / 40320) - 1 / 720) + 1 / 24) - 1 / 2); + }; + var hypot = function (x, y) { + var a = Math.abs(x); + var b = Math.abs(y); + if (a < 3000 && b < 3000) { + return Math.sqrt(a * a + b * b); + } + if (a < b) { + a = b; + b = x / y; + } else { + b = y / x; + } + return a * Math.sqrt(1 + b * b); + }; + var parser_exit = function () { + throw SyntaxError('Invalid Param'); + }; + + /** + * Calculates log(sqrt(a^2+b^2)) in a way to avoid overflows + * + * @param {number} a + * @param {number} b + * @returns {number} + */ + function logHypot(a, b) { + var _a = Math.abs(a); + var _b = Math.abs(b); + if (a === 0) { + return Math.log(_b); + } + if (b === 0) { + return Math.log(_a); + } + if (_a < 3000 && _b < 3000) { + return Math.log(a * a + b * b) * 0.5; + } + + /* I got 4 ideas to compute this property without overflow: + * + * Testing 1000000 times with random samples for a,b ∈ [1, 1000000000] against a big decimal library to get an error estimate + * + * 1. Only eliminate the square root: (OVERALL ERROR: 3.9122483030951116e-11) + Math.log(a * a + b * b) / 2 + * + * + * 2. Try to use the non-overflowing pythagoras: (OVERALL ERROR: 8.889760039210159e-10) + var fn = function(a, b) { + a = Math.abs(a); + b = Math.abs(b); + var t = Math.min(a, b); + a = Math.max(a, b); + t = t / a; + return Math.log(a) + Math.log(1 + t * t) / 2; + }; + * 3. Abuse the identity cos(atan(y/x) = x / sqrt(x^2+y^2): (OVERALL ERROR: 3.4780178737037204e-10) + Math.log(a / Math.cos(Math.atan2(b, a))) + * 4. Use 3. and apply log rules: (OVERALL ERROR: 1.2014087502620896e-9) + Math.log(a) - Math.log(Math.cos(Math.atan2(b, a))) + */ + + a = a / 2; + b = b / 2; + return 0.5 * Math.log(a * a + b * b) + Math.LN2; + } + var parse = function (a, b) { + var z = { + 're': 0, + 'im': 0 + }; + if (a === undefined || a === null) { + z['re'] = z['im'] = 0; + } else if (b !== undefined) { + z['re'] = a; + z['im'] = b; + } else switch (typeof a) { + case 'object': + if ('im' in a && 're' in a) { + z['re'] = a['re']; + z['im'] = a['im']; + } else if ('abs' in a && 'arg' in a) { + if (!Number.isFinite(a['abs']) && Number.isFinite(a['arg'])) { + return Complex['INFINITY']; + } + z['re'] = a['abs'] * Math.cos(a['arg']); + z['im'] = a['abs'] * Math.sin(a['arg']); + } else if ('r' in a && 'phi' in a) { + if (!Number.isFinite(a['r']) && Number.isFinite(a['phi'])) { + return Complex['INFINITY']; + } + z['re'] = a['r'] * Math.cos(a['phi']); + z['im'] = a['r'] * Math.sin(a['phi']); + } else if (a.length === 2) { + // Quick array check + z['re'] = a[0]; + z['im'] = a[1]; + } else { + parser_exit(); + } + break; + case 'string': + z['im'] = /* void */ + z['re'] = 0; + var tokens = a.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g); + var plus = 1; + var minus = 0; + if (tokens === null) { + parser_exit(); + } + for (var i = 0; i < tokens.length; i++) { + var c = tokens[i]; + if (c === ' ' || c === '\t' || c === '\n') { + /* void */ + } else if (c === '+') { + plus++; + } else if (c === '-') { + minus++; + } else if (c === 'i' || c === 'I') { + if (plus + minus === 0) { + parser_exit(); + } + if (tokens[i + 1] !== ' ' && !isNaN(tokens[i + 1])) { + z['im'] += parseFloat((minus % 2 ? '-' : '') + tokens[i + 1]); + i++; + } else { + z['im'] += parseFloat((minus % 2 ? '-' : '') + '1'); + } + plus = minus = 0; + } else { + if (plus + minus === 0 || isNaN(c)) { + parser_exit(); + } + if (tokens[i + 1] === 'i' || tokens[i + 1] === 'I') { + z['im'] += parseFloat((minus % 2 ? '-' : '') + c); + i++; + } else { + z['re'] += parseFloat((minus % 2 ? '-' : '') + c); + } + plus = minus = 0; + } + } + + // Still something on the stack + if (plus + minus > 0) { + parser_exit(); + } + break; + case 'number': + z['im'] = 0; + z['re'] = a; + break; + default: + parser_exit(); + } + if (isNaN(z['re']) || isNaN(z['im'])) { + // If a calculation is NaN, we treat it as NaN and don't throw + //parser_exit(); + } + return z; + }; + + /** + * @constructor + * @returns {Complex} + */ + function Complex(a, b) { + if (!(this instanceof Complex)) { + return new Complex(a, b); + } + var z = parse(a, b); + this['re'] = z['re']; + this['im'] = z['im']; + } + Complex.prototype = { + 're': 0, + 'im': 0, + /** + * Calculates the sign of a complex number, which is a normalized complex + * + * @returns {Complex} + */ + 'sign': function () { + var abs = this['abs'](); + return new Complex(this['re'] / abs, this['im'] / abs); + }, + /** + * Adds two complex numbers + * + * @returns {Complex} + */ + 'add': function (a, b) { + var z = new Complex(a, b); + + // Infinity + Infinity = NaN + if (this['isInfinite']() && z['isInfinite']()) { + return Complex['NAN']; + } + + // Infinity + z = Infinity { where z != Infinity } + if (this['isInfinite']() || z['isInfinite']()) { + return Complex['INFINITY']; + } + return new Complex(this['re'] + z['re'], this['im'] + z['im']); + }, + /** + * Subtracts two complex numbers + * + * @returns {Complex} + */ + 'sub': function (a, b) { + var z = new Complex(a, b); + + // Infinity - Infinity = NaN + if (this['isInfinite']() && z['isInfinite']()) { + return Complex['NAN']; + } + + // Infinity - z = Infinity { where z != Infinity } + if (this['isInfinite']() || z['isInfinite']()) { + return Complex['INFINITY']; + } + return new Complex(this['re'] - z['re'], this['im'] - z['im']); + }, + /** + * Multiplies two complex numbers + * + * @returns {Complex} + */ + 'mul': function (a, b) { + var z = new Complex(a, b); + + // Infinity * 0 = NaN + if (this['isInfinite']() && z['isZero']() || this['isZero']() && z['isInfinite']()) { + return Complex['NAN']; + } + + // Infinity * z = Infinity { where z != 0 } + if (this['isInfinite']() || z['isInfinite']()) { + return Complex['INFINITY']; + } + + // Short circuit for real values + if (z['im'] === 0 && this['im'] === 0) { + return new Complex(this['re'] * z['re'], 0); + } + return new Complex(this['re'] * z['re'] - this['im'] * z['im'], this['re'] * z['im'] + this['im'] * z['re']); + }, + /** + * Divides two complex numbers + * + * @returns {Complex} + */ + 'div': function (a, b) { + var z = new Complex(a, b); + + // 0 / 0 = NaN and Infinity / Infinity = NaN + if (this['isZero']() && z['isZero']() || this['isInfinite']() && z['isInfinite']()) { + return Complex['NAN']; + } + + // Infinity / 0 = Infinity + if (this['isInfinite']() || z['isZero']()) { + return Complex['INFINITY']; + } + + // 0 / Infinity = 0 + if (this['isZero']() || z['isInfinite']()) { + return Complex['ZERO']; + } + a = this['re']; + b = this['im']; + var c = z['re']; + var d = z['im']; + var t, x; + if (0 === d) { + // Divisor is real + return new Complex(a / c, b / c); + } + if (Math.abs(c) < Math.abs(d)) { + x = c / d; + t = c * x + d; + return new Complex((a * x + b) / t, (b * x - a) / t); + } else { + x = d / c; + t = d * x + c; + return new Complex((a + b * x) / t, (b - a * x) / t); + } + }, + /** + * Calculate the power of two complex numbers + * + * @returns {Complex} + */ + 'pow': function (a, b) { + var z = new Complex(a, b); + a = this['re']; + b = this['im']; + if (z['isZero']()) { + return Complex['ONE']; + } + + // If the exponent is real + if (z['im'] === 0) { + if (b === 0 && a > 0) { + return new Complex(Math.pow(a, z['re']), 0); + } else if (a === 0) { + // If base is fully imaginary + + switch ((z['re'] % 4 + 4) % 4) { + case 0: + return new Complex(Math.pow(b, z['re']), 0); + case 1: + return new Complex(0, Math.pow(b, z['re'])); + case 2: + return new Complex(-Math.pow(b, z['re']), 0); + case 3: + return new Complex(0, -Math.pow(b, z['re'])); + } + } + } + + /* I couldn't find a good formula, so here is a derivation and optimization + * + * z_1^z_2 = (a + bi)^(c + di) + * = exp((c + di) * log(a + bi) + * = pow(a^2 + b^2, (c + di) / 2) * exp(i(c + di)atan2(b, a)) + * =>... + * Re = (pow(a^2 + b^2, c / 2) * exp(-d * atan2(b, a))) * cos(d * log(a^2 + b^2) / 2 + c * atan2(b, a)) + * Im = (pow(a^2 + b^2, c / 2) * exp(-d * atan2(b, a))) * sin(d * log(a^2 + b^2) / 2 + c * atan2(b, a)) + * + * =>... + * Re = exp(c * log(sqrt(a^2 + b^2)) - d * atan2(b, a)) * cos(d * log(sqrt(a^2 + b^2)) + c * atan2(b, a)) + * Im = exp(c * log(sqrt(a^2 + b^2)) - d * atan2(b, a)) * sin(d * log(sqrt(a^2 + b^2)) + c * atan2(b, a)) + * + * => + * Re = exp(c * logsq2 - d * arg(z_1)) * cos(d * logsq2 + c * arg(z_1)) + * Im = exp(c * logsq2 - d * arg(z_1)) * sin(d * logsq2 + c * arg(z_1)) + * + */ + + if (a === 0 && b === 0 && z['re'] > 0 && z['im'] >= 0) { + return Complex['ZERO']; + } + var arg = Math.atan2(b, a); + var loh = logHypot(a, b); + a = Math.exp(z['re'] * loh - z['im'] * arg); + b = z['im'] * loh + z['re'] * arg; + return new Complex(a * Math.cos(b), a * Math.sin(b)); + }, + /** + * Calculate the complex square root + * + * @returns {Complex} + */ + 'sqrt': function () { + var a = this['re']; + var b = this['im']; + var r = this['abs'](); + var re, im; + if (a >= 0) { + if (b === 0) { + return new Complex(Math.sqrt(a), 0); + } + re = 0.5 * Math.sqrt(2.0 * (r + a)); + } else { + re = Math.abs(b) / Math.sqrt(2 * (r - a)); + } + if (a <= 0) { + im = 0.5 * Math.sqrt(2.0 * (r - a)); + } else { + im = Math.abs(b) / Math.sqrt(2 * (r + a)); + } + return new Complex(re, b < 0 ? -im : im); + }, + /** + * Calculate the complex exponent + * + * @returns {Complex} + */ + 'exp': function () { + var tmp = Math.exp(this['re']); + if (this['im'] === 0) { + //return new Complex(tmp, 0); + } + return new Complex(tmp * Math.cos(this['im']), tmp * Math.sin(this['im'])); + }, + /** + * Calculate the complex exponent and subtracts one. + * + * This may be more accurate than `Complex(x).exp().sub(1)` if + * `x` is small. + * + * @returns {Complex} + */ + 'expm1': function () { + /** + * exp(a + i*b) - 1 + = exp(a) * (cos(b) + j*sin(b)) - 1 + = expm1(a)*cos(b) + cosm1(b) + j*exp(a)*sin(b) + */ + + var a = this['re']; + var b = this['im']; + return new Complex(Math.expm1(a) * Math.cos(b) + cosm1(b), Math.exp(a) * Math.sin(b)); + }, + /** + * Calculate the natural log + * + * @returns {Complex} + */ + 'log': function () { + var a = this['re']; + var b = this['im']; + if (b === 0 && a > 0) { + //return new Complex(Math.log(a), 0); + } + return new Complex(logHypot(a, b), Math.atan2(b, a)); + }, + /** + * Calculate the magnitude of the complex number + * + * @returns {number} + */ + 'abs': function () { + return hypot(this['re'], this['im']); + }, + /** + * Calculate the angle of the complex number + * + * @returns {number} + */ + 'arg': function () { + return Math.atan2(this['im'], this['re']); + }, + /** + * Calculate the sine of the complex number + * + * @returns {Complex} + */ + 'sin': function () { + // sin(z) = ( e^iz - e^-iz ) / 2i + // = sin(a)cosh(b) + i cos(a)sinh(b) + + var a = this['re']; + var b = this['im']; + return new Complex(Math.sin(a) * cosh(b), Math.cos(a) * sinh(b)); + }, + /** + * Calculate the cosine + * + * @returns {Complex} + */ + 'cos': function () { + // cos(z) = ( e^iz + e^-iz ) / 2 + // = cos(a)cosh(b) - i sin(a)sinh(b) + + var a = this['re']; + var b = this['im']; + return new Complex(Math.cos(a) * cosh(b), -Math.sin(a) * sinh(b)); + }, + /** + * Calculate the tangent + * + * @returns {Complex} + */ + 'tan': function () { + // tan(z) = sin(z) / cos(z) + // = ( e^iz - e^-iz ) / ( i( e^iz + e^-iz ) ) + // = ( e^2iz - 1 ) / i( e^2iz + 1 ) + // = ( sin(2a) + i sinh(2b) ) / ( cos(2a) + cosh(2b) ) + + var a = 2 * this['re']; + var b = 2 * this['im']; + var d = Math.cos(a) + cosh(b); + return new Complex(Math.sin(a) / d, sinh(b) / d); + }, + /** + * Calculate the cotangent + * + * @returns {Complex} + */ + 'cot': function () { + // cot(c) = i(e^(ci) + e^(-ci)) / (e^(ci) - e^(-ci)) + + var a = 2 * this['re']; + var b = 2 * this['im']; + var d = Math.cos(a) - cosh(b); + return new Complex(-Math.sin(a) / d, sinh(b) / d); + }, + /** + * Calculate the secant + * + * @returns {Complex} + */ + 'sec': function () { + // sec(c) = 2 / (e^(ci) + e^(-ci)) + + var a = this['re']; + var b = this['im']; + var d = 0.5 * cosh(2 * b) + 0.5 * Math.cos(2 * a); + return new Complex(Math.cos(a) * cosh(b) / d, Math.sin(a) * sinh(b) / d); + }, + /** + * Calculate the cosecans + * + * @returns {Complex} + */ + 'csc': function () { + // csc(c) = 2i / (e^(ci) - e^(-ci)) + + var a = this['re']; + var b = this['im']; + var d = 0.5 * cosh(2 * b) - 0.5 * Math.cos(2 * a); + return new Complex(Math.sin(a) * cosh(b) / d, -Math.cos(a) * sinh(b) / d); + }, + /** + * Calculate the complex arcus sinus + * + * @returns {Complex} + */ + 'asin': function () { + // asin(c) = -i * log(ci + sqrt(1 - c^2)) + + var a = this['re']; + var b = this['im']; + var t1 = new Complex(b * b - a * a + 1, -2 * a * b)['sqrt'](); + var t2 = new Complex(t1['re'] - b, t1['im'] + a)['log'](); + return new Complex(t2['im'], -t2['re']); + }, + /** + * Calculate the complex arcus cosinus + * + * @returns {Complex} + */ + 'acos': function () { + // acos(c) = i * log(c - i * sqrt(1 - c^2)) + + var a = this['re']; + var b = this['im']; + var t1 = new Complex(b * b - a * a + 1, -2 * a * b)['sqrt'](); + var t2 = new Complex(t1['re'] - b, t1['im'] + a)['log'](); + return new Complex(Math.PI / 2 - t2['im'], t2['re']); + }, + /** + * Calculate the complex arcus tangent + * + * @returns {Complex} + */ + 'atan': function () { + // atan(c) = i / 2 log((i + x) / (i - x)) + + var a = this['re']; + var b = this['im']; + if (a === 0) { + if (b === 1) { + return new Complex(0, Infinity); + } + if (b === -1) { + return new Complex(0, -Infinity); + } + } + var d = a * a + (1.0 - b) * (1.0 - b); + var t1 = new Complex((1 - b * b - a * a) / d, -2 * a / d).log(); + return new Complex(-0.5 * t1['im'], 0.5 * t1['re']); + }, + /** + * Calculate the complex arcus cotangent + * + * @returns {Complex} + */ + 'acot': function () { + // acot(c) = i / 2 log((c - i) / (c + i)) + + var a = this['re']; + var b = this['im']; + if (b === 0) { + return new Complex(Math.atan2(1, a), 0); + } + var d = a * a + b * b; + return d !== 0 ? new Complex(a / d, -b / d).atan() : new Complex(a !== 0 ? a / 0 : 0, b !== 0 ? -b / 0 : 0).atan(); + }, + /** + * Calculate the complex arcus secant + * + * @returns {Complex} + */ + 'asec': function () { + // asec(c) = -i * log(1 / c + sqrt(1 - i / c^2)) + + var a = this['re']; + var b = this['im']; + if (a === 0 && b === 0) { + return new Complex(0, Infinity); + } + var d = a * a + b * b; + return d !== 0 ? new Complex(a / d, -b / d).acos() : new Complex(a !== 0 ? a / 0 : 0, b !== 0 ? -b / 0 : 0).acos(); + }, + /** + * Calculate the complex arcus cosecans + * + * @returns {Complex} + */ + 'acsc': function () { + // acsc(c) = -i * log(i / c + sqrt(1 - 1 / c^2)) + + var a = this['re']; + var b = this['im']; + if (a === 0 && b === 0) { + return new Complex(Math.PI / 2, Infinity); + } + var d = a * a + b * b; + return d !== 0 ? new Complex(a / d, -b / d).asin() : new Complex(a !== 0 ? a / 0 : 0, b !== 0 ? -b / 0 : 0).asin(); + }, + /** + * Calculate the complex sinh + * + * @returns {Complex} + */ + 'sinh': function () { + // sinh(c) = (e^c - e^-c) / 2 + + var a = this['re']; + var b = this['im']; + return new Complex(sinh(a) * Math.cos(b), cosh(a) * Math.sin(b)); + }, + /** + * Calculate the complex cosh + * + * @returns {Complex} + */ + 'cosh': function () { + // cosh(c) = (e^c + e^-c) / 2 + + var a = this['re']; + var b = this['im']; + return new Complex(cosh(a) * Math.cos(b), sinh(a) * Math.sin(b)); + }, + /** + * Calculate the complex tanh + * + * @returns {Complex} + */ + 'tanh': function () { + // tanh(c) = (e^c - e^-c) / (e^c + e^-c) + + var a = 2 * this['re']; + var b = 2 * this['im']; + var d = cosh(a) + Math.cos(b); + return new Complex(sinh(a) / d, Math.sin(b) / d); + }, + /** + * Calculate the complex coth + * + * @returns {Complex} + */ + 'coth': function () { + // coth(c) = (e^c + e^-c) / (e^c - e^-c) + + var a = 2 * this['re']; + var b = 2 * this['im']; + var d = cosh(a) - Math.cos(b); + return new Complex(sinh(a) / d, -Math.sin(b) / d); + }, + /** + * Calculate the complex coth + * + * @returns {Complex} + */ + 'csch': function () { + // csch(c) = 2 / (e^c - e^-c) + + var a = this['re']; + var b = this['im']; + var d = Math.cos(2 * b) - cosh(2 * a); + return new Complex(-2 * sinh(a) * Math.cos(b) / d, 2 * cosh(a) * Math.sin(b) / d); + }, + /** + * Calculate the complex sech + * + * @returns {Complex} + */ + 'sech': function () { + // sech(c) = 2 / (e^c + e^-c) + + var a = this['re']; + var b = this['im']; + var d = Math.cos(2 * b) + cosh(2 * a); + return new Complex(2 * cosh(a) * Math.cos(b) / d, -2 * sinh(a) * Math.sin(b) / d); + }, + /** + * Calculate the complex asinh + * + * @returns {Complex} + */ + 'asinh': function () { + // asinh(c) = log(c + sqrt(c^2 + 1)) + + var tmp = this['im']; + this['im'] = -this['re']; + this['re'] = tmp; + var res = this['asin'](); + this['re'] = -this['im']; + this['im'] = tmp; + tmp = res['re']; + res['re'] = -res['im']; + res['im'] = tmp; + return res; + }, + /** + * Calculate the complex acosh + * + * @returns {Complex} + */ + 'acosh': function () { + // acosh(c) = log(c + sqrt(c^2 - 1)) + + var res = this['acos'](); + if (res['im'] <= 0) { + var tmp = res['re']; + res['re'] = -res['im']; + res['im'] = tmp; + } else { + var tmp = res['im']; + res['im'] = -res['re']; + res['re'] = tmp; + } + return res; + }, + /** + * Calculate the complex atanh + * + * @returns {Complex} + */ + 'atanh': function () { + // atanh(c) = log((1+c) / (1-c)) / 2 + + var a = this['re']; + var b = this['im']; + var noIM = a > 1 && b === 0; + var oneMinus = 1 - a; + var onePlus = 1 + a; + var d = oneMinus * oneMinus + b * b; + var x = d !== 0 ? new Complex((onePlus * oneMinus - b * b) / d, (b * oneMinus + onePlus * b) / d) : new Complex(a !== -1 ? a / 0 : 0, b !== 0 ? b / 0 : 0); + var temp = x['re']; + x['re'] = logHypot(x['re'], x['im']) / 2; + x['im'] = Math.atan2(x['im'], temp) / 2; + if (noIM) { + x['im'] = -x['im']; + } + return x; + }, + /** + * Calculate the complex acoth + * + * @returns {Complex} + */ + 'acoth': function () { + // acoth(c) = log((c+1) / (c-1)) / 2 + + var a = this['re']; + var b = this['im']; + if (a === 0 && b === 0) { + return new Complex(0, Math.PI / 2); + } + var d = a * a + b * b; + return d !== 0 ? new Complex(a / d, -b / d).atanh() : new Complex(a !== 0 ? a / 0 : 0, b !== 0 ? -b / 0 : 0).atanh(); + }, + /** + * Calculate the complex acsch + * + * @returns {Complex} + */ + 'acsch': function () { + // acsch(c) = log((1+sqrt(1+c^2))/c) + + var a = this['re']; + var b = this['im']; + if (b === 0) { + return new Complex(a !== 0 ? Math.log(a + Math.sqrt(a * a + 1)) : Infinity, 0); + } + var d = a * a + b * b; + return d !== 0 ? new Complex(a / d, -b / d).asinh() : new Complex(a !== 0 ? a / 0 : 0, b !== 0 ? -b / 0 : 0).asinh(); + }, + /** + * Calculate the complex asech + * + * @returns {Complex} + */ + 'asech': function () { + // asech(c) = log((1+sqrt(1-c^2))/c) + + var a = this['re']; + var b = this['im']; + if (this['isZero']()) { + return Complex['INFINITY']; + } + var d = a * a + b * b; + return d !== 0 ? new Complex(a / d, -b / d).acosh() : new Complex(a !== 0 ? a / 0 : 0, b !== 0 ? -b / 0 : 0).acosh(); + }, + /** + * Calculate the complex inverse 1/z + * + * @returns {Complex} + */ + 'inverse': function () { + // 1 / 0 = Infinity and 1 / Infinity = 0 + if (this['isZero']()) { + return Complex['INFINITY']; + } + if (this['isInfinite']()) { + return Complex['ZERO']; + } + var a = this['re']; + var b = this['im']; + var d = a * a + b * b; + return new Complex(a / d, -b / d); + }, + /** + * Returns the complex conjugate + * + * @returns {Complex} + */ + 'conjugate': function () { + return new Complex(this['re'], -this['im']); + }, + /** + * Gets the negated complex number + * + * @returns {Complex} + */ + 'neg': function () { + return new Complex(-this['re'], -this['im']); + }, + /** + * Ceils the actual complex number + * + * @returns {Complex} + */ + 'ceil': function (places) { + places = Math.pow(10, places || 0); + return new Complex(Math.ceil(this['re'] * places) / places, Math.ceil(this['im'] * places) / places); + }, + /** + * Floors the actual complex number + * + * @returns {Complex} + */ + 'floor': function (places) { + places = Math.pow(10, places || 0); + return new Complex(Math.floor(this['re'] * places) / places, Math.floor(this['im'] * places) / places); + }, + /** + * Ceils the actual complex number + * + * @returns {Complex} + */ + 'round': function (places) { + places = Math.pow(10, places || 0); + return new Complex(Math.round(this['re'] * places) / places, Math.round(this['im'] * places) / places); + }, + /** + * Compares two complex numbers + * + * **Note:** new Complex(Infinity).equals(Infinity) === false + * + * @returns {boolean} + */ + 'equals': function (a, b) { + var z = new Complex(a, b); + return Math.abs(z['re'] - this['re']) <= Complex['EPSILON'] && Math.abs(z['im'] - this['im']) <= Complex['EPSILON']; + }, + /** + * Clones the actual object + * + * @returns {Complex} + */ + 'clone': function () { + return new Complex(this['re'], this['im']); + }, + /** + * Gets a string of the actual complex number + * + * @returns {string} + */ + 'toString': function () { + var a = this['re']; + var b = this['im']; + var ret = ""; + if (this['isNaN']()) { + return 'NaN'; + } + if (this['isInfinite']()) { + return 'Infinity'; + } + if (Math.abs(a) < Complex['EPSILON']) { + a = 0; + } + if (Math.abs(b) < Complex['EPSILON']) { + b = 0; + } + + // If is real number + if (b === 0) { + return ret + a; + } + if (a !== 0) { + ret += a; + ret += " "; + if (b < 0) { + b = -b; + ret += "-"; + } else { + ret += "+"; + } + ret += " "; + } else if (b < 0) { + b = -b; + ret += "-"; + } + if (1 !== b) { + // b is the absolute imaginary part + ret += b; + } + return ret + "i"; + }, + /** + * Returns the actual number as a vector + * + * @returns {Array} + */ + 'toVector': function () { + return [this['re'], this['im']]; + }, + /** + * Returns the actual real value of the current object + * + * @returns {number|null} + */ + 'valueOf': function () { + if (this['im'] === 0) { + return this['re']; + } + return null; + }, + /** + * Determines whether a complex number is not on the Riemann sphere. + * + * @returns {boolean} + */ + 'isNaN': function () { + return isNaN(this['re']) || isNaN(this['im']); + }, + /** + * Determines whether or not a complex number is at the zero pole of the + * Riemann sphere. + * + * @returns {boolean} + */ + 'isZero': function () { + return this['im'] === 0 && this['re'] === 0; + }, + /** + * Determines whether a complex number is not at the infinity pole of the + * Riemann sphere. + * + * @returns {boolean} + */ + 'isFinite': function () { + return isFinite(this['re']) && isFinite(this['im']); + }, + /** + * Determines whether or not a complex number is at the infinity pole of the + * Riemann sphere. + * + * @returns {boolean} + */ + 'isInfinite': function () { + return !(this['isNaN']() || this['isFinite']()); + } + }; + Complex['ZERO'] = new Complex(0, 0); + Complex['ONE'] = new Complex(1, 0); + Complex['I'] = new Complex(0, 1); + Complex['PI'] = new Complex(Math.PI, 0); + Complex['E'] = new Complex(Math.E, 0); + Complex['INFINITY'] = new Complex(Infinity, Infinity); + Complex['NAN'] = new Complex(NaN, NaN); + Complex['EPSILON'] = 1e-15; + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () { + return Complex; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +})(this); + +/***/ }), + +/***/ 24296: +/*!*************************************************!*\ + !*** ./node_modules/detect-browser/es/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 */ BotInfo: () => (/* binding */ BotInfo), +/* harmony export */ BrowserInfo: () => (/* binding */ BrowserInfo), +/* harmony export */ NodeInfo: () => (/* binding */ NodeInfo), +/* harmony export */ ReactNativeInfo: () => (/* binding */ ReactNativeInfo), +/* harmony export */ SearchBotDeviceInfo: () => (/* binding */ SearchBotDeviceInfo), +/* harmony export */ browserName: () => (/* binding */ browserName), +/* harmony export */ detect: () => (/* binding */ detect), +/* harmony export */ detectOS: () => (/* binding */ detectOS), +/* harmony export */ getNodeVersion: () => (/* binding */ getNodeVersion), +/* harmony export */ parseUserAgent: () => (/* binding */ parseUserAgent) +/* harmony export */ }); +var __spreadArray = undefined && undefined.__spreadArray || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +var BrowserInfo = /** @class */function () { + function BrowserInfo(name, version, os) { + this.name = name; + this.version = version; + this.os = os; + this.type = 'browser'; + } + return BrowserInfo; +}(); + +var NodeInfo = /** @class */function () { + function NodeInfo(version) { + this.version = version; + this.type = 'node'; + this.name = 'node'; + this.os = process.platform; + } + return NodeInfo; +}(); + +var SearchBotDeviceInfo = /** @class */function () { + function SearchBotDeviceInfo(name, version, os, bot) { + this.name = name; + this.version = version; + this.os = os; + this.bot = bot; + this.type = 'bot-device'; + } + return SearchBotDeviceInfo; +}(); + +var BotInfo = /** @class */function () { + function BotInfo() { + this.type = 'bot'; + this.bot = true; // NOTE: deprecated test name instead + this.name = 'bot'; + this.version = null; + this.os = null; + } + return BotInfo; +}(); + +var ReactNativeInfo = /** @class */function () { + function ReactNativeInfo() { + this.type = 'react-native'; + this.name = 'react-native'; + this.version = null; + this.os = null; + } + return ReactNativeInfo; +}(); + +// tslint:disable-next-line:max-line-length +var SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/; +var SEARCHBOT_OS_REGEX = /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/; +var REQUIRED_VERSION_PARTS = 3; +var userAgentRules = [['aol', /AOLShield\/([0-9\._]+)/], ['edge', /Edge\/([0-9\._]+)/], ['edge-ios', /EdgiOS\/([0-9\._]+)/], ['yandexbrowser', /YaBrowser\/([0-9\._]+)/], ['kakaotalk', /KAKAOTALK\s([0-9\.]+)/], ['samsung', /SamsungBrowser\/([0-9\.]+)/], ['silk', /\bSilk\/([0-9._-]+)\b/], ['miui', /MiuiBrowser\/([0-9\.]+)$/], ['beaker', /BeakerBrowser\/([0-9\.]+)/], ['edge-chromium', /EdgA?\/([0-9\.]+)/], ['chromium-webview', /(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/], ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/], ['phantomjs', /PhantomJS\/([0-9\.]+)(:?\s|$)/], ['crios', /CriOS\/([0-9\.]+)(:?\s|$)/], ['firefox', /Firefox\/([0-9\.]+)(?:\s|$)/], ['fxios', /FxiOS\/([0-9\.]+)/], ['opera-mini', /Opera Mini.*Version\/([0-9\.]+)/], ['opera', /Opera\/([0-9\.]+)(?:\s|$)/], ['opera', /OPR\/([0-9\.]+)(:?\s|$)/], ['pie', /^Microsoft Pocket Internet Explorer\/(\d+\.\d+)$/], ['pie', /^Mozilla\/\d\.\d+\s\(compatible;\s(?:MSP?IE|MSInternet Explorer) (\d+\.\d+);.*Windows CE.*\)$/], ['netfront', /^Mozilla\/\d\.\d+.*NetFront\/(\d.\d)/], ['ie', /Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/], ['ie', /MSIE\s([0-9\.]+);.*Trident\/[4-7].0/], ['ie', /MSIE\s(7\.0)/], ['bb10', /BB10;\sTouch.*Version\/([0-9\.]+)/], ['android', /Android\s([0-9\.]+)/], ['ios', /Version\/([0-9\._]+).*Mobile.*Safari.*/], ['safari', /Version\/([0-9\._]+).*Safari/], ['facebook', /FB[AS]V\/([0-9\.]+)/], ['instagram', /Instagram\s([0-9\.]+)/], ['ios-webview', /AppleWebKit\/([0-9\.]+).*Mobile/], ['ios-webview', /AppleWebKit\/([0-9\.]+).*Gecko\)$/], ['curl', /^curl\/([0-9\.]+)$/], ['searchbot', SEARCHBOX_UA_REGEX]]; +var operatingSystemRules = [['iOS', /iP(hone|od|ad)/], ['Android OS', /Android/], ['BlackBerry OS', /BlackBerry|BB10/], ['Windows Mobile', /IEMobile/], ['Amazon OS', /Kindle/], ['Windows 3.11', /Win16/], ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/], ['Windows 98', /(Windows 98)|(Win98)/], ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/], ['Windows XP', /(Windows NT 5.1)|(Windows XP)/], ['Windows Server 2003', /(Windows NT 5.2)/], ['Windows Vista', /(Windows NT 6.0)/], ['Windows 7', /(Windows NT 6.1)/], ['Windows 8', /(Windows NT 6.2)/], ['Windows 8.1', /(Windows NT 6.3)/], ['Windows 10', /(Windows NT 10.0)/], ['Windows ME', /Windows ME/], ['Windows CE', /Windows CE|WinCE|Microsoft Pocket Internet Explorer/], ['Open BSD', /OpenBSD/], ['Sun OS', /SunOS/], ['Chrome OS', /CrOS/], ['Linux', /(Linux)|(X11)/], ['Mac OS', /(Mac_PowerPC)|(Macintosh)/], ['QNX', /QNX/], ['BeOS', /BeOS/], ['OS/2', /OS\/2/]]; +function detect(userAgent) { + if (!!userAgent) { + return parseUserAgent(userAgent); + } + if (typeof document === 'undefined' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') { + return new ReactNativeInfo(); + } + if (typeof navigator !== 'undefined') { + return parseUserAgent(navigator.userAgent); + } + return getNodeVersion(); +} +function matchUserAgent(ua) { + // opted for using reduce here rather than Array#first with a regex.test call + // this is primarily because using the reduce we only perform the regex + // execution once rather than once for the test and for the exec again below + // probably something that needs to be benchmarked though + return ua !== '' && userAgentRules.reduce(function (matched, _a) { + var browser = _a[0], + regex = _a[1]; + if (matched) { + return matched; + } + var uaMatch = regex.exec(ua); + return !!uaMatch && [browser, uaMatch]; + }, false); +} +function browserName(ua) { + var data = matchUserAgent(ua); + return data ? data[0] : null; +} +function parseUserAgent(ua) { + var matchedRule = matchUserAgent(ua); + if (!matchedRule) { + return null; + } + var name = matchedRule[0], + match = matchedRule[1]; + if (name === 'searchbot') { + return new BotInfo(); + } + // Do not use RegExp for split operation as some browser do not support it (See: http://blog.stevenlevithan.com/archives/cross-browser-split) + var versionParts = match[1] && match[1].split('.').join('_').split('_').slice(0, 3); + if (versionParts) { + if (versionParts.length < REQUIRED_VERSION_PARTS) { + versionParts = __spreadArray(__spreadArray([], versionParts, true), createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length), true); + } + } else { + versionParts = []; + } + var version = versionParts.join('.'); + var os = detectOS(ua); + var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua); + if (searchBotMatch && searchBotMatch[1]) { + return new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]); + } + return new BrowserInfo(name, version, os); +} +function detectOS(ua) { + for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) { + var _a = operatingSystemRules[ii], + os = _a[0], + regex = _a[1]; + var match = regex.exec(ua); + if (match) { + return os; + } + } + return null; +} +function getNodeVersion() { + var isNode = typeof process !== 'undefined' && process.version; + return isNode ? new NodeInfo(process.version.slice(1)) : null; +} +function createVersionParts(count) { + var output = []; + for (var ii = 0; ii < count; ii++) { + output.push('0'); + } + return output; +} + +/***/ }), + +/***/ 77404: +/*!*************************************************!*\ + !*** ./node_modules/escape-latex/dist/index.js ***! + \*************************************************/ +/***/ ((module) => { + +"use strict"; + + +// Map the characters to escape to their escaped values. The list is derived +// from http://www.cespedes.org/blog/85/how-to-escape-latex-special-characters +var _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + return target; +}; +var defaultEscapes = { + "{": "\\{", + "}": "\\}", + "\\": "\\textbackslash{}", + "#": "\\#", + $: "\\$", + "%": "\\%", + "&": "\\&", + "^": "\\textasciicircum{}", + _: "\\_", + "~": "\\textasciitilde{}" +}; +var formatEscapes = { + "\u2013": "\\--", + "\u2014": "\\---", + " ": "~", + "\t": "\\qquad{}", + "\r\n": "\\newline{}", + "\n": "\\newline{}" +}; +var defaultEscapeMapFn = function defaultEscapeMapFn(defaultEscapes, formatEscapes) { + return _extends({}, defaultEscapes, formatEscapes); +}; + +/** + * Escape a string to be used in LaTeX documents. + * @param {string} str the string to be escaped. + * @param {boolean} params.preserveFormatting whether formatting escapes should + * be performed (default: false). + * @param {function} params.escapeMapFn the function to modify the escape maps. + * @return {string} the escaped string, ready to be used in LaTeX. + */ +module.exports = function (str) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, + _ref$preserveFormatti = _ref.preserveFormatting, + preserveFormatting = _ref$preserveFormatti === undefined ? false : _ref$preserveFormatti, + _ref$escapeMapFn = _ref.escapeMapFn, + escapeMapFn = _ref$escapeMapFn === undefined ? defaultEscapeMapFn : _ref$escapeMapFn; + var runningStr = String(str); + var result = ""; + var escapes = escapeMapFn(_extends({}, defaultEscapes), preserveFormatting ? _extends({}, formatEscapes) : {}); + var escapeKeys = Object.keys(escapes); // as it is reused later on + + // Algorithm: Go through the string character by character, if it matches + // with one of the special characters then we'll replace it with the escaped + // version. + + var _loop = function _loop() { + var specialCharFound = false; + escapeKeys.forEach(function (key, index) { + if (specialCharFound) { + return; + } + if (runningStr.length >= key.length && runningStr.slice(0, key.length) === key) { + result += escapes[escapeKeys[index]]; + runningStr = runningStr.slice(key.length, runningStr.length); + specialCharFound = true; + } + }); + if (!specialCharFound) { + result += runningStr.slice(0, 1); + runningStr = runningStr.slice(1, runningStr.length); + } + }; + while (runningStr) { + _loop(); + } + return result; +}; + +/***/ }), + +/***/ 54058: +/*!**************************************************!*\ + !*** ./node_modules/exceljs/dist/exceljs.min.js ***! + \**************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +var _asyncToGenerator = (__webpack_require__(/*! ./node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime/helpers/asyncToGenerator.js */ 85000)["default"]); +var _awaitAsyncGenerator = (__webpack_require__(/*! ./node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime/helpers/awaitAsyncGenerator.js */ 8047)["default"]); +var _wrapAsyncGenerator = (__webpack_require__(/*! ./node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js */ 53351)["default"]); +var _asyncIterator = (__webpack_require__(/*! ./node_modules/@angular-devkit/build-angular/node_modules/@babel/runtime/helpers/asyncIterator.js */ 25290)["default"]); +/*! ExcelJS 19-10-2023 */ + +!function (e) { + if (true) module.exports = e();else {} +}(function () { + return function e(t, r, n) { + function i(o, a) { + if (!r[o]) { + if (!t[o]) { + var l = undefined; + if (!a && l) return require(o, !0); + if (s) return s(o, !0); + var c = new Error("Cannot find module '" + o + "'"); + throw c.code = "MODULE_NOT_FOUND", c; + } + var u = r[o] = { + exports: {} + }; + t[o][0].call(u.exports, function (e) { + return i(t[o][1][e] || e); + }, u, u.exports, e, t, r, n); + } + return r[o].exports; + } + for (var s = undefined, o = 0; o < n.length; o++) i(n[o]); + return i; + }({ + 1: [function (e, t, r) { + "use strict"; + + const n = e("fs"), + i = e("fast-csv"), + s = e("dayjs/plugin/customParseFormat"), + o = e("dayjs/plugin/utc"), + a = e("dayjs").extend(s).extend(o), + l = e("../utils/stream-buf"), + { + fs: { + exists: c + } + } = e("../utils/utils"), + u = { + true: !0, + false: !1, + "#N/A": { + error: "#N/A" + }, + "#REF!": { + error: "#REF!" + }, + "#NAME?": { + error: "#NAME?" + }, + "#DIV/0!": { + error: "#DIV/0!" + }, + "#NULL!": { + error: "#NULL!" + }, + "#VALUE!": { + error: "#VALUE!" + }, + "#NUM!": { + error: "#NUM!" + } + }; + t.exports = class { + constructor(e) { + this.workbook = e, this.worksheet = null; + } + readFile(e, t) { + var _this = this; + return _asyncToGenerator(function* () { + if (t = t || {}, !(yield c(e))) throw new Error("File not found: " + e); + const r = n.createReadStream(e), + i = yield _this.read(r, t); + return r.close(), i; + })(); + } + read(e, t) { + return t = t || {}, new Promise((r, n) => { + const s = this.workbook.addWorksheet(t.sheetName), + o = t.dateFormats || ["YYYY-MM-DD[T]HH:mm:ssZ", "YYYY-MM-DD[T]HH:mm:ss", "MM-DD-YYYY", "YYYY-MM-DD"], + l = t.map || function (e) { + if ("" === e) return null; + const t = Number(e); + if (!Number.isNaN(t) && t !== 1 / 0) return t; + const r = o.reduce((t, r) => { + if (t) return t; + const n = a(e, r, !0); + return n.isValid() ? n : null; + }, null); + if (r) return new Date(r.valueOf()); + const n = u[e]; + return void 0 !== n ? n : e; + }, + c = i.parse(t.parserOptions).on("data", e => { + s.addRow(e.map(l)); + }).on("end", () => { + c.emit("worksheet", s); + }); + c.on("worksheet", r).on("error", n), e.pipe(c); + }); + } + createInputStream() { + throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md"); + } + write(e, t) { + return new Promise((r, n) => { + t = t || {}; + const s = this.workbook.getWorksheet(t.sheetName || t.sheetId), + o = i.format(t.formatterOptions); + e.on("finish", () => { + r(); + }), o.on("error", n), o.pipe(e); + const { + dateFormat: l, + dateUTC: c + } = t, + u = t.map || (e => { + if (e) { + if (e.text || e.hyperlink) return e.hyperlink || e.text || ""; + if (e.formula || e.result) return e.result || ""; + if (e instanceof Date) return l ? c ? a.utc(e).format(l) : a(e).format(l) : c ? a.utc(e).format() : a(e).format(); + if (e.error) return e.error; + if ("object" == typeof e) return JSON.stringify(e); + } + return e; + }), + h = void 0 === t.includeEmptyRows || t.includeEmptyRows; + let f = 1; + s && s.eachRow((e, t) => { + if (h) for (; f++ < t - 1;) o.write([]); + const { + values: r + } = e; + r.shift(), o.write(r.map(u)), f = t; + }), o.end(); + }); + } + writeFile(e, t) { + const r = { + encoding: (t = t || {}).encoding || "utf8" + }, + i = n.createWriteStream(e, r); + return this.write(i, t); + } + writeBuffer(e) { + var _this2 = this; + return _asyncToGenerator(function* () { + const t = new l(); + return yield _this2.write(t, e), t.read(); + })(); + } + }; + }, { + "../utils/stream-buf": 24, + "../utils/utils": 27, + dayjs: 391, + "dayjs/plugin/customParseFormat": 392, + "dayjs/plugin/utc": 393, + "fast-csv": 424, + fs: 216 + }], + 2: [function (e, t, r) { + "use strict"; + + const n = e("../utils/col-cache"); + class i { + constructor(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0; + if (this.worksheet = e, t) { + if ("string" == typeof t) { + const e = n.decodeAddress(t); + this.nativeCol = e.col + r, this.nativeColOff = 0, this.nativeRow = e.row + r, this.nativeRowOff = 0; + } else void 0 !== t.nativeCol ? (this.nativeCol = t.nativeCol || 0, this.nativeColOff = t.nativeColOff || 0, this.nativeRow = t.nativeRow || 0, this.nativeRowOff = t.nativeRowOff || 0) : void 0 !== t.col ? (this.col = t.col + r, this.row = t.row + r) : (this.nativeCol = 0, this.nativeColOff = 0, this.nativeRow = 0, this.nativeRowOff = 0); + } else this.nativeCol = 0, this.nativeColOff = 0, this.nativeRow = 0, this.nativeRowOff = 0; + } + static asInstance(e) { + return e instanceof i || null == e ? e : new i(e); + } + get col() { + return this.nativeCol + Math.min(this.colWidth - 1, this.nativeColOff) / this.colWidth; + } + set col(e) { + this.nativeCol = Math.floor(e), this.nativeColOff = Math.floor((e - this.nativeCol) * this.colWidth); + } + get row() { + return this.nativeRow + Math.min(this.rowHeight - 1, this.nativeRowOff) / this.rowHeight; + } + set row(e) { + this.nativeRow = Math.floor(e), this.nativeRowOff = Math.floor((e - this.nativeRow) * this.rowHeight); + } + get colWidth() { + return this.worksheet && this.worksheet.getColumn(this.nativeCol + 1) && this.worksheet.getColumn(this.nativeCol + 1).isCustomWidth ? Math.floor(1e4 * this.worksheet.getColumn(this.nativeCol + 1).width) : 64e4; + } + get rowHeight() { + return this.worksheet && this.worksheet.getRow(this.nativeRow + 1) && this.worksheet.getRow(this.nativeRow + 1).height ? Math.floor(1e4 * this.worksheet.getRow(this.nativeRow + 1).height) : 18e4; + } + get model() { + return { + nativeCol: this.nativeCol, + nativeColOff: this.nativeColOff, + nativeRow: this.nativeRow, + nativeRowOff: this.nativeRowOff + }; + } + set model(e) { + this.nativeCol = e.nativeCol, this.nativeColOff = e.nativeColOff, this.nativeRow = e.nativeRow, this.nativeRowOff = e.nativeRowOff; + } + } + t.exports = i; + }, { + "../utils/col-cache": 19 + }], + 3: [function (e, t, r) { + "use strict"; + + const n = e("../utils/col-cache"), + i = e("../utils/under-dash"), + s = e("./enums"), + { + slideFormula: o + } = e("../utils/shared-formula"), + a = e("./note"); + class l { + constructor(e, t, r) { + if (!e || !t) throw new Error("A Cell needs a Row"); + this._row = e, this._column = t, n.validateAddress(r), this._address = r, this._value = c.create(l.Types.Null, this), this.style = this._mergeStyle(e.style, t.style, {}), this._mergeCount = 0; + } + get worksheet() { + return this._row.worksheet; + } + get workbook() { + return this._row.worksheet.workbook; + } + destroy() { + delete this.style, delete this._value, delete this._row, delete this._column, delete this._address; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(e) { + this.style.numFmt = e; + } + get font() { + return this.style.font; + } + set font(e) { + this.style.font = e; + } + get alignment() { + return this.style.alignment; + } + set alignment(e) { + this.style.alignment = e; + } + get border() { + return this.style.border; + } + set border(e) { + this.style.border = e; + } + get fill() { + return this.style.fill; + } + set fill(e) { + this.style.fill = e; + } + get protection() { + return this.style.protection; + } + set protection(e) { + this.style.protection = e; + } + _mergeStyle(e, t, r) { + const n = e && e.numFmt || t && t.numFmt; + n && (r.numFmt = n); + const i = e && e.font || t && t.font; + i && (r.font = i); + const s = e && e.alignment || t && t.alignment; + s && (r.alignment = s); + const o = e && e.border || t && t.border; + o && (r.border = o); + const a = e && e.fill || t && t.fill; + a && (r.fill = a); + const l = e && e.protection || t && t.protection; + return l && (r.protection = l), r; + } + get address() { + return this._address; + } + get row() { + return this._row.number; + } + get col() { + return this._column.number; + } + get $col$row() { + return `$${this._column.letter}$${this.row}`; + } + get type() { + return this._value.type; + } + get effectiveType() { + return this._value.effectiveType; + } + toCsvString() { + return this._value.toCsvString(); + } + addMergeRef() { + this._mergeCount++; + } + releaseMergeRef() { + this._mergeCount--; + } + get isMerged() { + return this._mergeCount > 0 || this.type === l.Types.Merge; + } + merge(e, t) { + this._value.release(), this._value = c.create(l.Types.Merge, this, e), t || (this.style = e.style); + } + unmerge() { + this.type === l.Types.Merge && (this._value.release(), this._value = c.create(l.Types.Null, this), this.style = this._mergeStyle(this._row.style, this._column.style, {})); + } + isMergedTo(e) { + return this._value.type === l.Types.Merge && this._value.isMergedTo(e); + } + get master() { + return this.type === l.Types.Merge ? this._value.master : this; + } + get isHyperlink() { + return this._value.type === l.Types.Hyperlink; + } + get hyperlink() { + return this._value.hyperlink; + } + get value() { + return this._value.value; + } + set value(e) { + this.type !== l.Types.Merge ? (this._value.release(), this._value = c.create(c.getType(e), this, e)) : this._value.master.value = e; + } + get note() { + return this._comment && this._comment.note; + } + set note(e) { + this._comment = new a(e); + } + get text() { + return this._value.toString(); + } + get html() { + return i.escapeHtml(this.text); + } + toString() { + return this.text; + } + _upgradeToHyperlink(e) { + this.type === l.Types.String && (this._value = c.create(l.Types.Hyperlink, this, { + text: this._value.value, + hyperlink: e + })); + } + get formula() { + return this._value.formula; + } + get result() { + return this._value.result; + } + get formulaType() { + return this._value.formulaType; + } + get fullAddress() { + const { + worksheet: e + } = this._row; + return { + sheetName: e.name, + address: this.address, + row: this.row, + col: this.col + }; + } + get name() { + return this.names[0]; + } + set name(e) { + this.names = [e]; + } + get names() { + return this.workbook.definedNames.getNamesEx(this.fullAddress); + } + set names(e) { + const { + definedNames: t + } = this.workbook; + t.removeAllNames(this.fullAddress), e.forEach(e => { + t.addEx(this.fullAddress, e); + }); + } + addName(e) { + this.workbook.definedNames.addEx(this.fullAddress, e); + } + removeName(e) { + this.workbook.definedNames.removeEx(this.fullAddress, e); + } + removeAllNames() { + this.workbook.definedNames.removeAllNames(this.fullAddress); + } + get _dataValidations() { + return this.worksheet.dataValidations; + } + get dataValidation() { + return this._dataValidations.find(this.address); + } + set dataValidation(e) { + this._dataValidations.add(this.address, e); + } + get model() { + const { + model: e + } = this._value; + return e.style = this.style, this._comment && (e.comment = this._comment.model), e; + } + set model(e) { + if (this._value.release(), this._value = c.create(e.type, this), this._value.model = e, e.comment) switch (e.comment.type) { + case "note": + this._comment = a.fromModel(e.comment); + } + e.style ? this.style = e.style : this.style = {}; + } + } + l.Types = s.ValueType; + const c = { + getType: e => null == e ? l.Types.Null : e instanceof String || "string" == typeof e ? l.Types.String : "number" == typeof e ? l.Types.Number : "boolean" == typeof e ? l.Types.Boolean : e instanceof Date ? l.Types.Date : e.text && e.hyperlink ? l.Types.Hyperlink : e.formula || e.sharedFormula ? l.Types.Formula : e.richText ? l.Types.RichText : e.sharedString ? l.Types.SharedString : e.error ? l.Types.Error : l.Types.JSON, + types: [{ + t: l.Types.Null, + f: class { + constructor(e) { + this.model = { + address: e.address, + type: l.Types.Null + }; + } + get value() { + return null; + } + set value(e) {} + get type() { + return l.Types.Null; + } + get effectiveType() { + return l.Types.Null; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return ""; + } + release() {} + toString() { + return ""; + } + } + }, { + t: l.Types.Number, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.Number, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + get type() { + return l.Types.Number; + } + get effectiveType() { + return l.Types.Number; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } + } + }, { + t: l.Types.String, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.String, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + get type() { + return l.Types.String; + } + get effectiveType() { + return l.Types.String; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return `"${this.model.value.replace(/"/g, '""')}"`; + } + release() {} + toString() { + return this.model.value; + } + } + }, { + t: l.Types.Date, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.Date, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + get type() { + return l.Types.Date; + } + get effectiveType() { + return l.Types.Date; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.model.value.toISOString(); + } + release() {} + toString() { + return this.model.value.toString(); + } + } + }, { + t: l.Types.Hyperlink, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.Hyperlink, + text: t ? t.text : void 0, + hyperlink: t ? t.hyperlink : void 0 + }, t && t.tooltip && (this.model.tooltip = t.tooltip); + } + get value() { + const e = { + text: this.model.text, + hyperlink: this.model.hyperlink + }; + return this.model.tooltip && (e.tooltip = this.model.tooltip), e; + } + set value(e) { + this.model = { + text: e.text, + hyperlink: e.hyperlink + }, e.tooltip && (this.model.tooltip = e.tooltip); + } + get text() { + return this.model.text; + } + set text(e) { + this.model.text = e; + } + get hyperlink() { + return this.model.hyperlink; + } + set hyperlink(e) { + this.model.hyperlink = e; + } + get type() { + return l.Types.Hyperlink; + } + get effectiveType() { + return l.Types.Hyperlink; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.model.hyperlink; + } + release() {} + toString() { + return this.model.text; + } + } + }, { + t: l.Types.Formula, + f: class { + constructor(e, t) { + this.cell = e, this.model = { + address: e.address, + type: l.Types.Formula, + shareType: t ? t.shareType : void 0, + ref: t ? t.ref : void 0, + formula: t ? t.formula : void 0, + sharedFormula: t ? t.sharedFormula : void 0, + result: t ? t.result : void 0 + }; + } + _copyModel(e) { + const t = {}, + r = r => { + const n = e[r]; + n && (t[r] = n); + }; + return r("formula"), r("result"), r("ref"), r("shareType"), r("sharedFormula"), t; + } + get value() { + return this._copyModel(this.model); + } + set value(e) { + this.model = this._copyModel(e); + } + validate(e) { + switch (c.getType(e)) { + case l.Types.Null: + case l.Types.String: + case l.Types.Number: + case l.Types.Date: + break; + case l.Types.Hyperlink: + case l.Types.Formula: + default: + throw new Error("Cannot process that type of result value"); + } + } + get dependencies() { + return { + ranges: this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g), + cells: this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g, "").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g) + }; + } + get formula() { + return this.model.formula || this._getTranslatedFormula(); + } + set formula(e) { + this.model.formula = e; + } + get formulaType() { + return this.model.formula ? s.FormulaType.Master : this.model.sharedFormula ? s.FormulaType.Shared : s.FormulaType.None; + } + get result() { + return this.model.result; + } + set result(e) { + this.model.result = e; + } + get type() { + return l.Types.Formula; + } + get effectiveType() { + const e = this.model.result; + return null == e ? s.ValueType.Null : e instanceof String || "string" == typeof e ? s.ValueType.String : "number" == typeof e ? s.ValueType.Number : e instanceof Date ? s.ValueType.Date : e.text && e.hyperlink ? s.ValueType.Hyperlink : e.formula ? s.ValueType.Formula : s.ValueType.Null; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + _getTranslatedFormula() { + if (!this._translatedFormula && this.model.sharedFormula) { + const { + worksheet: e + } = this.cell, + t = e.findCell(this.model.sharedFormula); + this._translatedFormula = t && o(t.formula, t.address, this.model.address); + } + return this._translatedFormula; + } + toCsvString() { + return "" + (this.model.result || ""); + } + release() {} + toString() { + return this.model.result ? this.model.result.toString() : ""; + } + } + }, { + t: l.Types.Merge, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.Merge, + master: t ? t.address : void 0 + }, this._master = t, t && t.addMergeRef(); + } + get value() { + return this._master.value; + } + set value(e) { + e instanceof l ? (this._master && this._master.releaseMergeRef(), e.addMergeRef(), this._master = e) : this._master.value = e; + } + isMergedTo(e) { + return e === this._master; + } + get master() { + return this._master; + } + get type() { + return l.Types.Merge; + } + get effectiveType() { + return this._master.effectiveType; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return ""; + } + release() { + this._master.releaseMergeRef(); + } + toString() { + return this.value.toString(); + } + } + }, { + t: l.Types.JSON, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.String, + value: JSON.stringify(t), + rawValue: t + }; + } + get value() { + return this.model.rawValue; + } + set value(e) { + this.model.rawValue = e, this.model.value = JSON.stringify(e); + } + get type() { + return l.Types.String; + } + get effectiveType() { + return l.Types.String; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.model.value; + } + release() {} + toString() { + return this.model.value; + } + } + }, { + t: l.Types.SharedString, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.SharedString, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + get type() { + return l.Types.SharedString; + } + get effectiveType() { + return l.Types.SharedString; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.model.value.toString(); + } + release() {} + toString() { + return this.model.value.toString(); + } + } + }, { + t: l.Types.RichText, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.String, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + toString() { + return this.model.value.richText.map(e => e.text).join(""); + } + get type() { + return l.Types.RichText; + } + get effectiveType() { + return l.Types.RichText; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return `"${this.text.replace(/"/g, '""')}"`; + } + release() {} + } + }, { + t: l.Types.Boolean, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.Boolean, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + get type() { + return l.Types.Boolean; + } + get effectiveType() { + return l.Types.Boolean; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.model.value ? 1 : 0; + } + release() {} + toString() { + return this.model.value.toString(); + } + } + }, { + t: l.Types.Error, + f: class { + constructor(e, t) { + this.model = { + address: e.address, + type: l.Types.Error, + value: t + }; + } + get value() { + return this.model.value; + } + set value(e) { + this.model.value = e; + } + get type() { + return l.Types.Error; + } + get effectiveType() { + return l.Types.Error; + } + get address() { + return this.model.address; + } + set address(e) { + this.model.address = e; + } + toCsvString() { + return this.toString(); + } + release() {} + toString() { + return this.model.value.error.toString(); + } + } + }].reduce((e, t) => (e[t.t] = t.f, e), []), + create(e, t, r) { + const n = this.types[e]; + if (!n) throw new Error("Could not create Value of type " + e); + return new n(t, r); + } + }; + t.exports = l; + }, { + "../utils/col-cache": 19, + "../utils/shared-formula": 23, + "../utils/under-dash": 26, + "./enums": 7, + "./note": 9 + }], + 4: [function (e, t, r) { + "use strict"; + + const n = e("../utils/under-dash"), + i = e("./enums"), + s = e("../utils/col-cache"); + class o { + constructor(e, t, r) { + this._worksheet = e, this._number = t, !1 !== r && (this.defn = r); + } + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + get letter() { + return s.n2l(this._number); + } + get isCustomWidth() { + return void 0 !== this.width && 9 !== this.width; + } + get defn() { + return { + header: this._header, + key: this.key, + width: this.width, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel + }; + } + set defn(e) { + e ? (this.key = e.key, this.width = void 0 !== e.width ? e.width : 9, this.outlineLevel = e.outlineLevel, e.style ? this.style = e.style : this.style = {}, this.header = e.header, this._hidden = !!e.hidden) : (delete this._header, delete this._key, delete this.width, this.style = {}, this.outlineLevel = 0); + } + get headers() { + return this._header && this._header instanceof Array ? this._header : [this._header]; + } + get header() { + return this._header; + } + set header(e) { + void 0 !== e ? (this._header = e, this.headers.forEach((e, t) => { + this._worksheet.getCell(t + 1, this.number).value = e; + })) : this._header = void 0; + } + get key() { + return this._key; + } + set key(e) { + (this._key && this._worksheet.getColumnKey(this._key)) === this && this._worksheet.deleteColumnKey(this._key), this._key = e, e && this._worksheet.setColumnKey(this._key, this); + } + get hidden() { + return !!this._hidden; + } + set hidden(e) { + this._hidden = e; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(e) { + this._outlineLevel = e; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelCol); + } + toString() { + return JSON.stringify({ + key: this.key, + width: this.width, + headers: this.headers.length ? this.headers : void 0 + }); + } + equivalentTo(e) { + return this.width === e.width && this.hidden === e.hidden && this.outlineLevel === e.outlineLevel && n.isEqual(this.style, e.style); + } + get isDefault() { + if (this.isCustomWidth) return !1; + if (this.hidden) return !1; + if (this.outlineLevel) return !1; + const e = this.style; + return !e || !(e.font || e.numFmt || e.alignment || e.border || e.fill || e.protection); + } + get headerCount() { + return this.headers.length; + } + eachCell(e, t) { + const r = this.number; + t || (t = e, e = null), this._worksheet.eachRow(e, (e, n) => { + t(e.getCell(r), n); + }); + } + get values() { + const e = []; + return this.eachCell((t, r) => { + t && t.type !== i.ValueType.Null && (e[r] = t.value); + }), e; + } + set values(e) { + if (!e) return; + const t = this.number; + let r = 0; + e.hasOwnProperty("0") && (r = 1), e.forEach((e, n) => { + this._worksheet.getCell(n + r, t).value = e; + }); + } + _applyStyle(e, t) { + return this.style[e] = t, this.eachCell(r => { + r[e] = t; + }), t; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(e) { + this._applyStyle("numFmt", e); + } + get font() { + return this.style.font; + } + set font(e) { + this._applyStyle("font", e); + } + get alignment() { + return this.style.alignment; + } + set alignment(e) { + this._applyStyle("alignment", e); + } + get protection() { + return this.style.protection; + } + set protection(e) { + this._applyStyle("protection", e); + } + get border() { + return this.style.border; + } + set border(e) { + this._applyStyle("border", e); + } + get fill() { + return this.style.fill; + } + set fill(e) { + this._applyStyle("fill", e); + } + static toModel(e) { + const t = []; + let r = null; + return e && e.forEach((e, n) => { + e.isDefault ? r && (r = null) : r && e.equivalentTo(r) ? r.max = n + 1 : (r = { + min: n + 1, + max: n + 1, + width: void 0 !== e.width ? e.width : 9, + style: e.style, + isCustomWidth: e.isCustomWidth, + hidden: e.hidden, + outlineLevel: e.outlineLevel, + collapsed: e.collapsed + }, t.push(r)); + }), t.length ? t : void 0; + } + static fromModel(e, t) { + const r = []; + let n = 1, + i = 0; + for (t = (t = t || []).sort(function (e, t) { + return e.min - t.min; + }); i < t.length;) { + const s = t[i++]; + for (; n < s.min;) r.push(new o(e, n++)); + for (; n <= s.max;) r.push(new o(e, n++, s)); + } + return r.length ? r : null; + } + } + t.exports = o; + }, { + "../utils/col-cache": 19, + "../utils/under-dash": 26, + "./enums": 7 + }], + 5: [function (e, t, r) { + "use strict"; + + t.exports = class { + constructor(e) { + this.model = e || {}; + } + add(e, t) { + return this.model[e] = t; + } + find(e) { + return this.model[e]; + } + remove(e) { + this.model[e] = void 0; + } + }; + }, {}], + 6: [function (e, t, r) { + "use strict"; + + const n = e("../utils/under-dash"), + i = e("../utils/col-cache"), + s = e("../utils/cell-matrix"), + o = e("./range"), + a = /[$](\w+)[$](\d+)(:[$](\w+)[$](\d+))?/; + t.exports = class { + constructor() { + this.matrixMap = {}; + } + getMatrix(e) { + return this.matrixMap[e] || (this.matrixMap[e] = new s()); + } + add(e, t) { + const r = i.decodeEx(e); + this.addEx(r, t); + } + addEx(e, t) { + const r = this.getMatrix(t); + if (e.top) for (let t = e.left; t <= e.right; t++) for (let n = e.top; n <= e.bottom; n++) { + const s = { + sheetName: e.sheetName, + address: i.n2l(t) + n, + row: n, + col: t + }; + r.addCellEx(s); + } else r.addCellEx(e); + } + remove(e, t) { + const r = i.decodeEx(e); + this.removeEx(r, t); + } + removeEx(e, t) { + this.getMatrix(t).removeCellEx(e); + } + removeAllNames(e) { + n.each(this.matrixMap, t => { + t.removeCellEx(e); + }); + } + forEach(e) { + n.each(this.matrixMap, (t, r) => { + t.forEach(t => { + e(r, t); + }); + }); + } + getNames(e) { + return this.getNamesEx(i.decodeEx(e)); + } + getNamesEx(e) { + return n.map(this.matrixMap, (t, r) => t.findCellEx(e) && r).filter(Boolean); + } + _explore(e, t) { + t.mark = !1; + const { + sheetName: r + } = t, + n = new o(t.row, t.col, t.row, t.col, r); + let i, s; + function a(i, s) { + const o = e.findCellAt(r, i, t.col); + return !(!o || !o.mark) && (n[s] = i, o.mark = !1, !0); + } + for (s = t.row - 1; a(s, "top"); s--); + for (s = t.row + 1; a(s, "bottom"); s++); + function l(t, i) { + const o = []; + for (s = n.top; s <= n.bottom; s++) { + const n = e.findCellAt(r, s, t); + if (!n || !n.mark) return !1; + o.push(n); + } + n[i] = t; + for (let e = 0; e < o.length; e++) o[e].mark = !1; + return !0; + } + for (i = t.col - 1; l(i, "left"); i--); + for (i = t.col + 1; l(i, "right"); i++); + return n; + } + getRanges(e, t) { + if (!(t = t || this.matrixMap[e])) return { + name: e, + ranges: [] + }; + t.forEach(e => { + e.mark = !0; + }); + return { + name: e, + ranges: t.map(e => e.mark && this._explore(t, e)).filter(Boolean).map(e => e.$shortRange) + }; + } + normaliseMatrix(e, t) { + e.forEachInSheet(t, (e, t, r) => { + e && (e.row === t && e.col === r || (e.row = t, e.col = r, e.address = i.n2l(r) + t)); + }); + } + spliceRows(e, t, r, i) { + n.each(this.matrixMap, n => { + n.spliceRows(e, t, r, i), this.normaliseMatrix(n, e); + }); + } + spliceColumns(e, t, r, i) { + n.each(this.matrixMap, n => { + n.spliceColumns(e, t, r, i), this.normaliseMatrix(n, e); + }); + } + get model() { + return n.map(this.matrixMap, (e, t) => this.getRanges(t, e)).filter(e => e.ranges.length); + } + set model(e) { + const t = this.matrixMap = {}; + e.forEach(e => { + const r = t[e.name] = new s(); + e.ranges.forEach(e => { + a.test(e.split("!").pop() || "") && r.addCell(e); + }); + }); + } + }; + }, { + "../utils/cell-matrix": 18, + "../utils/col-cache": 19, + "../utils/under-dash": 26, + "./range": 10 + }], + 7: [function (e, t, r) { + "use strict"; + + t.exports = { + ValueType: { + Null: 0, + Merge: 1, + Number: 2, + String: 3, + Date: 4, + Hyperlink: 5, + Formula: 6, + SharedString: 7, + RichText: 8, + Boolean: 9, + Error: 10 + }, + FormulaType: { + None: 0, + Master: 1, + Shared: 2 + }, + RelationshipType: { + None: 0, + OfficeDocument: 1, + Worksheet: 2, + CalcChain: 3, + SharedStrings: 4, + Styles: 5, + Theme: 6, + Hyperlink: 7 + }, + DocumentType: { + Xlsx: 1 + }, + ReadingOrder: { + LeftToRight: 1, + RightToLeft: 2 + }, + ErrorValue: { + NotApplicable: "#N/A", + Ref: "#REF!", + Name: "#NAME?", + DivZero: "#DIV/0!", + Null: "#NULL!", + Value: "#VALUE!", + Num: "#NUM!" + } + }; + }, {}], + 8: [function (e, t, r) { + "use strict"; + + const n = e("../utils/col-cache"), + i = e("./anchor"); + t.exports = class { + constructor(e, t) { + this.worksheet = e, this.model = t; + } + get model() { + switch (this.type) { + case "background": + return { + type: this.type, + imageId: this.imageId + }; + case "image": + return { + type: this.type, + imageId: this.imageId, + hyperlinks: this.range.hyperlinks, + range: { + tl: this.range.tl.model, + br: this.range.br && this.range.br.model, + ext: this.range.ext, + editAs: this.range.editAs + } + }; + default: + throw new Error("Invalid Image Type"); + } + } + set model(e) { + let { + type: t, + imageId: r, + range: s, + hyperlinks: o + } = e; + if (this.type = t, this.imageId = r, "image" === t) if ("string" == typeof s) { + const e = n.decode(s); + this.range = { + tl: new i(this.worksheet, { + col: e.left, + row: e.top + }, -1), + br: new i(this.worksheet, { + col: e.right, + row: e.bottom + }, 0), + editAs: "oneCell" + }; + } else this.range = { + tl: new i(this.worksheet, s.tl, 0), + br: s.br && new i(this.worksheet, s.br, 0), + ext: s.ext, + editAs: s.editAs, + hyperlinks: o || s.hyperlinks + }; + } + }; + }, { + "../utils/col-cache": 19, + "./anchor": 2 + }], + 9: [function (e, t, r) { + "use strict"; + + const n = e("../utils/under-dash"); + class i { + constructor(e) { + this.note = e; + } + get model() { + let e = null; + switch (typeof this.note) { + case "string": + e = { + type: "note", + note: { + texts: [{ + text: this.note + }] + } + }; + break; + default: + e = { + type: "note", + note: this.note + }; + } + return n.deepMerge({}, i.DEFAULT_CONFIGS, e); + } + set model(e) { + const { + note: t + } = e, + { + texts: r + } = t; + 1 === r.length && 1 === Object.keys(r[0]).length ? this.note = r[0].text : this.note = t; + } + static fromModel(e) { + const t = new i(); + return t.model = e, t; + } + } + i.DEFAULT_CONFIGS = { + note: { + margins: { + insetmode: "auto", + inset: [.13, .13, .25, .25] + }, + protection: { + locked: "True", + lockText: "True" + }, + editAs: "absolute" + } + }, t.exports = i; + }, { + "../utils/under-dash": 26 + }], + 10: [function (e, t, r) { + "use strict"; + + const n = e("../utils/col-cache"); + class i { + constructor() { + this.decode(arguments); + } + setTLBR(e, t, r, i, s) { + if (arguments.length < 4) { + const i = n.decodeAddress(e), + o = n.decodeAddress(t); + this.model = { + top: Math.min(i.row, o.row), + left: Math.min(i.col, o.col), + bottom: Math.max(i.row, o.row), + right: Math.max(i.col, o.col), + sheetName: r + }, this.setTLBR(i.row, i.col, o.row, o.col, s); + } else this.model = { + top: Math.min(e, r), + left: Math.min(t, i), + bottom: Math.max(e, r), + right: Math.max(t, i), + sheetName: s + }; + } + decode(e) { + switch (e.length) { + case 5: + this.setTLBR(e[0], e[1], e[2], e[3], e[4]); + break; + case 4: + this.setTLBR(e[0], e[1], e[2], e[3]); + break; + case 3: + this.setTLBR(e[0], e[1], e[2]); + break; + case 2: + this.setTLBR(e[0], e[1]); + break; + case 1: + { + const t = e[0]; + if (t instanceof i) this.model = { + top: t.model.top, + left: t.model.left, + bottom: t.model.bottom, + right: t.model.right, + sheetName: t.sheetName + };else if (t instanceof Array) this.decode(t);else if (t.top && t.left && t.bottom && t.right) this.model = { + top: t.top, + left: t.left, + bottom: t.bottom, + right: t.right, + sheetName: t.sheetName + };else { + const e = n.decodeEx(t); + e.top ? this.model = { + top: e.top, + left: e.left, + bottom: e.bottom, + right: e.right, + sheetName: e.sheetName + } : this.model = { + top: e.row, + left: e.col, + bottom: e.row, + right: e.col, + sheetName: e.sheetName + }; + } + break; + } + case 0: + this.model = { + top: 0, + left: 0, + bottom: 0, + right: 0 + }; + break; + default: + throw new Error("Invalid number of arguments to _getDimensions() - " + e.length); + } + } + get top() { + return this.model.top || 1; + } + set top(e) { + this.model.top = e; + } + get left() { + return this.model.left || 1; + } + set left(e) { + this.model.left = e; + } + get bottom() { + return this.model.bottom || 1; + } + set bottom(e) { + this.model.bottom = e; + } + get right() { + return this.model.right || 1; + } + set right(e) { + this.model.right = e; + } + get sheetName() { + return this.model.sheetName; + } + set sheetName(e) { + this.model.sheetName = e; + } + get _serialisedSheetName() { + const { + sheetName: e + } = this.model; + return e ? /^[a-zA-Z0-9]*$/.test(e) ? e + "!" : `'${e}'!` : ""; + } + expand(e, t, r, n) { + (!this.model.top || e < this.top) && (this.top = e), (!this.model.left || t < this.left) && (this.left = t), (!this.model.bottom || r > this.bottom) && (this.bottom = r), (!this.model.right || n > this.right) && (this.right = n); + } + expandRow(e) { + if (e) { + const { + dimensions: t, + number: r + } = e; + t && this.expand(r, t.min, r, t.max); + } + } + expandToAddress(e) { + const t = n.decodeEx(e); + this.expand(t.row, t.col, t.row, t.col); + } + get tl() { + return n.n2l(this.left) + this.top; + } + get $t$l() { + return `$${n.n2l(this.left)}$${this.top}`; + } + get br() { + return n.n2l(this.right) + this.bottom; + } + get $b$r() { + return `$${n.n2l(this.right)}$${this.bottom}`; + } + get range() { + return `${this._serialisedSheetName + this.tl}:${this.br}`; + } + get $range() { + return `${this._serialisedSheetName + this.$t$l}:${this.$b$r}`; + } + get shortRange() { + return this.count > 1 ? this.range : this._serialisedSheetName + this.tl; + } + get $shortRange() { + return this.count > 1 ? this.$range : this._serialisedSheetName + this.$t$l; + } + get count() { + return (1 + this.bottom - this.top) * (1 + this.right - this.left); + } + toString() { + return this.range; + } + intersects(e) { + return (!e.sheetName || !this.sheetName || e.sheetName === this.sheetName) && !(e.bottom < this.top) && !(e.top > this.bottom) && !(e.right < this.left) && !(e.left > this.right); + } + contains(e) { + const t = n.decodeEx(e); + return this.containsEx(t); + } + containsEx(e) { + return (!e.sheetName || !this.sheetName || e.sheetName === this.sheetName) && e.row >= this.top && e.row <= this.bottom && e.col >= this.left && e.col <= this.right; + } + forEachAddress(e) { + for (let t = this.left; t <= this.right; t++) for (let r = this.top; r <= this.bottom; r++) e(n.encodeAddress(r, t), r, t); + } + } + t.exports = i; + }, { + "../utils/col-cache": 19 + }], + 11: [function (e, t, r) { + "use strict"; + + const n = e("../utils/under-dash"), + i = e("./enums"), + s = e("../utils/col-cache"), + o = e("./cell"); + t.exports = class { + constructor(e, t) { + this._worksheet = e, this._number = t, this._cells = [], this.style = {}, this.outlineLevel = 0; + } + get number() { + return this._number; + } + get worksheet() { + return this._worksheet; + } + commit() { + this._worksheet._commitRow(this); + } + destroy() { + delete this._worksheet, delete this._cells, delete this.style; + } + findCell(e) { + return this._cells[e - 1]; + } + getCellEx(e) { + let t = this._cells[e.col - 1]; + if (!t) { + const r = this._worksheet.getColumn(e.col); + t = new o(this, r, e.address), this._cells[e.col - 1] = t; + } + return t; + } + getCell(e) { + if ("string" == typeof e) { + const t = this._worksheet.getColumnKey(e); + e = t ? t.number : s.l2n(e); + } + return this._cells[e - 1] || this.getCellEx({ + address: s.encodeAddress(this._number, e), + row: this._number, + col: e + }); + } + splice(e, t) { + const r = e + t; + for (var n = arguments.length, i = new Array(n > 2 ? n - 2 : 0), s = 2; s < n; s++) i[s - 2] = arguments[s]; + const o = i.length - t, + a = this._cells.length; + let l, c, u; + if (o < 0) for (l = e + i.length; l <= a; l++) u = this._cells[l - 1], c = this._cells[l - o - 1], c ? (u = this.getCell(l), u.value = c.value, u.style = c.style, u._comment = c._comment) : u && (u.value = null, u.style = {}, u._comment = void 0);else if (o > 0) for (l = a; l >= r; l--) c = this._cells[l - 1], c ? (u = this.getCell(l + o), u.value = c.value, u.style = c.style, u._comment = c._comment) : this._cells[l + o - 1] = void 0; + for (l = 0; l < i.length; l++) u = this.getCell(e + l), u.value = i[l], u.style = {}, u._comment = void 0; + } + eachCell(e, t) { + if (t || (t = e, e = null), e && e.includeEmpty) { + const e = this._cells.length; + for (let r = 1; r <= e; r++) t(this.getCell(r), r); + } else this._cells.forEach((e, r) => { + e && e.type !== i.ValueType.Null && t(e, r + 1); + }); + } + addPageBreak(e, t) { + const r = this._worksheet, + n = Math.max(0, e - 1) || 0, + i = Math.max(0, t - 1) || 16838, + s = { + id: this._number, + max: i, + man: 1 + }; + n && (s.min = n), r.rowBreaks.push(s); + } + get values() { + const e = []; + return this._cells.forEach(t => { + t && t.type !== i.ValueType.Null && (e[t.col] = t.value); + }), e; + } + set values(e) { + if (this._cells = [], e) { + if (e instanceof Array) { + let t = 0; + e.hasOwnProperty("0") && (t = 1), e.forEach((e, r) => { + void 0 !== e && (this.getCellEx({ + address: s.encodeAddress(this._number, r + t), + row: this._number, + col: r + t + }).value = e); + }); + } else this._worksheet.eachColumnKey((t, r) => { + void 0 !== e[r] && (this.getCellEx({ + address: s.encodeAddress(this._number, t.number), + row: this._number, + col: t.number + }).value = e[r]); + }); + } else ; + } + get hasValues() { + return n.some(this._cells, e => e && e.type !== i.ValueType.Null); + } + get cellCount() { + return this._cells.length; + } + get actualCellCount() { + let e = 0; + return this.eachCell(() => { + e++; + }), e; + } + get dimensions() { + let e = 0, + t = 0; + return this._cells.forEach(r => { + r && r.type !== i.ValueType.Null && ((!e || e > r.col) && (e = r.col), t < r.col && (t = r.col)); + }), e > 0 ? { + min: e, + max: t + } : null; + } + _applyStyle(e, t) { + return this.style[e] = t, this._cells.forEach(r => { + r && (r[e] = t); + }), t; + } + get numFmt() { + return this.style.numFmt; + } + set numFmt(e) { + this._applyStyle("numFmt", e); + } + get font() { + return this.style.font; + } + set font(e) { + this._applyStyle("font", e); + } + get alignment() { + return this.style.alignment; + } + set alignment(e) { + this._applyStyle("alignment", e); + } + get protection() { + return this.style.protection; + } + set protection(e) { + this._applyStyle("protection", e); + } + get border() { + return this.style.border; + } + set border(e) { + this._applyStyle("border", e); + } + get fill() { + return this.style.fill; + } + set fill(e) { + this._applyStyle("fill", e); + } + get hidden() { + return !!this._hidden; + } + set hidden(e) { + this._hidden = e; + } + get outlineLevel() { + return this._outlineLevel || 0; + } + set outlineLevel(e) { + this._outlineLevel = e; + } + get collapsed() { + return !!(this._outlineLevel && this._outlineLevel >= this._worksheet.properties.outlineLevelRow); + } + get model() { + const e = []; + let t = 0, + r = 0; + return this._cells.forEach(n => { + if (n) { + const i = n.model; + i && ((!t || t > n.col) && (t = n.col), r < n.col && (r = n.col), e.push(i)); + } + }), this.height || e.length ? { + cells: e, + number: this.number, + min: t, + max: r, + height: this.height, + style: this.style, + hidden: this.hidden, + outlineLevel: this.outlineLevel, + collapsed: this.collapsed + } : null; + } + set model(e) { + if (e.number !== this._number) throw new Error("Invalid row number in model"); + let t; + this._cells = [], e.cells.forEach(e => { + switch (e.type) { + case o.Types.Merge: + break; + default: + { + let r; + if (e.address) r = s.decodeAddress(e.address);else if (t) { + const { + row: e + } = t, + n = t.col + 1; + r = { + row: e, + col: n, + address: s.encodeAddress(e, n), + $col$row: `$${s.n2l(n)}$${e}` + }; + } + t = r; + this.getCellEx(r).model = e; + break; + } + } + }), e.height ? this.height = e.height : delete this.height, this.hidden = e.hidden, this.outlineLevel = e.outlineLevel || 0, this.style = e.style && JSON.parse(JSON.stringify(e.style)) || {}; + } + }; + }, { + "../utils/col-cache": 19, + "../utils/under-dash": 26, + "./cell": 3, + "./enums": 7 + }], + 12: [function (e, t, r) { + "use strict"; + + const n = e("../utils/col-cache"); + class i { + constructor(e, t, r) { + this.table = e, this.column = t, this.index = r; + } + _set(e, t) { + this.table.cacheState(), this.column[e] = t; + } + get name() { + return this.column.name; + } + set name(e) { + this._set("name", e); + } + get filterButton() { + return this.column.filterButton; + } + set filterButton(e) { + this.column.filterButton = e; + } + get style() { + return this.column.style; + } + set style(e) { + this.column.style = e; + } + get totalsRowLabel() { + return this.column.totalsRowLabel; + } + set totalsRowLabel(e) { + this._set("totalsRowLabel", e); + } + get totalsRowFunction() { + return this.column.totalsRowFunction; + } + set totalsRowFunction(e) { + this._set("totalsRowFunction", e); + } + get totalsRowResult() { + return this.column.totalsRowResult; + } + set totalsRowResult(e) { + this._set("totalsRowResult", e); + } + get totalsRowFormula() { + return this.column.totalsRowFormula; + } + set totalsRowFormula(e) { + this._set("totalsRowFormula", e); + } + } + t.exports = class { + constructor(e, t) { + this.worksheet = e, t && (this.table = t, this.validate(), this.store()); + } + getFormula(e) { + switch (e.totalsRowFunction) { + case "none": + return null; + case "average": + return `SUBTOTAL(101,${this.table.name}[${e.name}])`; + case "countNums": + return `SUBTOTAL(102,${this.table.name}[${e.name}])`; + case "count": + return `SUBTOTAL(103,${this.table.name}[${e.name}])`; + case "max": + return `SUBTOTAL(104,${this.table.name}[${e.name}])`; + case "min": + return `SUBTOTAL(105,${this.table.name}[${e.name}])`; + case "stdDev": + return `SUBTOTAL(106,${this.table.name}[${e.name}])`; + case "var": + return `SUBTOTAL(107,${this.table.name}[${e.name}])`; + case "sum": + return `SUBTOTAL(109,${this.table.name}[${e.name}])`; + case "custom": + return e.totalsRowFormula; + default: + throw new Error("Invalid Totals Row Function: " + e.totalsRowFunction); + } + } + get width() { + return this.table.columns.length; + } + get height() { + return this.table.rows.length; + } + get filterHeight() { + return this.height + (this.table.headerRow ? 1 : 0); + } + get tableHeight() { + return this.filterHeight + (this.table.totalsRow ? 1 : 0); + } + validate() { + const { + table: e + } = this, + t = (e, t, r) => { + void 0 === e[t] && (e[t] = r); + }; + t(e, "headerRow", !0), t(e, "totalsRow", !1), t(e, "style", {}), t(e.style, "theme", "TableStyleMedium2"), t(e.style, "showFirstColumn", !1), t(e.style, "showLastColumn", !1), t(e.style, "showRowStripes", !1), t(e.style, "showColumnStripes", !1); + const r = (e, t) => { + if (!e) throw new Error(t); + }; + r(e.ref, "Table must have ref"), r(e.columns, "Table must have column definitions"), r(e.rows, "Table must have row definitions"), e.tl = n.decodeAddress(e.ref); + const { + row: i, + col: s + } = e.tl; + r(i > 0, "Table must be on valid row"), r(s > 0, "Table must be on valid col"); + const { + width: o, + filterHeight: a, + tableHeight: l + } = this; + e.autoFilterRef = n.encode(i, s, i + a - 1, s + o - 1), e.tableRef = n.encode(i, s, i + l - 1, s + o - 1), e.columns.forEach((e, n) => { + r(e.name, `Column ${n} must have a name`), 0 === n ? t(e, "totalsRowLabel", "Total") : (t(e, "totalsRowFunction", "none"), e.totalsRowFormula = this.getFormula(e)); + }); + } + store() { + const e = (e, t) => { + t && Object.keys(t).forEach(r => { + e[r] = t[r]; + }); + }, + { + worksheet: t, + table: r + } = this, + { + row: n, + col: i + } = r.tl; + let s = 0; + if (r.headerRow) { + const o = t.getRow(n + s++); + r.columns.forEach((t, r) => { + const { + style: n, + name: s + } = t, + a = o.getCell(i + r); + a.value = s, e(a, n); + }); + } + if (r.rows.forEach(o => { + const a = t.getRow(n + s++); + o.forEach((t, n) => { + const s = a.getCell(i + n); + s.value = t, e(s, r.columns[n].style); + }); + }), r.totalsRow) { + const o = t.getRow(n + s++); + r.columns.forEach((t, r) => { + const n = o.getCell(i + r); + if (0 === r) n.value = t.totalsRowLabel;else { + const e = this.getFormula(t); + n.value = e ? { + formula: t.totalsRowFormula, + result: t.totalsRowResult + } : null; + } + e(n, t.style); + }); + } + } + load(e) { + const { + table: t + } = this, + { + row: r, + col: n + } = t.tl; + let i = 0; + if (t.headerRow) { + const s = e.getRow(r + i++); + t.columns.forEach((e, t) => { + s.getCell(n + t).value = e.name; + }); + } + if (t.rows.forEach(t => { + const s = e.getRow(r + i++); + t.forEach((e, t) => { + s.getCell(n + t).value = e; + }); + }), t.totalsRow) { + const s = e.getRow(r + i++); + t.columns.forEach((e, t) => { + const r = s.getCell(n + t); + if (0 === t) r.value = e.totalsRowLabel;else { + this.getFormula(e) && (r.value = { + formula: e.totalsRowFormula, + result: e.totalsRowResult + }); + } + }); + } + } + get model() { + return this.table; + } + set model(e) { + this.table = e; + } + cacheState() { + this._cache || (this._cache = { + ref: this.ref, + width: this.width, + tableHeight: this.tableHeight + }); + } + commit() { + if (!this._cache) return; + this.validate(); + const e = n.decodeAddress(this._cache.ref); + if (this.ref !== this._cache.ref) for (let t = 0; t < this._cache.tableHeight; t++) { + const r = this.worksheet.getRow(e.row + t); + for (let t = 0; t < this._cache.width; t++) { + r.getCell(e.col + t).value = null; + } + } else { + for (let t = this.tableHeight; t < this._cache.tableHeight; t++) { + const r = this.worksheet.getRow(e.row + t); + for (let t = 0; t < this._cache.width; t++) { + r.getCell(e.col + t).value = null; + } + } + for (let t = 0; t < this.tableHeight; t++) { + const r = this.worksheet.getRow(e.row + t); + for (let t = this.width; t < this._cache.width; t++) { + r.getCell(e.col + t).value = null; + } + } + } + this.store(); + } + addRow(e, t) { + this.cacheState(), void 0 === t ? this.table.rows.push(e) : this.table.rows.splice(t, 0, e); + } + removeRows(e) { + let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1; + this.cacheState(), this.table.rows.splice(e, t); + } + getColumn(e) { + const t = this.table.columns[e]; + return new i(this, t, e); + } + addColumn(e, t, r) { + this.cacheState(), void 0 === r ? (this.table.columns.push(e), this.table.rows.forEach((e, r) => { + e.push(t[r]); + })) : (this.table.columns.splice(r, 0, e), this.table.rows.forEach((e, n) => { + e.splice(r, 0, t[n]); + })); + } + removeColumns(e) { + let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1; + this.cacheState(), this.table.columns.splice(e, t), this.table.rows.forEach(r => { + r.splice(e, t); + }); + } + _assign(e, t, r) { + this.cacheState(), e[t] = r; + } + get ref() { + return this.table.ref; + } + set ref(e) { + this._assign(this.table, "ref", e); + } + get name() { + return this.table.name; + } + set name(e) { + this.table.name = e; + } + get displayName() { + return this.table.displyName || this.table.name; + } + set displayNamename(e) { + this.table.displayName = e; + } + get headerRow() { + return this.table.headerRow; + } + set headerRow(e) { + this._assign(this.table, "headerRow", e); + } + get totalsRow() { + return this.table.totalsRow; + } + set totalsRow(e) { + this._assign(this.table, "totalsRow", e); + } + get theme() { + return this.table.style.name; + } + set theme(e) { + this.table.style.name = e; + } + get showFirstColumn() { + return this.table.style.showFirstColumn; + } + set showFirstColumn(e) { + this.table.style.showFirstColumn = e; + } + get showLastColumn() { + return this.table.style.showLastColumn; + } + set showLastColumn(e) { + this.table.style.showLastColumn = e; + } + get showRowStripes() { + return this.table.style.showRowStripes; + } + set showRowStripes(e) { + this.table.style.showRowStripes = e; + } + get showColumnStripes() { + return this.table.style.showColumnStripes; + } + set showColumnStripes(e) { + this.table.style.showColumnStripes = e; + } + }; + }, { + "../utils/col-cache": 19 + }], + 13: [function (e, t, r) { + "use strict"; + + const n = e("./worksheet"), + i = e("./defined-names"), + s = e("../xlsx/xlsx"), + o = e("../csv/csv"); + t.exports = class { + constructor() { + this.category = "", this.company = "", this.created = new Date(), this.description = "", this.keywords = "", this.manager = "", this.modified = this.created, this.properties = {}, this.calcProperties = {}, this._worksheets = [], this.subject = "", this.title = "", this.views = [], this.media = [], this._definedNames = new i(); + } + get xlsx() { + return this._xlsx || (this._xlsx = new s(this)), this._xlsx; + } + get csv() { + return this._csv || (this._csv = new o(this)), this._csv; + } + get nextId() { + for (let e = 1; e < this._worksheets.length; e++) if (!this._worksheets[e]) return e; + return this._worksheets.length || 1; + } + addWorksheet(e, t) { + const r = this.nextId; + t && ("string" == typeof t ? (console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: "rbg value" } }'), t = { + properties: { + tabColor: { + argb: t + } + } + }) : (t.argb || t.theme || t.indexed) && (console.trace("tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }"), t = { + properties: { + tabColor: t + } + })); + const i = this._worksheets.reduce((e, t) => (t && t.orderNo) > e ? t.orderNo : e, 0), + s = Object.assign({}, t, { + id: r, + name: e, + orderNo: i + 1, + workbook: this + }), + o = new n(s); + return this._worksheets[r] = o, o; + } + removeWorksheetEx(e) { + delete this._worksheets[e.id]; + } + removeWorksheet(e) { + const t = this.getWorksheet(e); + t && t.destroy(); + } + getWorksheet(e) { + return void 0 === e ? this._worksheets.find(Boolean) : "number" == typeof e ? this._worksheets[e] : "string" == typeof e ? this._worksheets.find(t => t && t.name === e) : void 0; + } + get worksheets() { + return this._worksheets.slice(1).sort((e, t) => e.orderNo - t.orderNo).filter(Boolean); + } + eachSheet(e) { + this.worksheets.forEach(t => { + e(t, t.id); + }); + } + get definedNames() { + return this._definedNames; + } + clearThemes() { + this._themes = void 0; + } + addImage(e) { + const t = this.media.length; + return this.media.push(Object.assign({}, e, { + type: "image" + })), t; + } + getImage(e) { + return this.media[e]; + } + get model() { + return { + creator: this.creator || "Unknown", + lastModifiedBy: this.lastModifiedBy || "Unknown", + lastPrinted: this.lastPrinted, + created: this.created, + modified: this.modified, + properties: this.properties, + worksheets: this.worksheets.map(e => e.model), + sheets: this.worksheets.map(e => e.model).filter(Boolean), + definedNames: this._definedNames.model, + views: this.views, + company: this.company, + manager: this.manager, + title: this.title, + subject: this.subject, + keywords: this.keywords, + category: this.category, + description: this.description, + language: this.language, + revision: this.revision, + contentStatus: this.contentStatus, + themes: this._themes, + media: this.media, + calcProperties: this.calcProperties + }; + } + set model(e) { + this.creator = e.creator, this.lastModifiedBy = e.lastModifiedBy, this.lastPrinted = e.lastPrinted, this.created = e.created, this.modified = e.modified, this.company = e.company, this.manager = e.manager, this.title = e.title, this.subject = e.subject, this.keywords = e.keywords, this.category = e.category, this.description = e.description, this.language = e.language, this.revision = e.revision, this.contentStatus = e.contentStatus, this.properties = e.properties, this.calcProperties = e.calcProperties, this._worksheets = [], e.worksheets.forEach(t => { + const { + id: r, + name: i, + state: s + } = t, + o = e.sheets && e.sheets.findIndex(e => e.id === r); + (this._worksheets[r] = new n({ + id: r, + name: i, + orderNo: o, + state: s, + workbook: this + })).model = t; + }), this._definedNames.model = e.definedNames, this.views = e.views, this._themes = e.themes, this.media = e.media || []; + } + }; + }, { + "../csv/csv": 1, + "../xlsx/xlsx": 144, + "./defined-names": 6, + "./worksheet": 14 + }], + 14: [function (e, t, r) { + "use strict"; + + const n = e("../utils/under-dash"), + i = e("../utils/col-cache"), + s = e("./range"), + o = e("./row"), + a = e("./column"), + l = e("./enums"), + c = e("./image"), + u = e("./table"), + h = e("./data-validations"), + f = e("../utils/encryptor"), + { + copyStyle: d + } = e("../utils/copy-style"); + t.exports = class { + constructor(e) { + e = e || {}, this._workbook = e.workbook, this.id = e.id, this.orderNo = e.orderNo, this.name = e.name, this.state = e.state || "visible", this._rows = [], this._columns = null, this._keys = {}, this._merges = {}, this.rowBreaks = [], this.properties = Object.assign({}, { + defaultRowHeight: 15, + dyDescent: 55, + outlineLevelCol: 0, + outlineLevelRow: 0 + }, e.properties), this.pageSetup = Object.assign({}, { + margins: { + left: .7, + right: .7, + top: .75, + bottom: .75, + header: .3, + footer: .3 + }, + orientation: "portrait", + horizontalDpi: 4294967295, + verticalDpi: 4294967295, + fitToPage: !(!e.pageSetup || !e.pageSetup.fitToWidth && !e.pageSetup.fitToHeight || e.pageSetup.scale), + pageOrder: "downThenOver", + blackAndWhite: !1, + draft: !1, + cellComments: "None", + errors: "displayed", + scale: 100, + fitToWidth: 1, + fitToHeight: 1, + paperSize: void 0, + showRowColHeaders: !1, + showGridLines: !1, + firstPageNumber: void 0, + horizontalCentered: !1, + verticalCentered: !1, + rowBreaks: null, + colBreaks: null + }, e.pageSetup), this.headerFooter = Object.assign({}, { + differentFirst: !1, + differentOddEven: !1, + oddHeader: null, + oddFooter: null, + evenHeader: null, + evenFooter: null, + firstHeader: null, + firstFooter: null + }, e.headerFooter), this.dataValidations = new h(), this.views = e.views || [], this.autoFilter = e.autoFilter || null, this._media = [], this.sheetProtection = null, this.tables = {}, this.conditionalFormattings = []; + } + get name() { + return this._name; + } + set name(e) { + if (void 0 === e && (e = "sheet" + this.id), this._name !== e) { + if ("string" != typeof e) throw new Error("The name has to be a string."); + if ("" === e) throw new Error("The name can't be empty."); + if ("History" === e) throw new Error('The name "History" is protected. Please use a different name.'); + if (/[*?:/\\[\]]/.test(e)) throw new Error(`Worksheet name ${e} cannot include any of the following characters: * ? : \\ / [ ]`); + if (/(^')|('$)/.test(e)) throw new Error("The first or last character of worksheet name cannot be a single quotation mark: " + e); + if (e && e.length > 31 && (console.warn(`Worksheet name ${e} exceeds 31 chars. This will be truncated`), e = e.substring(0, 31)), this._workbook._worksheets.find(t => t && t.name.toLowerCase() === e.toLowerCase())) throw new Error("Worksheet name already exists: " + e); + this._name = e; + } + } + get workbook() { + return this._workbook; + } + destroy() { + this._workbook.removeWorksheetEx(this); + } + get dimensions() { + const e = new s(); + return this._rows.forEach(t => { + if (t) { + const r = t.dimensions; + r && e.expand(t.number, r.min, t.number, r.max); + } + }), e; + } + get columns() { + return this._columns; + } + set columns(e) { + this._headerRowCount = e.reduce((e, t) => { + const r = (t.header ? 1 : t.headers && t.headers.length) || 0; + return Math.max(e, r); + }, 0); + let t = 1; + const r = this._columns = []; + e.forEach(e => { + const n = new a(this, t++, !1); + r.push(n), n.defn = e; + }); + } + getColumnKey(e) { + return this._keys[e]; + } + setColumnKey(e, t) { + this._keys[e] = t; + } + deleteColumnKey(e) { + delete this._keys[e]; + } + eachColumnKey(e) { + n.each(this._keys, e); + } + getColumn(e) { + if ("string" == typeof e) { + const t = this._keys[e]; + if (t) return t; + e = i.l2n(e); + } + if (this._columns || (this._columns = []), e > this._columns.length) { + let t = this._columns.length + 1; + for (; t <= e;) this._columns.push(new a(this, t++)); + } + return this._columns[e - 1]; + } + spliceColumns(e, t) { + const r = this._rows.length; + for (var n = arguments.length, i = new Array(n > 2 ? n - 2 : 0), s = 2; s < n; s++) i[s - 2] = arguments[s]; + if (i.length > 0) for (let n = 0; n < r; n++) { + const r = [e, t]; + i.forEach(e => { + r.push(e[n] || null); + }); + const s = this.getRow(n + 1); + s.splice.apply(s, r); + } else this._rows.forEach(r => { + r && r.splice(e, t); + }); + const o = i.length - t, + a = e + t, + l = this._columns.length; + if (o < 0) for (let t = e + i.length; t <= l; t++) this.getColumn(t).defn = this.getColumn(t - o).defn;else if (o > 0) for (let e = l; e >= a; e--) this.getColumn(e + o).defn = this.getColumn(e).defn; + for (let t = e; t < e + i.length; t++) this.getColumn(t).defn = null; + this.workbook.definedNames.spliceColumns(this.name, e, t, i.length); + } + get lastColumn() { + return this.getColumn(this.columnCount); + } + get columnCount() { + let e = 0; + return this.eachRow(t => { + e = Math.max(e, t.cellCount); + }), e; + } + get actualColumnCount() { + const e = []; + let t = 0; + return this.eachRow(r => { + r.eachCell(r => { + let { + col: n + } = r; + e[n] || (e[n] = !0, t++); + }); + }), t; + } + _commitRow() {} + get _lastRowNumber() { + const e = this._rows; + let t = e.length; + for (; t > 0 && void 0 === e[t - 1];) t--; + return t; + } + get _nextRow() { + return this._lastRowNumber + 1; + } + get lastRow() { + if (this._rows.length) return this._rows[this._rows.length - 1]; + } + findRow(e) { + return this._rows[e - 1]; + } + findRows(e, t) { + return this._rows.slice(e - 1, e - 1 + t); + } + get rowCount() { + return this._lastRowNumber; + } + get actualRowCount() { + let e = 0; + return this.eachRow(() => { + e++; + }), e; + } + getRow(e) { + let t = this._rows[e - 1]; + return t || (t = this._rows[e - 1] = new o(this, e)), t; + } + getRows(e, t) { + if (t < 1) return; + const r = []; + for (let n = e; n < e + t; n++) r.push(this.getRow(n)); + return r; + } + addRow(e) { + let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "n"; + const r = this._nextRow, + n = this.getRow(r); + return n.values = e, this._setStyleOption(r, "i" === t[0] ? t : "n"), n; + } + addRows(e) { + let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "n"; + const r = []; + return e.forEach(e => { + r.push(this.addRow(e, t)); + }), r; + } + insertRow(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "n"; + return this.spliceRows(e, 0, t), this._setStyleOption(e, r), this.getRow(e); + } + insertRows(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "n"; + if (this.spliceRows(e, 0, ...t), "n" !== r) for (let n = 0; n < t.length; n++) "o" === r[0] && void 0 !== this.findRow(t.length + e + n) ? this._copyStyle(t.length + e + n, e + n, "+" === r[1]) : "i" === r[0] && void 0 !== this.findRow(e - 1) && this._copyStyle(e - 1, e + n, "+" === r[1]); + return this.getRows(e, t.length); + } + _setStyleOption(e) { + let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "n"; + "o" === t[0] && void 0 !== this.findRow(e + 1) ? this._copyStyle(e + 1, e, "+" === t[1]) : "i" === t[0] && void 0 !== this.findRow(e - 1) && this._copyStyle(e - 1, e, "+" === t[1]); + } + _copyStyle(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + const n = this.getRow(e), + i = this.getRow(t); + i.style = d(n.style), n.eachCell({ + includeEmpty: r + }, (e, t) => { + i.getCell(t).style = d(e.style); + }), i.height = n.height; + } + duplicateRow(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + const n = this._rows[e - 1], + i = new Array(t).fill(n.values); + this.spliceRows(e + 1, r ? 0 : t, ...i); + for (let r = 0; r < t; r++) { + const t = this._rows[e + r]; + t.style = n.style, t.height = n.height, n.eachCell({ + includeEmpty: !0 + }, (e, r) => { + t.getCell(r).style = e.style; + }); + } + } + spliceRows(e, t) { + const r = e + t; + for (var n = arguments.length, i = new Array(n > 2 ? n - 2 : 0), s = 2; s < n; s++) i[s - 2] = arguments[s]; + const o = i.length, + a = o - t, + l = this._rows.length; + let c, u; + if (a < 0) { + for (e === l && (this._rows[l - 1] = void 0), c = r; c <= l; c++) if (u = this._rows[c - 1], u) { + const e = this.getRow(c + a); + e.values = u.values, e.style = u.style, e.height = u.height, u.eachCell({ + includeEmpty: !0 + }, (t, r) => { + e.getCell(r).style = t.style; + }), this._rows[c - 1] = void 0; + } else this._rows[c + a - 1] = void 0; + } else if (a > 0) for (c = l; c >= r; c--) if (u = this._rows[c - 1], u) { + const e = this.getRow(c + a); + e.values = u.values, e.style = u.style, e.height = u.height, u.eachCell({ + includeEmpty: !0 + }, (t, r) => { + if (e.getCell(r).style = t.style, "MergeValue" === t._value.constructor.name) { + const e = this.getRow(t._row._number + o).getCell(r), + n = t._value._master, + i = this.getRow(n._row._number + o).getCell(n._column._number); + e.merge(i); + } + }); + } else this._rows[c + a - 1] = void 0; + for (c = 0; c < o; c++) { + const t = this.getRow(e + c); + t.style = {}, t.values = i[c]; + } + this.workbook.definedNames.spliceRows(this.name, e, t, o); + } + eachRow(e, t) { + if (t || (t = e, e = void 0), e && e.includeEmpty) { + const e = this._rows.length; + for (let r = 1; r <= e; r++) t(this.getRow(r), r); + } else this._rows.forEach(e => { + e && e.hasValues && t(e, e.number); + }); + } + getSheetValues() { + const e = []; + return this._rows.forEach(t => { + t && (e[t.number] = t.values); + }), e; + } + findCell(e, t) { + const r = i.getAddress(e, t), + n = this._rows[r.row - 1]; + return n ? n.findCell(r.col) : void 0; + } + getCell(e, t) { + const r = i.getAddress(e, t); + return this.getRow(r.row).getCellEx(r); + } + mergeCells() { + for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r]; + const n = new s(t); + this._mergeCellsInternal(n); + } + mergeCellsWithoutStyle() { + for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r]; + const n = new s(t); + this._mergeCellsInternal(n, !0); + } + _mergeCellsInternal(e, t) { + n.each(this._merges, t => { + if (t.intersects(e)) throw new Error("Cannot merge already merged cells"); + }); + const r = this.getCell(e.top, e.left); + for (let n = e.top; n <= e.bottom; n++) for (let i = e.left; i <= e.right; i++) (n > e.top || i > e.left) && this.getCell(n, i).merge(r, t); + this._merges[r.address] = e; + } + _unMergeMaster(e) { + const t = this._merges[e.address]; + if (t) { + for (let e = t.top; e <= t.bottom; e++) for (let r = t.left; r <= t.right; r++) this.getCell(e, r).unmerge(); + delete this._merges[e.address]; + } + } + get hasMerges() { + return n.some(this._merges, Boolean); + } + unMergeCells() { + for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++) t[r] = arguments[r]; + const n = new s(t); + for (let e = n.top; e <= n.bottom; e++) for (let t = n.left; t <= n.right; t++) { + const r = this.findCell(e, t); + r && (r.type === l.ValueType.Merge ? this._unMergeMaster(r.master) : this._merges[r.address] && this._unMergeMaster(r)); + } + } + fillFormula(e, t, r) { + let n = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "shared"; + const s = i.decode(e), + { + top: o, + left: a, + bottom: l, + right: c + } = s, + u = c - a + 1, + h = i.encodeAddress(o, a), + f = "shared" === n; + let d; + d = "function" == typeof r ? r : Array.isArray(r) ? Array.isArray(r[0]) ? (e, t) => r[e - o][t - a] : (e, t) => r[(e - o) * u + (t - a)] : () => {}; + let p = !0; + for (let r = o; r <= l; r++) for (let i = a; i <= c; i++) p ? (this.getCell(r, i).value = { + shareType: n, + formula: t, + ref: e, + result: d(r, i) + }, p = !1) : this.getCell(r, i).value = f ? { + sharedFormula: h, + result: d(r, i) + } : d(r, i); + } + addImage(e, t) { + const r = { + type: "image", + imageId: e, + range: t + }; + this._media.push(new c(this, r)); + } + getImages() { + return this._media.filter(e => "image" === e.type); + } + addBackgroundImage(e) { + const t = { + type: "background", + imageId: e + }; + this._media.push(new c(this, t)); + } + getBackgroundImageId() { + const e = this._media.find(e => "background" === e.type); + return e && e.imageId; + } + protect(e, t) { + return new Promise(r => { + this.sheetProtection = { + sheet: !0 + }, t && "spinCount" in t && (t.spinCount = Number.isFinite(t.spinCount) ? Math.round(Math.max(0, t.spinCount)) : 1e5), e && (this.sheetProtection.algorithmName = "SHA-512", this.sheetProtection.saltValue = f.randomBytes(16).toString("base64"), this.sheetProtection.spinCount = t && "spinCount" in t ? t.spinCount : 1e5, this.sheetProtection.hashValue = f.convertPasswordToHash(e, "SHA512", this.sheetProtection.saltValue, this.sheetProtection.spinCount)), t && (this.sheetProtection = Object.assign(this.sheetProtection, t), !e && "spinCount" in t && delete this.sheetProtection.spinCount), r(); + }); + } + unprotect() { + this.sheetProtection = null; + } + addTable(e) { + const t = new u(this, e); + return this.tables[e.name] = t, t; + } + getTable(e) { + return this.tables[e]; + } + removeTable(e) { + delete this.tables[e]; + } + getTables() { + return Object.values(this.tables); + } + addConditionalFormatting(e) { + this.conditionalFormattings.push(e); + } + removeConditionalFormatting(e) { + "number" == typeof e ? this.conditionalFormattings.splice(e, 1) : this.conditionalFormattings = e instanceof Function ? this.conditionalFormattings.filter(e) : []; + } + get tabColor() { + return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"), this.properties.tabColor; + } + set tabColor(e) { + console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"), this.properties.tabColor = e; + } + get model() { + const e = { + id: this.id, + name: this.name, + dataValidations: this.dataValidations.model, + properties: this.properties, + state: this.state, + pageSetup: this.pageSetup, + headerFooter: this.headerFooter, + rowBreaks: this.rowBreaks, + views: this.views, + autoFilter: this.autoFilter, + media: this._media.map(e => e.model), + sheetProtection: this.sheetProtection, + tables: Object.values(this.tables).map(e => e.model), + conditionalFormattings: this.conditionalFormattings + }; + e.cols = a.toModel(this.columns); + const t = e.rows = [], + r = e.dimensions = new s(); + return this._rows.forEach(e => { + const n = e && e.model; + n && (r.expand(n.number, n.min, n.number, n.max), t.push(n)); + }), e.merges = [], n.each(this._merges, t => { + e.merges.push(t.range); + }), e; + } + _parseRows(e) { + this._rows = [], e.rows.forEach(e => { + const t = new o(this, e.number); + this._rows[t.number - 1] = t, t.model = e; + }); + } + _parseMergeCells(e) { + n.each(e.mergeCells, e => { + this.mergeCellsWithoutStyle(e); + }); + } + set model(e) { + this.name = e.name, this._columns = a.fromModel(this, e.cols), this._parseRows(e), this._parseMergeCells(e), this.dataValidations = new h(e.dataValidations), this.properties = e.properties, this.pageSetup = e.pageSetup, this.headerFooter = e.headerFooter, this.views = e.views, this.autoFilter = e.autoFilter, this._media = e.media.map(e => new c(this, e)), this.sheetProtection = e.sheetProtection, this.tables = e.tables.reduce((e, t) => { + const r = new u(); + return r.model = t, e[t.name] = r, e; + }, {}), this.conditionalFormattings = e.conditionalFormattings; + } + }; + }, { + "../utils/col-cache": 19, + "../utils/copy-style": 20, + "../utils/encryptor": 21, + "../utils/under-dash": 26, + "./column": 4, + "./data-validations": 5, + "./enums": 7, + "./image": 8, + "./range": 10, + "./row": 11, + "./table": 12 + }], + 15: [function (e, t, r) { + "use strict"; + + e("core-js/modules/es.promise"), e("core-js/modules/es.promise.finally"), e("core-js/modules/es.object.assign"), e("core-js/modules/es.object.keys"), e("core-js/modules/es.object.values"), e("core-js/modules/es.symbol"), e("core-js/modules/es.symbol.async-iterator"), e("core-js/modules/es.array.iterator"), e("core-js/modules/es.array.includes"), e("core-js/modules/es.array.find-index"), e("core-js/modules/es.array.find"), e("core-js/modules/es.string.from-code-point"), e("core-js/modules/es.string.includes"), e("core-js/modules/es.number.is-nan"), e("regenerator-runtime/runtime"); + const n = { + Workbook: e("./doc/workbook") + }, + i = e("./doc/enums"); + Object.keys(i).forEach(e => { + n[e] = i[e]; + }), t.exports = n; + }, { + "./doc/enums": 7, + "./doc/workbook": 13, + "core-js/modules/es.array.find": 359, + "core-js/modules/es.array.find-index": 358, + "core-js/modules/es.array.includes": 360, + "core-js/modules/es.array.iterator": 361, + "core-js/modules/es.number.is-nan": 363, + "core-js/modules/es.object.assign": 364, + "core-js/modules/es.object.keys": 366, + "core-js/modules/es.object.values": 367, + "core-js/modules/es.promise": 372, + "core-js/modules/es.promise.finally": 371, + "core-js/modules/es.string.from-code-point": 376, + "core-js/modules/es.string.includes": 377, + "core-js/modules/es.symbol": 381, + "core-js/modules/es.symbol.async-iterator": 378, + "regenerator-runtime/runtime": 492 + }], + 16: [function (e, t, r) { + "use strict"; + + const n = "undefined" == typeof TextDecoder ? null : new TextDecoder("utf-8"); + r.bufferToString = function (e) { + return "string" == typeof e ? e : n ? n.decode(e) : e.toString(); + }; + }, {}], + 17: [function (e, t, r) { + "use strict"; + + const n = "undefined" == typeof TextEncoder ? null : new TextEncoder("utf-8"), + { + Buffer: i + } = e("buffer"); + r.stringToBuffer = function (e) { + return "string" != typeof e ? e : n ? i.from(n.encode(e).buffer) : i.from(e); + }; + }, { + buffer: 220 + }], + 18: [function (e, t, r) { + "use strict"; + + const n = e("./under-dash"), + i = e("./col-cache"); + t.exports = class { + constructor(e) { + this.template = e, this.sheets = {}; + } + addCell(e) { + this.addCellEx(i.decodeEx(e)); + } + getCell(e) { + return this.findCellEx(i.decodeEx(e), !0); + } + findCell(e) { + return this.findCellEx(i.decodeEx(e), !1); + } + findCellAt(e, t, r) { + const n = this.sheets[e], + i = n && n[t]; + return i && i[r]; + } + addCellEx(e) { + if (e.top) for (let t = e.top; t <= e.bottom; t++) for (let r = e.left; r <= e.right; r++) this.getCellAt(e.sheetName, t, r);else this.findCellEx(e, !0); + } + getCellEx(e) { + return this.findCellEx(e, !0); + } + findCellEx(e, t) { + const r = this.findSheet(e, t), + n = this.findSheetRow(r, e, t); + return this.findRowCell(n, e, t); + } + getCellAt(e, t, r) { + const n = this.sheets[e] || (this.sheets[e] = []), + s = n[t] || (n[t] = []); + return s[r] || (s[r] = { + sheetName: e, + address: i.n2l(r) + t, + row: t, + col: r + }); + } + removeCellEx(e) { + const t = this.findSheet(e); + if (!t) return; + const r = this.findSheetRow(t, e); + r && delete r[e.col]; + } + forEachInSheet(e, t) { + const r = this.sheets[e]; + r && r.forEach((e, r) => { + e && e.forEach((e, n) => { + e && t(e, r, n); + }); + }); + } + forEach(e) { + n.each(this.sheets, (t, r) => { + this.forEachInSheet(r, e); + }); + } + map(e) { + const t = []; + return this.forEach(r => { + t.push(e(r)); + }), t; + } + findSheet(e, t) { + const r = e.sheetName; + return this.sheets[r] ? this.sheets[r] : t ? this.sheets[r] = [] : void 0; + } + findSheetRow(e, t, r) { + const { + row: n + } = t; + return e && e[n] ? e[n] : r ? e[n] = [] : void 0; + } + findRowCell(e, t, r) { + const { + col: n + } = t; + return e && e[n] ? e[n] : r ? e[n] = this.template ? Object.assign(t, JSON.parse(JSON.stringify(this.template))) : t : void 0; + } + spliceRows(e, t, r, n) { + const i = this.sheets[e]; + if (i) { + const e = []; + for (let t = 0; t < n; t++) e.push([]); + i.splice(t, r, ...e); + } + } + spliceColumns(e, t, r, i) { + const s = this.sheets[e]; + if (s) { + const e = []; + for (let t = 0; t < i; t++) e.push(null); + n.each(s, n => { + n.splice(t, r, ...e); + }); + } + } + }; + }, { + "./col-cache": 19, + "./under-dash": 26 + }], + 19: [function (e, t, r) { + "use strict"; + + const n = /^[A-Z]+\d+$/, + i = { + _dictionary: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"], + _l2nFill: 0, + _l2n: {}, + _n2l: [], + _level: e => e <= 26 ? 1 : e <= 676 ? 2 : 3, + _fill(e) { + let t, + r, + n, + i, + s, + o = 1; + if (e >= 4) throw new Error("Out of bounds. Excel supports columns from 1 to 16384"); + if (this._l2nFill < 1 && e >= 1) { + for (; o <= 26;) t = this._dictionary[o - 1], this._n2l[o] = t, this._l2n[t] = o, o++; + this._l2nFill = 1; + } + if (this._l2nFill < 2 && e >= 2) { + for (o = 27; o <= 702;) r = o - 27, n = r % 26, i = Math.floor(r / 26), t = this._dictionary[i] + this._dictionary[n], this._n2l[o] = t, this._l2n[t] = o, o++; + this._l2nFill = 2; + } + if (this._l2nFill < 3 && e >= 3) { + for (o = 703; o <= 16384;) r = o - 703, n = r % 26, i = Math.floor(r / 26) % 26, s = Math.floor(r / 676), t = this._dictionary[s] + this._dictionary[i] + this._dictionary[n], this._n2l[o] = t, this._l2n[t] = o, o++; + this._l2nFill = 3; + } + }, + l2n(e) { + if (this._l2n[e] || this._fill(e.length), !this._l2n[e]) throw new Error("Out of bounds. Invalid column letter: " + e); + return this._l2n[e]; + }, + n2l(e) { + if (e < 1 || e > 16384) throw new Error(e + " is out of bounds. Excel supports columns from 1 to 16384"); + return this._n2l[e] || this._fill(this._level(e)), this._n2l[e]; + }, + _hash: {}, + validateAddress(e) { + if (!n.test(e)) throw new Error("Invalid Address: " + e); + return !0; + }, + decodeAddress(e) { + const t = e.length < 5 && this._hash[e]; + if (t) return t; + let r = !1, + n = "", + i = 0, + s = !1, + o = "", + a = 0; + for (let t, l = 0; l < e.length; l++) if (t = e.charCodeAt(l), !s && t >= 65 && t <= 90) r = !0, n += e[l], i = 26 * i + t - 64;else if (t >= 48 && t <= 57) s = !0, o += e[l], a = 10 * a + t - 48;else if (s && r && 36 !== t) break; + if (r) { + if (i > 16384) throw new Error("Out of bounds. Invalid column letter: " + n); + } else i = void 0; + s || (a = void 0); + const l = { + address: e = n + o, + col: i, + row: a, + $col$row: `$${n}$${o}` + }; + return i <= 100 && a <= 100 && (this._hash[e] = l, this._hash[l.$col$row] = l), l; + }, + getAddress(e, t) { + if (t) { + const r = this.n2l(t) + e; + return this.decodeAddress(r); + } + return this.decodeAddress(e); + }, + decode(e) { + const t = e.split(":"); + if (2 === t.length) { + const e = this.decodeAddress(t[0]), + r = this.decodeAddress(t[1]), + n = { + top: Math.min(e.row, r.row), + left: Math.min(e.col, r.col), + bottom: Math.max(e.row, r.row), + right: Math.max(e.col, r.col) + }; + return n.tl = this.n2l(n.left) + n.top, n.br = this.n2l(n.right) + n.bottom, n.dimensions = `${n.tl}:${n.br}`, n; + } + return this.decodeAddress(e); + }, + decodeEx(e) { + const t = e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/), + r = t[1] || t[2], + n = t[3], + i = n.split(":"); + if (i.length > 1) { + let e = this.decodeAddress(i[0]), + t = this.decodeAddress(i[1]); + const n = Math.min(e.row, t.row), + s = Math.min(e.col, t.col), + o = Math.max(e.row, t.row), + a = Math.max(e.col, t.col); + return e = this.n2l(s) + n, t = this.n2l(a) + o, { + top: n, + left: s, + bottom: o, + right: a, + sheetName: r, + tl: { + address: e, + col: s, + row: n, + $col$row: `$${this.n2l(s)}$${n}`, + sheetName: r + }, + br: { + address: t, + col: a, + row: o, + $col$row: `$${this.n2l(a)}$${o}`, + sheetName: r + }, + dimensions: `${e}:${t}` + }; + } + if (n.startsWith("#")) return r ? { + sheetName: r, + error: n + } : { + error: n + }; + const s = this.decodeAddress(n); + return r ? { + sheetName: r, + ...s + } : s; + }, + encodeAddress: (e, t) => i.n2l(t) + e, + encode() { + switch (arguments.length) { + case 2: + return i.encodeAddress(arguments[0], arguments[1]); + case 4: + return `${i.encodeAddress(arguments[0], arguments[1])}:${i.encodeAddress(arguments[2], arguments[3])}`; + default: + throw new Error("Can only encode with 2 or 4 arguments"); + } + }, + inRange(e, t) { + const [r, n,, i, s] = e, + [o, a] = t; + return o >= r && o <= i && a >= n && a <= s; + } + }; + t.exports = i; + }, {}], + 20: [function (e, t, r) { + "use strict"; + + const n = (e, t) => ({ + ...e, + ...t.reduce((t, r) => (e[r] && (t[r] = { + ...e[r] + }), t), {}) + }), + i = function (e, t, r) { + let i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : []; + e[r] && (t[r] = n(e[r], i)); + }; + r.copyStyle = e => { + if (!e) return e; + if (t = e, 0 === Object.keys(t).length) return {}; + var t; + const r = { + ...e + }; + return i(e, r, "font", ["color"]), i(e, r, "alignment"), i(e, r, "protection"), e.border && (i(e, r, "border"), i(e.border, r.border, "top", ["color"]), i(e.border, r.border, "left", ["color"]), i(e.border, r.border, "bottom", ["color"]), i(e.border, r.border, "right", ["color"]), i(e.border, r.border, "diagonal", ["color"])), e.fill && (i(e, r, "fill", ["fgColor", "bgColor", "center"]), e.fill.stops && (r.fill.stops = e.fill.stops.map(e => n(e, ["color"])))), r; + }; + }, {}], + 21: [function (e, t, r) { + (function (r) { + (function () { + "use strict"; + + const n = e("crypto"), + i = { + hash(e) { + const t = n.createHash(e); + for (var i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), o = 1; o < i; o++) s[o - 1] = arguments[o]; + return t.update(r.concat(s)), t.digest(); + }, + convertPasswordToHash(e, t, i, s) { + t = t.toLowerCase(); + if (n.getHashes().indexOf(t) < 0) throw new Error(`Hash algorithm '${t}' not supported!`); + const o = r.from(e, "utf16le"); + let a = this.hash(t, r.from(i, "base64"), o); + for (let e = 0; e < s; e++) { + const n = r.alloc(4); + n.writeUInt32LE(e, 0), a = this.hash(t, a, n); + } + return a.toString("base64"); + }, + randomBytes: e => n.randomBytes(e) + }; + t.exports = i; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + buffer: 220, + crypto: 390 + }], + 22: [function (e, t, r) { + "use strict"; + + const { + SaxesParser: n + } = e("saxes"), + { + PassThrough: i + } = e("readable-stream"), + { + bufferToString: s + } = e("./browser-buffer-decode"); + t.exports = /*#__PURE__*/function () { + var _ref = _wrapAsyncGenerator(function* (e) { + e.pipe && !e[Symbol.asyncIterator] && (e = e.pipe(new i())); + const t = new n(); + let r; + t.on("error", e => { + r = e; + }); + let o = []; + t.on("opentag", e => o.push({ + eventType: "opentag", + value: e + })), t.on("text", e => o.push({ + eventType: "text", + value: e + })), t.on("closetag", e => o.push({ + eventType: "closetag", + value: e + })); + var _iteratorAbruptCompletion = false; + var _didIteratorError = false; + var _iteratorError; + try { + for (var _iterator = _asyncIterator(e), _step; _iteratorAbruptCompletion = !(_step = yield _awaitAsyncGenerator(_iterator.next())).done; _iteratorAbruptCompletion = false) { + const n = _step.value; + { + if (t.write(s(n)), r) throw r; + yield o, o = []; + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (_iteratorAbruptCompletion && _iterator.return != null) { + yield _awaitAsyncGenerator(_iterator.return()); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + }); + return function (_x) { + return _ref.apply(this, arguments); + }; + }(); + }, { + "./browser-buffer-decode": 16, + "readable-stream": 491, + saxes: 496 + }], + 23: [function (e, t, r) { + "use strict"; + + const n = e("./col-cache"), + i = /(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi, + s = /^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i; + t.exports = { + slideFormula: function (e, t, r) { + const o = n.decode(t), + a = n.decode(r); + return e.replace(i, (e, t, r, i, l) => { + if (l) return e; + const c = s.exec(i); + if (c) { + const r = c[1], + i = c[2].toUpperCase(), + s = c[3], + l = c[4]; + if (i.length > 3 || 3 === i.length && i > "XFD") return e; + let u = n.l2n(i), + h = parseInt(l, 10); + r || (u += a.col - o.col), s || (h += a.row - o.row); + return (t || "") + (r || "") + n.n2l(u) + (s || "") + h; + } + return e; + }); + } + }; + }, { + "./col-cache": 19 + }], + 24: [function (e, t, r) { + (function (r, n) { + (function () { + "use strict"; + + const i = e("readable-stream"), + s = e("./utils"), + o = e("./string-buf"); + class a { + constructor(e, t) { + this._data = e, this._encoding = t; + } + get length() { + return this.toBuffer().length; + } + copy(e, t, r, n) { + return this.toBuffer().copy(e, t, r, n); + } + toBuffer() { + return this._buffer || (this._buffer = n.from(this._data, this._encoding)), this._buffer; + } + } + class l { + constructor(e) { + this._data = e; + } + get length() { + return this._data.length; + } + copy(e, t, r, n) { + return this._data._buf.copy(e, t, r, n); + } + toBuffer() { + return this._data.toBuffer(); + } + } + class c { + constructor(e) { + this._data = e; + } + get length() { + return this._data.length; + } + copy(e, t, r, n) { + this._data.copy(e, t, r, n); + } + toBuffer() { + return this._data; + } + } + class u { + constructor(e) { + this.size = e, this.buffer = n.alloc(e), this.iRead = 0, this.iWrite = 0; + } + toBuffer() { + if (0 === this.iRead && this.iWrite === this.size) return this.buffer; + const e = n.alloc(this.iWrite - this.iRead); + return this.buffer.copy(e, 0, this.iRead, this.iWrite), e; + } + get length() { + return this.iWrite - this.iRead; + } + get eod() { + return this.iRead === this.iWrite; + } + get full() { + return this.iWrite === this.size; + } + read(e) { + let t; + return 0 === e ? null : void 0 === e || e >= this.length ? (t = this.toBuffer(), this.iRead = this.iWrite, t) : (t = n.alloc(e), this.buffer.copy(t, 0, this.iRead, e), this.iRead += e, t); + } + write(e, t, r) { + const n = Math.min(r, this.size - this.iWrite); + return e.copy(this.buffer, this.iWrite, t, t + n), this.iWrite += n, n; + } + } + const h = function (e) { + e = e || {}, this.bufSize = e.bufSize || 1048576, this.buffers = [], this.batch = e.batch || !1, this.corked = !1, this.inPos = 0, this.outPos = 0, this.pipes = [], this.paused = !1, this.encoding = null; + }; + s.inherits(h, i.Duplex, { + toBuffer() { + switch (this.buffers.length) { + case 0: + return null; + case 1: + return this.buffers[0].toBuffer(); + default: + return n.concat(this.buffers.map(e => e.toBuffer())); + } + }, + _getWritableBuffer() { + if (this.buffers.length) { + const e = this.buffers[this.buffers.length - 1]; + if (!e.full) return e; + } + const e = new u(this.bufSize); + return this.buffers.push(e), e; + }, + _pipe(e) { + var _this3 = this; + return _asyncToGenerator(function* () { + yield Promise.all(_this3.pipes.map(function (t) { + return new Promise(r => { + t.write(e.toBuffer(), () => { + r(); + }); + }); + })); + })(); + }, + _writeToBuffers(e) { + let t = 0; + const r = e.length; + for (; t < r;) { + t += this._getWritableBuffer().write(e, t, r - t); + } + }, + write(e, t, i) { + var _this4 = this; + return _asyncToGenerator(function* () { + let u; + if (t instanceof Function && (i = t, t = "utf8"), i = i || s.nop, e instanceof o) u = new l(e);else if (e instanceof n) u = new c(e);else { + if (!("string" == typeof e || e instanceof String || e instanceof ArrayBuffer)) throw new Error("Chunk must be one of type String, Buffer or StringBuf."); + u = new a(e, t); + } + if (_this4.pipes.length) { + if (_this4.batch) for (_this4._writeToBuffers(u); !_this4.corked && _this4.buffers.length > 1;) _this4._pipe(_this4.buffers.shift());else _this4.corked ? (_this4._writeToBuffers(u), r.nextTick(i)) : (yield _this4._pipe(u), i()); + } else _this4.paused || _this4.emit("data", u.toBuffer()), _this4._writeToBuffers(u), _this4.emit("readable"); + return !0; + })(); + }, + cork() { + this.corked = !0; + }, + _flush() { + if (this.pipes.length) for (; this.buffers.length;) this._pipe(this.buffers.shift()); + }, + uncork() { + this.corked = !1, this._flush(); + }, + end(e, t, r) { + const n = e => { + e ? r(e) : (this._flush(), this.pipes.forEach(e => { + e.end(); + }), this.emit("finish")); + }; + e ? this.write(e, t, n) : n(); + }, + read(e) { + let t; + if (e) { + for (t = []; e && this.buffers.length && !this.buffers[0].eod;) { + const r = this.buffers[0], + n = r.read(e); + e -= n.length, t.push(n), r.eod && r.full && this.buffers.shift(); + } + return n.concat(t); + } + return t = this.buffers.map(e => e.toBuffer()).filter(Boolean), this.buffers = [], n.concat(t); + }, + setEncoding(e) { + this.encoding = e; + }, + pause() { + this.paused = !0; + }, + resume() { + this.paused = !1; + }, + isPaused() { + return !!this.paused; + }, + pipe(e) { + this.pipes.push(e), !this.paused && this.buffers.length && this.end(); + }, + unpipe(e) { + this.pipes = this.pipes.filter(t => t !== e); + }, + unshift() { + throw new Error("Not Implemented"); + }, + wrap() { + throw new Error("Not Implemented"); + } + }), t.exports = h; + }).call(this); + }).call(this, e("_process"), e("buffer").Buffer); + }, { + "./string-buf": 25, + "./utils": 27, + _process: 467, + buffer: 220, + "readable-stream": 491 + }], + 25: [function (e, t, r) { + (function (e) { + (function () { + "use strict"; + + t.exports = class { + constructor(t) { + this._buf = e.alloc(t && t.size || 16384), this._encoding = t && t.encoding || "utf8", this._inPos = 0, this._buffer = void 0; + } + get length() { + return this._inPos; + } + get capacity() { + return this._buf.length; + } + get buffer() { + return this._buf; + } + toBuffer() { + return this._buffer || (this._buffer = e.alloc(this.length), this._buf.copy(this._buffer, 0, 0, this.length)), this._buffer; + } + reset(e) { + e = e || 0, this._buffer = void 0, this._inPos = e; + } + _grow(t) { + let r = 2 * this._buf.length; + for (; r < t;) r *= 2; + const n = e.alloc(r); + this._buf.copy(n, 0), this._buf = n; + } + addText(e) { + this._buffer = void 0; + let t = this._inPos + this._buf.write(e, this._inPos, this._encoding); + for (; t >= this._buf.length - 4;) this._grow(this._inPos + e.length), t = this._inPos + this._buf.write(e, this._inPos, this._encoding); + this._inPos = t; + } + addStringBuf(e) { + e.length && (this._buffer = void 0, this.length + e.length > this.capacity && this._grow(this.length + e.length), e._buf.copy(this._buf, this._inPos, 0, e.length), this._inPos += e.length); + } + }; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + buffer: 220 + }], + 26: [function (e, t, r) { + "use strict"; + + const { + toString: n + } = Object.prototype, + i = /["&<>]/, + s = { + each: function (e, t) { + e && (Array.isArray(e) ? e.forEach(t) : Object.keys(e).forEach(r => { + t(e[r], r); + })); + }, + some: function (e, t) { + return !!e && (Array.isArray(e) ? e.some(t) : Object.keys(e).some(r => t(e[r], r))); + }, + every: function (e, t) { + return !e || (Array.isArray(e) ? e.every(t) : Object.keys(e).every(r => t(e[r], r))); + }, + map: function (e, t) { + return e ? Array.isArray(e) ? e.map(t) : Object.keys(e).map(r => t(e[r], r)) : []; + }, + keyBy: (e, t) => e.reduce((e, r) => (e[r[t]] = r, e), {}), + isEqual: function (e, t) { + const r = typeof e, + n = typeof t, + i = Array.isArray(e), + o = Array.isArray(t); + let a; + if (r !== n) return !1; + switch (typeof e) { + case "object": + if (i || o) return !(!i || !o) && e.length === t.length && e.every((e, r) => { + const n = t[r]; + return s.isEqual(e, n); + }); + if (null === e || null === t) return e === t; + if (a = Object.keys(e), Object.keys(t).length !== a.length) return !1; + for (const e of a) if (!t.hasOwnProperty(e)) return !1; + return s.every(e, (e, r) => { + const n = t[r]; + return s.isEqual(e, n); + }); + default: + return e === t; + } + }, + escapeHtml(e) { + const t = i.exec(e); + if (!t) return e; + let r = "", + n = "", + s = 0, + o = t.index; + for (; o < e.length; o++) { + switch (e.charAt(o)) { + case '"': + n = """; + break; + case "&": + n = "&"; + break; + case "'": + n = "'"; + break; + case "<": + n = "<"; + break; + case ">": + n = ">"; + break; + default: + continue; + } + s !== o && (r += e.substring(s, o)), s = o + 1, r += n; + } + return s !== o ? r + e.substring(s, o) : r; + }, + strcmp: (e, t) => e < t ? -1 : e > t ? 1 : 0, + isUndefined: e => "[object Undefined]" === n.call(e), + isObject: e => "[object Object]" === n.call(e), + deepMerge() { + const e = arguments[0] || {}, + { + length: t + } = arguments; + let r, n, i; + function o(t, o) { + r = e[o], i = Array.isArray(t), s.isObject(t) || i ? (i ? (i = !1, n = r && Array.isArray(r) ? r : []) : n = r && s.isObject(r) ? r : {}, e[o] = s.deepMerge(n, t)) : s.isUndefined(t) || (e[o] = t); + } + for (let e = 0; e < t; e++) s.each(arguments[e], o); + return e; + } + }; + t.exports = s; + }, {}], + 27: [function (e, t, r) { + (function (r, n) { + (function () { + "use strict"; + + const i = e("fs"), + s = /[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/, + o = { + nop() {}, + promiseImmediate: e => new Promise(t => { + r.setImmediate ? n(() => { + t(e); + }) : setTimeout(() => { + t(e); + }, 1); + }), + inherits: function (e, t, r, n) { + e.super_ = t, n || (n = r, r = null), r && Object.keys(r).forEach(t => { + Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t)); + }); + const i = { + constructor: { + value: e, + enumerable: !1, + writable: !1, + configurable: !0 + } + }; + n && Object.keys(n).forEach(e => { + i[e] = Object.getOwnPropertyDescriptor(n, e); + }), e.prototype = Object.create(t.prototype, i); + }, + dateToExcel: (e, t) => 25569 + e.getTime() / 864e5 - (t ? 1462 : 0), + excelToDate(e, t) { + const r = Math.round(24 * (e - 25569 + (t ? 1462 : 0)) * 3600 * 1e3); + return new Date(r); + }, + parsePath(e) { + const t = e.lastIndexOf("/"); + return { + path: e.substring(0, t), + name: e.substring(t + 1) + }; + }, + getRelsPath(e) { + const t = o.parsePath(e); + return `${t.path}/_rels/${t.name}.rels`; + }, + xmlEncode(e) { + const t = s.exec(e); + if (!t) return e; + let r = "", + n = "", + i = 0, + o = t.index; + for (; o < e.length; o++) { + const t = e.charCodeAt(o); + switch (t) { + case 34: + n = """; + break; + case 38: + n = "&"; + break; + case 39: + n = "'"; + break; + case 60: + n = "<"; + break; + case 62: + n = ">"; + break; + case 127: + n = ""; + break; + default: + if (t <= 31 && (t <= 8 || t >= 11 && 13 !== t)) { + n = ""; + break; + } + continue; + } + i !== o && (r += e.substring(i, o)), i = o + 1, n && (r += n); + } + return i !== o ? r + e.substring(i, o) : r; + }, + xmlDecode: e => e.replace(/&([a-z]*);/g, e => { + switch (e) { + case "<": + return "<"; + case ">": + return ">"; + case "&": + return "&"; + case "'": + return "'"; + case """: + return '"'; + default: + return e; + } + }), + validInt(e) { + const t = parseInt(e, 10); + return Number.isNaN(t) ? 0 : t; + }, + isDateFmt(e) { + if (!e) return !1; + return null !== (e = (e = e.replace(/\[[^\]]*]/g, "")).replace(/"[^"]*"/g, "")).match(/[ymdhMsb]+/); + }, + fs: { + exists: e => new Promise(t => { + i.access(e, i.constants.F_OK, e => { + t(!e); + }); + }) + }, + toIsoDateString: e => e.toIsoString().subsstr(0, 10), + parseBoolean: e => !0 === e || "true" === e || 1 === e || "1" === e + }; + t.exports = o; + }).call(this); + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}, e("timers").setImmediate); + }, { + fs: 216, + timers: 523 + }], + 28: [function (e, t, r) { + "use strict"; + + const n = e("./under-dash"), + i = e("./utils"); + function s(e, t, r) { + e.push(` ${t}="${i.xmlEncode(r.toString())}"`); + } + function o(e, t) { + if (t) { + const r = []; + n.each(t, (e, t) => { + void 0 !== e && s(r, t, e); + }), e.push(r.join("")); + } + } + class a { + constructor() { + this._xml = [], this._stack = [], this._rollbacks = []; + } + get tos() { + return this._stack.length ? this._stack[this._stack.length - 1] : void 0; + } + get cursor() { + return this._xml.length; + } + openXml(e) { + const t = this._xml; + t.push("\n"); + } + openNode(e, t) { + const r = this.tos, + n = this._xml; + r && this.open && n.push(">"), this._stack.push(e), n.push("<"), n.push(e), o(n, t), this.leaf = !0, this.open = !0; + } + addAttribute(e, t) { + if (!this.open) throw new Error("Cannot write attributes to node if it is not open"); + void 0 !== t && s(this._xml, e, t); + } + addAttributes(e) { + if (!this.open) throw new Error("Cannot write attributes to node if it is not open"); + o(this._xml, e); + } + writeText(e) { + const t = this._xml; + this.open && (t.push(">"), this.open = !1), this.leaf = !1, t.push(i.xmlEncode(e.toString())); + } + writeXml(e) { + this.open && (this._xml.push(">"), this.open = !1), this.leaf = !1, this._xml.push(e); + } + closeNode() { + const e = this._stack.pop(), + t = this._xml; + this.leaf ? t.push("/>") : (t.push("")), this.open = !1, this.leaf = !1; + } + leafNode(e, t, r) { + this.openNode(e, t), void 0 !== r && this.writeText(r), this.closeNode(); + } + closeAll() { + for (; this._stack.length;) this.closeNode(); + } + addRollback() { + return this._rollbacks.push({ + xml: this._xml.length, + stack: this._stack.length, + leaf: this.leaf, + open: this.open + }), this.cursor; + } + commit() { + this._rollbacks.pop(); + } + rollback() { + const e = this._rollbacks.pop(); + this._xml.length > e.xml && this._xml.splice(e.xml, this._xml.length - e.xml), this._stack.length > e.stack && this._stack.splice(e.stack, this._stack.length - e.stack), this.leaf = e.leaf, this.open = e.open; + } + get xml() { + return this.closeAll(), this._xml.join(""); + } + } + a.StdDocAttributes = { + version: "1.0", + encoding: "UTF-8", + standalone: "yes" + }, t.exports = a; + }, { + "./under-dash": 26, + "./utils": 27 + }], + 29: [function (e, t, r) { + (function (r) { + (function () { + "use strict"; + + const n = e("events"), + i = e("jszip"), + s = e("./stream-buf"), + { + stringToBuffer: o + } = e("./browser-buffer-encode"); + class a extends n.EventEmitter { + constructor(e) { + super(), this.options = Object.assign({ + type: "nodebuffer", + compression: "DEFLATE" + }, e), this.zip = new i(), this.stream = new s(); + } + append(e, t) { + t.hasOwnProperty("base64") && t.base64 ? this.zip.file(t.name, e, { + base64: !0 + }) : (r.browser && "string" == typeof e && (e = o(e)), this.zip.file(t.name, e)); + } + finalize() { + var _this5 = this; + return _asyncToGenerator(function* () { + const e = yield _this5.zip.generateAsync(_this5.options); + _this5.stream.end(e), _this5.emit("finish"); + })(); + } + read(e) { + return this.stream.read(e); + } + setEncoding(e) { + return this.stream.setEncoding(e); + } + pause() { + return this.stream.pause(); + } + resume() { + return this.stream.resume(); + } + isPaused() { + return this.stream.isPaused(); + } + pipe(e, t) { + return this.stream.pipe(e, t); + } + unpipe(e) { + return this.stream.unpipe(e); + } + unshift(e) { + return this.stream.unshift(e); + } + wrap(e) { + return this.stream.wrap(e); + } + } + t.exports = { + ZipWriter: a + }; + }).call(this); + }).call(this, e("_process")); + }, { + "./browser-buffer-encode": 17, + "./stream-buf": 24, + _process: 467, + events: 422, + jszip: 441 + }], + 30: [function (e, t, r) { + "use strict"; + + t.exports = { + 0: { + f: "General" + }, + 1: { + f: "0" + }, + 2: { + f: "0.00" + }, + 3: { + f: "#,##0" + }, + 4: { + f: "#,##0.00" + }, + 9: { + f: "0%" + }, + 10: { + f: "0.00%" + }, + 11: { + f: "0.00E+00" + }, + 12: { + f: "# ?/?" + }, + 13: { + f: "# ??/??" + }, + 14: { + f: "mm-dd-yy" + }, + 15: { + f: "d-mmm-yy" + }, + 16: { + f: "d-mmm" + }, + 17: { + f: "mmm-yy" + }, + 18: { + f: "h:mm AM/PM" + }, + 19: { + f: "h:mm:ss AM/PM" + }, + 20: { + f: "h:mm" + }, + 21: { + f: "h:mm:ss" + }, + 22: { + f: 'm/d/yy "h":mm' + }, + 27: { + "zh-tw": "[$-404]e/m/d", + "zh-cn": 'yyyy"\u5e74"m"\u6708"', + "ja-jp": "[$-411]ge.m.d", + "ko-kr": 'yyyy"\u5e74" mm"\u6708" dd"\u65e5"' + }, + 28: { + "zh-tw": '[$-404]e"\u5e74"m"\u6708"d"\u65e5"', + "zh-cn": 'm"\u6708"d"\u65e5"', + "ja-jp": '[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"', + "ko-kr": "mm-dd" + }, + 29: { + "zh-tw": '[$-404]e"\u5e74"m"\u6708"d"\u65e5"', + "zh-cn": 'm"\u6708"d"\u65e5"', + "ja-jp": '[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"', + "ko-kr": "mm-dd" + }, + 30: { + "zh-tw": "m/d/yy ", + "zh-cn": "m-d-yy", + "ja-jp": "m/d/yy", + "ko-kr": "mm-dd-yy" + }, + 31: { + "zh-tw": 'yyyy"\u5e74"m"\u6708"d"\u65e5"', + "zh-cn": 'yyyy"\u5e74"m"\u6708"d"\u65e5"', + "ja-jp": 'yyyy"\u5e74"m"\u6708"d"\u65e5"', + "ko-kr": 'yyyy"\ub144" mm"\uc6d4" dd"\uc77c"' + }, + 32: { + "zh-tw": 'hh"\u6642"mm"\u5206"', + "zh-cn": 'h"\u65f6"mm"\u5206"', + "ja-jp": 'h"\u6642"mm"\u5206"', + "ko-kr": 'h"\uc2dc" mm"\ubd84"' + }, + 33: { + "zh-tw": 'hh"\u6642"mm"\u5206"ss"\u79d2"', + "zh-cn": 'h"\u65f6"mm"\u5206"ss"\u79d2"', + "ja-jp": 'h"\u6642"mm"\u5206"ss"\u79d2"', + "ko-kr": 'h"\uc2dc" mm"\ubd84" ss"\ucd08"' + }, + 34: { + "zh-tw": '\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"', + "zh-cn": '\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"', + "ja-jp": 'yyyy"\u5e74"m"\u6708"', + "ko-kr": "yyyy-mm-dd" + }, + 35: { + "zh-tw": '\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"', + "zh-cn": '\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"ss"\u79d2"', + "ja-jp": 'm"\u6708"d"\u65e5"', + "ko-kr": "yyyy-mm-dd" + }, + 36: { + "zh-tw": "[$-404]e/m/d", + "zh-cn": 'yyyy"\u5e74"m"\u6708"', + "ja-jp": "[$-411]ge.m.d", + "ko-kr": 'yyyy"\u5e74" mm"\u6708" dd"\u65e5"' + }, + 37: { + f: "#,##0 ;(#,##0)" + }, + 38: { + f: "#,##0 ;[Red](#,##0)" + }, + 39: { + f: "#,##0.00 ;(#,##0.00)" + }, + 40: { + f: "#,##0.00 ;[Red](#,##0.00)" + }, + 45: { + f: "mm:ss" + }, + 46: { + f: "[h]:mm:ss" + }, + 47: { + f: "mmss.0" + }, + 48: { + f: "##0.0E+0" + }, + 49: { + f: "@" + }, + 50: { + "zh-tw": "[$-404]e/m/d", + "zh-cn": 'yyyy"\u5e74"m"\u6708"', + "ja-jp": "[$-411]ge.m.d", + "ko-kr": 'yyyy"\u5e74" mm"\u6708" dd"\u65e5"' + }, + 51: { + "zh-tw": '[$-404]e"\u5e74"m"\u6708"d"\u65e5"', + "zh-cn": 'm"\u6708"d"\u65e5"', + "ja-jp": '[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"', + "ko-kr": "mm-dd" + }, + 52: { + "zh-tw": '\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"', + "zh-cn": 'yyyy"\u5e74"m"\u6708"', + "ja-jp": 'yyyy"\u5e74"m"\u6708"', + "ko-kr": "yyyy-mm-dd" + }, + 53: { + "zh-tw": '\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"', + "zh-cn": 'm"\u6708"d"\u65e5"', + "ja-jp": 'm"\u6708"d"\u65e5"', + "ko-kr": "yyyy-mm-dd" + }, + 54: { + "zh-tw": '[$-404]e"\u5e74"m"\u6708"d"\u65e5"', + "zh-cn": 'm"\u6708"d"\u65e5"', + "ja-jp": '[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"', + "ko-kr": "mm-dd" + }, + 55: { + "zh-tw": '\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"', + "zh-cn": '\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"', + "ja-jp": 'yyyy"\u5e74"m"\u6708"', + "ko-kr": "yyyy-mm-dd" + }, + 56: { + "zh-tw": '\u4e0a\u5348/\u4e0b\u5348 hh"\u6642"mm"\u5206"ss"\u79d2"', + "zh-cn": '\u4e0a\u5348/\u4e0b\u5348 h"\u65f6"mm"\u5206"ss"\u79d2"', + "ja-jp": 'm"\u6708"d"\u65e5"', + "ko-kr": "yyyy-mm-dd" + }, + 57: { + "zh-tw": "[$-404]e/m/d", + "zh-cn": 'yyyy"\u5e74"m"\u6708"', + "ja-jp": "[$-411]ge.m.d", + "ko-kr": 'yyyy"\u5e74" mm"\u6708" dd"\u65e5"' + }, + 58: { + "zh-tw": '[$-404]e"\u5e74"m"\u6708"d"\u65e5"', + "zh-cn": 'm"\u6708"d"\u65e5"', + "ja-jp": '[$-411]ggge"\u5e74"m"\u6708"d"\u65e5"', + "ko-kr": "mm-dd" + }, + 59: { + "th-th": "t0" + }, + 60: { + "th-th": "t0.00" + }, + 61: { + "th-th": "t#,##0" + }, + 62: { + "th-th": "t#,##0.00" + }, + 67: { + "th-th": "t0%" + }, + 68: { + "th-th": "t0.00%" + }, + 69: { + "th-th": "t# ?/?" + }, + 70: { + "th-th": "t# ??/??" + }, + 81: { + "th-th": "d/m/bb" + } + }; + }, {}], + 31: [function (e, t, r) { + "use strict"; + + t.exports = { + OfficeDocument: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", + Worksheet: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet", + CalcChain: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain", + SharedStrings: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings", + Styles: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", + Theme: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", + Hyperlink: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink", + Image: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", + CoreProperties: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", + ExtenderProperties: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", + Comments: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments", + VmlDrawing: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing", + Table: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table" + }; + }, {}], + 32: [function (e, t, r) { + "use strict"; + + const n = e("../../utils/parse-sax"), + i = e("../../utils/xml-stream"); + class s { + prepare() {} + render() {} + parseOpen(e) {} + parseText(e) {} + parseClose(e) {} + reconcile(e, t) {} + reset() { + this.model = null, this.map && Object.values(this.map).forEach(e => { + e instanceof s ? e.reset() : e.xform && e.xform.reset(); + }); + } + mergeModel(e) { + this.model = Object.assign(this.model || {}, e); + } + parse(e) { + var _this6 = this; + return _asyncToGenerator(function* () { + var _iteratorAbruptCompletion2 = false; + var _didIteratorError2 = false; + var _iteratorError2; + try { + for (var _iterator2 = _asyncIterator(e), _step2; _iteratorAbruptCompletion2 = !(_step2 = yield _iterator2.next()).done; _iteratorAbruptCompletion2 = false) { + const t = _step2.value; + { + for (const { + eventType: e, + value: r + } of t) if ("opentag" === e) _this6.parseOpen(r);else if ("text" === e) _this6.parseText(r);else if ("closetag" === e && !_this6.parseClose(r.name)) return _this6.model; + } + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (_iteratorAbruptCompletion2 && _iterator2.return != null) { + yield _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + return _this6.model; + })(); + } + parseStream(e) { + var _this7 = this; + return _asyncToGenerator(function* () { + return _this7.parse(n(e)); + })(); + } + get xml() { + return this.toXml(this.model); + } + toXml(e) { + const t = new i(); + return this.render(t, e), t.xml; + } + static toAttribute(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + if (void 0 === e) { + if (r) return t; + } else if (r || e !== t) return e.toString(); + } + static toStringAttribute(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + return s.toAttribute(e, t, r); + } + static toStringValue(e, t) { + return void 0 === e ? t : e; + } + static toBoolAttribute(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + if (void 0 === e) { + if (r) return t; + } else if (r || e !== t) return e ? "1" : "0"; + } + static toBoolValue(e, t) { + return void 0 === e ? t : "1" === e; + } + static toIntAttribute(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + return s.toAttribute(e, t, r); + } + static toIntValue(e, t) { + return void 0 === e ? t : parseInt(e, 10); + } + static toFloatAttribute(e, t) { + let r = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; + return s.toAttribute(e, t, r); + } + static toFloatValue(e, t) { + return void 0 === e ? t : parseFloat(e); + } + } + t.exports = s; + }, { + "../../utils/parse-sax": 22, + "../../utils/xml-stream": 28 + }], + 33: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../../../utils/col-cache"); + function s(e) { + try { + return i.decodeEx(e), !0; + } catch (e) { + return !1; + } + } + function o(e) { + const t = []; + let r = !1, + n = ""; + return e.split(",").forEach(e => { + if (!e) return; + const i = (e.match(/'/g) || []).length; + if (!i) return void (r ? n += e + "," : s(e) && t.push(e)); + const o = i % 2 == 0; + !r && o && s(e) ? t.push(e) : r && !o ? (r = !1, s(n + e) && t.push(n + e), n = "") : (r = !0, n += e + ","); + }), t; + } + t.exports = class extends n { + render(e, t) { + e.openNode("definedName", { + name: t.name, + localSheetId: t.localSheetId + }), e.writeText(t.ranges.join(",")), e.closeNode(); + } + parseOpen(e) { + switch (e.name) { + case "definedName": + return this._parsedName = e.attributes.name, this._parsedLocalSheetId = e.attributes.localSheetId, this._parsedText = [], !0; + default: + return !1; + } + } + parseText(e) { + this._parsedText.push(e); + } + parseClose() { + return this.model = { + name: this._parsedName, + ranges: o(this._parsedText.join("")) + }, void 0 !== this._parsedLocalSheetId && (this.model.localSheetId = parseInt(this._parsedLocalSheetId, 10)), !1; + } + }; + }, { + "../../../utils/col-cache": 19, + "../base-xform": 32 + }], + 34: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/utils"), + i = e("../base-xform"); + t.exports = class extends i { + render(e, t) { + e.leafNode("sheet", { + sheetId: t.id, + name: t.name, + state: t.state, + "r:id": t.rId + }); + } + parseOpen(e) { + return "sheet" === e.name && (this.model = { + name: n.xmlDecode(e.attributes.name), + id: parseInt(e.attributes.sheetId, 10), + state: e.attributes.state, + rId: e.attributes["r:id"] + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../utils/utils": 27, + "../base-xform": 32 + }], + 35: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + render(e, t) { + e.leafNode("calcPr", { + calcId: 171027, + fullCalcOnLoad: t.fullCalcOnLoad ? 1 : void 0 + }); + } + parseOpen(e) { + return "calcPr" === e.name && (this.model = {}, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 36: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + render(e, t) { + e.leafNode("workbookPr", { + date1904: t.date1904 ? 1 : void 0, + defaultThemeVersion: 164011, + filterPrivacy: 1 + }); + } + parseOpen(e) { + return "workbookPr" === e.name && (this.model = { + date1904: "1" === e.attributes.date1904 + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 37: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + render(e, t) { + const r = { + xWindow: t.x || 0, + yWindow: t.y || 0, + windowWidth: t.width || 12e3, + windowHeight: t.height || 24e3, + firstSheet: t.firstSheet, + activeTab: t.activeTab + }; + t.visibility && "visible" !== t.visibility && (r.visibility = t.visibility), e.leafNode("workbookView", r); + } + parseOpen(e) { + if ("workbookView" === e.name) { + const t = this.model = {}, + r = function (e, r, n) { + const i = void 0 !== r ? t[e] = r : n; + void 0 !== i && (t[e] = i); + }, + n = function (e, r, n) { + const i = void 0 !== r ? t[e] = parseInt(r, 10) : n; + void 0 !== i && (t[e] = i); + }; + return n("x", e.attributes.xWindow, 0), n("y", e.attributes.yWindow, 0), n("width", e.attributes.windowWidth, 25e3), n("height", e.attributes.windowHeight, 1e4), r("visibility", e.attributes.visibility, "visible"), n("activeTab", e.attributes.activeTab, void 0), n("firstSheet", e.attributes.firstSheet, void 0), !0; + } + return !1; + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 38: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../../../utils/col-cache"), + s = e("../../../utils/xml-stream"), + o = e("../base-xform"), + a = e("../static-xform"), + l = e("../list-xform"), + c = e("./defined-name-xform"), + u = e("./sheet-xform"), + h = e("./workbook-view-xform"), + f = e("./workbook-properties-xform"), + d = e("./workbook-calc-properties-xform"); + class p extends o { + constructor() { + super(), this.map = { + fileVersion: p.STATIC_XFORMS.fileVersion, + workbookPr: new f(), + bookViews: new l({ + tag: "bookViews", + count: !1, + childXform: new h() + }), + sheets: new l({ + tag: "sheets", + count: !1, + childXform: new u() + }), + definedNames: new l({ + tag: "definedNames", + count: !1, + childXform: new c() + }), + calcPr: new d() + }; + } + prepare(e) { + e.sheets = e.worksheets; + const t = []; + let r = 0; + e.sheets.forEach(e => { + if (e.pageSetup && e.pageSetup.printArea && e.pageSetup.printArea.split("&&").forEach(n => { + const i = n.split(":"), + s = { + name: "_xlnm.Print_Area", + ranges: [`'${e.name}'!$${i[0]}:$${i[1]}`], + localSheetId: r + }; + t.push(s); + }), e.pageSetup && (e.pageSetup.printTitlesRow || e.pageSetup.printTitlesColumn)) { + const n = []; + if (e.pageSetup.printTitlesColumn) { + const t = e.pageSetup.printTitlesColumn.split(":"); + n.push(`'${e.name}'!$${t[0]}:$${t[1]}`); + } + if (e.pageSetup.printTitlesRow) { + const t = e.pageSetup.printTitlesRow.split(":"); + n.push(`'${e.name}'!$${t[0]}:$${t[1]}`); + } + const i = { + name: "_xlnm.Print_Titles", + ranges: n, + localSheetId: r + }; + t.push(i); + } + r++; + }), t.length && (e.definedNames = e.definedNames.concat(t)), (e.media || []).forEach((e, t) => { + e.name = e.type + (t + 1); + }); + } + render(e, t) { + e.openXml(s.StdDocAttributes), e.openNode("workbook", p.WORKBOOK_ATTRIBUTES), this.map.fileVersion.render(e), this.map.workbookPr.render(e, t.properties), this.map.bookViews.render(e, t.views), this.map.sheets.render(e, t.sheets), this.map.definedNames.render(e, t.definedNames), this.map.calcPr.render(e, t.calcProperties), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "workbook": + return !0; + default: + return this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e), !0; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case "workbook": + return this.model = { + sheets: this.map.sheets.model, + properties: this.map.workbookPr.model || {}, + views: this.map.bookViews.model, + calcProperties: {} + }, this.map.definedNames.model && (this.model.definedNames = this.map.definedNames.model), !1; + default: + return !0; + } + } + reconcile(e) { + const t = (e.workbookRels || []).reduce((e, t) => (e[t.Id] = t, e), {}), + r = []; + let s, + o = 0; + (e.sheets || []).forEach(n => { + const i = t[n.rId]; + i && (s = e.worksheetHash["xl/" + i.Target.replace(/^(\s|\/xl\/)+/, "")], s && (s.name = n.name, s.id = n.id, s.state = n.state, r[o++] = s)); + }); + const a = []; + n.each(e.definedNames, e => { + if ("_xlnm.Print_Area" === e.name) { + if (s = r[e.localSheetId], s) { + s.pageSetup || (s.pageSetup = {}); + const t = i.decodeEx(e.ranges[0]); + s.pageSetup.printArea = s.pageSetup.printArea ? `${s.pageSetup.printArea}&&${t.dimensions}` : t.dimensions; + } + } else if ("_xlnm.Print_Titles" === e.name) { + if (s = r[e.localSheetId], s) { + s.pageSetup || (s.pageSetup = {}); + const t = e.ranges.join(","), + r = /\$/g, + n = /\$\d+:\$\d+/, + i = t.match(n); + if (i && i.length) { + const e = i[0]; + s.pageSetup.printTitlesRow = e.replace(r, ""); + } + const o = /\$[A-Z]+:\$[A-Z]+/, + a = t.match(o); + if (a && a.length) { + const e = a[0]; + s.pageSetup.printTitlesColumn = e.replace(r, ""); + } + } + } else a.push(e); + }), e.definedNames = a, e.media.forEach((e, t) => { + e.index = t; + }); + } + } + p.WORKBOOK_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", + "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", + "mc:Ignorable": "x15", + "xmlns:x15": "http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" + }, p.STATIC_XFORMS = { + fileVersion: new a({ + tag: "fileVersion", + $: { + appName: "xl", + lastEdited: 5, + lowestEdited: 5, + rupBuild: 9303 + } + }) + }, t.exports = p; + }, { + "../../../utils/col-cache": 19, + "../../../utils/under-dash": 26, + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "../list-xform": 71, + "../static-xform": 120, + "./defined-name-xform": 33, + "./sheet-xform": 34, + "./workbook-calc-properties-xform": 35, + "./workbook-properties-xform": 36, + "./workbook-view-xform": 37 + }], + 39: [function (e, t, r) { + "use strict"; + + const n = e("../strings/rich-text-xform"), + i = e("../../../utils/utils"), + s = e("../base-xform"), + o = t.exports = function (e) { + this.model = e; + }; + i.inherits(o, s, { + get tag() { + return "r"; + }, + get richTextXform() { + return this._richTextXform || (this._richTextXform = new n()), this._richTextXform; + }, + render(e, t) { + t = t || this.model, e.openNode("comment", { + ref: t.ref, + authorId: 0 + }), e.openNode("text"), t && t.note && t.note.texts && t.note.texts.forEach(t => { + this.richTextXform.render(e, t); + }), e.closeNode(), e.closeNode(); + }, + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "comment": + return this.model = { + type: "note", + note: { + texts: [] + }, + ...e.attributes + }, !0; + case "r": + return this.parser = this.richTextXform, this.parser.parseOpen(e), !0; + default: + return !1; + } + }, + parseText(e) { + this.parser && this.parser.parseText(e); + }, + parseClose(e) { + switch (e) { + case "comment": + return !1; + case "r": + return this.model.note.texts.push(this.parser.model), this.parser = void 0, !0; + default: + return this.parser && this.parser.parseClose(e), !0; + } + } + }); + }, { + "../../../utils/utils": 27, + "../base-xform": 32, + "../strings/rich-text-xform": 122 + }], + 40: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../../../utils/utils"), + s = e("../base-xform"), + o = e("./comment-xform"), + a = t.exports = function () { + this.map = { + comment: new o() + }; + }; + i.inherits(a, s, { + COMMENTS_ATTRIBUTES: { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main" + } + }, { + render(e, t) { + t = t || this.model, e.openXml(n.StdDocAttributes), e.openNode("comments", a.COMMENTS_ATTRIBUTES), e.openNode("authors"), e.leafNode("author", null, "Author"), e.closeNode(), e.openNode("commentList"), t.comments.forEach(t => { + this.map.comment.render(e, t); + }), e.closeNode(), e.closeNode(); + }, + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "commentList": + return this.model = { + comments: [] + }, !0; + case "comment": + return this.parser = this.map.comment, this.parser.parseOpen(e), !0; + default: + return !1; + } + }, + parseText(e) { + this.parser && this.parser.parseText(e); + }, + parseClose(e) { + switch (e) { + case "commentList": + return !1; + case "comment": + return this.model.comments.push(this.parser.model), this.parser = void 0, !0; + default: + return this.parser && this.parser.parseClose(e), !0; + } + } + }); + }, { + "../../../utils/utils": 27, + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "./comment-xform": 39 + }], + 41: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this._model = e; + } + get tag() { + return this._model && this._model.tag; + } + render(e, t, r) { + (t === r[2] || "x:SizeWithCells" === this.tag && t === r[1]) && e.leafNode(this.tag); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = {}, this.model[this.tag] = !0, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../base-xform": 32 + }], + 42: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this._model = e; + } + get tag() { + return this._model && this._model.tag; + } + render(e, t) { + e.leafNode(this.tag, null, t); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.text = "", !0; + default: + return !1; + } + } + parseText(e) { + this.text = e; + } + parseClose() { + return !1; + } + }; + }, { + "../../base-xform": 32 + }], + 43: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "x:Anchor"; + } + getAnchorRect(e) { + const t = Math.floor(e.left), + r = Math.floor(68 * (e.left - t)), + n = Math.floor(e.top), + i = Math.floor(18 * (e.top - n)), + s = Math.floor(e.right), + o = Math.floor(68 * (e.right - s)), + a = Math.floor(e.bottom); + return [t, r, n, i, s, o, a, Math.floor(18 * (e.bottom - a))]; + } + getDefaultRect(e) { + const t = e.col, + r = Math.max(e.row - 2, 0); + return [t, 6, r, 14, t + 2, 2, r + 4, 16]; + } + render(e, t) { + const r = t.anchor ? this.getAnchorRect(t.anchor) : this.getDefaultRect(t.refAddress); + e.leafNode("x:Anchor", null, r.join(", ")); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.text = "", !0; + default: + return !1; + } + } + parseText(e) { + this.text = e; + } + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 44: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./vml-anchor-xform"), + s = e("./style/vml-protection-xform"), + o = e("./style/vml-position-xform"), + a = ["twoCells", "oneCells", "absolute"]; + t.exports = class extends n { + constructor() { + super(), this.map = { + "x:Anchor": new i(), + "x:Locked": new s({ + tag: "x:Locked" + }), + "x:LockText": new s({ + tag: "x:LockText" + }), + "x:SizeWithCells": new o({ + tag: "x:SizeWithCells" + }), + "x:MoveWithCells": new o({ + tag: "x:MoveWithCells" + }) + }; + } + get tag() { + return "x:ClientData"; + } + render(e, t) { + const { + protection: r, + editAs: n + } = t.note; + e.openNode(this.tag, { + ObjectType: "Note" + }), this.map["x:MoveWithCells"].render(e, n, a), this.map["x:SizeWithCells"].render(e, n, a), this.map["x:Anchor"].render(e, t), this.map["x:Locked"].render(e, r.locked), e.leafNode("x:AutoFill", null, "False"), this.map["x:LockText"].render(e, r.lockText), e.leafNode("x:Row", null, t.refAddress.row - 1), e.leafNode("x:Column", null, t.refAddress.col - 1), e.closeNode(); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + this.reset(), this.model = { + anchor: [], + protection: {}, + editAs: "" + }; + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.normalizeModel(), !1; + default: + return !0; + } + } + normalizeModel() { + const e = Object.assign({}, this.map["x:MoveWithCells"].model, this.map["x:SizeWithCells"].model), + t = Object.keys(e).length; + this.model.editAs = a[t], this.model.anchor = this.map["x:Anchor"].text, this.model.protection.locked = this.map["x:Locked"].text, this.model.protection.lockText = this.map["x:LockText"].text; + } + }; + }, { + "../base-xform": 32, + "./style/vml-position-xform": 41, + "./style/vml-protection-xform": 42, + "./vml-anchor-xform": 43 + }], + 45: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"), + s = e("./vml-shape-xform"); + class o extends i { + constructor() { + super(), this.map = { + "v:shape": new s() + }; + } + get tag() { + return "xml"; + } + render(e, t) { + e.openXml(n.StdDocAttributes), e.openNode(this.tag, o.DRAWING_ATTRIBUTES), e.openNode("o:shapelayout", { + "v:ext": "edit" + }), e.leafNode("o:idmap", { + "v:ext": "edit", + data: 1 + }), e.closeNode(), e.openNode("v:shapetype", { + id: "_x0000_t202", + coordsize: "21600,21600", + "o:spt": 202, + path: "m,l,21600r21600,l21600,xe" + }), e.leafNode("v:stroke", { + joinstyle: "miter" + }), e.leafNode("v:path", { + gradientshapeok: "t", + "o:connecttype": "rect" + }), e.closeNode(), t.comments.forEach((t, r) => { + this.map["v:shape"].render(e, t, r); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(), this.model = { + comments: [] + }; + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.model.comments.push(this.parser.model), this.parser = void 0), !0; + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + reconcile(e, t) { + e.anchors.forEach(e => { + e.br ? this.map["xdr:twoCellAnchor"].reconcile(e, t) : this.map["xdr:oneCellAnchor"].reconcile(e, t); + }); + } + } + o.DRAWING_ATTRIBUTES = { + "xmlns:v": "urn:schemas-microsoft-com:vml", + "xmlns:o": "urn:schemas-microsoft-com:office:office", + "xmlns:x": "urn:schemas-microsoft-com:office:excel" + }, t.exports = o; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "./vml-shape-xform": 46 + }], + 46: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./vml-textbox-xform"), + s = e("./vml-client-data-xform"); + class o extends n { + constructor() { + super(), this.map = { + "v:textbox": new i(), + "x:ClientData": new s() + }; + } + get tag() { + return "v:shape"; + } + render(e, t, r) { + e.openNode("v:shape", o.V_SHAPE_ATTRIBUTES(t, r)), e.leafNode("v:fill", { + color2: "infoBackground [80]" + }), e.leafNode("v:shadow", { + color: "none [81]", + obscured: "t" + }), e.leafNode("v:path", { + "o:connecttype": "none" + }), this.map["v:textbox"].render(e, t), this.map["x:ClientData"].render(e, t), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(), this.model = { + margins: { + insetmode: e.attributes["o:insetmode"] + }, + anchor: "", + editAs: "", + protection: {} + }; + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model.margins.inset = this.map["v:textbox"].model && this.map["v:textbox"].model.inset, this.model.protection = this.map["x:ClientData"].model && this.map["x:ClientData"].model.protection, this.model.anchor = this.map["x:ClientData"].model && this.map["x:ClientData"].model.anchor, this.model.editAs = this.map["x:ClientData"].model && this.map["x:ClientData"].model.editAs, !1; + default: + return !0; + } + } + } + o.V_SHAPE_ATTRIBUTES = (e, t) => ({ + id: "_x0000_s" + (1025 + t), + type: "#_x0000_t202", + style: "position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden", + fillcolor: "infoBackground [80]", + strokecolor: "none [81]", + "o:insetmode": e.note.margins && e.note.margins.insetmode + }), t.exports = o; + }, { + "../base-xform": 32, + "./vml-client-data-xform": 44, + "./vml-textbox-xform": 47 + }], + 47: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "v:textbox"; + } + conversionUnit(e, t, r) { + return `${parseFloat(e) * t.toFixed(2)}${r}`; + } + reverseConversionUnit(e) { + return (e || "").split(",").map(e => Number(parseFloat(this.conversionUnit(parseFloat(e), .1, "")).toFixed(2))); + } + render(e, t) { + const r = { + style: "mso-direction-alt:auto" + }; + if (t && t.note) { + let { + inset: e + } = t.note && t.note.margins; + Array.isArray(e) && (e = e.map(e => this.conversionUnit(e, 10, "mm")).join(",")), e && (r.inset = e); + } + e.openNode("v:textbox", r), e.leafNode("div", { + style: "text-align:left" + }), e.closeNode(); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + inset: this.reverseConversionUnit(e.attributes.inset) + }, !0; + default: + return !0; + } + } + parseText() {} + parseClose(e) { + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32 + }], + 48: [function (e, t, r) { + "use strict"; + + const n = e("./base-xform"); + t.exports = class extends n { + createNewModel(e) { + return {}; + } + parseOpen(e) { + return this.parser = this.parser || this.map[e.name], this.parser ? (this.parser.parseOpen(e), !0) : e.name === this.tag && (this.model = this.createNewModel(e), !0); + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + onParserClose(e, t) { + this.model[e] = t.model; + } + parseClose(e) { + return this.parser ? (this.parser.parseClose(e) || (this.onParserClose(e, this.parser), this.parser = void 0), !0) : e !== this.tag; + } + }; + }, { + "./base-xform": 32 + }], + 49: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + render(e, t) { + e.openNode("HeadingPairs"), e.openNode("vt:vector", { + size: 2, + baseType: "variant" + }), e.openNode("vt:variant"), e.leafNode("vt:lpstr", void 0, "Worksheets"), e.closeNode(), e.openNode("vt:variant"), e.leafNode("vt:i4", void 0, t.length), e.closeNode(), e.closeNode(), e.closeNode(); + } + parseOpen(e) { + return "HeadingPairs" === e.name; + } + parseText() {} + parseClose(e) { + return "HeadingPairs" !== e; + } + }; + }, { + "../base-xform": 32 + }], + 50: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + render(e, t) { + e.openNode("TitlesOfParts"), e.openNode("vt:vector", { + size: t.length, + baseType: "lpstr" + }), t.forEach(t => { + e.leafNode("vt:lpstr", void 0, t.name); + }), e.closeNode(), e.closeNode(); + } + parseOpen(e) { + return "TitlesOfParts" === e.name; + } + parseText() {} + parseClose(e) { + return "TitlesOfParts" !== e; + } + }; + }, { + "../base-xform": 32 + }], + 51: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"), + s = e("../simple/string-xform"), + o = e("./app-heading-pairs-xform"), + a = e("./app-titles-of-parts-xform"); + class l extends i { + constructor() { + super(), this.map = { + Company: new s({ + tag: "Company" + }), + Manager: new s({ + tag: "Manager" + }), + HeadingPairs: new o(), + TitleOfParts: new a() + }; + } + render(e, t) { + e.openXml(n.StdDocAttributes), e.openNode("Properties", l.PROPERTY_ATTRIBUTES), e.leafNode("Application", void 0, "Microsoft Excel"), e.leafNode("DocSecurity", void 0, "0"), e.leafNode("ScaleCrop", void 0, "false"), this.map.HeadingPairs.render(e, t.worksheets), this.map.TitleOfParts.render(e, t.worksheets), this.map.Company.render(e, t.company || ""), this.map.Manager.render(e, t.manager), e.leafNode("LinksUpToDate", void 0, "false"), e.leafNode("SharedDoc", void 0, "false"), e.leafNode("HyperlinksChanged", void 0, "false"), e.leafNode("AppVersion", void 0, "16.0300"), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "Properties": + return !0; + default: + return this.parser = this.map[e.name], !!this.parser && (this.parser.parseOpen(e), !0); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case "Properties": + return this.model = { + worksheets: this.map.TitleOfParts.model, + company: this.map.Company.model, + manager: this.map.Manager.model + }, !1; + default: + return !0; + } + } + } + l.DateFormat = function (e) { + return e.toISOString().replace(/[.]\d{3,6}/, ""); + }, l.DateAttrs = { + "xsi:type": "dcterms:W3CDTF" + }, l.PROPERTY_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties", + "xmlns:vt": "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes" + }, t.exports = l; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "../simple/string-xform": 119, + "./app-heading-pairs-xform": 49, + "./app-titles-of-parts-xform": 50 + }], + 52: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"); + class s extends i { + render(e, t) { + e.openXml(n.StdDocAttributes), e.openNode("Types", s.PROPERTY_ATTRIBUTES); + const r = {}; + (t.media || []).forEach(t => { + if ("image" === t.type) { + const n = t.extension; + r[n] || (r[n] = !0, e.leafNode("Default", { + Extension: n, + ContentType: "image/" + n + })); + } + }), e.leafNode("Default", { + Extension: "rels", + ContentType: "application/vnd.openxmlformats-package.relationships+xml" + }), e.leafNode("Default", { + Extension: "xml", + ContentType: "application/xml" + }), e.leafNode("Override", { + PartName: "/xl/workbook.xml", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" + }), t.worksheets.forEach(t => { + const r = `/xl/worksheets/sheet${t.id}.xml`; + e.leafNode("Override", { + PartName: r, + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" + }); + }), e.leafNode("Override", { + PartName: "/xl/theme/theme1.xml", + ContentType: "application/vnd.openxmlformats-officedocument.theme+xml" + }), e.leafNode("Override", { + PartName: "/xl/styles.xml", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" + }); + t.sharedStrings && t.sharedStrings.count && e.leafNode("Override", { + PartName: "/xl/sharedStrings.xml", + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" + }), t.tables && t.tables.forEach(t => { + e.leafNode("Override", { + PartName: "/xl/tables/" + t.target, + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml" + }); + }), t.drawings && t.drawings.forEach(t => { + e.leafNode("Override", { + PartName: `/xl/drawings/${t.name}.xml`, + ContentType: "application/vnd.openxmlformats-officedocument.drawing+xml" + }); + }), t.commentRefs && (e.leafNode("Default", { + Extension: "vml", + ContentType: "application/vnd.openxmlformats-officedocument.vmlDrawing" + }), t.commentRefs.forEach(t => { + let { + commentName: r + } = t; + e.leafNode("Override", { + PartName: `/xl/${r}.xml`, + ContentType: "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml" + }); + })), e.leafNode("Override", { + PartName: "/docProps/core.xml", + ContentType: "application/vnd.openxmlformats-package.core-properties+xml" + }), e.leafNode("Override", { + PartName: "/docProps/app.xml", + ContentType: "application/vnd.openxmlformats-officedocument.extended-properties+xml" + }), e.closeNode(); + } + parseOpen() { + return !1; + } + parseText() {} + parseClose() { + return !1; + } + } + s.PROPERTY_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/package/2006/content-types" + }, t.exports = s; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32 + }], + 53: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"), + s = e("../simple/date-xform"), + o = e("../simple/string-xform"), + a = e("../simple/integer-xform"); + class l extends i { + constructor() { + super(), this.map = { + "dc:creator": new o({ + tag: "dc:creator" + }), + "dc:title": new o({ + tag: "dc:title" + }), + "dc:subject": new o({ + tag: "dc:subject" + }), + "dc:description": new o({ + tag: "dc:description" + }), + "dc:identifier": new o({ + tag: "dc:identifier" + }), + "dc:language": new o({ + tag: "dc:language" + }), + "cp:keywords": new o({ + tag: "cp:keywords" + }), + "cp:category": new o({ + tag: "cp:category" + }), + "cp:lastModifiedBy": new o({ + tag: "cp:lastModifiedBy" + }), + "cp:lastPrinted": new s({ + tag: "cp:lastPrinted", + format: l.DateFormat + }), + "cp:revision": new a({ + tag: "cp:revision" + }), + "cp:version": new o({ + tag: "cp:version" + }), + "cp:contentStatus": new o({ + tag: "cp:contentStatus" + }), + "cp:contentType": new o({ + tag: "cp:contentType" + }), + "dcterms:created": new s({ + tag: "dcterms:created", + attrs: l.DateAttrs, + format: l.DateFormat + }), + "dcterms:modified": new s({ + tag: "dcterms:modified", + attrs: l.DateAttrs, + format: l.DateFormat + }) + }; + } + render(e, t) { + e.openXml(n.StdDocAttributes), e.openNode("cp:coreProperties", l.CORE_PROPERTY_ATTRIBUTES), this.map["dc:creator"].render(e, t.creator), this.map["dc:title"].render(e, t.title), this.map["dc:subject"].render(e, t.subject), this.map["dc:description"].render(e, t.description), this.map["dc:identifier"].render(e, t.identifier), this.map["dc:language"].render(e, t.language), this.map["cp:keywords"].render(e, t.keywords), this.map["cp:category"].render(e, t.category), this.map["cp:lastModifiedBy"].render(e, t.lastModifiedBy), this.map["cp:lastPrinted"].render(e, t.lastPrinted), this.map["cp:revision"].render(e, t.revision), this.map["cp:version"].render(e, t.version), this.map["cp:contentStatus"].render(e, t.contentStatus), this.map["cp:contentType"].render(e, t.contentType), this.map["dcterms:created"].render(e, t.created), this.map["dcterms:modified"].render(e, t.modified), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "cp:coreProperties": + case "coreProperties": + return !0; + default: + if (this.parser = this.map[e.name], this.parser) return this.parser.parseOpen(e), !0; + throw new Error("Unexpected xml node in parseOpen: " + JSON.stringify(e)); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case "cp:coreProperties": + case "coreProperties": + return this.model = { + creator: this.map["dc:creator"].model, + title: this.map["dc:title"].model, + subject: this.map["dc:subject"].model, + description: this.map["dc:description"].model, + identifier: this.map["dc:identifier"].model, + language: this.map["dc:language"].model, + keywords: this.map["cp:keywords"].model, + category: this.map["cp:category"].model, + lastModifiedBy: this.map["cp:lastModifiedBy"].model, + lastPrinted: this.map["cp:lastPrinted"].model, + revision: this.map["cp:revision"].model, + contentStatus: this.map["cp:contentStatus"].model, + contentType: this.map["cp:contentType"].model, + created: this.map["dcterms:created"].model, + modified: this.map["dcterms:modified"].model + }, !1; + default: + throw new Error("Unexpected xml node in parseClose: " + e); + } + } + } + l.DateFormat = function (e) { + return e.toISOString().replace(/[.]\d{3}/, ""); + }, l.DateAttrs = { + "xsi:type": "dcterms:W3CDTF" + }, l.CORE_PROPERTY_ATTRIBUTES = { + "xmlns:cp": "http://schemas.openxmlformats.org/package/2006/metadata/core-properties", + "xmlns:dc": "http://purl.org/dc/elements/1.1/", + "xmlns:dcterms": "http://purl.org/dc/terms/", + "xmlns:dcmitype": "http://purl.org/dc/dcmitype/", + "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance" + }, t.exports = l; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "../simple/date-xform": 117, + "../simple/integer-xform": 118, + "../simple/string-xform": 119 + }], + 54: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + render(e, t) { + e.leafNode("Relationship", t); + } + parseOpen(e) { + switch (e.name) { + case "Relationship": + return this.model = e.attributes, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 55: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"), + s = e("./relationship-xform"); + class o extends i { + constructor() { + super(), this.map = { + Relationship: new s() + }; + } + render(e, t) { + t = t || this._values, e.openXml(n.StdDocAttributes), e.openNode("Relationships", o.RELATIONSHIPS_ATTRIBUTES), t.forEach(t => { + this.map.Relationship.render(e, t); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "Relationships": + return this.model = [], !0; + default: + if (this.parser = this.map[e.name], this.parser) return this.parser.parseOpen(e), !0; + throw new Error("Unexpected xml node in parseOpen: " + JSON.stringify(e)); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.model.push(this.parser.model), this.parser = void 0), !0; + switch (e) { + case "Relationships": + return !1; + default: + throw new Error("Unexpected xml node in parseClose: " + e); + } + } + } + o.RELATIONSHIPS_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/package/2006/relationships" + }, t.exports = o; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "./relationship-xform": 54 + }], + 56: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(), this.model = { + range: { + editAs: e.attributes.editAs || "oneCell" + } + }; + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + reconcilePicture(e, t) { + if (e && e.rId) { + const r = t.rels[e.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/); + if (r) { + const e = r[1], + n = t.mediaIndex[e]; + return t.media[n]; + } + } + } + }; + }, { + "../base-xform": 32 + }], + 57: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./blip-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "a:blip": new i() + }; + } + get tag() { + return "xdr:blipFill"; + } + render(e, t) { + e.openNode(this.tag), this.map["a:blip"].render(e, t), e.openNode("a:stretch"), e.leafNode("a:fillRect"), e.closeNode(), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText() {} + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model = this.map["a:blip"].model, !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "./blip-xform": 58 + }], + 58: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "a:blip"; + } + render(e, t) { + e.leafNode(this.tag, { + "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", + "r:embed": t.rId, + cstate: "print" + }); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + rId: e.attributes["r:embed"] + }, !0; + default: + return !0; + } + } + parseText() {} + parseClose(e) { + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32 + }], + 59: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "xdr:cNvPicPr"; + } + render(e) { + e.openNode(this.tag), e.leafNode("a:picLocks", { + noChangeAspect: "1" + }), e.closeNode(); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + default: + return !0; + } + } + parseText() {} + parseClose(e) { + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32 + }], + 60: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./hlink-click-xform"), + s = e("./ext-lst-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "a:hlinkClick": new i(), + "a:extLst": new s() + }; + } + get tag() { + return "xdr:cNvPr"; + } + render(e, t) { + e.openNode(this.tag, { + id: t.index, + name: "Picture " + t.index + }), this.map["a:hlinkClick"].render(e, t), this.map["a:extLst"].render(e, t), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText() {} + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model = this.map["a:hlinkClick"].model, !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "./ext-lst-xform": 63, + "./hlink-click-xform": 65 + }], + 61: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../simple/integer-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.map = { + "xdr:col": new i({ + tag: "xdr:col", + zero: !0 + }), + "xdr:colOff": new i({ + tag: "xdr:colOff", + zero: !0 + }), + "xdr:row": new i({ + tag: "xdr:row", + zero: !0 + }), + "xdr:rowOff": new i({ + tag: "xdr:rowOff", + zero: !0 + }) + }; + } + render(e, t) { + e.openNode(this.tag), this.map["xdr:col"].render(e, t.nativeCol), this.map["xdr:colOff"].render(e, t.nativeColOff), this.map["xdr:row"].render(e, t.nativeRow), this.map["xdr:rowOff"].render(e, t.nativeRowOff), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model = { + nativeCol: this.map["xdr:col"].model, + nativeColOff: this.map["xdr:colOff"].model, + nativeRow: this.map["xdr:row"].model, + nativeRowOff: this.map["xdr:rowOff"].model + }, !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "../simple/integer-xform": 118 + }], + 62: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/col-cache"), + i = e("../../../utils/xml-stream"), + s = e("../base-xform"), + o = e("./two-cell-anchor-xform"), + a = e("./one-cell-anchor-xform"); + class l extends s { + constructor() { + super(), this.map = { + "xdr:twoCellAnchor": new o(), + "xdr:oneCellAnchor": new a() + }; + } + prepare(e) { + e.anchors.forEach((e, t) => { + e.anchorType = function (e) { + return ("string" == typeof e.range ? n.decode(e.range) : e.range).br ? "xdr:twoCellAnchor" : "xdr:oneCellAnchor"; + }(e); + this.map[e.anchorType].prepare(e, { + index: t + }); + }); + } + get tag() { + return "xdr:wsDr"; + } + render(e, t) { + e.openXml(i.StdDocAttributes), e.openNode(this.tag, l.DRAWING_ATTRIBUTES), t.anchors.forEach(t => { + this.map[t.anchorType].render(e, t); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(), this.model = { + anchors: [] + }; + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.model.anchors.push(this.parser.model), this.parser = void 0), !0; + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + reconcile(e, t) { + e.anchors.forEach(e => { + e.br ? this.map["xdr:twoCellAnchor"].reconcile(e, t) : this.map["xdr:oneCellAnchor"].reconcile(e, t); + }); + } + } + l.DRAWING_ATTRIBUTES = { + "xmlns:xdr": "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing", + "xmlns:a": "http://schemas.openxmlformats.org/drawingml/2006/main" + }, t.exports = l; + }, { + "../../../utils/col-cache": 19, + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "./one-cell-anchor-xform": 67, + "./two-cell-anchor-xform": 70 + }], + 63: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "a:extLst"; + } + render(e) { + e.openNode(this.tag), e.openNode("a:ext", { + uri: "{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}" + }), e.leafNode("a16:creationId", { + "xmlns:a16": "http://schemas.microsoft.com/office/drawing/2014/main", + id: "{00000000-0008-0000-0000-000002000000}" + }), e.closeNode(), e.closeNode(); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + default: + return !0; + } + } + parseText() {} + parseClose(e) { + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32 + }], + 64: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.map = {}; + } + render(e, t) { + e.openNode(this.tag); + const r = Math.floor(9525 * t.width), + n = Math.floor(9525 * t.height); + e.addAttribute("cx", r), e.addAttribute("cy", n), e.closeNode(); + } + parseOpen(e) { + return e.name === this.tag && (this.model = { + width: parseInt(e.attributes.cx || "0", 10) / 9525, + height: parseInt(e.attributes.cy || "0", 10) / 9525 + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 65: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "a:hlinkClick"; + } + render(e, t) { + t.hyperlinks && t.hyperlinks.rId && e.leafNode(this.tag, { + "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", + "r:id": t.hyperlinks.rId, + tooltip: t.hyperlinks.tooltip + }); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + hyperlinks: { + rId: e.attributes["r:id"], + tooltip: e.attributes.tooltip + } + }, !0; + default: + return !0; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 66: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./c-nv-pr-xform"), + s = e("./c-nv-pic-pr-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "xdr:cNvPr": new i(), + "xdr:cNvPicPr": new s() + }; + } + get tag() { + return "xdr:nvPicPr"; + } + render(e, t) { + e.openNode(this.tag), this.map["xdr:cNvPr"].render(e, t), this.map["xdr:cNvPicPr"].render(e, t), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText() {} + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model = this.map["xdr:cNvPr"].model, !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "./c-nv-pic-pr-xform": 59, + "./c-nv-pr-xform": 60 + }], + 67: [function (e, t, r) { + "use strict"; + + const n = e("./base-cell-anchor-xform"), + i = e("../static-xform"), + s = e("./cell-position-xform"), + o = e("./ext-xform"), + a = e("./pic-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "xdr:from": new s({ + tag: "xdr:from" + }), + "xdr:ext": new o({ + tag: "xdr:ext" + }), + "xdr:pic": new a(), + "xdr:clientData": new i({ + tag: "xdr:clientData" + }) + }; + } + get tag() { + return "xdr:oneCellAnchor"; + } + prepare(e, t) { + this.map["xdr:pic"].prepare(e.picture, t); + } + render(e, t) { + e.openNode(this.tag, { + editAs: t.range.editAs || "oneCell" + }), this.map["xdr:from"].render(e, t.range.tl), this.map["xdr:ext"].render(e, t.range.ext), this.map["xdr:pic"].render(e, t.picture), this.map["xdr:clientData"].render(e, {}), e.closeNode(); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model.range.tl = this.map["xdr:from"].model, this.model.range.ext = this.map["xdr:ext"].model, this.model.picture = this.map["xdr:pic"].model, !1; + default: + return !0; + } + } + reconcile(e, t) { + e.medium = this.reconcilePicture(e.picture, t); + } + }; + }, { + "../static-xform": 120, + "./base-cell-anchor-xform": 56, + "./cell-position-xform": 61, + "./ext-xform": 64, + "./pic-xform": 68 + }], + 68: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../static-xform"), + s = e("./blip-fill-xform"), + o = e("./nv-pic-pr-xform"), + a = e("./sp-pr"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "xdr:nvPicPr": new o(), + "xdr:blipFill": new s(), + "xdr:spPr": new i(a) + }; + } + get tag() { + return "xdr:pic"; + } + prepare(e, t) { + e.index = t.index + 1; + } + render(e, t) { + e.openNode(this.tag), this.map["xdr:nvPicPr"].render(e, t), this.map["xdr:blipFill"].render(e, t), this.map["xdr:spPr"].render(e, t), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + this.reset(); + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText() {} + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.mergeModel(this.parser.model), this.parser = void 0), !0; + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "../static-xform": 120, + "./blip-fill-xform": 57, + "./nv-pic-pr-xform": 66, + "./sp-pr": 69 + }], + 69: [function (e, t, r) { + "use strict"; + + t.exports = { + tag: "xdr:spPr", + c: [{ + tag: "a:xfrm", + c: [{ + tag: "a:off", + $: { + x: "0", + y: "0" + } + }, { + tag: "a:ext", + $: { + cx: "0", + cy: "0" + } + }] + }, { + tag: "a:prstGeom", + $: { + prst: "rect" + }, + c: [{ + tag: "a:avLst" + }] + }] + }; + }, {}], + 70: [function (e, t, r) { + "use strict"; + + const n = e("./base-cell-anchor-xform"), + i = e("../static-xform"), + s = e("./cell-position-xform"), + o = e("./pic-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "xdr:from": new s({ + tag: "xdr:from" + }), + "xdr:to": new s({ + tag: "xdr:to" + }), + "xdr:pic": new o(), + "xdr:clientData": new i({ + tag: "xdr:clientData" + }) + }; + } + get tag() { + return "xdr:twoCellAnchor"; + } + prepare(e, t) { + this.map["xdr:pic"].prepare(e.picture, t); + } + render(e, t) { + e.openNode(this.tag, { + editAs: t.range.editAs || "oneCell" + }), this.map["xdr:from"].render(e, t.range.tl), this.map["xdr:to"].render(e, t.range.br), this.map["xdr:pic"].render(e, t.picture), this.map["xdr:clientData"].render(e, {}), e.closeNode(); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model.range.tl = this.map["xdr:from"].model, this.model.range.br = this.map["xdr:to"].model, this.model.picture = this.map["xdr:pic"].model, !1; + default: + return !0; + } + } + reconcile(e, t) { + e.medium = this.reconcilePicture(e.picture, t); + } + }; + }, { + "../static-xform": 120, + "./base-cell-anchor-xform": 56, + "./cell-position-xform": 61, + "./pic-xform": 68 + }], + 71: [function (e, t, r) { + "use strict"; + + const n = e("./base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.always = !!e.always, this.count = e.count, this.empty = e.empty, this.$count = e.$count || "count", this.$ = e.$, this.childXform = e.childXform, this.maxItems = e.maxItems; + } + prepare(e, t) { + const { + childXform: r + } = this; + e && e.forEach((e, n) => { + t.index = n, r.prepare(e, t); + }); + } + render(e, t) { + if (this.always || t && t.length) { + e.openNode(this.tag, this.$), this.count && e.addAttribute(this.$count, t && t.length || 0); + const { + childXform: r + } = this; + (t || []).forEach((t, n) => { + r.render(e, t, n); + }), e.closeNode(); + } else this.empty && e.leafNode(this.tag); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + return this.model = [], !0; + default: + return !!this.childXform.parseOpen(e) && (this.parser = this.childXform, !0); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) { + if (!this.parser.parseClose(e) && (this.model.push(this.parser.model), this.parser = void 0, this.maxItems && this.model.length > this.maxItems)) throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`); + return !0; + } + return !1; + } + reconcile(e, t) { + if (e) { + const { + childXform: r + } = this; + e.forEach(e => { + r.reconcile(e, t); + }); + } + } + }; + }, { + "./base-xform": 32 + }], + 72: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/col-cache"), + i = e("../base-xform"); + t.exports = class extends i { + get tag() { + return "autoFilter"; + } + render(e, t) { + if (t) if ("string" == typeof t) e.leafNode("autoFilter", { + ref: t + });else { + const r = function (e) { + return "string" == typeof e ? e : n.getAddress(e.row, e.column).address; + }, + i = r(t.from), + s = r(t.to); + i && s && e.leafNode("autoFilter", { + ref: `${i}:${s}` + }); + } + } + parseOpen(e) { + "autoFilter" === e.name && (this.model = e.attributes.ref); + } + }; + }, { + "../../../utils/col-cache": 19, + "../base-xform": 32 + }], + 73: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/utils"), + i = e("../base-xform"), + s = e("../../../doc/range"), + o = e("../../../doc/enums"), + a = e("../strings/rich-text-xform"); + function l(e) { + if (null == e) return o.ValueType.Null; + if (e instanceof String || "string" == typeof e) return o.ValueType.String; + if ("number" == typeof e) return o.ValueType.Number; + if ("boolean" == typeof e) return o.ValueType.Boolean; + if (e instanceof Date) return o.ValueType.Date; + if (e.text && e.hyperlink) return o.ValueType.Hyperlink; + if (e.formula) return o.ValueType.Formula; + if (e.error) return o.ValueType.Error; + throw new Error("I could not understand type of value"); + } + t.exports = class extends i { + constructor() { + super(), this.richTextXForm = new a(); + } + get tag() { + return "c"; + } + prepare(e, t) { + const r = t.styles.addStyleModel(e.style || {}, function (e) { + switch (e.type) { + case o.ValueType.Formula: + return l(e.result); + default: + return e.type; + } + }(e)); + switch (r && (e.styleId = r), e.comment && t.comments.push({ + ...e.comment, + ref: e.address + }), e.type) { + case o.ValueType.String: + case o.ValueType.RichText: + t.sharedStrings && (e.ssId = t.sharedStrings.add(e.value)); + break; + case o.ValueType.Date: + t.date1904 && (e.date1904 = !0); + break; + case o.ValueType.Hyperlink: + t.sharedStrings && void 0 !== e.text && null !== e.text && (e.ssId = t.sharedStrings.add(e.text)), t.hyperlinks.push({ + address: e.address, + target: e.hyperlink, + tooltip: e.tooltip + }); + break; + case o.ValueType.Merge: + t.merges.add(e); + break; + case o.ValueType.Formula: + if (t.date1904 && (e.date1904 = !0), "shared" === e.shareType && (e.si = t.siFormulae++), e.formula) t.formulae[e.address] = e;else if (e.sharedFormula) { + const r = t.formulae[e.sharedFormula]; + if (!r) throw new Error("Shared Formula master must exist above and or left of clone for cell " + e.address); + void 0 === r.si ? (r.shareType = "shared", r.si = t.siFormulae++, r.range = new s(r.address, e.address)) : r.range && r.range.expandToAddress(e.address), e.si = r.si; + } + } + } + renderFormula(e, t) { + let r = null; + switch (t.shareType) { + case "shared": + r = { + t: "shared", + ref: t.ref || t.range.range, + si: t.si + }; + break; + case "array": + r = { + t: "array", + ref: t.ref + }; + break; + default: + void 0 !== t.si && (r = { + t: "shared", + si: t.si + }); + } + switch (l(t.result)) { + case o.ValueType.Null: + e.leafNode("f", r, t.formula); + break; + case o.ValueType.String: + e.addAttribute("t", "str"), e.leafNode("f", r, t.formula), e.leafNode("v", null, t.result); + break; + case o.ValueType.Number: + e.leafNode("f", r, t.formula), e.leafNode("v", null, t.result); + break; + case o.ValueType.Boolean: + e.addAttribute("t", "b"), e.leafNode("f", r, t.formula), e.leafNode("v", null, t.result ? 1 : 0); + break; + case o.ValueType.Error: + e.addAttribute("t", "e"), e.leafNode("f", r, t.formula), e.leafNode("v", null, t.result.error); + break; + case o.ValueType.Date: + e.leafNode("f", r, t.formula), e.leafNode("v", null, n.dateToExcel(t.result, t.date1904)); + break; + default: + throw new Error("I could not understand type of value"); + } + } + render(e, t) { + if (t.type !== o.ValueType.Null || t.styleId) { + switch (e.openNode("c"), e.addAttribute("r", t.address), t.styleId && e.addAttribute("s", t.styleId), t.type) { + case o.ValueType.Null: + break; + case o.ValueType.Number: + e.leafNode("v", null, t.value); + break; + case o.ValueType.Boolean: + e.addAttribute("t", "b"), e.leafNode("v", null, t.value ? "1" : "0"); + break; + case o.ValueType.Error: + e.addAttribute("t", "e"), e.leafNode("v", null, t.value.error); + break; + case o.ValueType.String: + case o.ValueType.RichText: + void 0 !== t.ssId ? (e.addAttribute("t", "s"), e.leafNode("v", null, t.ssId)) : t.value && t.value.richText ? (e.addAttribute("t", "inlineStr"), e.openNode("is"), t.value.richText.forEach(t => { + this.richTextXForm.render(e, t); + }), e.closeNode("is")) : (e.addAttribute("t", "str"), e.leafNode("v", null, t.value)); + break; + case o.ValueType.Date: + e.leafNode("v", null, n.dateToExcel(t.value, t.date1904)); + break; + case o.ValueType.Hyperlink: + void 0 !== t.ssId ? (e.addAttribute("t", "s"), e.leafNode("v", null, t.ssId)) : (e.addAttribute("t", "str"), e.leafNode("v", null, t.text)); + break; + case o.ValueType.Formula: + this.renderFormula(e, t); + break; + case o.ValueType.Merge: + } + e.closeNode(); + } + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "c": + return this.model = { + address: e.attributes.r + }, this.t = e.attributes.t, e.attributes.s && (this.model.styleId = parseInt(e.attributes.s, 10)), !0; + case "f": + return this.currentNode = "f", this.model.si = e.attributes.si, this.model.shareType = e.attributes.t, this.model.ref = e.attributes.ref, !0; + case "v": + return this.currentNode = "v", !0; + case "t": + return this.currentNode = "t", !0; + case "r": + return this.parser = this.richTextXForm, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText(e) { + if (this.parser) this.parser.parseText(e);else switch (this.currentNode) { + case "f": + this.model.formula = this.model.formula ? this.model.formula + e : e; + break; + case "v": + case "t": + this.model.value && this.model.value.richText ? this.model.value.richText.text = this.model.value.richText.text ? this.model.value.richText.text + e : e : this.model.value = this.model.value ? this.model.value + e : e; + } + } + parseClose(e) { + switch (e) { + case "c": + { + const { + model: e + } = this; + if (e.formula || e.shareType) e.type = o.ValueType.Formula, e.value && ("str" === this.t ? e.result = n.xmlDecode(e.value) : "b" === this.t ? e.result = 0 !== parseInt(e.value, 10) : "e" === this.t ? e.result = { + error: e.value + } : e.result = parseFloat(e.value), e.value = void 0);else if (void 0 !== e.value) switch (this.t) { + case "s": + e.type = o.ValueType.String, e.value = parseInt(e.value, 10); + break; + case "str": + e.type = o.ValueType.String, e.value = n.xmlDecode(e.value); + break; + case "inlineStr": + e.type = o.ValueType.String; + break; + case "b": + e.type = o.ValueType.Boolean, e.value = 0 !== parseInt(e.value, 10); + break; + case "e": + e.type = o.ValueType.Error, e.value = { + error: e.value + }; + break; + default: + e.type = o.ValueType.Number, e.value = parseFloat(e.value); + } else e.styleId ? e.type = o.ValueType.Null : e.type = o.ValueType.Merge; + return !1; + } + case "f": + case "v": + case "is": + return this.currentNode = void 0, !0; + case "t": + return this.parser ? (this.parser.parseClose(e), !0) : (this.currentNode = void 0, !0); + case "r": + return this.model.value = this.model.value || {}, this.model.value.richText = this.model.value.richText || [], this.model.value.richText.push(this.parser.model), this.parser = void 0, this.currentNode = void 0, !0; + default: + return !!this.parser && (this.parser.parseClose(e), !0); + } + } + reconcile(e, t) { + const r = e.styleId && t.styles && t.styles.getStyleModel(e.styleId); + switch (r && (e.style = r), void 0 !== e.styleId && (e.styleId = void 0), e.type) { + case o.ValueType.String: + "number" == typeof e.value && t.sharedStrings && (e.value = t.sharedStrings.getString(e.value)), e.value.richText && (e.type = o.ValueType.RichText); + break; + case o.ValueType.Number: + r && n.isDateFmt(r.numFmt) && (e.type = o.ValueType.Date, e.value = n.excelToDate(e.value, t.date1904)); + break; + case o.ValueType.Formula: + void 0 !== e.result && r && n.isDateFmt(r.numFmt) && (e.result = n.excelToDate(e.result, t.date1904)), "shared" === e.shareType && (e.ref ? t.formulae[e.si] = e.address : (e.sharedFormula = t.formulae[e.si], delete e.shareType), delete e.si); + } + const i = t.hyperlinkMap[e.address]; + i && (e.type === o.ValueType.Formula ? (e.text = e.result, e.result = void 0) : (e.text = e.value, e.value = void 0), e.type = o.ValueType.Hyperlink, e.hyperlink = i); + const s = t.commentsMap && t.commentsMap[e.address]; + s && (e.comment = s); + } + }; + }, { + "../../../doc/enums": 7, + "../../../doc/range": 10, + "../../../utils/utils": 27, + "../base-xform": 32, + "../strings/rich-text-xform": 122 + }], + 74: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + get tag() { + return "x14:cfIcon"; + } + render(e, t) { + e.leafNode(this.tag, { + iconSet: t.iconSet, + iconId: t.iconId + }); + } + parseOpen(e) { + let { + attributes: t + } = e; + this.model = { + iconSet: t.iconSet, + iconId: n.toIntValue(t.iconId) + }; + } + parseClose(e) { + return e !== this.tag; + } + }; + }, { + "../../base-xform": 32 + }], + 75: [function (e, t, r) { + "use strict"; + + const { + v4: n + } = e("uuid"), + i = e("../../base-xform"), + s = e("../../composite-xform"), + o = e("./databar-ext-xform"), + a = e("./icon-set-ext-xform"), + l = { + "3Triangles": !0, + "3Stars": !0, + "5Boxes": !0 + }; + class c extends s { + constructor() { + super(), this.map = { + "x14:dataBar": this.databarXform = new o(), + "x14:iconSet": this.iconSetXform = new a() + }; + } + get tag() { + return "x14:cfRule"; + } + static isExt(e) { + return "dataBar" === e.type ? o.isExt(e) : !("iconSet" !== e.type || !e.custom && !l[e.iconSet]); + } + prepare(e) { + c.isExt(e) && (e.x14Id = `{${n()}}`.toUpperCase()); + } + render(e, t) { + if (c.isExt(t)) switch (t.type) { + case "dataBar": + this.renderDataBar(e, t); + break; + case "iconSet": + this.renderIconSet(e, t); + } + } + renderDataBar(e, t) { + e.openNode(this.tag, { + type: "dataBar", + id: t.x14Id + }), this.databarXform.render(e, t), e.closeNode(); + } + renderIconSet(e, t) { + e.openNode(this.tag, { + type: "iconSet", + priority: t.priority, + id: t.x14Id || `{${n()}}` + }), this.iconSetXform.render(e, t), e.closeNode(); + } + createNewModel(e) { + let { + attributes: t + } = e; + return { + type: t.type, + x14Id: t.id, + priority: i.toIntValue(t.priority) + }; + } + onParserClose(e, t) { + Object.assign(this.model, t.model); + } + } + t.exports = c; + }, { + "../../base-xform": 32, + "../../composite-xform": 48, + "./databar-ext-xform": 79, + "./icon-set-ext-xform": 81, + uuid: 528 + }], + 76: [function (e, t, r) { + "use strict"; + + const n = e("../../composite-xform"), + i = e("./f-ext-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "xm:f": this.fExtXform = new i() + }; + } + get tag() { + return "x14:cfvo"; + } + render(e, t) { + e.openNode(this.tag, { + type: t.type + }), void 0 !== t.value && this.fExtXform.render(e, t.value), e.closeNode(); + } + createNewModel(e) { + return { + type: e.attributes.type + }; + } + onParserClose(e, t) { + switch (e) { + case "xm:f": + this.model.value = t.model ? parseFloat(t.model) : 0; + } + } + }; + }, { + "../../composite-xform": 48, + "./f-ext-xform": 80 + }], + 77: [function (e, t, r) { + "use strict"; + + const n = e("../../composite-xform"), + i = e("./sqref-ext-xform"), + s = e("./cf-rule-ext-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "xm:sqref": this.sqRef = new i(), + "x14:cfRule": this.cfRule = new s() + }; + } + get tag() { + return "x14:conditionalFormatting"; + } + prepare(e, t) { + e.rules.forEach(e => { + this.cfRule.prepare(e, t); + }); + } + render(e, t) { + t.rules.some(s.isExt) && (e.openNode(this.tag, { + "xmlns:xm": "http://schemas.microsoft.com/office/excel/2006/main" + }), t.rules.filter(s.isExt).forEach(t => this.cfRule.render(e, t)), this.sqRef.render(e, t.ref), e.closeNode()); + } + createNewModel() { + return { + rules: [] + }; + } + onParserClose(e, t) { + switch (e) { + case "xm:sqref": + this.model.ref = t.model; + break; + case "x14:cfRule": + this.model.rules.push(t.model); + } + } + }; + }, { + "../../composite-xform": 48, + "./cf-rule-ext-xform": 75, + "./sqref-ext-xform": 82 + }], + 78: [function (e, t, r) { + "use strict"; + + const n = e("../../composite-xform"), + i = e("./cf-rule-ext-xform"), + s = e("./conditional-formatting-ext-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + "x14:conditionalFormatting": this.cfXform = new s() + }; + } + get tag() { + return "x14:conditionalFormattings"; + } + hasContent(e) { + return void 0 === e.hasExtContent && (e.hasExtContent = e.some(e => e.rules.some(i.isExt))), e.hasExtContent; + } + prepare(e, t) { + e.forEach(e => { + this.cfXform.prepare(e, t); + }); + } + render(e, t) { + this.hasContent(t) && (e.openNode(this.tag), t.forEach(t => this.cfXform.render(e, t)), e.closeNode()); + } + createNewModel() { + return []; + } + onParserClose(e, t) { + this.model.push(t.model); + } + }; + }, { + "../../composite-xform": 48, + "./cf-rule-ext-xform": 75, + "./conditional-formatting-ext-xform": 77 + }], + 79: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"), + i = e("../../composite-xform"), + s = e("../../style/color-xform"), + o = e("./cfvo-ext-xform"); + t.exports = class extends i { + constructor() { + super(), this.map = { + "x14:cfvo": this.cfvoXform = new o(), + "x14:borderColor": this.borderColorXform = new s("x14:borderColor"), + "x14:negativeBorderColor": this.negativeBorderColorXform = new s("x14:negativeBorderColor"), + "x14:negativeFillColor": this.negativeFillColorXform = new s("x14:negativeFillColor"), + "x14:axisColor": this.axisColorXform = new s("x14:axisColor") + }; + } + static isExt(e) { + return !e.gradient; + } + get tag() { + return "x14:dataBar"; + } + render(e, t) { + e.openNode(this.tag, { + minLength: n.toIntAttribute(t.minLength, 0, !0), + maxLength: n.toIntAttribute(t.maxLength, 100, !0), + border: n.toBoolAttribute(t.border, !1), + gradient: n.toBoolAttribute(t.gradient, !0), + negativeBarColorSameAsPositive: n.toBoolAttribute(t.negativeBarColorSameAsPositive, !0), + negativeBarBorderColorSameAsPositive: n.toBoolAttribute(t.negativeBarBorderColorSameAsPositive, !0), + axisPosition: n.toAttribute(t.axisPosition, "auto"), + direction: n.toAttribute(t.direction, "leftToRight") + }), t.cfvo.forEach(t => { + this.cfvoXform.render(e, t); + }), this.borderColorXform.render(e, t.borderColor), this.negativeBorderColorXform.render(e, t.negativeBorderColor), this.negativeFillColorXform.render(e, t.negativeFillColor), this.axisColorXform.render(e, t.axisColor), e.closeNode(); + } + createNewModel(e) { + let { + attributes: t + } = e; + return { + cfvo: [], + minLength: n.toIntValue(t.minLength, 0), + maxLength: n.toIntValue(t.maxLength, 100), + border: n.toBoolValue(t.border, !1), + gradient: n.toBoolValue(t.gradient, !0), + negativeBarColorSameAsPositive: n.toBoolValue(t.negativeBarColorSameAsPositive, !0), + negativeBarBorderColorSameAsPositive: n.toBoolValue(t.negativeBarBorderColorSameAsPositive, !0), + axisPosition: n.toStringValue(t.axisPosition, "auto"), + direction: n.toStringValue(t.direction, "leftToRight") + }; + } + onParserClose(e, t) { + const [, r] = e.split(":"); + switch (r) { + case "cfvo": + this.model.cfvo.push(t.model); + break; + default: + this.model[r] = t.model; + } + } + }; + }, { + "../../base-xform": 32, + "../../composite-xform": 48, + "../../style/color-xform": 128, + "./cfvo-ext-xform": 76 + }], + 80: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + get tag() { + return "xm:f"; + } + render(e, t) { + e.leafNode(this.tag, null, t); + } + parseOpen() { + this.model = ""; + } + parseText(e) { + this.model += e; + } + parseClose(e) { + return e !== this.tag; + } + }; + }, { + "../../base-xform": 32 + }], + 81: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"), + i = e("../../composite-xform"), + s = e("./cfvo-ext-xform"), + o = e("./cf-icon-ext-xform"); + t.exports = class extends i { + constructor() { + super(), this.map = { + "x14:cfvo": this.cfvoXform = new s(), + "x14:cfIcon": this.cfIconXform = new o() + }; + } + get tag() { + return "x14:iconSet"; + } + render(e, t) { + e.openNode(this.tag, { + iconSet: n.toStringAttribute(t.iconSet), + reverse: n.toBoolAttribute(t.reverse, !1), + showValue: n.toBoolAttribute(t.showValue, !0), + custom: n.toBoolAttribute(t.icons, !1) + }), t.cfvo.forEach(t => { + this.cfvoXform.render(e, t); + }), t.icons && t.icons.forEach((t, r) => { + t.iconId = r, this.cfIconXform.render(e, t); + }), e.closeNode(); + } + createNewModel(e) { + let { + attributes: t + } = e; + return { + cfvo: [], + iconSet: n.toStringValue(t.iconSet, "3TrafficLights"), + reverse: n.toBoolValue(t.reverse, !1), + showValue: n.toBoolValue(t.showValue, !0) + }; + } + onParserClose(e, t) { + const [, r] = e.split(":"); + switch (r) { + case "cfvo": + this.model.cfvo.push(t.model); + break; + case "cfIcon": + this.model.icons || (this.model.icons = []), this.model.icons.push(t.model); + break; + default: + this.model[r] = t.model; + } + } + }; + }, { + "../../base-xform": 32, + "../../composite-xform": 48, + "./cf-icon-ext-xform": 74, + "./cfvo-ext-xform": 76 + }], + 82: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + get tag() { + return "xm:sqref"; + } + render(e, t) { + e.leafNode(this.tag, null, t); + } + parseOpen() { + this.model = ""; + } + parseText(e) { + this.model += e; + } + parseClose(e) { + return e !== this.tag; + } + }; + }, { + "../../base-xform": 32 + }], + 83: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"), + i = e("../../composite-xform"), + s = e("../../../../doc/range"), + o = e("./databar-xform"), + a = e("./ext-lst-ref-xform"), + l = e("./formula-xform"), + c = e("./color-scale-xform"), + u = e("./icon-set-xform"), + h = { + "3Triangles": !0, + "3Stars": !0, + "5Boxes": !0 + }, + f = e => { + const { + type: t, + operator: r + } = e; + switch (t) { + case "containsText": + case "containsBlanks": + case "notContainsBlanks": + case "containsErrors": + case "notContainsErrors": + return { + type: "containsText", + operator: t + }; + default: + return { + type: t, + operator: r + }; + } + }; + class d extends i { + constructor() { + super(), this.map = { + dataBar: this.databarXform = new o(), + extLst: this.extLstRefXform = new a(), + formula: this.formulaXform = new l(), + colorScale: this.colorScaleXform = new c(), + iconSet: this.iconSetXform = new u() + }; + } + get tag() { + return "cfRule"; + } + static isPrimitive(e) { + return "iconSet" !== e.type || !e.custom && !h[e.iconSet]; + } + render(e, t) { + switch (t.type) { + case "expression": + this.renderExpression(e, t); + break; + case "cellIs": + this.renderCellIs(e, t); + break; + case "top10": + this.renderTop10(e, t); + break; + case "aboveAverage": + this.renderAboveAverage(e, t); + break; + case "dataBar": + this.renderDataBar(e, t); + break; + case "colorScale": + this.renderColorScale(e, t); + break; + case "iconSet": + this.renderIconSet(e, t); + break; + case "containsText": + this.renderText(e, t); + break; + case "timePeriod": + this.renderTimePeriod(e, t); + } + } + renderExpression(e, t) { + e.openNode(this.tag, { + type: "expression", + dxfId: t.dxfId, + priority: t.priority + }), this.formulaXform.render(e, t.formulae[0]), e.closeNode(); + } + renderCellIs(e, t) { + e.openNode(this.tag, { + type: "cellIs", + dxfId: t.dxfId, + priority: t.priority, + operator: t.operator + }), t.formulae.forEach(t => { + this.formulaXform.render(e, t); + }), e.closeNode(); + } + renderTop10(e, t) { + e.leafNode(this.tag, { + type: "top10", + dxfId: t.dxfId, + priority: t.priority, + percent: n.toBoolAttribute(t.percent, !1), + bottom: n.toBoolAttribute(t.bottom, !1), + rank: n.toIntValue(t.rank, 10, !0) + }); + } + renderAboveAverage(e, t) { + e.leafNode(this.tag, { + type: "aboveAverage", + dxfId: t.dxfId, + priority: t.priority, + aboveAverage: n.toBoolAttribute(t.aboveAverage, !0) + }); + } + renderDataBar(e, t) { + e.openNode(this.tag, { + type: "dataBar", + priority: t.priority + }), this.databarXform.render(e, t), this.extLstRefXform.render(e, t), e.closeNode(); + } + renderColorScale(e, t) { + e.openNode(this.tag, { + type: "colorScale", + priority: t.priority + }), this.colorScaleXform.render(e, t), e.closeNode(); + } + renderIconSet(e, t) { + d.isPrimitive(t) && (e.openNode(this.tag, { + type: "iconSet", + priority: t.priority + }), this.iconSetXform.render(e, t), e.closeNode()); + } + renderText(e, t) { + e.openNode(this.tag, { + type: t.operator, + dxfId: t.dxfId, + priority: t.priority, + operator: n.toStringAttribute(t.operator, "containsText") + }); + const r = (e => { + if (e.formulae && e.formulae[0]) return e.formulae[0]; + const t = new s(e.ref), + { + tl: r + } = t; + switch (e.operator) { + case "containsText": + return `NOT(ISERROR(SEARCH("${e.text}",${r})))`; + case "containsBlanks": + return `LEN(TRIM(${r}))=0`; + case "notContainsBlanks": + return `LEN(TRIM(${r}))>0`; + case "containsErrors": + return `ISERROR(${r})`; + case "notContainsErrors": + return `NOT(ISERROR(${r}))`; + default: + return; + } + })(t); + r && this.formulaXform.render(e, r), e.closeNode(); + } + renderTimePeriod(e, t) { + e.openNode(this.tag, { + type: "timePeriod", + dxfId: t.dxfId, + priority: t.priority, + timePeriod: t.timePeriod + }); + const r = (e => { + if (e.formulae && e.formulae[0]) return e.formulae[0]; + const t = new s(e.ref), + { + tl: r + } = t; + switch (e.timePeriod) { + case "thisWeek": + return `AND(TODAY()-ROUNDDOWN(${r},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${r},0)-TODAY()<=7-WEEKDAY(TODAY()))`; + case "lastWeek": + return `AND(TODAY()-ROUNDDOWN(${r},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${r},0)<(WEEKDAY(TODAY())+7))`; + case "nextWeek": + return `AND(ROUNDDOWN(${r},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${r},0)-TODAY()<(15-WEEKDAY(TODAY())))`; + case "yesterday": + return `FLOOR(${r},1)=TODAY()-1`; + case "today": + return `FLOOR(${r},1)=TODAY()`; + case "tomorrow": + return `FLOOR(${r},1)=TODAY()+1`; + case "last7Days": + return `AND(TODAY()-FLOOR(${r},1)<=6,FLOOR(${r},1)<=TODAY())`; + case "lastMonth": + return `AND(MONTH(${r})=MONTH(EDATE(TODAY(),0-1)),YEAR(${r})=YEAR(EDATE(TODAY(),0-1)))`; + case "thisMonth": + return `AND(MONTH(${r})=MONTH(TODAY()),YEAR(${r})=YEAR(TODAY()))`; + case "nextMonth": + return `AND(MONTH(${r})=MONTH(EDATE(TODAY(),0+1)),YEAR(${r})=YEAR(EDATE(TODAY(),0+1)))`; + default: + return; + } + })(t); + r && this.formulaXform.render(e, r), e.closeNode(); + } + createNewModel(e) { + let { + attributes: t + } = e; + return { + ...f(t), + dxfId: n.toIntValue(t.dxfId), + priority: n.toIntValue(t.priority), + timePeriod: t.timePeriod, + percent: n.toBoolValue(t.percent), + bottom: n.toBoolValue(t.bottom), + rank: n.toIntValue(t.rank), + aboveAverage: n.toBoolValue(t.aboveAverage) + }; + } + onParserClose(e, t) { + switch (e) { + case "dataBar": + case "extLst": + case "colorScale": + case "iconSet": + Object.assign(this.model, t.model); + break; + case "formula": + this.model.formulae = this.model.formulae || [], this.model.formulae.push(t.model); + } + } + } + t.exports = d; + }, { + "../../../../doc/range": 10, + "../../base-xform": 32, + "../../composite-xform": 48, + "./color-scale-xform": 85, + "./databar-xform": 88, + "./ext-lst-ref-xform": 89, + "./formula-xform": 90, + "./icon-set-xform": 91 + }], + 84: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + get tag() { + return "cfvo"; + } + render(e, t) { + e.leafNode(this.tag, { + type: t.type, + val: t.value + }); + } + parseOpen(e) { + this.model = { + type: e.attributes.type, + value: n.toFloatValue(e.attributes.val) + }; + } + parseClose(e) { + return e !== this.tag; + } + }; + }, { + "../../base-xform": 32 + }], + 85: [function (e, t, r) { + "use strict"; + + const n = e("../../composite-xform"), + i = e("../../style/color-xform"), + s = e("./cfvo-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + cfvo: this.cfvoXform = new s(), + color: this.colorXform = new i() + }; + } + get tag() { + return "colorScale"; + } + render(e, t) { + e.openNode(this.tag), t.cfvo.forEach(t => { + this.cfvoXform.render(e, t); + }), t.color.forEach(t => { + this.colorXform.render(e, t); + }), e.closeNode(); + } + createNewModel(e) { + return { + cfvo: [], + color: [] + }; + } + onParserClose(e, t) { + this.model[e].push(t.model); + } + }; + }, { + "../../composite-xform": 48, + "../../style/color-xform": 128, + "./cfvo-xform": 84 + }], + 86: [function (e, t, r) { + "use strict"; + + const n = e("../../composite-xform"), + i = e("./cf-rule-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + cfRule: new i() + }; + } + get tag() { + return "conditionalFormatting"; + } + render(e, t) { + t.rules.some(i.isPrimitive) && (e.openNode(this.tag, { + sqref: t.ref + }), t.rules.forEach(r => { + i.isPrimitive(r) && (r.ref = t.ref, this.map.cfRule.render(e, r)); + }), e.closeNode()); + } + createNewModel(e) { + let { + attributes: t + } = e; + return { + ref: t.sqref, + rules: [] + }; + } + onParserClose(e, t) { + this.model.rules.push(t.model); + } + }; + }, { + "../../composite-xform": 48, + "./cf-rule-xform": 83 + }], + 87: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"), + i = e("./conditional-formatting-xform"); + t.exports = class extends n { + constructor() { + super(), this.cfXform = new i(); + } + get tag() { + return "conditionalFormatting"; + } + reset() { + this.model = []; + } + prepare(e, t) { + let r = e.reduce((e, t) => Math.max(e, ...t.rules.map(e => e.priority || 0)), 1); + e.forEach(e => { + e.rules.forEach(e => { + e.priority || (e.priority = r++), e.style && (e.dxfId = t.styles.addDxfStyle(e.style)); + }); + }); + } + render(e, t) { + t.forEach(t => { + this.cfXform.render(e, t); + }); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "conditionalFormatting": + return this.parser = this.cfXform, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return !!this.parser && (!!this.parser.parseClose(e) || (this.model.push(this.parser.model), this.parser = void 0, !1)); + } + reconcile(e, t) { + e.forEach(e => { + e.rules.forEach(e => { + void 0 !== e.dxfId && (e.style = t.styles.getDxfStyle(e.dxfId), delete e.dxfId); + }); + }); + } + }; + }, { + "../../base-xform": 32, + "./conditional-formatting-xform": 86 + }], + 88: [function (e, t, r) { + "use strict"; + + const n = e("../../composite-xform"), + i = e("../../style/color-xform"), + s = e("./cfvo-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + cfvo: this.cfvoXform = new s(), + color: this.colorXform = new i() + }; + } + get tag() { + return "dataBar"; + } + render(e, t) { + e.openNode(this.tag), t.cfvo.forEach(t => { + this.cfvoXform.render(e, t); + }), this.colorXform.render(e, t.color), e.closeNode(); + } + createNewModel() { + return { + cfvo: [] + }; + } + onParserClose(e, t) { + switch (e) { + case "cfvo": + this.model.cfvo.push(t.model); + break; + case "color": + this.model.color = t.model; + } + } + }; + }, { + "../../composite-xform": 48, + "../../style/color-xform": 128, + "./cfvo-xform": 84 + }], + 89: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"), + i = e("../../composite-xform"); + class s extends n { + get tag() { + return "x14:id"; + } + render(e, t) { + e.leafNode(this.tag, null, t); + } + parseOpen() { + this.model = ""; + } + parseText(e) { + this.model += e; + } + parseClose(e) { + return e !== this.tag; + } + } + class o extends i { + constructor() { + super(), this.map = { + "x14:id": this.idXform = new s() + }; + } + get tag() { + return "ext"; + } + render(e, t) { + e.openNode(this.tag, { + uri: "{B025F937-C7B1-47D3-B67F-A62EFF666E3E}", + "xmlns:x14": "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" + }), this.idXform.render(e, t.x14Id), e.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(e, t) { + this.model.x14Id = t.model; + } + } + t.exports = class extends i { + constructor() { + super(), this.map = { + ext: new o() + }; + } + get tag() { + return "extLst"; + } + render(e, t) { + e.openNode(this.tag), this.map.ext.render(e, t), e.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(e, t) { + Object.assign(this.model, t.model); + } + }; + }, { + "../../base-xform": 32, + "../../composite-xform": 48 + }], + 90: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"); + t.exports = class extends n { + get tag() { + return "formula"; + } + render(e, t) { + e.leafNode(this.tag, null, t); + } + parseOpen() { + this.model = ""; + } + parseText(e) { + this.model += e; + } + parseClose(e) { + return e !== this.tag; + } + }; + }, { + "../../base-xform": 32 + }], + 91: [function (e, t, r) { + "use strict"; + + const n = e("../../base-xform"), + i = e("../../composite-xform"), + s = e("./cfvo-xform"); + t.exports = class extends i { + constructor() { + super(), this.map = { + cfvo: this.cfvoXform = new s() + }; + } + get tag() { + return "iconSet"; + } + render(e, t) { + e.openNode(this.tag, { + iconSet: n.toStringAttribute(t.iconSet, "3TrafficLights"), + reverse: n.toBoolAttribute(t.reverse, !1), + showValue: n.toBoolAttribute(t.showValue, !0) + }), t.cfvo.forEach(t => { + this.cfvoXform.render(e, t); + }), e.closeNode(); + } + createNewModel(e) { + let { + attributes: t + } = e; + return { + iconSet: n.toStringValue(t.iconSet, "3TrafficLights"), + reverse: n.toBoolValue(t.reverse), + showValue: n.toBoolValue(t.showValue), + cfvo: [] + }; + } + onParserClose(e, t) { + this.model[e].push(t.model); + } + }; + }, { + "../../base-xform": 32, + "../../composite-xform": 48, + "./cfvo-xform": 84 + }], + 92: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/utils"), + i = e("../base-xform"); + t.exports = class extends i { + get tag() { + return "col"; + } + prepare(e, t) { + const r = t.styles.addStyleModel(e.style || {}); + r && (e.styleId = r); + } + render(e, t) { + e.openNode("col"), e.addAttribute("min", t.min), e.addAttribute("max", t.max), t.width && e.addAttribute("width", t.width), t.styleId && e.addAttribute("style", t.styleId), t.hidden && e.addAttribute("hidden", "1"), t.bestFit && e.addAttribute("bestFit", "1"), t.outlineLevel && e.addAttribute("outlineLevel", t.outlineLevel), t.collapsed && e.addAttribute("collapsed", "1"), e.addAttribute("customWidth", "1"), e.closeNode(); + } + parseOpen(e) { + if ("col" === e.name) { + const t = this.model = { + min: parseInt(e.attributes.min || "0", 10), + max: parseInt(e.attributes.max || "0", 10), + width: void 0 === e.attributes.width ? void 0 : parseFloat(e.attributes.width || "0") + }; + return e.attributes.style && (t.styleId = parseInt(e.attributes.style, 10)), n.parseBoolean(e.attributes.hidden) && (t.hidden = !0), n.parseBoolean(e.attributes.bestFit) && (t.bestFit = !0), e.attributes.outlineLevel && (t.outlineLevel = parseInt(e.attributes.outlineLevel, 10)), n.parseBoolean(e.attributes.collapsed) && (t.collapsed = !0), !0; + } + return !1; + } + parseText() {} + parseClose() { + return !1; + } + reconcile(e, t) { + e.styleId && (e.style = t.styles.getStyleModel(e.styleId)); + } + }; + }, { + "../../../utils/utils": 27, + "../base-xform": 32 + }], + 93: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../../../utils/utils"), + s = e("../../../utils/col-cache"), + o = e("../base-xform"), + a = e("../../../doc/range"); + function l(e, t, r, n) { + const i = t[r]; + void 0 !== i ? e[r] = i : void 0 !== n && (e[r] = n); + } + function c(e, t, r, n) { + const s = t[r]; + void 0 !== s ? e[r] = i.parseBoolean(s) : void 0 !== n && (e[r] = n); + } + t.exports = class extends o { + get tag() { + return "dataValidations"; + } + render(e, t) { + const r = function (e) { + const t = n.map(e, (e, t) => ({ + address: t, + dataValidation: e, + marked: !1 + })).sort((e, t) => n.strcmp(e.address, t.address)), + r = n.keyBy(t, "address"), + i = (t, r, i) => { + for (let o = 0; o < r; o++) { + const r = s.encodeAddress(t.row + o, i); + if (!e[r] || !n.isEqual(e[t.address], e[r])) return !1; + } + return !0; + }; + return t.map(t => { + if (!t.marked) { + const o = s.decodeEx(t.address); + if (o.dimensions) return r[o.dimensions].marked = !0, { + ...t.dataValidation, + sqref: t.address + }; + let a = 1, + l = s.encodeAddress(o.row + a, o.col); + for (; e[l] && n.isEqual(t.dataValidation, e[l]);) a++, l = s.encodeAddress(o.row + a, o.col); + let c = 1; + for (; i(o, a, o.col + c);) c++; + for (let e = 0; e < a; e++) for (let t = 0; t < c; t++) l = s.encodeAddress(o.row + e, o.col + t), r[l].marked = !0; + if (a > 1 || c > 1) { + const e = o.row + (a - 1), + r = o.col + (c - 1); + return { + ...t.dataValidation, + sqref: `${t.address}:${s.encodeAddress(e, r)}` + }; + } + return { + ...t.dataValidation, + sqref: t.address + }; + } + return null; + }).filter(Boolean); + }(t); + r.length && (e.openNode("dataValidations", { + count: r.length + }), r.forEach(t => { + e.openNode("dataValidation"), "any" !== t.type && (e.addAttribute("type", t.type), t.operator && "list" !== t.type && "between" !== t.operator && e.addAttribute("operator", t.operator), t.allowBlank && e.addAttribute("allowBlank", "1")), t.showInputMessage && e.addAttribute("showInputMessage", "1"), t.promptTitle && e.addAttribute("promptTitle", t.promptTitle), t.prompt && e.addAttribute("prompt", t.prompt), t.showErrorMessage && e.addAttribute("showErrorMessage", "1"), t.errorStyle && e.addAttribute("errorStyle", t.errorStyle), t.errorTitle && e.addAttribute("errorTitle", t.errorTitle), t.error && e.addAttribute("error", t.error), e.addAttribute("sqref", t.sqref), (t.formulae || []).forEach((r, n) => { + e.openNode("formula" + (n + 1)), "date" === t.type ? e.writeText(i.dateToExcel(new Date(r))) : e.writeText(r), e.closeNode(); + }), e.closeNode(); + }), e.closeNode()); + } + parseOpen(e) { + switch (e.name) { + case "dataValidations": + return this.model = {}, !0; + case "dataValidation": + { + this._address = e.attributes.sqref; + const t = { + type: e.attributes.type || "any", + formulae: [] + }; + switch (e.attributes.type && c(t, e.attributes, "allowBlank"), c(t, e.attributes, "showInputMessage"), c(t, e.attributes, "showErrorMessage"), t.type) { + case "any": + case "list": + case "custom": + break; + default: + l(t, e.attributes, "operator", "between"); + } + return l(t, e.attributes, "promptTitle"), l(t, e.attributes, "prompt"), l(t, e.attributes, "errorStyle"), l(t, e.attributes, "errorTitle"), l(t, e.attributes, "error"), this._dataValidation = t, !0; + } + case "formula1": + case "formula2": + return this._formula = [], !0; + default: + return !1; + } + } + parseText(e) { + this._formula && this._formula.push(e); + } + parseClose(e) { + switch (e) { + case "dataValidations": + return !1; + case "dataValidation": + this._dataValidation.formulae && this._dataValidation.formulae.length || (delete this._dataValidation.formulae, delete this._dataValidation.operator); + return (this._address.split(/\s+/g) || []).forEach(e => { + if (e.includes(":")) { + new a(e).forEachAddress(e => { + this.model[e] = this._dataValidation; + }); + } else this.model[e] = this._dataValidation; + }), !0; + case "formula1": + case "formula2": + { + let e = this._formula.join(""); + switch (this._dataValidation.type) { + case "whole": + case "textLength": + e = parseInt(e, 10); + break; + case "decimal": + e = parseFloat(e); + break; + case "date": + e = i.excelToDate(parseFloat(e)); + } + return this._dataValidation.formulae.push(e), this._formula = void 0, !0; + } + default: + return !0; + } + } + }; + }, { + "../../../doc/range": 10, + "../../../utils/col-cache": 19, + "../../../utils/under-dash": 26, + "../../../utils/utils": 27, + "../base-xform": 32 + }], + 94: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "dimension"; + } + render(e, t) { + t && e.leafNode("dimension", { + ref: t + }); + } + parseOpen(e) { + return "dimension" === e.name && (this.model = e.attributes.ref, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 95: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "drawing"; + } + render(e, t) { + t && e.leafNode(this.tag, { + "r:id": t.rId + }); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + rId: e.attributes["r:id"] + }, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 96: [function (e, t, r) { + "use strict"; + + const n = e("../composite-xform"), + i = e("./cf-ext/conditional-formattings-ext-xform"); + class s extends n { + constructor() { + super(), this.map = { + "x14:conditionalFormattings": this.conditionalFormattings = new i() + }; + } + get tag() { + return "ext"; + } + hasContent(e) { + return this.conditionalFormattings.hasContent(e.conditionalFormattings); + } + prepare(e, t) { + this.conditionalFormattings.prepare(e.conditionalFormattings, t); + } + render(e, t) { + e.openNode("ext", { + uri: "{78C0D931-6437-407d-A8EE-F0AAD7539E65}", + "xmlns:x14": "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" + }), this.conditionalFormattings.render(e, t.conditionalFormattings), e.closeNode(); + } + createNewModel() { + return {}; + } + onParserClose(e, t) { + this.model[e] = t.model; + } + } + t.exports = class extends n { + constructor() { + super(), this.map = { + ext: this.ext = new s() + }; + } + get tag() { + return "extLst"; + } + prepare(e, t) { + this.ext.prepare(e, t); + } + hasContent(e) { + return this.ext.hasContent(e); + } + render(e, t) { + this.hasContent(t) && (e.openNode("extLst"), this.ext.render(e, t), e.closeNode()); + } + createNewModel() { + return {}; + } + onParserClose(e, t) { + Object.assign(this.model, t.model); + } + }; + }, { + "../composite-xform": 48, + "./cf-ext/conditional-formattings-ext-xform": 78 + }], + 97: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "headerFooter"; + } + render(e, t) { + if (t) { + e.addRollback(); + let r = !1; + e.openNode("headerFooter"), t.differentFirst && (e.addAttribute("differentFirst", "1"), r = !0), t.differentOddEven && (e.addAttribute("differentOddEven", "1"), r = !0), t.oddHeader && "string" == typeof t.oddHeader && (e.leafNode("oddHeader", null, t.oddHeader), r = !0), t.oddFooter && "string" == typeof t.oddFooter && (e.leafNode("oddFooter", null, t.oddFooter), r = !0), t.evenHeader && "string" == typeof t.evenHeader && (e.leafNode("evenHeader", null, t.evenHeader), r = !0), t.evenFooter && "string" == typeof t.evenFooter && (e.leafNode("evenFooter", null, t.evenFooter), r = !0), t.firstHeader && "string" == typeof t.firstHeader && (e.leafNode("firstHeader", null, t.firstHeader), r = !0), t.firstFooter && "string" == typeof t.firstFooter && (e.leafNode("firstFooter", null, t.firstFooter), r = !0), r ? (e.closeNode(), e.commit()) : e.rollback(); + } + } + parseOpen(e) { + switch (e.name) { + case "headerFooter": + return this.model = {}, e.attributes.differentFirst && (this.model.differentFirst = 1 === parseInt(e.attributes.differentFirst, 0)), e.attributes.differentOddEven && (this.model.differentOddEven = 1 === parseInt(e.attributes.differentOddEven, 0)), !0; + case "oddHeader": + return this.currentNode = "oddHeader", !0; + case "oddFooter": + return this.currentNode = "oddFooter", !0; + case "evenHeader": + return this.currentNode = "evenHeader", !0; + case "evenFooter": + return this.currentNode = "evenFooter", !0; + case "firstHeader": + return this.currentNode = "firstHeader", !0; + case "firstFooter": + return this.currentNode = "firstFooter", !0; + default: + return !1; + } + } + parseText(e) { + switch (this.currentNode) { + case "oddHeader": + this.model.oddHeader = e; + break; + case "oddFooter": + this.model.oddFooter = e; + break; + case "evenHeader": + this.model.evenHeader = e; + break; + case "evenFooter": + this.model.evenFooter = e; + break; + case "firstHeader": + this.model.firstHeader = e; + break; + case "firstFooter": + this.model.firstFooter = e; + } + } + parseClose() { + switch (this.currentNode) { + case "oddHeader": + case "oddFooter": + case "evenHeader": + case "evenFooter": + case "firstHeader": + case "firstFooter": + return this.currentNode = void 0, !0; + default: + return !1; + } + } + }; + }, { + "../base-xform": 32 + }], + 98: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "hyperlink"; + } + render(e, t) { + this.isInternalLink(t) ? e.leafNode("hyperlink", { + ref: t.address, + "r:id": t.rId, + tooltip: t.tooltip, + location: t.target + }) : e.leafNode("hyperlink", { + ref: t.address, + "r:id": t.rId, + tooltip: t.tooltip + }); + } + parseOpen(e) { + return "hyperlink" === e.name && (this.model = { + address: e.attributes.ref, + rId: e.attributes["r:id"], + tooltip: e.attributes.tooltip + }, e.attributes.location && (this.model.target = e.attributes.location), !0); + } + parseText() {} + parseClose() { + return !1; + } + isInternalLink(e) { + return e.target && /^[^!]+![a-zA-Z]+[\d]+$/.test(e.target); + } + }; + }, { + "../base-xform": 32 + }], + 99: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "mergeCell"; + } + render(e, t) { + e.leafNode("mergeCell", { + ref: t + }); + } + parseOpen(e) { + return "mergeCell" === e.name && (this.model = e.attributes.ref, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 100: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../../../doc/range"), + s = e("../../../utils/col-cache"), + o = e("../../../doc/enums"); + t.exports = class { + constructor() { + this.merges = {}; + } + add(e) { + if (this.merges[e.master]) this.merges[e.master].expandToAddress(e.address);else { + const t = `${e.master}:${e.address}`; + this.merges[e.master] = new i(t); + } + } + get mergeCells() { + return n.map(this.merges, e => e.range); + } + reconcile(e, t) { + n.each(e, e => { + const r = s.decode(e); + for (let e = r.top; e <= r.bottom; e++) { + const n = t[e - 1]; + for (let t = r.left; t <= r.right; t++) { + const i = n.cells[t - 1]; + i ? i.type === o.ValueType.Merge && (i.master = r.tl) : n.cells[t] = { + type: o.ValueType.Null, + address: s.encodeAddress(e, t) + }; + } + } + }); + } + getMasterAddress(e) { + const t = this.hash[e]; + return t && t.tl; + } + }; + }, { + "../../../doc/enums": 7, + "../../../doc/range": 10, + "../../../utils/col-cache": 19, + "../../../utils/under-dash": 26 + }], + 101: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e => void 0 !== e; + t.exports = class extends n { + get tag() { + return "outlinePr"; + } + render(e, t) { + return !(!t || !i(t.summaryBelow) && !i(t.summaryRight)) && (e.leafNode(this.tag, { + summaryBelow: i(t.summaryBelow) ? Number(t.summaryBelow) : void 0, + summaryRight: i(t.summaryRight) ? Number(t.summaryRight) : void 0 + }), !0); + } + parseOpen(e) { + return e.name === this.tag && (this.model = { + summaryBelow: i(e.attributes.summaryBelow) ? Boolean(Number(e.attributes.summaryBelow)) : void 0, + summaryRight: i(e.attributes.summaryRight) ? Boolean(Number(e.attributes.summaryRight)) : void 0 + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 102: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "brk"; + } + render(e, t) { + e.leafNode("brk", t); + } + parseOpen(e) { + return "brk" === e.name && (this.model = e.attributes.ref, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 103: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../base-xform"); + t.exports = class extends i { + get tag() { + return "pageMargins"; + } + render(e, t) { + if (t) { + const r = { + left: t.left, + right: t.right, + top: t.top, + bottom: t.bottom, + header: t.header, + footer: t.footer + }; + n.some(r, e => void 0 !== e) && e.leafNode(this.tag, r); + } + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + left: parseFloat(e.attributes.left || .7), + right: parseFloat(e.attributes.right || .7), + top: parseFloat(e.attributes.top || .75), + bottom: parseFloat(e.attributes.bottom || .75), + header: parseFloat(e.attributes.header || .3), + footer: parseFloat(e.attributes.footer || .3) + }, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../utils/under-dash": 26, + "../base-xform": 32 + }], + 104: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "pageSetUpPr"; + } + render(e, t) { + return !(!t || !t.fitToPage) && (e.leafNode(this.tag, { + fitToPage: t.fitToPage ? "1" : void 0 + }), !0); + } + parseOpen(e) { + return e.name === this.tag && (this.model = { + fitToPage: "1" === e.attributes.fitToPage + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 105: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../base-xform"); + function s(e) { + return e ? "1" : void 0; + } + function o(e) { + switch (e) { + case "overThenDown": + return e; + default: + return; + } + } + function a(e) { + switch (e) { + case "atEnd": + case "asDisplyed": + return e; + default: + return; + } + } + function l(e) { + switch (e) { + case "dash": + case "blank": + case "NA": + return e; + default: + return; + } + } + t.exports = class extends i { + get tag() { + return "pageSetup"; + } + render(e, t) { + if (t) { + const r = { + paperSize: t.paperSize, + orientation: t.orientation, + horizontalDpi: t.horizontalDpi, + verticalDpi: t.verticalDpi, + pageOrder: o(t.pageOrder), + blackAndWhite: s(t.blackAndWhite), + draft: s(t.draft), + cellComments: a(t.cellComments), + errors: l(t.errors), + scale: t.scale, + fitToWidth: t.fitToWidth, + fitToHeight: t.fitToHeight, + firstPageNumber: t.firstPageNumber, + useFirstPageNumber: s(t.firstPageNumber), + usePrinterDefaults: s(t.usePrinterDefaults), + copies: t.copies + }; + n.some(r, e => void 0 !== e) && e.leafNode(this.tag, r); + } + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + paperSize: (t = e.attributes.paperSize, void 0 !== t ? parseInt(t, 10) : void 0), + orientation: e.attributes.orientation || "portrait", + horizontalDpi: parseInt(e.attributes.horizontalDpi || "4294967295", 10), + verticalDpi: parseInt(e.attributes.verticalDpi || "4294967295", 10), + pageOrder: e.attributes.pageOrder || "downThenOver", + blackAndWhite: "1" === e.attributes.blackAndWhite, + draft: "1" === e.attributes.draft, + cellComments: e.attributes.cellComments || "None", + errors: e.attributes.errors || "displayed", + scale: parseInt(e.attributes.scale || "100", 10), + fitToWidth: parseInt(e.attributes.fitToWidth || "1", 10), + fitToHeight: parseInt(e.attributes.fitToHeight || "1", 10), + firstPageNumber: parseInt(e.attributes.firstPageNumber || "1", 10), + useFirstPageNumber: "1" === e.attributes.useFirstPageNumber, + usePrinterDefaults: "1" === e.attributes.usePrinterDefaults, + copies: parseInt(e.attributes.copies || "1", 10) + }, !0; + default: + return !1; + } + var t; + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../utils/under-dash": 26, + "../base-xform": 32 + }], + 106: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "picture"; + } + render(e, t) { + t && e.leafNode(this.tag, { + "r:id": t.rId + }); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + rId: e.attributes["r:id"] + }, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 107: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../base-xform"); + function s(e) { + return e ? "1" : void 0; + } + t.exports = class extends i { + get tag() { + return "printOptions"; + } + render(e, t) { + if (t) { + const r = { + headings: s(t.showRowColHeaders), + gridLines: s(t.showGridLines), + horizontalCentered: s(t.horizontalCentered), + verticalCentered: s(t.verticalCentered) + }; + n.some(r, e => void 0 !== e) && e.leafNode(this.tag, r); + } + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + showRowColHeaders: "1" === e.attributes.headings, + showGridLines: "1" === e.attributes.gridLines, + horizontalCentered: "1" === e.attributes.horizontalCentered, + verticalCentered: "1" === e.attributes.verticalCentered + }, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../utils/under-dash": 26, + "../base-xform": 32 + }], + 108: [function (e, t, r) { + "use strict"; + + const n = e("./page-breaks-xform"), + i = e("../list-xform"); + t.exports = class extends i { + constructor() { + super({ + tag: "rowBreaks", + count: !0, + childXform: new n() + }); + } + render(e, t) { + if (t && t.length) { + e.openNode(this.tag, this.$), this.count && (e.addAttribute(this.$count, t.length), e.addAttribute("manualBreakCount", t.length)); + const { + childXform: r + } = this; + t.forEach(t => { + r.render(e, t); + }), e.closeNode(); + } else this.empty && e.leafNode(this.tag); + } + }; + }, { + "../list-xform": 71, + "./page-breaks-xform": 102 + }], + 109: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../../../utils/utils"), + s = e("./cell-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.maxItems = e && e.maxItems, this.map = { + c: new s() + }; + } + get tag() { + return "row"; + } + prepare(e, t) { + const r = t.styles.addStyleModel(e.style); + r && (e.styleId = r); + const n = this.map.c; + e.cells.forEach(e => { + n.prepare(e, t); + }); + } + render(e, t, r) { + e.openNode("row"), e.addAttribute("r", t.number), t.height && (e.addAttribute("ht", t.height), e.addAttribute("customHeight", "1")), t.hidden && e.addAttribute("hidden", "1"), t.min > 0 && t.max > 0 && t.min <= t.max && e.addAttribute("spans", `${t.min}:${t.max}`), t.styleId && (e.addAttribute("s", t.styleId), e.addAttribute("customFormat", "1")), e.addAttribute("x14ac:dyDescent", "0.25"), t.outlineLevel && e.addAttribute("outlineLevel", t.outlineLevel), t.collapsed && e.addAttribute("collapsed", "1"); + const n = this.map.c; + t.cells.forEach(t => { + n.render(e, t, r); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + if ("row" === e.name) { + this.numRowsSeen += 1; + const t = e.attributes.spans ? e.attributes.spans.split(":").map(e => parseInt(e, 10)) : [void 0, void 0], + r = this.model = { + number: parseInt(e.attributes.r, 10), + min: t[0], + max: t[1], + cells: [] + }; + return e.attributes.s && (r.styleId = parseInt(e.attributes.s, 10)), i.parseBoolean(e.attributes.hidden) && (r.hidden = !0), i.parseBoolean(e.attributes.bestFit) && (r.bestFit = !0), e.attributes.ht && (r.height = parseFloat(e.attributes.ht)), e.attributes.outlineLevel && (r.outlineLevel = parseInt(e.attributes.outlineLevel, 10)), i.parseBoolean(e.attributes.collapsed) && (r.collapsed = !0), !0; + } + return this.parser = this.map[e.name], !!this.parser && (this.parser.parseOpen(e), !0); + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) { + if (!this.parser.parseClose(e)) { + if (this.model.cells.push(this.parser.model), this.maxItems && this.model.cells.length > this.maxItems) throw new Error(`Max column count (${this.maxItems}) exceeded`); + this.parser = void 0; + } + return !0; + } + return !1; + } + reconcile(e, t) { + e.style = e.styleId ? t.styles.getStyleModel(e.styleId) : {}, void 0 !== e.styleId && (e.styleId = void 0); + const r = this.map.c; + e.cells.forEach(e => { + r.reconcile(e, t); + }); + } + }; + }, { + "../../../utils/utils": 27, + "../base-xform": 32, + "./cell-xform": 73 + }], + 110: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../base-xform"); + t.exports = class extends i { + get tag() { + return "sheetFormatPr"; + } + render(e, t) { + if (t) { + const r = { + defaultRowHeight: t.defaultRowHeight, + outlineLevelRow: t.outlineLevelRow, + outlineLevelCol: t.outlineLevelCol, + "x14ac:dyDescent": t.dyDescent + }; + t.defaultColWidth && (r.defaultColWidth = t.defaultColWidth), t.defaultRowHeight && 15 === t.defaultRowHeight || (r.customHeight = "1"), n.some(r, e => void 0 !== e) && e.leafNode("sheetFormatPr", r); + } + } + parseOpen(e) { + return "sheetFormatPr" === e.name && (this.model = { + defaultRowHeight: parseFloat(e.attributes.defaultRowHeight || "0"), + dyDescent: parseFloat(e.attributes["x14ac:dyDescent"] || "0"), + outlineLevelRow: parseInt(e.attributes.outlineLevelRow || "0", 10), + outlineLevelCol: parseInt(e.attributes.outlineLevelCol || "0", 10) + }, e.attributes.defaultColWidth && (this.model.defaultColWidth = parseFloat(e.attributes.defaultColWidth)), !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../utils/under-dash": 26, + "../base-xform": 32 + }], + 111: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../style/color-xform"), + s = e("./page-setup-properties-xform"), + o = e("./outline-properties-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + tabColor: new i("tabColor"), + pageSetUpPr: new s(), + outlinePr: new o() + }; + } + get tag() { + return "sheetPr"; + } + render(e, t) { + if (t) { + e.addRollback(), e.openNode("sheetPr"); + let r = !1; + r = this.map.tabColor.render(e, t.tabColor) || r, r = this.map.pageSetUpPr.render(e, t.pageSetup) || r, r = this.map.outlinePr.render(e, t.outlineProperties) || r, r ? (e.closeNode(), e.commit()) : e.rollback(); + } + } + parseOpen(e) { + return this.parser ? (this.parser.parseOpen(e), !0) : e.name === this.tag ? (this.reset(), !0) : !!this.map[e.name] && (this.parser = this.map[e.name], this.parser.parseOpen(e), !0); + } + parseText(e) { + return !!this.parser && (this.parser.parseText(e), !0); + } + parseClose(e) { + return this.parser ? (this.parser.parseClose(e) || (this.parser = void 0), !0) : (this.map.tabColor.model || this.map.pageSetUpPr.model || this.map.outlinePr.model ? (this.model = {}, this.map.tabColor.model && (this.model.tabColor = this.map.tabColor.model), this.map.pageSetUpPr.model && (this.model.pageSetup = this.map.pageSetUpPr.model), this.map.outlinePr.model && (this.model.outlineProperties = this.map.outlinePr.model)) : this.model = null, !1); + } + }; + }, { + "../base-xform": 32, + "../style/color-xform": 128, + "./outline-properties-xform": 101, + "./page-setup-properties-xform": 104 + }], + 112: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../base-xform"); + function s(e, t) { + return e ? t : void 0; + } + function o(e, t) { + return e === t || void 0; + } + t.exports = class extends i { + get tag() { + return "sheetProtection"; + } + render(e, t) { + if (t) { + const r = { + sheet: s(t.sheet, "1"), + selectLockedCells: !1 === t.selectLockedCells ? "1" : void 0, + selectUnlockedCells: !1 === t.selectUnlockedCells ? "1" : void 0, + formatCells: s(t.formatCells, "0"), + formatColumns: s(t.formatColumns, "0"), + formatRows: s(t.formatRows, "0"), + insertColumns: s(t.insertColumns, "0"), + insertRows: s(t.insertRows, "0"), + insertHyperlinks: s(t.insertHyperlinks, "0"), + deleteColumns: s(t.deleteColumns, "0"), + deleteRows: s(t.deleteRows, "0"), + sort: s(t.sort, "0"), + autoFilter: s(t.autoFilter, "0"), + pivotTables: s(t.pivotTables, "0") + }; + t.sheet && (r.algorithmName = t.algorithmName, r.hashValue = t.hashValue, r.saltValue = t.saltValue, r.spinCount = t.spinCount, r.objects = s(!1 === t.objects, "1"), r.scenarios = s(!1 === t.scenarios, "1")), n.some(r, e => void 0 !== e) && e.leafNode(this.tag, r); + } + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + sheet: o(e.attributes.sheet, "1"), + objects: "1" !== e.attributes.objects && void 0, + scenarios: "1" !== e.attributes.scenarios && void 0, + selectLockedCells: "1" !== e.attributes.selectLockedCells && void 0, + selectUnlockedCells: "1" !== e.attributes.selectUnlockedCells && void 0, + formatCells: o(e.attributes.formatCells, "0"), + formatColumns: o(e.attributes.formatColumns, "0"), + formatRows: o(e.attributes.formatRows, "0"), + insertColumns: o(e.attributes.insertColumns, "0"), + insertRows: o(e.attributes.insertRows, "0"), + insertHyperlinks: o(e.attributes.insertHyperlinks, "0"), + deleteColumns: o(e.attributes.deleteColumns, "0"), + deleteRows: o(e.attributes.deleteRows, "0"), + sort: o(e.attributes.sort, "0"), + autoFilter: o(e.attributes.autoFilter, "0"), + pivotTables: o(e.attributes.pivotTables, "0") + }, e.attributes.algorithmName && (this.model.algorithmName = e.attributes.algorithmName, this.model.hashValue = e.attributes.hashValue, this.model.saltValue = e.attributes.saltValue, this.model.spinCount = parseInt(e.attributes.spinCount, 10)), !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../utils/under-dash": 26, + "../base-xform": 32 + }], + 113: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/col-cache"), + i = e("../base-xform"), + s = { + frozen: "frozen", + frozenSplit: "frozen", + split: "split" + }; + t.exports = class extends i { + get tag() { + return "sheetView"; + } + prepare(e) { + switch (e.state) { + case "frozen": + case "split": + break; + default: + e.state = "normal"; + } + } + render(e, t) { + e.openNode("sheetView", { + workbookViewId: t.workbookViewId || 0 + }); + const r = function (t, r, n) { + n && e.addAttribute(t, r); + }; + let i, s, o, a; + switch (r("rightToLeft", "1", !0 === t.rightToLeft), r("tabSelected", "1", t.tabSelected), r("showRuler", "0", !1 === t.showRuler), r("showRowColHeaders", "0", !1 === t.showRowColHeaders), r("showGridLines", "0", !1 === t.showGridLines), r("zoomScale", t.zoomScale, t.zoomScale), r("zoomScaleNormal", t.zoomScaleNormal, t.zoomScaleNormal), r("view", t.style, t.style), t.state) { + case "frozen": + s = t.xSplit || 0, o = t.ySplit || 0, i = t.topLeftCell || n.getAddress(o + 1, s + 1).address, a = (t.xSplit && t.ySplit ? "bottomRight" : t.xSplit && "topRight") || "bottomLeft", e.leafNode("pane", { + xSplit: t.xSplit || void 0, + ySplit: t.ySplit || void 0, + topLeftCell: i, + activePane: a, + state: "frozen" + }), e.leafNode("selection", { + pane: a, + activeCell: t.activeCell, + sqref: t.activeCell + }); + break; + case "split": + "topLeft" === t.activePane && (t.activePane = void 0), e.leafNode("pane", { + xSplit: t.xSplit || void 0, + ySplit: t.ySplit || void 0, + topLeftCell: t.topLeftCell, + activePane: t.activePane + }), e.leafNode("selection", { + pane: t.activePane, + activeCell: t.activeCell, + sqref: t.activeCell + }); + break; + case "normal": + t.activeCell && e.leafNode("selection", { + activeCell: t.activeCell, + sqref: t.activeCell + }); + } + e.closeNode(); + } + parseOpen(e) { + switch (e.name) { + case "sheetView": + return this.sheetView = { + workbookViewId: parseInt(e.attributes.workbookViewId, 10), + rightToLeft: "1" === e.attributes.rightToLeft, + tabSelected: "1" === e.attributes.tabSelected, + showRuler: !("0" === e.attributes.showRuler), + showRowColHeaders: !("0" === e.attributes.showRowColHeaders), + showGridLines: !("0" === e.attributes.showGridLines), + zoomScale: parseInt(e.attributes.zoomScale || "100", 10), + zoomScaleNormal: parseInt(e.attributes.zoomScaleNormal || "100", 10), + style: e.attributes.view + }, this.pane = void 0, this.selections = {}, !0; + case "pane": + return this.pane = { + xSplit: parseInt(e.attributes.xSplit || "0", 10), + ySplit: parseInt(e.attributes.ySplit || "0", 10), + topLeftCell: e.attributes.topLeftCell, + activePane: e.attributes.activePane || "topLeft", + state: e.attributes.state + }, !0; + case "selection": + { + const t = e.attributes.pane || "topLeft"; + return this.selections[t] = { + pane: t, + activeCell: e.attributes.activeCell + }, !0; + } + default: + return !1; + } + } + parseText() {} + parseClose(e) { + let t, r; + switch (e) { + case "sheetView": + return this.sheetView && this.pane ? (t = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: s[this.pane.state] || "split", + xSplit: this.pane.xSplit, + ySplit: this.pane.ySplit, + topLeftCell: this.pane.topLeftCell, + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }, "split" === this.model.state && (t.activePane = this.pane.activePane), r = this.selections[this.pane.activePane], r && r.activeCell && (t.activeCell = r.activeCell), this.sheetView.style && (t.style = this.sheetView.style)) : (t = this.model = { + workbookViewId: this.sheetView.workbookViewId, + rightToLeft: this.sheetView.rightToLeft, + state: "normal", + showRuler: this.sheetView.showRuler, + showRowColHeaders: this.sheetView.showRowColHeaders, + showGridLines: this.sheetView.showGridLines, + zoomScale: this.sheetView.zoomScale, + zoomScaleNormal: this.sheetView.zoomScaleNormal + }, r = this.selections.topLeft, r && r.activeCell && (t.activeCell = r.activeCell), this.sheetView.style && (t.style = this.sheetView.style)), !1; + default: + return !0; + } + } + reconcile() {} + }; + }, { + "../../../utils/col-cache": 19, + "../base-xform": 32 + }], + 114: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "tablePart"; + } + render(e, t) { + t && e.leafNode(this.tag, { + "r:id": t.rId + }); + } + parseOpen(e) { + switch (e.name) { + case this.tag: + return this.model = { + rId: e.attributes["r:id"] + }, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 115: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../../../utils/col-cache"), + s = e("../../../utils/xml-stream"), + o = e("../../rel-type"), + a = e("./merges"), + l = e("../base-xform"), + c = e("../list-xform"), + u = e("./row-xform"), + h = e("./col-xform"), + f = e("./dimension-xform"), + d = e("./hyperlink-xform"), + p = e("./merge-cell-xform"), + m = e("./data-validations-xform"), + b = e("./sheet-properties-xform"), + g = e("./sheet-format-properties-xform"), + y = e("./sheet-view-xform"), + v = e("./sheet-protection-xform"), + w = e("./page-margins-xform"), + _ = e("./page-setup-xform"), + x = e("./print-options-xform"), + k = e("./auto-filter-xform"), + S = e("./picture-xform"), + M = e("./drawing-xform"), + C = e("./table-part-xform"), + T = e("./row-breaks-xform"), + E = e("./header-footer-xform"), + A = e("./cf/conditional-formattings-xform"), + R = e("./ext-lst-xform"), + O = (e, t) => { + if (!t || !t.length) return e; + if (!e || !e.length) return t; + const r = {}, + n = {}; + return e.forEach(e => { + r[e.ref] = e, e.rules.forEach(e => { + const { + x14Id: t + } = e; + t && (n[t] = e); + }); + }), t.forEach(t => { + t.rules.forEach(i => { + const s = n[i.x14Id]; + s ? ((e, t) => { + Object.keys(t).forEach(r => { + const n = e[r], + i = t[r]; + void 0 === n && void 0 !== i && (e[r] = i); + }); + })(s, i) : r[t.ref] ? r[t.ref].rules.push(i) : e.push({ + ref: t.ref, + rules: [i] + }); + }); + }), e; + }; + class j extends l { + constructor(e) { + super(); + const { + maxRows: t, + maxCols: r, + ignoreNodes: n + } = e || {}; + this.ignoreNodes = n || [], this.map = { + sheetPr: new b(), + dimension: new f(), + sheetViews: new c({ + tag: "sheetViews", + count: !1, + childXform: new y() + }), + sheetFormatPr: new g(), + cols: new c({ + tag: "cols", + count: !1, + childXform: new h() + }), + sheetData: new c({ + tag: "sheetData", + count: !1, + empty: !0, + childXform: new u({ + maxItems: r + }), + maxItems: t + }), + autoFilter: new k(), + mergeCells: new c({ + tag: "mergeCells", + count: !0, + childXform: new p() + }), + rowBreaks: new T(), + hyperlinks: new c({ + tag: "hyperlinks", + count: !1, + childXform: new d() + }), + pageMargins: new w(), + dataValidations: new m(), + pageSetup: new _(), + headerFooter: new E(), + printOptions: new x(), + picture: new S(), + drawing: new M(), + sheetProtection: new v(), + tableParts: new c({ + tag: "tableParts", + count: !0, + childXform: new C() + }), + conditionalFormatting: new A(), + extLst: new R() + }; + } + prepare(e, t) { + t.merges = new a(), e.hyperlinks = t.hyperlinks = [], e.comments = t.comments = [], t.formulae = {}, t.siFormulae = 0, this.map.cols.prepare(e.cols, t), this.map.sheetData.prepare(e.rows, t), this.map.conditionalFormatting.prepare(e.conditionalFormattings, t), e.mergeCells = t.merges.mergeCells; + const r = e.rels = []; + function n(e) { + return "rId" + (e.length + 1); + } + if (e.hyperlinks.forEach(e => { + const t = n(r); + e.rId = t, r.push({ + Id: t, + Type: o.Hyperlink, + Target: e.target, + TargetMode: "External" + }); + }), e.comments.length > 0) { + const s = { + Id: n(r), + Type: o.Comments, + Target: `../comments${e.id}.xml` + }; + r.push(s); + const a = { + Id: n(r), + Type: o.VmlDrawing, + Target: `../drawings/vmlDrawing${e.id}.vml` + }; + r.push(a), e.comments.forEach(e => { + e.refAddress = i.decodeAddress(e.ref); + }), t.commentRefs.push({ + commentName: "comments" + e.id, + vmlDrawing: "vmlDrawing" + e.id + }); + } + const s = []; + let l; + e.media.forEach(i => { + if ("background" === i.type) { + const s = n(r); + l = t.media[i.imageId], r.push({ + Id: s, + Type: o.Image, + Target: `../media/${l.name}.${l.extension}` + }), e.background = { + rId: s + }, e.image = t.media[i.imageId]; + } else if ("image" === i.type) { + let { + drawing: a + } = e; + l = t.media[i.imageId], a || (a = e.drawing = { + rId: n(r), + name: "drawing" + ++t.drawingsCount, + anchors: [], + rels: [] + }, t.drawings.push(a), r.push({ + Id: a.rId, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing", + Target: `../drawings/${a.name}.xml` + })); + let c = this.preImageId === i.imageId ? s[i.imageId] : s[a.rels.length]; + c || (c = n(a.rels), s[a.rels.length] = c, a.rels.push({ + Id: c, + Type: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", + Target: `../media/${l.name}.${l.extension}` + })); + const u = { + picture: { + rId: c + }, + range: i.range + }; + if (i.hyperlinks && i.hyperlinks.hyperlink) { + const e = n(a.rels); + s[a.rels.length] = e, u.picture.hyperlinks = { + tooltip: i.hyperlinks.tooltip, + rId: e + }, a.rels.push({ + Id: e, + Type: o.Hyperlink, + Target: i.hyperlinks.hyperlink, + TargetMode: "External" + }); + } + this.preImageId = i.imageId, a.anchors.push(u); + } + }), e.tables.forEach(e => { + const i = n(r); + e.rId = i, r.push({ + Id: i, + Type: o.Table, + Target: "../tables/" + e.target + }), e.columns.forEach(e => { + const { + style: r + } = e; + r && (e.dxfId = t.styles.addDxfStyle(r)); + }); + }), this.map.extLst.prepare(e, t); + } + render(e, t) { + e.openXml(s.StdDocAttributes), e.openNode("worksheet", j.WORKSHEET_ATTRIBUTES); + const r = t.properties ? { + defaultRowHeight: t.properties.defaultRowHeight, + dyDescent: t.properties.dyDescent, + outlineLevelCol: t.properties.outlineLevelCol, + outlineLevelRow: t.properties.outlineLevelRow + } : void 0; + t.properties && t.properties.defaultColWidth && (r.defaultColWidth = t.properties.defaultColWidth); + const n = { + outlineProperties: t.properties && t.properties.outlineProperties, + tabColor: t.properties && t.properties.tabColor, + pageSetup: t.pageSetup && t.pageSetup.fitToPage ? { + fitToPage: t.pageSetup.fitToPage + } : void 0 + }, + i = t.pageSetup && t.pageSetup.margins, + a = { + showRowColHeaders: t.pageSetup && t.pageSetup.showRowColHeaders, + showGridLines: t.pageSetup && t.pageSetup.showGridLines, + horizontalCentered: t.pageSetup && t.pageSetup.horizontalCentered, + verticalCentered: t.pageSetup && t.pageSetup.verticalCentered + }, + l = t.sheetProtection; + this.map.sheetPr.render(e, n), this.map.dimension.render(e, t.dimensions), this.map.sheetViews.render(e, t.views), this.map.sheetFormatPr.render(e, r), this.map.cols.render(e, t.cols), this.map.sheetData.render(e, t.rows), this.map.sheetProtection.render(e, l), this.map.autoFilter.render(e, t.autoFilter), this.map.mergeCells.render(e, t.mergeCells), this.map.conditionalFormatting.render(e, t.conditionalFormattings), this.map.dataValidations.render(e, t.dataValidations), this.map.hyperlinks.render(e, t.hyperlinks), this.map.printOptions.render(e, a), this.map.pageMargins.render(e, i), this.map.pageSetup.render(e, t.pageSetup), this.map.headerFooter.render(e, t.headerFooter), this.map.rowBreaks.render(e, t.rowBreaks), this.map.drawing.render(e, t.drawing), this.map.picture.render(e, t.background), this.map.tableParts.render(e, t.tables), this.map.extLst.render(e, t), t.rels && t.rels.forEach(t => { + t.Type === o.VmlDrawing && e.leafNode("legacyDrawing", { + "r:id": t.Id + }); + }), e.closeNode(); + } + parseOpen(e) { + return this.parser ? (this.parser.parseOpen(e), !0) : "worksheet" === e.name ? (n.each(this.map, e => { + e.reset(); + }), !0) : (this.map[e.name] && !this.ignoreNodes.includes(e.name) && (this.parser = this.map[e.name], this.parser.parseOpen(e)), !0); + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case "worksheet": + { + const e = this.map.sheetFormatPr.model || {}; + this.map.sheetPr.model && this.map.sheetPr.model.tabColor && (e.tabColor = this.map.sheetPr.model.tabColor), this.map.sheetPr.model && this.map.sheetPr.model.outlineProperties && (e.outlineProperties = this.map.sheetPr.model.outlineProperties); + const t = { + fitToPage: this.map.sheetPr.model && this.map.sheetPr.model.pageSetup && this.map.sheetPr.model.pageSetup.fitToPage || !1, + margins: this.map.pageMargins.model + }, + r = Object.assign(t, this.map.pageSetup.model, this.map.printOptions.model), + n = O(this.map.conditionalFormatting.model, this.map.extLst.model && this.map.extLst.model["x14:conditionalFormattings"]); + return this.model = { + dimensions: this.map.dimension.model, + cols: this.map.cols.model, + rows: this.map.sheetData.model, + mergeCells: this.map.mergeCells.model, + hyperlinks: this.map.hyperlinks.model, + dataValidations: this.map.dataValidations.model, + properties: e, + views: this.map.sheetViews.model, + pageSetup: r, + headerFooter: this.map.headerFooter.model, + background: this.map.picture.model, + drawing: this.map.drawing.model, + tables: this.map.tableParts.model, + conditionalFormattings: n + }, this.map.autoFilter.model && (this.model.autoFilter = this.map.autoFilter.model), this.map.sheetProtection.model && (this.model.sheetProtection = this.map.sheetProtection.model), !1; + } + default: + return !0; + } + } + reconcile(e, t) { + const r = (e.relationships || []).reduce((r, n) => { + if (r[n.Id] = n, n.Type === o.Comments && (e.comments = t.comments[n.Target].comments), n.Type === o.VmlDrawing && e.comments && e.comments.length) { + const r = t.vmlDrawings[n.Target].comments; + e.comments.forEach((e, t) => { + e.note = Object.assign({}, e.note, r[t]); + }); + } + return r; + }, {}); + if (t.commentsMap = (e.comments || []).reduce((e, t) => (t.ref && (e[t.ref] = t), e), {}), t.hyperlinkMap = (e.hyperlinks || []).reduce((e, t) => (t.rId && (e[t.address] = r[t.rId].Target), e), {}), t.formulae = {}, e.rows = e.rows && e.rows.filter(Boolean) || [], e.rows.forEach(e => { + e.cells = e.cells && e.cells.filter(Boolean) || []; + }), this.map.cols.reconcile(e.cols, t), this.map.sheetData.reconcile(e.rows, t), this.map.conditionalFormatting.reconcile(e.conditionalFormattings, t), e.media = [], e.drawing) { + const n = r[e.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/); + if (n) { + const r = n[1]; + t.drawings[r].anchors.forEach(t => { + if (t.medium) { + const r = { + type: "image", + imageId: t.medium.index, + range: t.range, + hyperlinks: t.picture.hyperlinks + }; + e.media.push(r); + } + }); + } + } + const n = e.background && r[e.background.rId]; + if (n) { + const r = n.Target.split("/media/")[1], + i = t.mediaIndex && t.mediaIndex[r]; + void 0 !== i && e.media.push({ + type: "background", + imageId: i + }); + } + e.tables = (e.tables || []).map(e => { + const n = r[e.rId]; + return t.tables[n.Target]; + }), delete e.relationships, delete e.hyperlinks, delete e.comments; + } + } + j.WORKSHEET_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", + "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", + "mc:Ignorable": "x14ac", + "xmlns:x14ac": "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" + }, t.exports = j; + }, { + "../../../utils/col-cache": 19, + "../../../utils/under-dash": 26, + "../../../utils/xml-stream": 28, + "../../rel-type": 31, + "../base-xform": 32, + "../list-xform": 71, + "./auto-filter-xform": 72, + "./cf/conditional-formattings-xform": 87, + "./col-xform": 92, + "./data-validations-xform": 93, + "./dimension-xform": 94, + "./drawing-xform": 95, + "./ext-lst-xform": 96, + "./header-footer-xform": 97, + "./hyperlink-xform": 98, + "./merge-cell-xform": 99, + "./merges": 100, + "./page-margins-xform": 103, + "./page-setup-xform": 105, + "./picture-xform": 106, + "./print-options-xform": 107, + "./row-breaks-xform": 108, + "./row-xform": 109, + "./sheet-format-properties-xform": 110, + "./sheet-properties-xform": 111, + "./sheet-protection-xform": 112, + "./sheet-view-xform": 113, + "./table-part-xform": 114 + }], + 116: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.attr = e.attr; + } + render(e, t) { + t && (e.openNode(this.tag), e.closeNode()); + } + parseOpen(e) { + e.name === this.tag && (this.model = !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 117: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.attr = e.attr, this.attrs = e.attrs, this._format = e.format || function (e) { + try { + return Number.isNaN(e.getTime()) ? "" : e.toISOString(); + } catch (e) { + return ""; + } + }, this._parse = e.parse || function (e) { + return new Date(e); + }; + } + render(e, t) { + t && (e.openNode(this.tag), this.attrs && e.addAttributes(this.attrs), this.attr ? e.addAttribute(this.attr, this._format(t)) : e.writeText(this._format(t)), e.closeNode()); + } + parseOpen(e) { + e.name === this.tag && (this.attr ? this.model = this._parse(e.attributes[this.attr]) : this.text = []); + } + parseText(e) { + this.attr || this.text.push(e); + } + parseClose() { + return this.attr || (this.model = this._parse(this.text.join(""))), !1; + } + }; + }, { + "../base-xform": 32 + }], + 118: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.attr = e.attr, this.attrs = e.attrs, this.zero = e.zero; + } + render(e, t) { + (t || this.zero) && (e.openNode(this.tag), this.attrs && e.addAttributes(this.attrs), this.attr ? e.addAttribute(this.attr, t) : e.writeText(t), e.closeNode()); + } + parseOpen(e) { + return e.name === this.tag && (this.attr ? this.model = parseInt(e.attributes[this.attr], 10) : this.text = [], !0); + } + parseText(e) { + this.attr || this.text.push(e); + } + parseClose() { + return this.attr || (this.model = parseInt(this.text.join("") || 0, 10)), !1; + } + }; + }, { + "../base-xform": 32 + }], + 119: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.tag = e.tag, this.attr = e.attr, this.attrs = e.attrs; + } + render(e, t) { + void 0 !== t && (e.openNode(this.tag), this.attrs && e.addAttributes(this.attrs), this.attr ? e.addAttribute(this.attr, t) : e.writeText(t), e.closeNode()); + } + parseOpen(e) { + e.name === this.tag && (this.attr ? this.model = e.attributes[this.attr] : this.text = []); + } + parseText(e) { + this.attr || this.text.push(e); + } + parseClose() { + return this.attr || (this.model = this.text.join("")), !1; + } + }; + }, { + "../base-xform": 32 + }], + 120: [function (e, t, r) { + "use strict"; + + const n = e("./base-xform"), + i = e("../../utils/xml-stream"); + t.exports = class extends n { + constructor(e) { + super(), this._model = e; + } + render(e) { + if (!this._xml) { + const e = new i(); + !function e(t, r) { + t.openNode(r.tag, r.$), r.c && r.c.forEach(r => { + e(t, r); + }), r.t && t.writeText(r.t), t.closeNode(); + }(e, this._model), this._xml = e.xml; + } + e.writeXml(this._xml); + } + parseOpen() { + return !0; + } + parseText() {} + parseClose(e) { + switch (e) { + case this._model.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../../utils/xml-stream": 28, + "./base-xform": 32 + }], + 121: [function (e, t, r) { + "use strict"; + + const n = e("./text-xform"), + i = e("./rich-text-xform"), + s = e("../base-xform"); + t.exports = class extends s { + constructor() { + super(), this.map = { + r: new i(), + t: new n() + }; + } + get tag() { + return "rPh"; + } + render(e, t) { + if (e.openNode(this.tag, { + sb: t.sb || 0, + eb: t.eb || 0 + }), t && t.hasOwnProperty("richText") && t.richText) { + const { + r: r + } = this.map; + t.richText.forEach(t => { + r.render(e, t); + }); + } else t && this.map.t.render(e, t.text); + e.closeNode(); + } + parseOpen(e) { + const { + name: t + } = e; + return this.parser ? (this.parser.parseOpen(e), !0) : t === this.tag ? (this.model = { + sb: parseInt(e.attributes.sb, 10), + eb: parseInt(e.attributes.eb, 10) + }, !0) : (this.parser = this.map[t], !!this.parser && (this.parser.parseOpen(e), !0)); + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) { + if (!this.parser.parseClose(e)) { + switch (e) { + case "r": + { + let e = this.model.richText; + e || (e = this.model.richText = []), e.push(this.parser.model); + break; + } + case "t": + this.model.text = this.parser.model; + } + this.parser = void 0; + } + return !0; + } + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "./rich-text-xform": 122, + "./text-xform": 125 + }], + 122: [function (e, t, r) { + "use strict"; + + const n = e("./text-xform"), + i = e("../style/font-xform"), + s = e("../base-xform"); + class o extends s { + constructor(e) { + super(), this.model = e; + } + get tag() { + return "r"; + } + get textXform() { + return this._textXform || (this._textXform = new n()); + } + get fontXform() { + return this._fontXform || (this._fontXform = new i(o.FONT_OPTIONS)); + } + render(e, t) { + t = t || this.model, e.openNode("r"), t.font && this.fontXform.render(e, t.font), this.textXform.render(e, t.text), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "r": + return this.model = {}, !0; + case "t": + return this.parser = this.textXform, this.parser.parseOpen(e), !0; + case "rPr": + return this.parser = this.fontXform, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + switch (e) { + case "r": + return !1; + case "t": + return this.model.text = this.parser.model, this.parser = void 0, !0; + case "rPr": + return this.model.font = this.parser.model, this.parser = void 0, !0; + default: + return this.parser && this.parser.parseClose(e), !0; + } + } + } + o.FONT_OPTIONS = { + tagName: "rPr", + fontNameTag: "rFont" + }, t.exports = o; + }, { + "../base-xform": 32, + "../style/font-xform": 131, + "./text-xform": 125 + }], + 123: [function (e, t, r) { + "use strict"; + + const n = e("./text-xform"), + i = e("./rich-text-xform"), + s = e("./phonetic-text-xform"), + o = e("../base-xform"); + t.exports = class extends o { + constructor(e) { + super(), this.model = e, this.map = { + r: new i(), + t: new n(), + rPh: new s() + }; + } + get tag() { + return "si"; + } + render(e, t) { + e.openNode(this.tag), t && t.hasOwnProperty("richText") && t.richText ? t.richText.length ? t.richText.forEach(t => { + this.map.r.render(e, t); + }) : this.map.t.render(e, "") : null != t && this.map.t.render(e, t), e.closeNode(); + } + parseOpen(e) { + const { + name: t + } = e; + return this.parser ? (this.parser.parseOpen(e), !0) : t === this.tag ? (this.model = {}, !0) : (this.parser = this.map[t], !!this.parser && (this.parser.parseOpen(e), !0)); + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) { + if (!this.parser.parseClose(e)) { + switch (e) { + case "r": + { + let e = this.model.richText; + e || (e = this.model.richText = []), e.push(this.parser.model); + break; + } + case "t": + this.model = this.parser.model; + } + this.parser = void 0; + } + return !0; + } + switch (e) { + case this.tag: + return !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "./phonetic-text-xform": 121, + "./rich-text-xform": 122, + "./text-xform": 125 + }], + 124: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"), + s = e("./shared-string-xform"); + t.exports = class extends i { + constructor(e) { + super(), this.model = e || { + values: [], + count: 0 + }, this.hash = Object.create(null), this.rich = Object.create(null); + } + get sharedStringXform() { + return this._sharedStringXform || (this._sharedStringXform = new s()); + } + get values() { + return this.model.values; + } + get uniqueCount() { + return this.model.values.length; + } + get count() { + return this.model.count; + } + getString(e) { + return this.model.values[e]; + } + add(e) { + return e.richText ? this.addRichText(e) : this.addText(e); + } + addText(e) { + let t = this.hash[e]; + return void 0 === t && (t = this.hash[e] = this.model.values.length, this.model.values.push(e)), this.model.count++, t; + } + addRichText(e) { + const t = this.sharedStringXform.toXml(e); + let r = this.rich[t]; + return void 0 === r && (r = this.rich[t] = this.model.values.length, this.model.values.push(e)), this.model.count++, r; + } + render(e, t) { + t = t || this._values, e.openXml(n.StdDocAttributes), e.openNode("sst", { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + count: t.count, + uniqueCount: t.values.length + }); + const r = this.sharedStringXform; + t.values.forEach(t => { + r.render(e, t); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "sst": + return !0; + case "si": + return this.parser = this.sharedStringXform, this.parser.parseOpen(e), !0; + default: + throw new Error("Unexpected xml node in parseOpen: " + JSON.stringify(e)); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.model.values.push(this.parser.model), this.model.count++, this.parser = void 0), !0; + switch (e) { + case "sst": + return !1; + default: + throw new Error("Unexpected xml node in parseClose: " + e); + } + } + }; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "./shared-string-xform": 123 + }], + 125: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "t"; + } + render(e, t) { + e.openNode("t"), /^\s|\n|\s$/.test(t) && e.addAttribute("xml:space", "preserve"), e.writeText(t), e.closeNode(); + } + get model() { + return this._text.join("").replace(/_x([0-9A-F]{4})_/g, (e, t) => String.fromCharCode(parseInt(t, 16))); + } + parseOpen(e) { + switch (e.name) { + case "t": + return this._text = [], !0; + default: + return !1; + } + } + parseText(e) { + this._text.push(e); + } + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 126: [function (e, t, r) { + "use strict"; + + const n = e("../../../doc/enums"), + i = e("../../../utils/utils"), + s = e("../base-xform"), + o = { + horizontalValues: ["left", "center", "right", "fill", "centerContinuous", "distributed", "justify"].reduce((e, t) => (e[t] = !0, e), {}), + horizontal(e) { + return this.horizontalValues[e] ? e : void 0; + }, + verticalValues: ["top", "middle", "bottom", "distributed", "justify"].reduce((e, t) => (e[t] = !0, e), {}), + vertical(e) { + return "middle" === e ? "center" : this.verticalValues[e] ? e : void 0; + }, + wrapText: e => !!e || void 0, + shrinkToFit: e => !!e || void 0, + textRotation(e) { + switch (e) { + case "vertical": + return e; + default: + return (e = i.validInt(e)) >= -90 && e <= 90 ? e : void 0; + } + }, + indent: e => (e = i.validInt(e), Math.max(0, e)), + readingOrder(e) { + switch (e) { + case "ltr": + return n.ReadingOrder.LeftToRight; + case "rtl": + return n.ReadingOrder.RightToLeft; + default: + return; + } + } + }, + a = { + toXml(e) { + if (e = o.textRotation(e)) { + if ("vertical" === e) return 255; + const t = Math.round(e); + if (t >= 0 && t <= 90) return t; + if (t < 0 && t >= -90) return 90 - t; + } + }, + toModel(e) { + const t = i.validInt(e); + if (void 0 !== t) { + if (255 === t) return "vertical"; + if (t >= 0 && t <= 90) return t; + if (t > 90 && t <= 180) return 90 - t; + } + } + }; + t.exports = class extends s { + get tag() { + return "alignment"; + } + render(e, t) { + e.addRollback(), e.openNode("alignment"); + let r = !1; + function n(t, n) { + n && (e.addAttribute(t, n), r = !0); + } + n("horizontal", o.horizontal(t.horizontal)), n("vertical", o.vertical(t.vertical)), n("wrapText", !!o.wrapText(t.wrapText) && "1"), n("shrinkToFit", !!o.shrinkToFit(t.shrinkToFit) && "1"), n("indent", o.indent(t.indent)), n("textRotation", a.toXml(t.textRotation)), n("readingOrder", o.readingOrder(t.readingOrder)), e.closeNode(), r ? e.commit() : e.rollback(); + } + parseOpen(e) { + const t = {}; + let r = !1; + function n(e, n, i) { + e && (t[n] = i, r = !0); + } + n(e.attributes.horizontal, "horizontal", e.attributes.horizontal), n(e.attributes.vertical, "vertical", "center" === e.attributes.vertical ? "middle" : e.attributes.vertical), n(e.attributes.wrapText, "wrapText", i.parseBoolean(e.attributes.wrapText)), n(e.attributes.shrinkToFit, "shrinkToFit", i.parseBoolean(e.attributes.shrinkToFit)), n(e.attributes.indent, "indent", parseInt(e.attributes.indent, 10)), n(e.attributes.textRotation, "textRotation", a.toModel(e.attributes.textRotation)), n(e.attributes.readingOrder, "readingOrder", "2" === e.attributes.readingOrder ? "rtl" : "ltr"), this.model = r ? t : null; + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../../../doc/enums": 7, + "../../../utils/utils": 27, + "../base-xform": 32 + }], + 127: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../../../utils/utils"), + s = e("./color-xform"); + class o extends n { + constructor(e) { + super(), this.name = e, this.map = { + color: new s() + }; + } + get tag() { + return this.name; + } + render(e, t, r) { + const n = t && t.color || r || this.defaultColor; + e.openNode(this.name), t && t.style && (e.addAttribute("style", t.style), n && this.map.color.render(e, n)), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.name: + { + const { + style: t + } = e.attributes; + return this.model = t ? { + style: t + } : void 0, !0; + } + case "color": + return this.parser = this.map.color, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return this.parser ? (this.parser.parseClose(e) || (this.parser = void 0), !0) : (e === this.name && this.map.color.model && (this.model || (this.model = {}), this.model.color = this.map.color.model), !1); + } + validStyle(e) { + return o.validStyleValues[e]; + } + } + o.validStyleValues = ["thin", "dashed", "dotted", "dashDot", "hair", "dashDotDot", "slantDashDot", "mediumDashed", "mediumDashDotDot", "mediumDashDot", "medium", "double", "thick"].reduce((e, t) => (e[t] = !0, e), {}); + t.exports = class extends n { + constructor() { + super(), this.map = { + top: new o("top"), + left: new o("left"), + bottom: new o("bottom"), + right: new o("right"), + diagonal: new o("diagonal") + }; + } + render(e, t) { + const { + color: r + } = t; + function n(n, i) { + n && !n.color && t.color && (n = { + ...n, + color: t.color + }), i.render(e, n, r); + } + e.openNode("border"), t.diagonal && t.diagonal.style && (t.diagonal.up && e.addAttribute("diagonalUp", "1"), t.diagonal.down && e.addAttribute("diagonalDown", "1")), n(t.left, this.map.left), n(t.right, this.map.right), n(t.top, this.map.top), n(t.bottom, this.map.bottom), n(t.diagonal, this.map.diagonal), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "border": + return this.reset(), this.diagonalUp = i.parseBoolean(e.attributes.diagonalUp), this.diagonalDown = i.parseBoolean(e.attributes.diagonalDown), !0; + default: + return this.parser = this.map[e.name], !!this.parser && (this.parser.parseOpen(e), !0); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + if ("border" === e) { + const e = this.model = {}, + t = function (t, r, n) { + r && (n && Object.assign(r, n), e[t] = r); + }; + t("left", this.map.left.model), t("right", this.map.right.model), t("top", this.map.top.model), t("bottom", this.map.bottom.model), t("diagonal", this.map.diagonal.model, { + up: this.diagonalUp, + down: this.diagonalDown + }); + } + return !1; + } + }; + }, { + "../../../utils/utils": 27, + "../base-xform": 32, + "./color-xform": 128 + }], + 128: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.name = e || "color"; + } + get tag() { + return this.name; + } + render(e, t) { + return !!t && (e.openNode(this.name), t.argb ? e.addAttribute("rgb", t.argb) : void 0 !== t.theme ? (e.addAttribute("theme", t.theme), void 0 !== t.tint && e.addAttribute("tint", t.tint)) : void 0 !== t.indexed ? e.addAttribute("indexed", t.indexed) : e.addAttribute("auto", "1"), e.closeNode(), !0); + } + parseOpen(e) { + return e.name === this.name && (e.attributes.rgb ? this.model = { + argb: e.attributes.rgb + } : e.attributes.theme ? (this.model = { + theme: parseInt(e.attributes.theme, 10) + }, e.attributes.tint && (this.model.tint = parseFloat(e.attributes.tint))) : e.attributes.indexed ? this.model = { + indexed: parseInt(e.attributes.indexed, 10) + } : this.model = void 0, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 129: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./alignment-xform"), + s = e("./border-xform"), + o = e("./fill-xform"), + a = e("./font-xform"), + l = e("./numfmt-xform"), + c = e("./protection-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + alignment: new i(), + border: new s(), + fill: new o(), + font: new a(), + numFmt: new l(), + protection: new c() + }; + } + get tag() { + return "dxf"; + } + render(e, t) { + if (e.openNode(this.tag), t.font && this.map.font.render(e, t.font), t.numFmt && t.numFmtId) { + const r = { + id: t.numFmtId, + formatCode: t.numFmt + }; + this.map.numFmt.render(e, r); + } + t.fill && this.map.fill.render(e, t.fill), t.alignment && this.map.alignment.render(e, t.alignment), t.border && this.map.border.render(e, t.border), t.protection && this.map.protection.render(e, t.protection), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + return this.reset(), !0; + default: + return this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e), !0; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return this.parser ? (this.parser.parseClose(e) || (this.parser = void 0), !0) : e !== this.tag || (this.model = { + alignment: this.map.alignment.model, + border: this.map.border.model, + fill: this.map.fill.model, + font: this.map.font.model, + numFmt: this.map.numFmt.model, + protection: this.map.protection.model + }, !1); + } + }; + }, { + "../base-xform": 32, + "./alignment-xform": 126, + "./border-xform": 127, + "./fill-xform": 130, + "./font-xform": 131, + "./numfmt-xform": 132, + "./protection-xform": 133 + }], + 130: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./color-xform"); + class s extends n { + constructor() { + super(), this.map = { + color: new i() + }; + } + get tag() { + return "stop"; + } + render(e, t) { + e.openNode("stop"), e.addAttribute("position", t.position), this.map.color.render(e, t.color), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "stop": + return this.model = { + position: parseFloat(e.attributes.position) + }, !0; + case "color": + return this.parser = this.map.color, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText() {} + parseClose(e) { + return !!this.parser && (this.parser.parseClose(e) || (this.model.color = this.parser.model, this.parser = void 0), !0); + } + } + class o extends n { + constructor() { + super(), this.map = { + fgColor: new i("fgColor"), + bgColor: new i("bgColor") + }; + } + get name() { + return "pattern"; + } + get tag() { + return "patternFill"; + } + render(e, t) { + e.openNode("patternFill"), e.addAttribute("patternType", t.pattern), t.fgColor && this.map.fgColor.render(e, t.fgColor), t.bgColor && this.map.bgColor.render(e, t.bgColor), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "patternFill": + return this.model = { + type: "pattern", + pattern: e.attributes.patternType + }, !0; + default: + return this.parser = this.map[e.name], !!this.parser && (this.parser.parseOpen(e), !0); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return !!this.parser && (this.parser.parseClose(e) || (this.parser.model && (this.model[e] = this.parser.model), this.parser = void 0), !0); + } + } + class a extends n { + constructor() { + super(), this.map = { + stop: new s() + }; + } + get name() { + return "gradient"; + } + get tag() { + return "gradientFill"; + } + render(e, t) { + switch (e.openNode("gradientFill"), t.gradient) { + case "angle": + e.addAttribute("degree", t.degree); + break; + case "path": + e.addAttribute("type", "path"), t.center.left && (e.addAttribute("left", t.center.left), void 0 === t.center.right && e.addAttribute("right", t.center.left)), t.center.right && e.addAttribute("right", t.center.right), t.center.top && (e.addAttribute("top", t.center.top), void 0 === t.center.bottom && e.addAttribute("bottom", t.center.top)), t.center.bottom && e.addAttribute("bottom", t.center.bottom); + } + const r = this.map.stop; + t.stops.forEach(t => { + r.render(e, t); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "gradientFill": + { + const t = this.model = { + stops: [] + }; + return e.attributes.degree ? (t.gradient = "angle", t.degree = parseInt(e.attributes.degree, 10)) : "path" === e.attributes.type && (t.gradient = "path", t.center = { + left: e.attributes.left ? parseFloat(e.attributes.left) : 0, + top: e.attributes.top ? parseFloat(e.attributes.top) : 0 + }, e.attributes.right !== e.attributes.left && (t.center.right = e.attributes.right ? parseFloat(e.attributes.right) : 0), e.attributes.bottom !== e.attributes.top && (t.center.bottom = e.attributes.bottom ? parseFloat(e.attributes.bottom) : 0)), !0; + } + case "stop": + return this.parser = this.map.stop, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return !!this.parser && (this.parser.parseClose(e) || (this.model.stops.push(this.parser.model), this.parser = void 0), !0); + } + } + class l extends n { + constructor() { + super(), this.map = { + patternFill: new o(), + gradientFill: new a() + }; + } + get tag() { + return "fill"; + } + render(e, t) { + switch (e.addRollback(), e.openNode("fill"), t.type) { + case "pattern": + this.map.patternFill.render(e, t); + break; + case "gradient": + this.map.gradientFill.render(e, t); + break; + default: + return void e.rollback(); + } + e.closeNode(), e.commit(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "fill": + return this.model = {}, !0; + default: + return this.parser = this.map[e.name], !!this.parser && (this.parser.parseOpen(e), !0); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return !!this.parser && (this.parser.parseClose(e) || (this.model = this.parser.model, this.model.type = this.parser.name, this.parser = void 0), !0); + } + validStyle(e) { + return l.validPatternValues[e]; + } + } + l.validPatternValues = ["none", "solid", "darkVertical", "darkGray", "mediumGray", "lightGray", "gray125", "gray0625", "darkHorizontal", "darkVertical", "darkDown", "darkUp", "darkGrid", "darkTrellis", "lightHorizontal", "lightVertical", "lightDown", "lightUp", "lightGrid", "lightTrellis", "lightGrid"].reduce((e, t) => (e[t] = !0, e), {}), l.StopXform = s, l.PatternFillXform = o, l.GradientFillXform = a, t.exports = l; + }, { + "../base-xform": 32, + "./color-xform": 128 + }], + 131: [function (e, t, r) { + "use strict"; + + const n = e("./color-xform"), + i = e("../simple/boolean-xform"), + s = e("../simple/integer-xform"), + o = e("../simple/string-xform"), + a = e("./underline-xform"), + l = e("../../../utils/under-dash"), + c = e("../base-xform"); + class u extends c { + constructor(e) { + super(), this.options = e || u.OPTIONS, this.map = { + b: { + prop: "bold", + xform: new i({ + tag: "b", + attr: "val" + }) + }, + i: { + prop: "italic", + xform: new i({ + tag: "i", + attr: "val" + }) + }, + u: { + prop: "underline", + xform: new a() + }, + charset: { + prop: "charset", + xform: new s({ + tag: "charset", + attr: "val" + }) + }, + color: { + prop: "color", + xform: new n() + }, + condense: { + prop: "condense", + xform: new i({ + tag: "condense", + attr: "val" + }) + }, + extend: { + prop: "extend", + xform: new i({ + tag: "extend", + attr: "val" + }) + }, + family: { + prop: "family", + xform: new s({ + tag: "family", + attr: "val" + }) + }, + outline: { + prop: "outline", + xform: new i({ + tag: "outline", + attr: "val" + }) + }, + vertAlign: { + prop: "vertAlign", + xform: new o({ + tag: "vertAlign", + attr: "val" + }) + }, + scheme: { + prop: "scheme", + xform: new o({ + tag: "scheme", + attr: "val" + }) + }, + shadow: { + prop: "shadow", + xform: new i({ + tag: "shadow", + attr: "val" + }) + }, + strike: { + prop: "strike", + xform: new i({ + tag: "strike", + attr: "val" + }) + }, + sz: { + prop: "size", + xform: new s({ + tag: "sz", + attr: "val" + }) + } + }, this.map[this.options.fontNameTag] = { + prop: "name", + xform: new o({ + tag: this.options.fontNameTag, + attr: "val" + }) + }; + } + get tag() { + return this.options.tagName; + } + render(e, t) { + const { + map: r + } = this; + e.openNode(this.options.tagName), l.each(this.map, (n, i) => { + r[i].xform.render(e, t[n.prop]); + }), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + if (this.map[e.name]) return this.parser = this.map[e.name].xform, this.parser.parseOpen(e); + switch (e.name) { + case this.options.tagName: + return this.model = {}, !0; + default: + return !1; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser && !this.parser.parseClose(e)) { + const t = this.map[e]; + return this.parser.model && (this.model[t.prop] = this.parser.model), this.parser = void 0, !0; + } + switch (e) { + case this.options.tagName: + return !1; + default: + return !0; + } + } + } + u.OPTIONS = { + tagName: "font", + fontNameTag: "name" + }, t.exports = u; + }, { + "../../../utils/under-dash": 26, + "../base-xform": 32, + "../simple/boolean-xform": 116, + "../simple/integer-xform": 118, + "../simple/string-xform": 119, + "./color-xform": 128, + "./underline-xform": 136 + }], + 132: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/under-dash"), + i = e("../../defaultnumformats"), + s = e("../base-xform"); + const o = function () { + const e = {}; + return n.each(i, (t, r) => { + t.f && (e[t.f] = parseInt(r, 10)); + }), e; + }(); + class a extends s { + constructor(e, t) { + super(), this.id = e, this.formatCode = t; + } + get tag() { + return "numFmt"; + } + render(e, t) { + e.leafNode("numFmt", { + numFmtId: t.id, + formatCode: t.formatCode + }); + } + parseOpen(e) { + switch (e.name) { + case "numFmt": + return this.model = { + id: parseInt(e.attributes.numFmtId, 10), + formatCode: e.attributes.formatCode.replace(/[\\](.)/g, "$1") + }, !0; + default: + return !1; + } + } + parseText() {} + parseClose() { + return !1; + } + } + a.getDefaultFmtId = function (e) { + return o[e]; + }, a.getDefaultFmtCode = function (e) { + return i[e] && i[e].f; + }, t.exports = a; + }, { + "../../../utils/under-dash": 26, + "../../defaultnumformats": 30, + "../base-xform": 32 + }], + 133: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = { + boolean: (e, t) => void 0 === e ? t : e + }; + t.exports = class extends n { + get tag() { + return "protection"; + } + render(e, t) { + e.addRollback(), e.openNode("protection"); + let r = !1; + function n(t, n) { + void 0 !== n && (e.addAttribute(t, n), r = !0); + } + n("locked", i.boolean(t.locked, !0) ? void 0 : "0"), n("hidden", i.boolean(t.hidden, !1) ? "1" : void 0), e.closeNode(), r ? e.commit() : e.rollback(); + } + parseOpen(e) { + const t = { + locked: !("0" === e.attributes.locked), + hidden: "1" === e.attributes.hidden + }, + r = !t.locked || t.hidden; + this.model = r ? t : null; + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 134: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./alignment-xform"), + s = e("./protection-xform"); + t.exports = class extends n { + constructor(e) { + super(), this.xfId = !(!e || !e.xfId), this.map = { + alignment: new i(), + protection: new s() + }; + } + get tag() { + return "xf"; + } + render(e, t) { + e.openNode("xf", { + numFmtId: t.numFmtId || 0, + fontId: t.fontId || 0, + fillId: t.fillId || 0, + borderId: t.borderId || 0 + }), this.xfId && e.addAttribute("xfId", t.xfId || 0), t.numFmtId && e.addAttribute("applyNumberFormat", "1"), t.fontId && e.addAttribute("applyFont", "1"), t.fillId && e.addAttribute("applyFill", "1"), t.borderId && e.addAttribute("applyBorder", "1"), t.alignment && e.addAttribute("applyAlignment", "1"), t.protection && e.addAttribute("applyProtection", "1"), t.alignment && this.map.alignment.render(e, t.alignment), t.protection && this.map.protection.render(e, t.protection), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "xf": + return this.model = { + numFmtId: parseInt(e.attributes.numFmtId, 10), + fontId: parseInt(e.attributes.fontId, 10), + fillId: parseInt(e.attributes.fillId, 10), + borderId: parseInt(e.attributes.borderId, 10) + }, this.xfId && (this.model.xfId = parseInt(e.attributes.xfId, 10)), !0; + case "alignment": + return this.parser = this.map.alignment, this.parser.parseOpen(e), !0; + case "protection": + return this.parser = this.map.protection, this.parser.parseOpen(e), !0; + default: + return !1; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + return this.parser ? (this.parser.parseClose(e) || (this.map.protection === this.parser ? this.model.protection = this.parser.model : this.model.alignment = this.parser.model, this.parser = void 0), !0) : "xf" !== e; + } + }; + }, { + "../base-xform": 32, + "./alignment-xform": 126, + "./protection-xform": 133 + }], + 135: [function (e, t, r) { + "use strict"; + + const n = e("../../../doc/enums"), + i = e("../../../utils/xml-stream"), + s = e("../base-xform"), + o = e("../static-xform"), + a = e("../list-xform"), + l = e("./font-xform"), + c = e("./fill-xform"), + u = e("./border-xform"), + h = e("./numfmt-xform"), + f = e("./style-xform"), + d = e("./dxf-xform"); + class p extends s { + constructor(e) { + super(), this.map = { + numFmts: new a({ + tag: "numFmts", + count: !0, + childXform: new h() + }), + fonts: new a({ + tag: "fonts", + count: !0, + childXform: new l(), + $: { + "x14ac:knownFonts": 1 + } + }), + fills: new a({ + tag: "fills", + count: !0, + childXform: new c() + }), + borders: new a({ + tag: "borders", + count: !0, + childXform: new u() + }), + cellStyleXfs: new a({ + tag: "cellStyleXfs", + count: !0, + childXform: new f() + }), + cellXfs: new a({ + tag: "cellXfs", + count: !0, + childXform: new f({ + xfId: !0 + }) + }), + dxfs: new a({ + tag: "dxfs", + always: !0, + count: !0, + childXform: new d() + }), + numFmt: new h(), + font: new l(), + fill: new c(), + border: new u(), + style: new f({ + xfId: !0 + }), + cellStyles: p.STATIC_XFORMS.cellStyles, + tableStyles: p.STATIC_XFORMS.tableStyles, + extLst: p.STATIC_XFORMS.extLst + }, e && this.init(); + } + initIndex() { + this.index = { + style: {}, + numFmt: {}, + numFmtNextId: 164, + font: {}, + border: {}, + fill: {} + }; + } + init() { + this.model = { + styles: [], + numFmts: [], + fonts: [], + borders: [], + fills: [], + dxfs: [] + }, this.initIndex(), this._addBorder({}), this._addStyle({ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }), this._addFill({ + type: "pattern", + pattern: "none" + }), this._addFill({ + type: "pattern", + pattern: "gray125" + }), this.weakMap = new WeakMap(); + } + render(e, t) { + t = t || this.model, e.openXml(i.StdDocAttributes), e.openNode("styleSheet", p.STYLESHEET_ATTRIBUTES), this.index ? (t.numFmts && t.numFmts.length && (e.openNode("numFmts", { + count: t.numFmts.length + }), t.numFmts.forEach(t => { + e.writeXml(t); + }), e.closeNode()), t.fonts.length || this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: "Calibri", + family: 2, + scheme: "minor" + }), e.openNode("fonts", { + count: t.fonts.length, + "x14ac:knownFonts": 1 + }), t.fonts.forEach(t => { + e.writeXml(t); + }), e.closeNode(), e.openNode("fills", { + count: t.fills.length + }), t.fills.forEach(t => { + e.writeXml(t); + }), e.closeNode(), e.openNode("borders", { + count: t.borders.length + }), t.borders.forEach(t => { + e.writeXml(t); + }), e.closeNode(), this.map.cellStyleXfs.render(e, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]), e.openNode("cellXfs", { + count: t.styles.length + }), t.styles.forEach(t => { + e.writeXml(t); + }), e.closeNode()) : (this.map.numFmts.render(e, t.numFmts), this.map.fonts.render(e, t.fonts), this.map.fills.render(e, t.fills), this.map.borders.render(e, t.borders), this.map.cellStyleXfs.render(e, [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }]), this.map.cellXfs.render(e, t.styles)), p.STATIC_XFORMS.cellStyles.render(e), this.map.dxfs.render(e, t.dxfs), p.STATIC_XFORMS.tableStyles.render(e), p.STATIC_XFORMS.extLst.render(e), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case "styleSheet": + return this.initIndex(), !0; + default: + return this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e), !0; + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case "styleSheet": + { + this.model = {}; + const e = (e, t) => { + t.model && t.model.length && (this.model[e] = t.model); + }; + if (e("numFmts", this.map.numFmts), e("fonts", this.map.fonts), e("fills", this.map.fills), e("borders", this.map.borders), e("styles", this.map.cellXfs), e("dxfs", this.map.dxfs), this.index = { + model: [], + numFmt: [] + }, this.model.numFmts) { + const e = this.index.numFmt; + this.model.numFmts.forEach(t => { + e[t.id] = t.formatCode; + }); + } + return !1; + } + default: + return !0; + } + } + addStyleModel(e, t) { + if (!e) return 0; + if (this.model.fonts.length || this._addFont({ + size: 11, + color: { + theme: 1 + }, + name: "Calibri", + family: 2, + scheme: "minor" + }), this.weakMap && this.weakMap.has(e)) return this.weakMap.get(e); + const r = {}; + if (t = t || n.ValueType.Number, e.numFmt) r.numFmtId = this._addNumFmtStr(e.numFmt);else switch (t) { + case n.ValueType.Number: + r.numFmtId = this._addNumFmtStr("General"); + break; + case n.ValueType.Date: + r.numFmtId = this._addNumFmtStr("mm-dd-yy"); + } + e.font && (r.fontId = this._addFont(e.font)), e.border && (r.borderId = this._addBorder(e.border)), e.fill && (r.fillId = this._addFill(e.fill)), e.alignment && (r.alignment = e.alignment), e.protection && (r.protection = e.protection); + const i = this._addStyle(r); + return this.weakMap && this.weakMap.set(e, i), i; + } + getStyleModel(e) { + const t = this.model.styles[e]; + if (!t) return null; + let r = this.index.model[e]; + if (r) return r; + if (r = this.index.model[e] = {}, t.numFmtId) { + const e = this.index.numFmt[t.numFmtId] || h.getDefaultFmtCode(t.numFmtId); + e && (r.numFmt = e); + } + function n(e, t, n) { + if (n || 0 === n) { + const i = t[n]; + i && (r[e] = i); + } + } + return n("font", this.model.fonts, t.fontId), n("border", this.model.borders, t.borderId), n("fill", this.model.fills, t.fillId), t.alignment && (r.alignment = t.alignment), t.protection && (r.protection = t.protection), r; + } + addDxfStyle(e) { + return e.numFmt && (e.numFmtId = this._addNumFmtStr(e.numFmt)), this.model.dxfs.push(e), this.model.dxfs.length - 1; + } + getDxfStyle(e) { + return this.model.dxfs[e]; + } + _addStyle(e) { + const t = this.map.style.toXml(e); + let r = this.index.style[t]; + return void 0 === r && (r = this.index.style[t] = this.model.styles.length, this.model.styles.push(t)), r; + } + _addNumFmtStr(e) { + let t = h.getDefaultFmtId(e); + if (void 0 !== t) return t; + if (t = this.index.numFmt[e], void 0 !== t) return t; + t = this.index.numFmt[e] = 164 + this.model.numFmts.length; + const r = this.map.numFmt.toXml({ + id: t, + formatCode: e + }); + return this.model.numFmts.push(r), t; + } + _addFont(e) { + const t = this.map.font.toXml(e); + let r = this.index.font[t]; + return void 0 === r && (r = this.index.font[t] = this.model.fonts.length, this.model.fonts.push(t)), r; + } + _addBorder(e) { + const t = this.map.border.toXml(e); + let r = this.index.border[t]; + return void 0 === r && (r = this.index.border[t] = this.model.borders.length, this.model.borders.push(t)), r; + } + _addFill(e) { + const t = this.map.fill.toXml(e); + let r = this.index.fill[t]; + return void 0 === r && (r = this.index.fill[t] = this.model.fills.length, this.model.fills.push(t)), r; + } + } + p.STYLESHEET_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", + "mc:Ignorable": "x14ac x16r2", + "xmlns:x14ac": "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac", + "xmlns:x16r2": "http://schemas.microsoft.com/office/spreadsheetml/2015/02/main" + }, p.STATIC_XFORMS = { + cellStyles: new o({ + tag: "cellStyles", + $: { + count: 1 + }, + c: [{ + tag: "cellStyle", + $: { + name: "Normal", + xfId: 0, + builtinId: 0 + } + }] + }), + dxfs: new o({ + tag: "dxfs", + $: { + count: 0 + } + }), + tableStyles: new o({ + tag: "tableStyles", + $: { + count: 0, + defaultTableStyle: "TableStyleMedium2", + defaultPivotStyle: "PivotStyleLight16" + } + }), + extLst: new o({ + tag: "extLst", + c: [{ + tag: "ext", + $: { + uri: "{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}", + "xmlns:x14": "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" + }, + c: [{ + tag: "x14:slicerStyles", + $: { + defaultSlicerStyle: "SlicerStyleLight1" + } + }] + }, { + tag: "ext", + $: { + uri: "{9260A510-F301-46a8-8635-F512D64BE5F5}", + "xmlns:x15": "http://schemas.microsoft.com/office/spreadsheetml/2010/11/main" + }, + c: [{ + tag: "x15:timelineStyles", + $: { + defaultTimelineStyle: "TimeSlicerStyleLight1" + } + }] + }] + }) + }; + p.Mock = class extends p { + constructor() { + super(), this.model = { + styles: [{ + numFmtId: 0, + fontId: 0, + fillId: 0, + borderId: 0, + xfId: 0 + }], + numFmts: [], + fonts: [{ + size: 11, + color: { + theme: 1 + }, + name: "Calibri", + family: 2, + scheme: "minor" + }], + borders: [{}], + fills: [{ + type: "pattern", + pattern: "none" + }, { + type: "pattern", + pattern: "gray125" + }] + }; + } + parseStream(e) { + return e.autodrain(), Promise.resolve(); + } + addStyleModel(e, t) { + switch (t) { + case n.ValueType.Date: + return this.dateStyleId; + default: + return 0; + } + } + get dateStyleId() { + if (!this._dateStyleId) { + const e = { + numFmtId: h.getDefaultFmtId("mm-dd-yy") + }; + this._dateStyleId = this.model.styles.length, this.model.styles.push(e); + } + return this._dateStyleId; + } + getStyleModel() { + return {}; + } + }, t.exports = p; + }, { + "../../../doc/enums": 7, + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "../list-xform": 71, + "../static-xform": 120, + "./border-xform": 127, + "./dxf-xform": 129, + "./fill-xform": 130, + "./font-xform": 131, + "./numfmt-xform": 132, + "./style-xform": 134 + }], + 136: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + class i extends n { + constructor(e) { + super(), this.model = e; + } + get tag() { + return "u"; + } + render(e, t) { + if (!0 === (t = t || this.model)) e.leafNode("u");else { + const r = i.Attributes[t]; + r && e.leafNode("u", r); + } + } + parseOpen(e) { + "u" === e.name && (this.model = e.attributes.val || !0); + } + parseText() {} + parseClose() { + return !1; + } + } + i.Attributes = { + single: {}, + double: { + val: "double" + }, + singleAccounting: { + val: "singleAccounting" + }, + doubleAccounting: { + val: "doubleAccounting" + } + }, t.exports = i; + }, { + "../base-xform": 32 + }], + 137: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("./filter-column-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + filterColumn: new i() + }; + } + get tag() { + return "autoFilter"; + } + prepare(e) { + e.columns.forEach((e, t) => { + this.map.filterColumn.prepare(e, { + index: t + }); + }); + } + render(e, t) { + return e.openNode(this.tag, { + ref: t.autoFilterRef + }), t.columns.forEach(t => { + this.map.filterColumn.render(e, t); + }), e.closeNode(), !0; + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + switch (e.name) { + case this.tag: + return this.model = { + autoFilterRef: e.attributes.ref, + columns: [] + }, !0; + default: + if (this.parser = this.map[e.name], this.parser) return this.parseOpen(e), !0; + throw new Error("Unexpected xml node in parseOpen: " + JSON.stringify(e)); + } + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.model.columns.push(this.parser.model), this.parser = void 0), !0; + switch (e) { + case this.tag: + return !1; + default: + throw new Error("Unexpected xml node in parseClose: " + e); + } + } + }; + }, { + "../base-xform": 32, + "./filter-column-xform": 139 + }], + 138: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "customFilter"; + } + render(e, t) { + e.leafNode(this.tag, { + val: t.val, + operator: t.operator + }); + } + parseOpen(e) { + return e.name === this.tag && (this.model = { + val: e.attributes.val, + operator: e.attributes.operator + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 139: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"), + i = e("../list-xform"), + s = e("./custom-filter-xform"), + o = e("./filter-xform"); + t.exports = class extends n { + constructor() { + super(), this.map = { + customFilters: new i({ + tag: "customFilters", + count: !1, + empty: !0, + childXform: new s() + }), + filters: new i({ + tag: "filters", + count: !1, + empty: !0, + childXform: new o() + }) + }; + } + get tag() { + return "filterColumn"; + } + prepare(e, t) { + e.colId = t.index.toString(); + } + render(e, t) { + return t.customFilters ? (e.openNode(this.tag, { + colId: t.colId, + hiddenButton: t.filterButton ? "0" : "1" + }), this.map.customFilters.render(e, t.customFilters), e.closeNode(), !0) : (e.leafNode(this.tag, { + colId: t.colId, + hiddenButton: t.filterButton ? "0" : "1" + }), !0); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + const { + attributes: t + } = e; + switch (e.name) { + case this.tag: + return this.model = { + filterButton: "0" === t.hiddenButton + }, !0; + default: + if (this.parser = this.map[e.name], this.parser) return this.parseOpen(e), !0; + throw new Error("Unexpected xml node in parseOpen: " + JSON.stringify(e)); + } + } + parseText() {} + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model.customFilters = this.map.customFilters.model, !1; + default: + return !0; + } + } + }; + }, { + "../base-xform": 32, + "../list-xform": 71, + "./custom-filter-xform": 138, + "./filter-xform": 140 + }], + 140: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "filter"; + } + render(e, t) { + e.leafNode(this.tag, { + val: t.val + }); + } + parseOpen(e) { + return e.name === this.tag && (this.model = { + val: e.attributes.val + }, !0); + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 141: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "tableColumn"; + } + prepare(e, t) { + e.id = t.index + 1; + } + render(e, t) { + return e.leafNode(this.tag, { + id: t.id.toString(), + name: t.name, + totalsRowLabel: t.totalsRowLabel, + totalsRowFunction: t.totalsRowFunction, + dxfId: t.dxfId + }), !0; + } + parseOpen(e) { + if (e.name === this.tag) { + const { + attributes: t + } = e; + return this.model = { + name: t.name, + totalsRowLabel: t.totalsRowLabel, + totalsRowFunction: t.totalsRowFunction, + dxfId: t.dxfId + }, !0; + } + return !1; + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 142: [function (e, t, r) { + "use strict"; + + const n = e("../base-xform"); + t.exports = class extends n { + get tag() { + return "tableStyleInfo"; + } + render(e, t) { + return e.leafNode(this.tag, { + name: t.theme ? t.theme : void 0, + showFirstColumn: t.showFirstColumn ? "1" : "0", + showLastColumn: t.showLastColumn ? "1" : "0", + showRowStripes: t.showRowStripes ? "1" : "0", + showColumnStripes: t.showColumnStripes ? "1" : "0" + }), !0; + } + parseOpen(e) { + if (e.name === this.tag) { + const { + attributes: t + } = e; + return this.model = { + theme: t.name ? t.name : null, + showFirstColumn: "1" === t.showFirstColumn, + showLastColumn: "1" === t.showLastColumn, + showRowStripes: "1" === t.showRowStripes, + showColumnStripes: "1" === t.showColumnStripes + }, !0; + } + return !1; + } + parseText() {} + parseClose() { + return !1; + } + }; + }, { + "../base-xform": 32 + }], + 143: [function (e, t, r) { + "use strict"; + + const n = e("../../../utils/xml-stream"), + i = e("../base-xform"), + s = e("../list-xform"), + o = e("./auto-filter-xform"), + a = e("./table-column-xform"), + l = e("./table-style-info-xform"); + class c extends i { + constructor() { + super(), this.map = { + autoFilter: new o(), + tableColumns: new s({ + tag: "tableColumns", + count: !0, + empty: !0, + childXform: new a() + }), + tableStyleInfo: new l() + }; + } + prepare(e, t) { + this.map.autoFilter.prepare(e), this.map.tableColumns.prepare(e.columns, t); + } + get tag() { + return "table"; + } + render(e, t) { + e.openXml(n.StdDocAttributes), e.openNode(this.tag, { + ...c.TABLE_ATTRIBUTES, + id: t.id, + name: t.name, + displayName: t.displayName || t.name, + ref: t.tableRef, + totalsRowCount: t.totalsRow ? "1" : void 0, + totalsRowShown: t.totalsRow ? void 0 : "1", + headerRowCount: t.headerRow ? "1" : "0" + }), this.map.autoFilter.render(e, t), this.map.tableColumns.render(e, t.columns), this.map.tableStyleInfo.render(e, t.style), e.closeNode(); + } + parseOpen(e) { + if (this.parser) return this.parser.parseOpen(e), !0; + const { + name: t, + attributes: r + } = e; + switch (t) { + case this.tag: + this.reset(), this.model = { + name: r.name, + displayName: r.displayName || r.name, + tableRef: r.ref, + totalsRow: "1" === r.totalsRowCount, + headerRow: "1" === r.headerRowCount + }; + break; + default: + this.parser = this.map[e.name], this.parser && this.parser.parseOpen(e); + } + return !0; + } + parseText(e) { + this.parser && this.parser.parseText(e); + } + parseClose(e) { + if (this.parser) return this.parser.parseClose(e) || (this.parser = void 0), !0; + switch (e) { + case this.tag: + return this.model.columns = this.map.tableColumns.model, this.map.autoFilter.model && (this.model.autoFilterRef = this.map.autoFilter.model.autoFilterRef, this.map.autoFilter.model.columns.forEach((e, t) => { + this.model.columns[t].filterButton = e.filterButton; + })), this.model.style = this.map.tableStyleInfo.model, !1; + default: + return !0; + } + } + reconcile(e, t) { + e.columns.forEach(e => { + void 0 !== e.dxfId && (e.style = t.styles.getDxfStyle(e.dxfId)); + }); + } + } + c.TABLE_ATTRIBUTES = { + xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", + "xmlns:mc": "http://schemas.openxmlformats.org/markup-compatibility/2006", + "mc:Ignorable": "xr xr3", + "xmlns:xr": "http://schemas.microsoft.com/office/spreadsheetml/2014/revision", + "xmlns:xr3": "http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" + }, t.exports = c; + }, { + "../../../utils/xml-stream": 28, + "../base-xform": 32, + "../list-xform": 71, + "./auto-filter-xform": 137, + "./table-column-xform": 141, + "./table-style-info-xform": 142 + }], + 144: [function (e, t, r) { + (function (r, n) { + (function () { + "use strict"; + + const i = e("fs"), + s = e("jszip"), + { + PassThrough: o + } = e("readable-stream"), + a = e("../utils/zip-stream"), + l = e("../utils/stream-buf"), + c = e("../utils/utils"), + u = e("../utils/xml-stream"), + { + bufferToString: h + } = e("../utils/browser-buffer-decode"), + f = e("./xform/style/styles-xform"), + d = e("./xform/core/core-xform"), + p = e("./xform/strings/shared-strings-xform"), + m = e("./xform/core/relationships-xform"), + b = e("./xform/core/content-types-xform"), + g = e("./xform/core/app-xform"), + y = e("./xform/book/workbook-xform"), + v = e("./xform/sheet/worksheet-xform"), + w = e("./xform/drawing/drawing-xform"), + _ = e("./xform/table/table-xform"), + x = e("./xform/comment/comments-xform"), + k = e("./xform/comment/vml-notes-xform"), + S = e("./xml/theme1"); + class M { + constructor(e) { + this.workbook = e; + } + readFile(e, t) { + var _this8 = this; + return _asyncToGenerator(function* () { + if (!(yield c.fs.exists(e))) throw new Error("File not found: " + e); + const r = i.createReadStream(e); + try { + const e = yield _this8.read(r, t); + return r.close(), e; + } catch (e) { + throw r.close(), e; + } + })(); + } + parseRels(e) { + return new m().parseStream(e); + } + parseWorkbook(e) { + return new y().parseStream(e); + } + parseSharedStrings(e) { + return new p().parseStream(e); + } + reconcile(e, t) { + const r = new y(), + n = new v(t), + i = new w(), + s = new _(); + r.reconcile(e); + const o = { + media: e.media, + mediaIndex: e.mediaIndex + }; + Object.keys(e.drawings).forEach(t => { + const r = e.drawings[t], + n = e.drawingRels[t]; + n && (o.rels = n.reduce((e, t) => (e[t.Id] = t, e), {}), (r.anchors || []).forEach(e => { + const t = e.picture && e.picture.hyperlinks; + t && o.rels[t.rId] && (t.hyperlink = o.rels[t.rId].Target, delete t.rId); + }), i.reconcile(r, o)); + }); + const a = { + styles: e.styles + }; + Object.values(e.tables).forEach(e => { + s.reconcile(e, a); + }); + const l = { + styles: e.styles, + sharedStrings: e.sharedStrings, + media: e.media, + mediaIndex: e.mediaIndex, + date1904: e.properties && e.properties.date1904, + drawings: e.drawings, + comments: e.comments, + tables: e.tables, + vmlDrawings: e.vmlDrawings + }; + e.worksheets.forEach(t => { + t.relationships = e.worksheetRels[t.sheetNo], n.reconcile(t, l); + }), delete e.worksheetHash, delete e.worksheetRels, delete e.globalRels, delete e.sharedStrings, delete e.workbookRels, delete e.sheetDefs, delete e.styles, delete e.mediaIndex, delete e.drawings, delete e.drawingRels, delete e.vmlDrawings; + } + _processWorksheetEntry(e, t, r, n, i) { + return _asyncToGenerator(function* () { + const s = new v(n), + o = yield s.parseStream(e); + o.sheetNo = r, t.worksheetHash[i] = o, t.worksheets.push(o); + })(); + } + _processCommentEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = new x(), + i = yield n.parseStream(e); + t.comments[`../${r}.xml`] = i; + })(); + } + _processTableEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = new _(), + i = yield n.parseStream(e); + t.tables[`../tables/${r}.xml`] = i; + })(); + } + _processWorksheetRelsEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = new m(), + i = yield n.parseStream(e); + t.worksheetRels[r] = i; + })(); + } + _processMediaEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = r.lastIndexOf("."); + if (n >= 1) { + const i = r.substr(n + 1), + s = r.substr(0, n); + yield new Promise((n, o) => { + const a = new l(); + a.on("finish", () => { + t.mediaIndex[r] = t.media.length, t.mediaIndex[s] = t.media.length; + const e = { + type: "image", + name: s, + extension: i, + buffer: a.toBuffer() + }; + t.media.push(e), n(); + }), e.on("error", e => { + o(e); + }), e.pipe(a); + }); + } + })(); + } + _processDrawingEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = new w(), + i = yield n.parseStream(e); + t.drawings[r] = i; + })(); + } + _processDrawingRelsEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = new m(), + i = yield n.parseStream(e); + t.drawingRels[r] = i; + })(); + } + _processVmlDrawingEntry(e, t, r) { + return _asyncToGenerator(function* () { + const n = new k(), + i = yield n.parseStream(e); + t.vmlDrawings[`../drawings/${r}.vml`] = i; + })(); + } + _processThemeEntry(e, t, r) { + return _asyncToGenerator(function* () { + yield new Promise((n, i) => { + const s = new l(); + e.on("error", i), s.on("error", i), s.on("finish", () => { + t.themes[r] = s.read().toString(), n(); + }), e.pipe(s); + }); + })(); + } + createInputStream() { + throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md"); + } + read(e, t) { + var _this9 = this; + return _asyncToGenerator(function* () { + !e[Symbol.asyncIterator] && e.pipe && (e = e.pipe(new o())); + const r = []; + var _iteratorAbruptCompletion3 = false; + var _didIteratorError3 = false; + var _iteratorError3; + try { + for (var _iterator3 = _asyncIterator(e), _step3; _iteratorAbruptCompletion3 = !(_step3 = yield _iterator3.next()).done; _iteratorAbruptCompletion3 = false) { + const t = _step3.value; + { + r.push(t); + } + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (_iteratorAbruptCompletion3 && _iterator3.return != null) { + yield _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + return _this9.load(n.concat(r), t); + })(); + } + load(e, t) { + var _this10 = this; + return _asyncToGenerator(function* () { + let i; + i = t && t.base64 ? n.from(e.toString(), "base64") : e; + const a = { + worksheets: [], + worksheetHash: {}, + worksheetRels: [], + themes: {}, + media: [], + mediaIndex: {}, + drawings: {}, + drawingRels: {}, + comments: {}, + tables: {}, + vmlDrawings: {} + }, + l = yield s.loadAsync(i); + for (const e of Object.values(l.files)) if (!e.dir) { + let n, + i = e.name; + if ("/" === i[0] && (i = i.substr(1)), i.match(/xl\/media\//) || i.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/)) n = new o(), n.write(yield e.async("nodebuffer"));else { + let t; + n = new o({ + writableObjectMode: !0, + readableObjectMode: !0 + }), t = r.browser ? h(yield e.async("nodebuffer")) : yield e.async("string"); + const i = 16384; + for (let e = 0; e < t.length; e += i) n.write(t.substring(e, e + i)); + } + switch (n.end(), i) { + case "_rels/.rels": + a.globalRels = yield _this10.parseRels(n); + break; + case "xl/workbook.xml": + { + const e = yield _this10.parseWorkbook(n); + a.sheets = e.sheets, a.definedNames = e.definedNames, a.views = e.views, a.properties = e.properties, a.calcProperties = e.calcProperties; + break; + } + case "xl/_rels/workbook.xml.rels": + a.workbookRels = yield _this10.parseRels(n); + break; + case "xl/sharedStrings.xml": + a.sharedStrings = new p(), yield a.sharedStrings.parseStream(n); + break; + case "xl/styles.xml": + a.styles = new f(), yield a.styles.parseStream(n); + break; + case "docProps/app.xml": + { + const e = new g(), + t = yield e.parseStream(n); + a.company = t.company, a.manager = t.manager; + break; + } + case "docProps/core.xml": + { + const e = new d(), + t = yield e.parseStream(n); + Object.assign(a, t); + break; + } + default: + { + let e = i.match(/xl\/worksheets\/sheet(\d+)[.]xml/); + if (e) { + yield _this10._processWorksheetEntry(n, a, e[1], t, i); + break; + } + if (e = i.match(/xl\/worksheets\/_rels\/sheet(\d+)[.]xml.rels/), e) { + yield _this10._processWorksheetRelsEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/), e) { + yield _this10._processThemeEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/media\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/), e) { + yield _this10._processMediaEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/drawings\/([a-zA-Z0-9]+)[.]xml/), e) { + yield _this10._processDrawingEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/(comments\d+)[.]xml/), e) { + yield _this10._processCommentEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/tables\/(table\d+)[.]xml/), e) { + yield _this10._processTableEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/drawings\/_rels\/([a-zA-Z0-9]+)[.]xml[.]rels/), e) { + yield _this10._processDrawingRelsEntry(n, a, e[1]); + break; + } + if (e = i.match(/xl\/drawings\/(vmlDrawing\d+)[.]vml/), e) { + yield _this10._processVmlDrawingEntry(n, a, e[1]); + break; + } + } + } + } + return _this10.reconcile(a, t), _this10.workbook.model = a, _this10.workbook; + })(); + } + addMedia(e, t) { + return _asyncToGenerator(function* () { + yield Promise.all(t.media.map( /*#__PURE__*/function () { + var _ref2 = _asyncToGenerator(function* (t) { + if ("image" === t.type) { + const r = `xl/media/${t.name}.${t.extension}`; + if (t.filename) { + const n = yield function (e, t) { + return new Promise((r, n) => { + i.readFile(e, t, (e, t) => { + e ? n(e) : r(t); + }); + }); + }(t.filename); + return e.append(n, { + name: r + }); + } + if (t.buffer) return e.append(t.buffer, { + name: r + }); + if (t.base64) { + const n = t.base64, + i = n.substring(n.indexOf(",") + 1); + return e.append(i, { + name: r, + base64: !0 + }); + } + } + throw new Error("Unsupported media"); + }); + return function (_x2) { + return _ref2.apply(this, arguments); + }; + }())); + })(); + } + addDrawings(e, t) { + const r = new w(), + n = new m(); + t.worksheets.forEach(t => { + const { + drawing: i + } = t; + if (i) { + r.prepare(i, {}); + let t = r.toXml(i); + e.append(t, { + name: `xl/drawings/${i.name}.xml` + }), t = n.toXml(i.rels), e.append(t, { + name: `xl/drawings/_rels/${i.name}.xml.rels` + }); + } + }); + } + addTables(e, t) { + const r = new _(); + t.worksheets.forEach(t => { + const { + tables: n + } = t; + n.forEach(t => { + r.prepare(t, {}); + const n = r.toXml(t); + e.append(n, { + name: "xl/tables/" + t.target + }); + }); + }); + } + addContentTypes(e, t) { + return _asyncToGenerator(function* () { + const r = new b().toXml(t); + e.append(r, { + name: "[Content_Types].xml" + }); + })(); + } + addApp(e, t) { + return _asyncToGenerator(function* () { + const r = new g().toXml(t); + e.append(r, { + name: "docProps/app.xml" + }); + })(); + } + addCore(e, t) { + return _asyncToGenerator(function* () { + const r = new d(); + e.append(r.toXml(t), { + name: "docProps/core.xml" + }); + })(); + } + addThemes(e, t) { + return _asyncToGenerator(function* () { + const r = t.themes || { + theme1: S + }; + Object.keys(r).forEach(t => { + const n = r[t], + i = `xl/theme/${t}.xml`; + e.append(n, { + name: i + }); + }); + })(); + } + addOfficeRels(e) { + return _asyncToGenerator(function* () { + const t = new m().toXml([{ + Id: "rId1", + Type: M.RelType.OfficeDocument, + Target: "xl/workbook.xml" + }, { + Id: "rId2", + Type: M.RelType.CoreProperties, + Target: "docProps/core.xml" + }, { + Id: "rId3", + Type: M.RelType.ExtenderProperties, + Target: "docProps/app.xml" + }]); + e.append(t, { + name: "_rels/.rels" + }); + })(); + } + addWorkbookRels(e, t) { + return _asyncToGenerator(function* () { + let r = 1; + const n = [{ + Id: "rId" + r++, + Type: M.RelType.Styles, + Target: "styles.xml" + }, { + Id: "rId" + r++, + Type: M.RelType.Theme, + Target: "theme/theme1.xml" + }]; + t.sharedStrings.count && n.push({ + Id: "rId" + r++, + Type: M.RelType.SharedStrings, + Target: "sharedStrings.xml" + }), t.worksheets.forEach(e => { + e.rId = "rId" + r++, n.push({ + Id: e.rId, + Type: M.RelType.Worksheet, + Target: `worksheets/sheet${e.id}.xml` + }); + }); + const i = new m().toXml(n); + e.append(i, { + name: "xl/_rels/workbook.xml.rels" + }); + })(); + } + addSharedStrings(e, t) { + return _asyncToGenerator(function* () { + t.sharedStrings && t.sharedStrings.count && e.append(t.sharedStrings.xml, { + name: "xl/sharedStrings.xml" + }); + })(); + } + addStyles(e, t) { + return _asyncToGenerator(function* () { + const { + xml: r + } = t.styles; + r && e.append(r, { + name: "xl/styles.xml" + }); + })(); + } + addWorkbook(e, t) { + return _asyncToGenerator(function* () { + const r = new y(); + e.append(r.toXml(t), { + name: "xl/workbook.xml" + }); + })(); + } + addWorksheets(e, t) { + return _asyncToGenerator(function* () { + const r = new v(), + n = new m(), + i = new x(), + s = new k(); + t.worksheets.forEach(t => { + let o = new u(); + r.render(o, t), e.append(o.xml, { + name: `xl/worksheets/sheet${t.id}.xml` + }), t.rels && t.rels.length && (o = new u(), n.render(o, t.rels), e.append(o.xml, { + name: `xl/worksheets/_rels/sheet${t.id}.xml.rels` + })), t.comments.length > 0 && (o = new u(), i.render(o, t), e.append(o.xml, { + name: `xl/comments${t.id}.xml` + }), o = new u(), s.render(o, t), e.append(o.xml, { + name: `xl/drawings/vmlDrawing${t.id}.vml` + })); + }); + })(); + } + _finalize(e) { + return new Promise((t, r) => { + e.on("finish", () => { + t(this); + }), e.on("error", r), e.finalize(); + }); + } + prepareModel(e, t) { + e.creator = e.creator || "ExcelJS", e.lastModifiedBy = e.lastModifiedBy || "ExcelJS", e.created = e.created || new Date(), e.modified = e.modified || new Date(), e.useSharedStrings = void 0 === t.useSharedStrings || t.useSharedStrings, e.useStyles = void 0 === t.useStyles || t.useStyles, e.sharedStrings = new p(), e.styles = e.useStyles ? new f(!0) : new f.Mock(); + const r = new y(), + n = new v(); + r.prepare(e); + const i = { + sharedStrings: e.sharedStrings, + styles: e.styles, + date1904: e.properties.date1904, + drawingsCount: 0, + media: e.media + }; + i.drawings = e.drawings = [], i.commentRefs = e.commentRefs = []; + let s = 0; + e.tables = [], e.worksheets.forEach(t => { + t.tables.forEach(t => { + s++, t.target = `table${s}.xml`, t.id = s, e.tables.push(t); + }), n.prepare(t, i); + }); + } + write(e, t) { + var _this11 = this; + return _asyncToGenerator(function* () { + t = t || {}; + const { + model: r + } = _this11.workbook, + n = new a.ZipWriter(t.zip); + return n.pipe(e), _this11.prepareModel(r, t), yield _this11.addContentTypes(n, r), yield _this11.addOfficeRels(n, r), yield _this11.addWorkbookRels(n, r), yield _this11.addWorksheets(n, r), yield _this11.addSharedStrings(n, r), yield _this11.addDrawings(n, r), yield _this11.addTables(n, r), yield Promise.all([_this11.addThemes(n, r), _this11.addStyles(n, r)]), yield _this11.addMedia(n, r), yield Promise.all([_this11.addApp(n, r), _this11.addCore(n, r)]), yield _this11.addWorkbook(n, r), _this11._finalize(n); + })(); + } + writeFile(e, t) { + const r = i.createWriteStream(e); + return new Promise((e, n) => { + r.on("finish", () => { + e(); + }), r.on("error", e => { + n(e); + }), this.write(r, t).then(() => { + r.end(); + }).catch(e => { + n(e); + }); + }); + } + writeBuffer(e) { + var _this12 = this; + return _asyncToGenerator(function* () { + const t = new l(); + return yield _this12.write(t, e), t.read(); + })(); + } + } + M.RelType = e("./rel-type"), t.exports = M; + }).call(this); + }).call(this, e("_process"), e("buffer").Buffer); + }, { + "../utils/browser-buffer-decode": 16, + "../utils/stream-buf": 24, + "../utils/utils": 27, + "../utils/xml-stream": 28, + "../utils/zip-stream": 29, + "./rel-type": 31, + "./xform/book/workbook-xform": 38, + "./xform/comment/comments-xform": 40, + "./xform/comment/vml-notes-xform": 45, + "./xform/core/app-xform": 51, + "./xform/core/content-types-xform": 52, + "./xform/core/core-xform": 53, + "./xform/core/relationships-xform": 55, + "./xform/drawing/drawing-xform": 62, + "./xform/sheet/worksheet-xform": 115, + "./xform/strings/shared-strings-xform": 124, + "./xform/style/styles-xform": 135, + "./xform/table/table-xform": 143, + "./xml/theme1": 145, + _process: 467, + buffer: 220, + fs: 216, + jszip: 441, + "readable-stream": 491 + }], + 145: [function (e, t, r) { + "use strict"; + + t.exports = '\n '; + }, {}], + 146: [function (e, t, r) { + (function (t) { + (function () { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.CsvFormatterStream = void 0; + const n = e("stream"), + i = e("./formatter"); + class s extends n.Transform { + constructor(e) { + super({ + writableObjectMode: e.objectMode + }), this.hasWrittenBOM = !1, this.formatterOptions = e, this.rowFormatter = new i.RowFormatter(e), this.hasWrittenBOM = !e.writeBOM; + } + transform(e) { + return this.rowFormatter.rowTransform = e, this; + } + _transform(e, r, n) { + let i = !1; + try { + this.hasWrittenBOM || (this.push(this.formatterOptions.BOM), this.hasWrittenBOM = !0), this.rowFormatter.format(e, (e, r) => e ? (i = !0, n(e)) : (r && r.forEach(e => { + this.push(t.from(e, "utf8")); + }), i = !0, n())); + } catch (e) { + if (i) throw e; + n(e); + } + } + _flush(e) { + this.rowFormatter.finish((r, n) => r ? e(r) : (n && n.forEach(e => { + this.push(t.from(e, "utf8")); + }), e())); + } + } + r.CsvFormatterStream = s; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + "./formatter": 150, + buffer: 220, + stream: 505 + }], + 147: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.FormatterOptions = void 0; + r.FormatterOptions = class { + constructor() { + let e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + var t; + this.objectMode = !0, this.delimiter = ",", this.rowDelimiter = "\n", this.quote = '"', this.escape = this.quote, this.quoteColumns = !1, this.quoteHeaders = this.quoteColumns, this.headers = null, this.includeEndRowDelimiter = !1, this.writeBOM = !1, this.BOM = "\ufeff", this.alwaysWriteHeaders = !1, Object.assign(this, e || {}), void 0 === (null == e ? void 0 : e.quoteHeaders) && (this.quoteHeaders = this.quoteColumns), !0 === (null == e ? void 0 : e.quote) ? this.quote = '"' : !1 === (null == e ? void 0 : e.quote) && (this.quote = ""), "string" != typeof (null == e ? void 0 : e.escape) && (this.escape = this.quote), this.shouldWriteHeaders = !!this.headers && (null === (t = e.writeHeaders) || void 0 === t || t), this.headers = Array.isArray(this.headers) ? this.headers : null, this.escapedQuote = `${this.escape}${this.quote}`; + } + }; + }, {}], + 148: [function (e, t, r) { + "use strict"; + + var n = function (e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.FieldFormatter = void 0; + const i = n(e("lodash.isboolean")), + s = n(e("lodash.isnil")), + o = n(e("lodash.escaperegexp")); + r.FieldFormatter = class { + constructor(e) { + this._headers = null, this.formatterOptions = e, null !== e.headers && (this.headers = e.headers), this.REPLACE_REGEXP = new RegExp(e.quote, "g"); + const t = `[${e.delimiter}${o.default(e.rowDelimiter)}|\r|\n]`; + this.ESCAPE_REGEXP = new RegExp(t); + } + set headers(e) { + this._headers = e; + } + shouldQuote(e, t) { + const r = t ? this.formatterOptions.quoteHeaders : this.formatterOptions.quoteColumns; + return i.default(r) ? r : Array.isArray(r) ? r[e] : null !== this._headers && r[this._headers[e]]; + } + format(e, t, r) { + const n = ("" + (s.default(e) ? "" : e)).replace(/\0/g, ""), + { + formatterOptions: i + } = this; + if ("" !== i.quote) { + if (-1 !== n.indexOf(i.quote)) return this.quoteField(n.replace(this.REPLACE_REGEXP, i.escapedQuote)); + } + return -1 !== n.search(this.ESCAPE_REGEXP) || this.shouldQuote(t, r) ? this.quoteField(n) : n; + } + quoteField(e) { + const { + quote: t + } = this.formatterOptions; + return `${t}${e}${t}`; + } + }; + }, { + "lodash.escaperegexp": 442, + "lodash.isboolean": 444, + "lodash.isnil": 447 + }], + 149: [function (e, t, r) { + "use strict"; + + var n = function (e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.RowFormatter = void 0; + const i = n(e("lodash.isfunction")), + s = n(e("lodash.isequal")), + o = e("./FieldFormatter"), + a = e("../types"); + class l { + constructor(e) { + this.rowCount = 0, this.formatterOptions = e, this.fieldFormatter = new o.FieldFormatter(e), this.headers = e.headers, this.shouldWriteHeaders = e.shouldWriteHeaders, this.hasWrittenHeaders = !1, null !== this.headers && (this.fieldFormatter.headers = this.headers), e.transform && (this.rowTransform = e.transform); + } + static isRowHashArray(e) { + return !!Array.isArray(e) && Array.isArray(e[0]) && 2 === e[0].length; + } + static isRowArray(e) { + return Array.isArray(e) && !this.isRowHashArray(e); + } + static gatherHeaders(e) { + return l.isRowHashArray(e) ? e.map(e => e[0]) : Array.isArray(e) ? e : Object.keys(e); + } + static createTransform(e) { + return a.isSyncTransform(e) ? (t, r) => { + let n = null; + try { + n = e(t); + } catch (e) { + return r(e); + } + return r(null, n); + } : (t, r) => { + e(t, r); + }; + } + set rowTransform(e) { + if (!i.default(e)) throw new TypeError("The transform should be a function"); + this._rowTransform = l.createTransform(e); + } + format(e, t) { + this.callTransformer(e, (r, n) => { + if (r) return t(r); + if (!e) return t(null); + const i = []; + if (n) { + const { + shouldFormatColumns: e, + headers: t + } = this.checkHeaders(n); + if (this.shouldWriteHeaders && t && !this.hasWrittenHeaders && (i.push(this.formatColumns(t, !0)), this.hasWrittenHeaders = !0), e) { + const e = this.gatherColumns(n); + i.push(this.formatColumns(e, !1)); + } + } + return t(null, i); + }); + } + finish(e) { + const t = []; + if (this.formatterOptions.alwaysWriteHeaders && 0 === this.rowCount) { + if (!this.headers) return e(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided.")); + t.push(this.formatColumns(this.headers, !0)); + } + return this.formatterOptions.includeEndRowDelimiter && t.push(this.formatterOptions.rowDelimiter), e(null, t); + } + checkHeaders(e) { + if (this.headers) return { + shouldFormatColumns: !0, + headers: this.headers + }; + const t = l.gatherHeaders(e); + return this.headers = t, this.fieldFormatter.headers = t, this.shouldWriteHeaders ? { + shouldFormatColumns: !s.default(t, e), + headers: t + } : { + shouldFormatColumns: !0, + headers: null + }; + } + gatherColumns(e) { + if (null === this.headers) throw new Error("Headers is currently null"); + return Array.isArray(e) ? l.isRowHashArray(e) ? this.headers.map((t, r) => { + const n = e[r]; + return n ? n[1] : ""; + }) : l.isRowArray(e) && !this.shouldWriteHeaders ? e : this.headers.map((t, r) => e[r]) : this.headers.map(t => e[t]); + } + callTransformer(e, t) { + return this._rowTransform ? this._rowTransform(e, t) : t(null, e); + } + formatColumns(e, t) { + const r = e.map((e, r) => this.fieldFormatter.format(e, r, t)).join(this.formatterOptions.delimiter), + { + rowCount: n + } = this; + return this.rowCount += 1, n ? [this.formatterOptions.rowDelimiter, r].join("") : r; + } + } + r.RowFormatter = l; + }, { + "../types": 152, + "./FieldFormatter": 148, + "lodash.isequal": 445, + "lodash.isfunction": 446 + }], + 150: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.FieldFormatter = r.RowFormatter = void 0; + var n = e("./RowFormatter"); + Object.defineProperty(r, "RowFormatter", { + enumerable: !0, + get: function () { + return n.RowFormatter; + } + }); + var i = e("./FieldFormatter"); + Object.defineProperty(r, "FieldFormatter", { + enumerable: !0, + get: function () { + return i.FieldFormatter; + } + }); + }, { + "./FieldFormatter": 148, + "./RowFormatter": 149 + }], + 151: [function (e, t, r) { + (function (t) { + (function () { + "use strict"; + + var n = Object.create ? function (e, t, r, n) { + void 0 === n && (n = r), Object.defineProperty(e, n, { + enumerable: !0, + get: function () { + return t[r]; + } + }); + } : function (e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r]; + }, + i = Object.create ? function (e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }); + } : function (e, t) { + e.default = t; + }, + s = function (e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) for (var r in e) "default" !== r && Object.prototype.hasOwnProperty.call(e, r) && n(t, e, r); + return i(t, e), t; + }, + o = function (e, t) { + for (var r in e) "default" === r || Object.prototype.hasOwnProperty.call(t, r) || n(t, e, r); + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.writeToPath = r.writeToString = r.writeToBuffer = r.writeToStream = r.write = r.format = r.FormatterOptions = r.CsvFormatterStream = void 0; + const a = e("util"), + l = e("stream"), + c = s(e("fs")), + u = e("./FormatterOptions"), + h = e("./CsvFormatterStream"); + o(e("./types"), r); + var f = e("./CsvFormatterStream"); + Object.defineProperty(r, "CsvFormatterStream", { + enumerable: !0, + get: function () { + return f.CsvFormatterStream; + } + }); + var d = e("./FormatterOptions"); + Object.defineProperty(r, "FormatterOptions", { + enumerable: !0, + get: function () { + return d.FormatterOptions; + } + }), r.format = e => new h.CsvFormatterStream(new u.FormatterOptions(e)), r.write = (e, t) => { + const n = r.format(t), + i = a.promisify((e, t) => { + n.write(e, void 0, t); + }); + return e.reduce((e, t) => e.then(() => i(t)), Promise.resolve()).then(() => n.end()).catch(e => { + n.emit("error", e); + }), n; + }, r.writeToStream = (e, t, n) => r.write(t, n).pipe(e), r.writeToBuffer = function (e) { + let n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + const i = [], + s = new l.Writable({ + write(e, t, r) { + i.push(e), r(); + } + }); + return new Promise((o, a) => { + s.on("error", a).on("finish", () => o(t.concat(i))), r.write(e, n).pipe(s); + }); + }, r.writeToString = (e, t) => r.writeToBuffer(e, t).then(e => e.toString()), r.writeToPath = (e, t, n) => { + const i = c.createWriteStream(e, { + encoding: "utf8" + }); + return r.write(t, n).pipe(i); + }; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + "./CsvFormatterStream": 146, + "./FormatterOptions": 147, + "./types": 152, + buffer: 220, + fs: 216, + stream: 505, + util: 527 + }], + 152: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.isSyncTransform = void 0, r.isSyncTransform = e => 1 === e.length; + }, {}], + 153: [function (e, t, r) { + (function (t) { + (function () { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.CsvParserStream = void 0; + const n = e("string_decoder"), + i = e("stream"), + s = e("./transforms"), + o = e("./parser"); + class a extends i.Transform { + constructor(e) { + super({ + objectMode: e.objectMode + }), this.lines = "", this.rowCount = 0, this.parsedRowCount = 0, this.parsedLineCount = 0, this.endEmitted = !1, this.headersEmitted = !1, this.parserOptions = e, this.parser = new o.Parser(e), this.headerTransformer = new s.HeaderTransformer(e), this.decoder = new n.StringDecoder(e.encoding), this.rowTransformerValidator = new s.RowTransformerValidator(); + } + get hasHitRowLimit() { + return this.parserOptions.limitRows && this.rowCount >= this.parserOptions.maxRows; + } + get shouldEmitRows() { + return this.parsedRowCount > this.parserOptions.skipRows; + } + get shouldSkipLine() { + return this.parsedLineCount <= this.parserOptions.skipLines; + } + transform(e) { + return this.rowTransformerValidator.rowTransform = e, this; + } + validate(e) { + return this.rowTransformerValidator.rowValidator = e, this; + } + emit(e) { + if ("end" === e) return this.endEmitted || (this.endEmitted = !0, super.emit("end", this.rowCount)), !1; + for (var t = arguments.length, r = new Array(t > 1 ? t - 1 : 0), n = 1; n < t; n++) r[n - 1] = arguments[n]; + return super.emit(e, ...r); + } + _transform(e, t, r) { + if (this.hasHitRowLimit) return r(); + const n = a.wrapDoneCallback(r); + try { + const { + lines: t + } = this, + r = t + this.decoder.write(e), + i = this.parse(r, !0); + return this.processRows(i, n); + } catch (e) { + return n(e); + } + } + _flush(e) { + const t = a.wrapDoneCallback(e); + if (this.hasHitRowLimit) return t(); + try { + const e = this.lines + this.decoder.end(), + r = this.parse(e, !1); + return this.processRows(r, t); + } catch (e) { + return t(e); + } + } + parse(e, t) { + if (!e) return []; + const { + line: r, + rows: n + } = this.parser.parse(e, t); + return this.lines = r, n; + } + processRows(e, r) { + const n = e.length, + i = s => { + const o = e => e ? r(e) : s % 100 != 0 ? i(s + 1) : void t(() => i(s + 1)); + if (this.checkAndEmitHeaders(), s >= n || this.hasHitRowLimit) return r(); + if (this.parsedLineCount += 1, this.shouldSkipLine) return o(); + const a = e[s]; + this.rowCount += 1, this.parsedRowCount += 1; + const l = this.rowCount; + return this.transformRow(a, (e, t) => { + if (e) return this.rowCount -= 1, o(e); + if (!t) return o(new Error("expected transform result")); + if (t.isValid) { + if (t.row) return this.pushRow(t.row, o); + } else this.emit("data-invalid", t.row, l, t.reason); + return o(); + }); + }; + i(0); + } + transformRow(e, t) { + try { + this.headerTransformer.transform(e, (r, n) => r ? t(r) : n ? n.isValid ? n.row ? this.shouldEmitRows ? this.rowTransformerValidator.transformAndValidate(n.row, t) : this.skipRow(t) : (this.rowCount -= 1, this.parsedRowCount -= 1, t(null, { + row: null, + isValid: !0 + })) : this.shouldEmitRows ? t(null, { + isValid: !1, + row: e + }) : this.skipRow(t) : t(new Error("Expected result from header transform"))); + } catch (e) { + t(e); + } + } + checkAndEmitHeaders() { + !this.headersEmitted && this.headerTransformer.headers && (this.headersEmitted = !0, this.emit("headers", this.headerTransformer.headers)); + } + skipRow(e) { + return this.rowCount -= 1, e(null, { + row: null, + isValid: !0 + }); + } + pushRow(e, t) { + try { + this.parserOptions.objectMode ? this.push(e) : this.push(JSON.stringify(e)), t(); + } catch (e) { + t(e); + } + } + static wrapDoneCallback(e) { + let t = !1; + return function (r) { + if (r) { + if (t) throw r; + return t = !0, void e(r); + } + for (var n = arguments.length, i = new Array(n > 1 ? n - 1 : 0), s = 1; s < n; s++) i[s - 1] = arguments[s]; + e(...i); + }; + } + } + r.CsvParserStream = a; + }).call(this); + }).call(this, e("timers").setImmediate); + }, { + "./parser": 165, + "./transforms": 168, + stream: 505, + string_decoder: 218, + timers: 523 + }], + 154: [function (e, t, r) { + "use strict"; + + var n = function (e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.ParserOptions = void 0; + const i = n(e("lodash.escaperegexp")), + s = n(e("lodash.isnil")); + r.ParserOptions = class { + constructor(e) { + var t; + if (this.objectMode = !0, this.delimiter = ",", this.ignoreEmpty = !1, this.quote = '"', this.escape = null, this.escapeChar = this.quote, this.comment = null, this.supportsComments = !1, this.ltrim = !1, this.rtrim = !1, this.trim = !1, this.headers = null, this.renameHeaders = !1, this.strictColumnHandling = !1, this.discardUnmappedColumns = !1, this.carriageReturn = "\r", this.encoding = "utf8", this.limitRows = !1, this.maxRows = 0, this.skipLines = 0, this.skipRows = 0, Object.assign(this, e || {}), this.delimiter.length > 1) throw new Error("delimiter option must be one character long"); + this.escapedDelimiter = i.default(this.delimiter), this.escapeChar = null !== (t = this.escape) && void 0 !== t ? t : this.quote, this.supportsComments = !s.default(this.comment), this.NEXT_TOKEN_REGEXP = new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`), this.maxRows > 0 && (this.limitRows = !0); + } + }; + }, { + "lodash.escaperegexp": 442, + "lodash.isnil": 447 + }], + 155: [function (e, t, r) { + "use strict"; + + var n = Object.create ? function (e, t, r, n) { + void 0 === n && (n = r), Object.defineProperty(e, n, { + enumerable: !0, + get: function () { + return t[r]; + } + }); + } : function (e, t, r, n) { + void 0 === n && (n = r), e[n] = t[r]; + }, + i = Object.create ? function (e, t) { + Object.defineProperty(e, "default", { + enumerable: !0, + value: t + }); + } : function (e, t) { + e.default = t; + }, + s = function (e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) for (var r in e) "default" !== r && Object.prototype.hasOwnProperty.call(e, r) && n(t, e, r); + return i(t, e), t; + }, + o = function (e, t) { + for (var r in e) "default" === r || Object.prototype.hasOwnProperty.call(t, r) || n(t, e, r); + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.parseString = r.parseFile = r.parseStream = r.parse = r.ParserOptions = r.CsvParserStream = void 0; + const a = s(e("fs")), + l = e("stream"), + c = e("./ParserOptions"), + u = e("./CsvParserStream"); + o(e("./types"), r); + var h = e("./CsvParserStream"); + Object.defineProperty(r, "CsvParserStream", { + enumerable: !0, + get: function () { + return h.CsvParserStream; + } + }); + var f = e("./ParserOptions"); + Object.defineProperty(r, "ParserOptions", { + enumerable: !0, + get: function () { + return f.ParserOptions; + } + }), r.parse = e => new u.CsvParserStream(new c.ParserOptions(e)), r.parseStream = (e, t) => e.pipe(new u.CsvParserStream(new c.ParserOptions(t))), r.parseFile = function (e) { + let t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; + return a.createReadStream(e).pipe(new u.CsvParserStream(new c.ParserOptions(t))); + }, r.parseString = (e, t) => { + const r = new l.Readable(); + return r.push(e), r.push(null), r.pipe(new u.CsvParserStream(new c.ParserOptions(t))); + }; + }, { + "./CsvParserStream": 153, + "./ParserOptions": 154, + "./types": 169, + fs: 216, + stream: 505 + }], + 156: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.Parser = void 0; + const n = e("./Scanner"), + i = e("./RowParser"), + s = e("./Token"); + class o { + constructor(e) { + this.parserOptions = e, this.rowParser = new i.RowParser(this.parserOptions); + } + static removeBOM(e) { + return e && 65279 === e.charCodeAt(0) ? e.slice(1) : e; + } + parse(e, t) { + const r = new n.Scanner({ + line: o.removeBOM(e), + parserOptions: this.parserOptions, + hasMoreData: t + }); + return this.parserOptions.supportsComments ? this.parseWithComments(r) : this.parseWithoutComments(r); + } + parseWithoutComments(e) { + const t = []; + let r = !0; + for (; r;) r = this.parseRow(e, t); + return { + line: e.line, + rows: t + }; + } + parseWithComments(e) { + const { + parserOptions: t + } = this, + r = []; + for (let n = e.nextCharacterToken; null !== n; n = e.nextCharacterToken) if (s.Token.isTokenComment(n, t)) { + if (null === e.advancePastLine()) return { + line: e.lineFromCursor, + rows: r + }; + if (!e.hasMoreCharacters) return { + line: e.lineFromCursor, + rows: r + }; + e.truncateToCursor(); + } else if (!this.parseRow(e, r)) break; + return { + line: e.line, + rows: r + }; + } + parseRow(e, t) { + if (!e.nextNonSpaceToken) return !1; + const r = this.rowParser.parse(e); + return null !== r && (this.parserOptions.ignoreEmpty && i.RowParser.isEmptyRow(r) || t.push(r), !0); + } + } + r.Parser = o; + }, { + "./RowParser": 157, + "./Scanner": 158, + "./Token": 159 + }], + 157: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.RowParser = void 0; + const n = e("./column"), + i = e("./Token"); + r.RowParser = class { + constructor(e) { + this.parserOptions = e, this.columnParser = new n.ColumnParser(e); + } + static isEmptyRow(e) { + return "" === e.join("").replace(/\s+/g, ""); + } + parse(e) { + const { + parserOptions: t + } = this, + { + hasMoreData: r + } = e, + n = e, + s = []; + let o = this.getStartToken(n, s); + for (; o;) { + if (i.Token.isTokenRowDelimiter(o)) return n.advancePastToken(o), !n.hasMoreCharacters && i.Token.isTokenCarriageReturn(o, t) && r ? null : (n.truncateToCursor(), s); + if (!this.shouldSkipColumnParse(n, o, s)) { + const e = this.columnParser.parse(n); + if (null === e) return null; + s.push(e); + } + o = n.nextNonSpaceToken; + } + return r ? null : (n.truncateToCursor(), s); + } + getStartToken(e, t) { + const r = e.nextNonSpaceToken; + return null !== r && i.Token.isTokenDelimiter(r, this.parserOptions) ? (t.push(""), e.nextNonSpaceToken) : r; + } + shouldSkipColumnParse(e, t, r) { + const { + parserOptions: n + } = this; + if (i.Token.isTokenDelimiter(t, n)) { + e.advancePastToken(t); + const s = e.nextCharacterToken; + if (!e.hasMoreCharacters || null !== s && i.Token.isTokenRowDelimiter(s)) return r.push(""), !0; + if (null !== s && i.Token.isTokenDelimiter(s, n)) return r.push(""), !0; + } + return !1; + } + }; + }, { + "./Token": 159, + "./column": 164 + }], + 158: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.Scanner = void 0; + const n = e("./Token"), + i = /((?:\r\n)|\n|\r)/; + r.Scanner = class { + constructor(e) { + this.cursor = 0, this.line = e.line, this.lineLength = this.line.length, this.parserOptions = e.parserOptions, this.hasMoreData = e.hasMoreData, this.cursor = e.cursor || 0; + } + get hasMoreCharacters() { + return this.lineLength > this.cursor; + } + get nextNonSpaceToken() { + const { + lineFromCursor: e + } = this, + t = this.parserOptions.NEXT_TOKEN_REGEXP; + if (-1 === e.search(t)) return null; + const r = t.exec(e); + if (null == r) return null; + const i = r[1], + s = this.cursor + (r.index || 0); + return new n.Token({ + token: i, + startCursor: s, + endCursor: s + i.length - 1 + }); + } + get nextCharacterToken() { + const { + cursor: e, + lineLength: t + } = this; + return t <= e ? null : new n.Token({ + token: this.line[e], + startCursor: e, + endCursor: e + }); + } + get lineFromCursor() { + return this.line.substr(this.cursor); + } + advancePastLine() { + const e = i.exec(this.lineFromCursor); + return e ? (this.cursor += (e.index || 0) + e[0].length, this) : this.hasMoreData ? null : (this.cursor = this.lineLength, this); + } + advanceTo(e) { + return this.cursor = e, this; + } + advanceToToken(e) { + return this.cursor = e.startCursor, this; + } + advancePastToken(e) { + return this.cursor = e.endCursor + 1, this; + } + truncateToCursor() { + return this.line = this.lineFromCursor, this.lineLength = this.line.length, this.cursor = 0, this; + } + }; + }, { + "./Token": 159 + }], + 159: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.Token = void 0; + r.Token = class { + constructor(e) { + this.token = e.token, this.startCursor = e.startCursor, this.endCursor = e.endCursor; + } + static isTokenRowDelimiter(e) { + const t = e.token; + return "\r" === t || "\n" === t || "\r\n" === t; + } + static isTokenCarriageReturn(e, t) { + return e.token === t.carriageReturn; + } + static isTokenComment(e, t) { + return t.supportsComments && !!e && e.token === t.comment; + } + static isTokenEscapeCharacter(e, t) { + return e.token === t.escapeChar; + } + static isTokenQuote(e, t) { + return e.token === t.quote; + } + static isTokenDelimiter(e, t) { + return e.token === t.delimiter; + } + }; + }, {}], + 160: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.ColumnFormatter = void 0; + r.ColumnFormatter = class { + constructor(e) { + e.trim ? this.format = e => e.trim() : e.ltrim ? this.format = e => e.trimLeft() : e.rtrim ? this.format = e => e.trimRight() : this.format = e => e; + } + }; + }, {}], + 161: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.ColumnParser = void 0; + const n = e("./NonQuotedColumnParser"), + i = e("./QuotedColumnParser"), + s = e("../Token"); + r.ColumnParser = class { + constructor(e) { + this.parserOptions = e, this.quotedColumnParser = new i.QuotedColumnParser(e), this.nonQuotedColumnParser = new n.NonQuotedColumnParser(e); + } + parse(e) { + const { + nextNonSpaceToken: t + } = e; + return null !== t && s.Token.isTokenQuote(t, this.parserOptions) ? (e.advanceToToken(t), this.quotedColumnParser.parse(e)) : this.nonQuotedColumnParser.parse(e); + } + }; + }, { + "../Token": 159, + "./NonQuotedColumnParser": 162, + "./QuotedColumnParser": 163 + }], + 162: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.NonQuotedColumnParser = void 0; + const n = e("./ColumnFormatter"), + i = e("../Token"); + r.NonQuotedColumnParser = class { + constructor(e) { + this.parserOptions = e, this.columnFormatter = new n.ColumnFormatter(e); + } + parse(e) { + if (!e.hasMoreCharacters) return null; + const { + parserOptions: t + } = this, + r = []; + let n = e.nextCharacterToken; + for (; n && !i.Token.isTokenDelimiter(n, t) && !i.Token.isTokenRowDelimiter(n); n = e.nextCharacterToken) r.push(n.token), e.advancePastToken(n); + return this.columnFormatter.format(r.join("")); + } + }; + }, { + "../Token": 159, + "./ColumnFormatter": 160 + }], + 163: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.QuotedColumnParser = void 0; + const n = e("./ColumnFormatter"), + i = e("../Token"); + r.QuotedColumnParser = class { + constructor(e) { + this.parserOptions = e, this.columnFormatter = new n.ColumnFormatter(e); + } + parse(e) { + if (!e.hasMoreCharacters) return null; + const t = e.cursor, + { + foundClosingQuote: r, + col: n + } = this.gatherDataBetweenQuotes(e); + if (!r) { + if (e.advanceTo(t), !e.hasMoreData) throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote || ""}' in line: at '${e.lineFromCursor.replace(/[\r\n]/g, "\\n'")}'`); + return null; + } + return this.checkForMalformedColumn(e), n; + } + gatherDataBetweenQuotes(e) { + const { + parserOptions: t + } = this; + let r = !1, + n = !1; + const s = []; + let o = e.nextCharacterToken; + for (; !n && null !== o; o = e.nextCharacterToken) { + const a = i.Token.isTokenQuote(o, t); + if (!r && a) r = !0;else if (r) if (i.Token.isTokenEscapeCharacter(o, t)) { + e.advancePastToken(o); + const r = e.nextCharacterToken; + null !== r && (i.Token.isTokenQuote(r, t) || i.Token.isTokenEscapeCharacter(r, t)) ? (s.push(r.token), o = r) : a ? n = !0 : s.push(o.token); + } else a ? n = !0 : s.push(o.token); + e.advancePastToken(o); + } + return { + col: this.columnFormatter.format(s.join("")), + foundClosingQuote: n + }; + } + checkForMalformedColumn(e) { + const { + parserOptions: t + } = this, + { + nextNonSpaceToken: r + } = e; + if (r) { + const n = i.Token.isTokenDelimiter(r, t), + s = i.Token.isTokenRowDelimiter(r); + if (!n && !s) { + const n = e.lineFromCursor.substr(0, 10).replace(/[\r\n]/g, "\\n'"); + throw new Error(`Parse Error: expected: '${t.escapedDelimiter}' OR new line got: '${r.token}'. at '${n}`); + } + e.advanceToToken(r); + } else e.hasMoreData || e.advancePastLine(); + } + }; + }, { + "../Token": 159, + "./ColumnFormatter": 160 + }], + 164: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.ColumnFormatter = r.QuotedColumnParser = r.NonQuotedColumnParser = r.ColumnParser = void 0; + var n = e("./ColumnParser"); + Object.defineProperty(r, "ColumnParser", { + enumerable: !0, + get: function () { + return n.ColumnParser; + } + }); + var i = e("./NonQuotedColumnParser"); + Object.defineProperty(r, "NonQuotedColumnParser", { + enumerable: !0, + get: function () { + return i.NonQuotedColumnParser; + } + }); + var s = e("./QuotedColumnParser"); + Object.defineProperty(r, "QuotedColumnParser", { + enumerable: !0, + get: function () { + return s.QuotedColumnParser; + } + }); + var o = e("./ColumnFormatter"); + Object.defineProperty(r, "ColumnFormatter", { + enumerable: !0, + get: function () { + return o.ColumnFormatter; + } + }); + }, { + "./ColumnFormatter": 160, + "./ColumnParser": 161, + "./NonQuotedColumnParser": 162, + "./QuotedColumnParser": 163 + }], + 165: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.QuotedColumnParser = r.NonQuotedColumnParser = r.ColumnParser = r.Token = r.Scanner = r.RowParser = r.Parser = void 0; + var n = e("./Parser"); + Object.defineProperty(r, "Parser", { + enumerable: !0, + get: function () { + return n.Parser; + } + }); + var i = e("./RowParser"); + Object.defineProperty(r, "RowParser", { + enumerable: !0, + get: function () { + return i.RowParser; + } + }); + var s = e("./Scanner"); + Object.defineProperty(r, "Scanner", { + enumerable: !0, + get: function () { + return s.Scanner; + } + }); + var o = e("./Token"); + Object.defineProperty(r, "Token", { + enumerable: !0, + get: function () { + return o.Token; + } + }); + var a = e("./column"); + Object.defineProperty(r, "ColumnParser", { + enumerable: !0, + get: function () { + return a.ColumnParser; + } + }), Object.defineProperty(r, "NonQuotedColumnParser", { + enumerable: !0, + get: function () { + return a.NonQuotedColumnParser; + } + }), Object.defineProperty(r, "QuotedColumnParser", { + enumerable: !0, + get: function () { + return a.QuotedColumnParser; + } + }); + }, { + "./Parser": 156, + "./RowParser": 157, + "./Scanner": 158, + "./Token": 159, + "./column": 164 + }], + 166: [function (e, t, r) { + "use strict"; + + var n = function (e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.HeaderTransformer = void 0; + const i = n(e("lodash.isundefined")), + s = n(e("lodash.isfunction")), + o = n(e("lodash.uniq")), + a = n(e("lodash.groupby")); + r.HeaderTransformer = class { + constructor(e) { + this.headers = null, this.receivedHeaders = !1, this.shouldUseFirstRow = !1, this.processedFirstRow = !1, this.headersLength = 0, this.parserOptions = e, !0 === e.headers ? this.shouldUseFirstRow = !0 : Array.isArray(e.headers) ? this.setHeaders(e.headers) : s.default(e.headers) && (this.headersTransform = e.headers); + } + transform(e, t) { + return this.shouldMapRow(e) ? t(null, this.processRow(e)) : t(null, { + row: null, + isValid: !0 + }); + } + shouldMapRow(e) { + const { + parserOptions: t + } = this; + if (!this.headersTransform && t.renameHeaders && !this.processedFirstRow) { + if (!this.receivedHeaders) throw new Error("Error renaming headers: new headers must be provided in an array"); + return this.processedFirstRow = !0, !1; + } + if (!this.receivedHeaders && Array.isArray(e)) { + if (this.headersTransform) this.setHeaders(this.headersTransform(e));else { + if (!this.shouldUseFirstRow) return !0; + this.setHeaders(e); + } + return !1; + } + return !0; + } + processRow(e) { + if (!this.headers) return { + row: e, + isValid: !0 + }; + const { + parserOptions: t + } = this; + if (!t.discardUnmappedColumns && e.length > this.headersLength) { + if (!t.strictColumnHandling) throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${e.length}`); + return { + row: e, + isValid: !1, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${e.length}` + }; + } + return t.strictColumnHandling && e.length < this.headersLength ? { + row: e, + isValid: !1, + reason: `Column header mismatch expected: ${this.headersLength} columns got: ${e.length}` + } : { + row: this.mapHeaders(e), + isValid: !0 + }; + } + mapHeaders(e) { + const t = {}, + { + headers: r, + headersLength: n + } = this; + for (let s = 0; s < n; s += 1) { + const n = r[s]; + if (!i.default(n)) { + const r = e[s]; + i.default(r) ? t[n] = "" : t[n] = r; + } + } + return t; + } + setHeaders(e) { + var t; + const r = e.filter(e => !!e); + if (o.default(r).length !== r.length) { + const e = a.default(r), + t = Object.keys(e).filter(t => e[t].length > 1); + throw new Error("Duplicate headers found " + JSON.stringify(t)); + } + this.headers = e, this.receivedHeaders = !0, this.headersLength = (null === (t = this.headers) || void 0 === t ? void 0 : t.length) || 0; + } + }; + }, { + "lodash.groupby": 443, + "lodash.isfunction": 446, + "lodash.isundefined": 448, + "lodash.uniq": 449 + }], + 167: [function (e, t, r) { + "use strict"; + + var n = function (e) { + return e && e.__esModule ? e : { + default: e + }; + }; + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.RowTransformerValidator = void 0; + const i = n(e("lodash.isfunction")), + s = e("../types"); + class o { + constructor() { + this._rowTransform = null, this._rowValidator = null; + } + static createTransform(e) { + return s.isSyncTransform(e) ? (t, r) => { + let n = null; + try { + n = e(t); + } catch (e) { + return r(e); + } + return r(null, n); + } : e; + } + static createValidator(e) { + return s.isSyncValidate(e) ? (t, r) => { + r(null, { + row: t, + isValid: e(t) + }); + } : (t, r) => { + e(t, (e, n, i) => e ? r(e) : r(null, n ? { + row: t, + isValid: n, + reason: i + } : { + row: t, + isValid: !1, + reason: i + })); + }; + } + set rowTransform(e) { + if (!i.default(e)) throw new TypeError("The transform should be a function"); + this._rowTransform = o.createTransform(e); + } + set rowValidator(e) { + if (!i.default(e)) throw new TypeError("The validate should be a function"); + this._rowValidator = o.createValidator(e); + } + transformAndValidate(e, t) { + return this.callTransformer(e, (e, r) => e ? t(e) : r ? this.callValidator(r, (e, n) => e ? t(e) : n && !n.isValid ? t(null, { + row: r, + isValid: !1, + reason: n.reason + }) : t(null, { + row: r, + isValid: !0 + })) : t(null, { + row: null, + isValid: !0 + })); + } + callTransformer(e, t) { + return this._rowTransform ? this._rowTransform(e, t) : t(null, e); + } + callValidator(e, t) { + return this._rowValidator ? this._rowValidator(e, t) : t(null, { + row: e, + isValid: !0 + }); + } + } + r.RowTransformerValidator = o; + }, { + "../types": 169, + "lodash.isfunction": 446 + }], + 168: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.HeaderTransformer = r.RowTransformerValidator = void 0; + var n = e("./RowTransformerValidator"); + Object.defineProperty(r, "RowTransformerValidator", { + enumerable: !0, + get: function () { + return n.RowTransformerValidator; + } + }); + var i = e("./HeaderTransformer"); + Object.defineProperty(r, "HeaderTransformer", { + enumerable: !0, + get: function () { + return i.HeaderTransformer; + } + }); + }, { + "./HeaderTransformer": 166, + "./RowTransformerValidator": 167 + }], + 169: [function (e, t, r) { + "use strict"; + + Object.defineProperty(r, "__esModule", { + value: !0 + }), r.isSyncValidate = r.isSyncTransform = void 0, r.isSyncTransform = e => 1 === e.length, r.isSyncValidate = e => 1 === e.length; + }, {}], + 170: [function (e, t, r) { + "use strict"; + + const n = r; + n.bignum = e("bn.js"), n.define = e("./asn1/api").define, n.base = e("./asn1/base"), n.constants = e("./asn1/constants"), n.decoders = e("./asn1/decoders"), n.encoders = e("./asn1/encoders"); + }, { + "./asn1/api": 171, + "./asn1/base": 173, + "./asn1/constants": 177, + "./asn1/decoders": 179, + "./asn1/encoders": 182, + "bn.js": 184 + }], + 171: [function (e, t, r) { + "use strict"; + + const n = e("./encoders"), + i = e("./decoders"), + s = e("inherits"); + function o(e, t) { + this.name = e, this.body = t, this.decoders = {}, this.encoders = {}; + } + r.define = function (e, t) { + return new o(e, t); + }, o.prototype._createNamed = function (e) { + const t = this.name; + function r(e) { + this._initNamed(e, t); + } + return s(r, e), r.prototype._initNamed = function (t, r) { + e.call(this, t, r); + }, new r(this); + }, o.prototype._getDecoder = function (e) { + return e = e || "der", this.decoders.hasOwnProperty(e) || (this.decoders[e] = this._createNamed(i[e])), this.decoders[e]; + }, o.prototype.decode = function (e, t, r) { + return this._getDecoder(t).decode(e, r); + }, o.prototype._getEncoder = function (e) { + return e = e || "der", this.encoders.hasOwnProperty(e) || (this.encoders[e] = this._createNamed(n[e])), this.encoders[e]; + }, o.prototype.encode = function (e, t, r) { + return this._getEncoder(t).encode(e, r); + }; + }, { + "./decoders": 179, + "./encoders": 182, + inherits: 440 + }], + 172: [function (e, t, r) { + "use strict"; + + const n = e("inherits"), + i = e("../base/reporter").Reporter, + s = e("safer-buffer").Buffer; + function o(e, t) { + i.call(this, t), s.isBuffer(e) ? (this.base = e, this.offset = 0, this.length = e.length) : this.error("Input not Buffer"); + } + function a(e, t) { + if (Array.isArray(e)) this.length = 0, this.value = e.map(function (e) { + return a.isEncoderBuffer(e) || (e = new a(e, t)), this.length += e.length, e; + }, this);else if ("number" == typeof e) { + if (!(0 <= e && e <= 255)) return t.error("non-byte EncoderBuffer value"); + this.value = e, this.length = 1; + } else if ("string" == typeof e) this.value = e, this.length = s.byteLength(e);else { + if (!s.isBuffer(e)) return t.error("Unsupported type: " + typeof e); + this.value = e, this.length = e.length; + } + } + n(o, i), r.DecoderBuffer = o, o.isDecoderBuffer = function (e) { + if (e instanceof o) return !0; + return "object" == typeof e && s.isBuffer(e.base) && "DecoderBuffer" === e.constructor.name && "number" == typeof e.offset && "number" == typeof e.length && "function" == typeof e.save && "function" == typeof e.restore && "function" == typeof e.isEmpty && "function" == typeof e.readUInt8 && "function" == typeof e.skip && "function" == typeof e.raw; + }, o.prototype.save = function () { + return { + offset: this.offset, + reporter: i.prototype.save.call(this) + }; + }, o.prototype.restore = function (e) { + const t = new o(this.base); + return t.offset = e.offset, t.length = this.offset, this.offset = e.offset, i.prototype.restore.call(this, e.reporter), t; + }, o.prototype.isEmpty = function () { + return this.offset === this.length; + }, o.prototype.readUInt8 = function (e) { + return this.offset + 1 <= this.length ? this.base.readUInt8(this.offset++, !0) : this.error(e || "DecoderBuffer overrun"); + }, o.prototype.skip = function (e, t) { + if (!(this.offset + e <= this.length)) return this.error(t || "DecoderBuffer overrun"); + const r = new o(this.base); + return r._reporterState = this._reporterState, r.offset = this.offset, r.length = this.offset + e, this.offset += e, r; + }, o.prototype.raw = function (e) { + return this.base.slice(e ? e.offset : this.offset, this.length); + }, r.EncoderBuffer = a, a.isEncoderBuffer = function (e) { + if (e instanceof a) return !0; + return "object" == typeof e && "EncoderBuffer" === e.constructor.name && "number" == typeof e.length && "function" == typeof e.join; + }, a.prototype.join = function (e, t) { + return e || (e = s.alloc(this.length)), t || (t = 0), 0 === this.length || (Array.isArray(this.value) ? this.value.forEach(function (r) { + r.join(e, t), t += r.length; + }) : ("number" == typeof this.value ? e[t] = this.value : "string" == typeof this.value ? e.write(this.value, t) : s.isBuffer(this.value) && this.value.copy(e, t), t += this.length)), e; + }; + }, { + "../base/reporter": 175, + inherits: 440, + "safer-buffer": 495 + }], + 173: [function (e, t, r) { + "use strict"; + + const n = r; + n.Reporter = e("./reporter").Reporter, n.DecoderBuffer = e("./buffer").DecoderBuffer, n.EncoderBuffer = e("./buffer").EncoderBuffer, n.Node = e("./node"); + }, { + "./buffer": 172, + "./node": 174, + "./reporter": 175 + }], + 174: [function (e, t, r) { + "use strict"; + + const n = e("../base/reporter").Reporter, + i = e("../base/buffer").EncoderBuffer, + s = e("../base/buffer").DecoderBuffer, + o = e("minimalistic-assert"), + a = ["seq", "seqof", "set", "setof", "objid", "bool", "gentime", "utctime", "null_", "enum", "int", "objDesc", "bitstr", "bmpstr", "charstr", "genstr", "graphstr", "ia5str", "iso646str", "numstr", "octstr", "printstr", "t61str", "unistr", "utf8str", "videostr"], + l = ["key", "obj", "use", "optional", "explicit", "implicit", "def", "choice", "any", "contains"].concat(a); + function c(e, t, r) { + const n = {}; + this._baseState = n, n.name = r, n.enc = e, n.parent = t || null, n.children = null, n.tag = null, n.args = null, n.reverseArgs = null, n.choice = null, n.optional = !1, n.any = !1, n.obj = !1, n.use = null, n.useDecoder = null, n.key = null, n.default = null, n.explicit = null, n.implicit = null, n.contains = null, n.parent || (n.children = [], this._wrap()); + } + t.exports = c; + const u = ["enc", "parent", "children", "tag", "args", "reverseArgs", "choice", "optional", "any", "obj", "use", "alteredUse", "key", "default", "explicit", "implicit", "contains"]; + c.prototype.clone = function () { + const e = this._baseState, + t = {}; + u.forEach(function (r) { + t[r] = e[r]; + }); + const r = new this.constructor(t.parent); + return r._baseState = t, r; + }, c.prototype._wrap = function () { + const e = this._baseState; + l.forEach(function (t) { + this[t] = function () { + const r = new this.constructor(this); + return e.children.push(r), r[t].apply(r, arguments); + }; + }, this); + }, c.prototype._init = function (e) { + const t = this._baseState; + o(null === t.parent), e.call(this), t.children = t.children.filter(function (e) { + return e._baseState.parent === this; + }, this), o.equal(t.children.length, 1, "Root node can have only one child"); + }, c.prototype._useArgs = function (e) { + const t = this._baseState, + r = e.filter(function (e) { + return e instanceof this.constructor; + }, this); + e = e.filter(function (e) { + return !(e instanceof this.constructor); + }, this), 0 !== r.length && (o(null === t.children), t.children = r, r.forEach(function (e) { + e._baseState.parent = this; + }, this)), 0 !== e.length && (o(null === t.args), t.args = e, t.reverseArgs = e.map(function (e) { + if ("object" != typeof e || e.constructor !== Object) return e; + const t = {}; + return Object.keys(e).forEach(function (r) { + r == (0 | r) && (r |= 0); + const n = e[r]; + t[n] = r; + }), t; + })); + }, ["_peekTag", "_decodeTag", "_use", "_decodeStr", "_decodeObjid", "_decodeTime", "_decodeNull", "_decodeInt", "_decodeBool", "_decodeList", "_encodeComposite", "_encodeStr", "_encodeObjid", "_encodeTime", "_encodeNull", "_encodeInt", "_encodeBool"].forEach(function (e) { + c.prototype[e] = function () { + const t = this._baseState; + throw new Error(e + " not implemented for encoding: " + t.enc); + }; + }), a.forEach(function (e) { + c.prototype[e] = function () { + const t = this._baseState, + r = Array.prototype.slice.call(arguments); + return o(null === t.tag), t.tag = e, this._useArgs(r), this; + }; + }), c.prototype.use = function (e) { + o(e); + const t = this._baseState; + return o(null === t.use), t.use = e, this; + }, c.prototype.optional = function () { + return this._baseState.optional = !0, this; + }, c.prototype.def = function (e) { + const t = this._baseState; + return o(null === t.default), t.default = e, t.optional = !0, this; + }, c.prototype.explicit = function (e) { + const t = this._baseState; + return o(null === t.explicit && null === t.implicit), t.explicit = e, this; + }, c.prototype.implicit = function (e) { + const t = this._baseState; + return o(null === t.explicit && null === t.implicit), t.implicit = e, this; + }, c.prototype.obj = function () { + const e = this._baseState, + t = Array.prototype.slice.call(arguments); + return e.obj = !0, 0 !== t.length && this._useArgs(t), this; + }, c.prototype.key = function (e) { + const t = this._baseState; + return o(null === t.key), t.key = e, this; + }, c.prototype.any = function () { + return this._baseState.any = !0, this; + }, c.prototype.choice = function (e) { + const t = this._baseState; + return o(null === t.choice), t.choice = e, this._useArgs(Object.keys(e).map(function (t) { + return e[t]; + })), this; + }, c.prototype.contains = function (e) { + const t = this._baseState; + return o(null === t.use), t.contains = e, this; + }, c.prototype._decode = function (e, t) { + const r = this._baseState; + if (null === r.parent) return e.wrapResult(r.children[0]._decode(e, t)); + let n, + i = r.default, + o = !0, + a = null; + if (null !== r.key && (a = e.enterKey(r.key)), r.optional) { + let n = null; + if (null !== r.explicit ? n = r.explicit : null !== r.implicit ? n = r.implicit : null !== r.tag && (n = r.tag), null !== n || r.any) { + if (o = this._peekTag(e, n, r.any), e.isError(o)) return o; + } else { + const n = e.save(); + try { + null === r.choice ? this._decodeGeneric(r.tag, e, t) : this._decodeChoice(e, t), o = !0; + } catch (e) { + o = !1; + } + e.restore(n); + } + } + if (r.obj && o && (n = e.enterObject()), o) { + if (null !== r.explicit) { + const t = this._decodeTag(e, r.explicit); + if (e.isError(t)) return t; + e = t; + } + const n = e.offset; + if (null === r.use && null === r.choice) { + let t; + r.any && (t = e.save()); + const n = this._decodeTag(e, null !== r.implicit ? r.implicit : r.tag, r.any); + if (e.isError(n)) return n; + r.any ? i = e.raw(t) : e = n; + } + if (t && t.track && null !== r.tag && t.track(e.path(), n, e.length, "tagged"), t && t.track && null !== r.tag && t.track(e.path(), e.offset, e.length, "content"), r.any || (i = null === r.choice ? this._decodeGeneric(r.tag, e, t) : this._decodeChoice(e, t)), e.isError(i)) return i; + if (r.any || null !== r.choice || null === r.children || r.children.forEach(function (r) { + r._decode(e, t); + }), r.contains && ("octstr" === r.tag || "bitstr" === r.tag)) { + const n = new s(i); + i = this._getUse(r.contains, e._reporterState.obj)._decode(n, t); + } + } + return r.obj && o && (i = e.leaveObject(n)), null === r.key || null === i && !0 !== o ? null !== a && e.exitKey(a) : e.leaveKey(a, r.key, i), i; + }, c.prototype._decodeGeneric = function (e, t, r) { + const n = this._baseState; + return "seq" === e || "set" === e ? null : "seqof" === e || "setof" === e ? this._decodeList(t, e, n.args[0], r) : /str$/.test(e) ? this._decodeStr(t, e, r) : "objid" === e && n.args ? this._decodeObjid(t, n.args[0], n.args[1], r) : "objid" === e ? this._decodeObjid(t, null, null, r) : "gentime" === e || "utctime" === e ? this._decodeTime(t, e, r) : "null_" === e ? this._decodeNull(t, r) : "bool" === e ? this._decodeBool(t, r) : "objDesc" === e ? this._decodeStr(t, e, r) : "int" === e || "enum" === e ? this._decodeInt(t, n.args && n.args[0], r) : null !== n.use ? this._getUse(n.use, t._reporterState.obj)._decode(t, r) : t.error("unknown tag: " + e); + }, c.prototype._getUse = function (e, t) { + const r = this._baseState; + return r.useDecoder = this._use(e, t), o(null === r.useDecoder._baseState.parent), r.useDecoder = r.useDecoder._baseState.children[0], r.implicit !== r.useDecoder._baseState.implicit && (r.useDecoder = r.useDecoder.clone(), r.useDecoder._baseState.implicit = r.implicit), r.useDecoder; + }, c.prototype._decodeChoice = function (e, t) { + const r = this._baseState; + let n = null, + i = !1; + return Object.keys(r.choice).some(function (s) { + const o = e.save(), + a = r.choice[s]; + try { + const r = a._decode(e, t); + if (e.isError(r)) return !1; + n = { + type: s, + value: r + }, i = !0; + } catch (t) { + return e.restore(o), !1; + } + return !0; + }, this), i ? n : e.error("Choice not matched"); + }, c.prototype._createEncoderBuffer = function (e) { + return new i(e, this.reporter); + }, c.prototype._encode = function (e, t, r) { + const n = this._baseState; + if (null !== n.default && n.default === e) return; + const i = this._encodeValue(e, t, r); + return void 0 === i || this._skipDefault(i, t, r) ? void 0 : i; + }, c.prototype._encodeValue = function (e, t, r) { + const i = this._baseState; + if (null === i.parent) return i.children[0]._encode(e, t || new n()); + let s = null; + if (this.reporter = t, i.optional && void 0 === e) { + if (null === i.default) return; + e = i.default; + } + let o = null, + a = !1; + if (i.any) s = this._createEncoderBuffer(e);else if (i.choice) s = this._encodeChoice(e, t);else if (i.contains) o = this._getUse(i.contains, r)._encode(e, t), a = !0;else if (i.children) o = i.children.map(function (r) { + if ("null_" === r._baseState.tag) return r._encode(null, t, e); + if (null === r._baseState.key) return t.error("Child should have a key"); + const n = t.enterKey(r._baseState.key); + if ("object" != typeof e) return t.error("Child expected, but input is not object"); + const i = r._encode(e[r._baseState.key], t, e); + return t.leaveKey(n), i; + }, this).filter(function (e) { + return e; + }), o = this._createEncoderBuffer(o);else if ("seqof" === i.tag || "setof" === i.tag) { + if (!i.args || 1 !== i.args.length) return t.error("Too many args for : " + i.tag); + if (!Array.isArray(e)) return t.error("seqof/setof, but data is not Array"); + const r = this.clone(); + r._baseState.implicit = null, o = this._createEncoderBuffer(e.map(function (r) { + const n = this._baseState; + return this._getUse(n.args[0], e)._encode(r, t); + }, r)); + } else null !== i.use ? s = this._getUse(i.use, r)._encode(e, t) : (o = this._encodePrimitive(i.tag, e), a = !0); + if (!i.any && null === i.choice) { + const e = null !== i.implicit ? i.implicit : i.tag, + r = null === i.implicit ? "universal" : "context"; + null === e ? null === i.use && t.error("Tag could be omitted only for .use()") : null === i.use && (s = this._encodeComposite(e, a, r, o)); + } + return null !== i.explicit && (s = this._encodeComposite(i.explicit, !1, "context", s)), s; + }, c.prototype._encodeChoice = function (e, t) { + const r = this._baseState, + n = r.choice[e.type]; + return n || o(!1, e.type + " not found in " + JSON.stringify(Object.keys(r.choice))), n._encode(e.value, t); + }, c.prototype._encodePrimitive = function (e, t) { + const r = this._baseState; + if (/str$/.test(e)) return this._encodeStr(t, e); + if ("objid" === e && r.args) return this._encodeObjid(t, r.reverseArgs[0], r.args[1]); + if ("objid" === e) return this._encodeObjid(t, null, null); + if ("gentime" === e || "utctime" === e) return this._encodeTime(t, e); + if ("null_" === e) return this._encodeNull(); + if ("int" === e || "enum" === e) return this._encodeInt(t, r.args && r.reverseArgs[0]); + if ("bool" === e) return this._encodeBool(t); + if ("objDesc" === e) return this._encodeStr(t, e); + throw new Error("Unsupported tag: " + e); + }, c.prototype._isNumstr = function (e) { + return /^[0-9 ]*$/.test(e); + }, c.prototype._isPrintstr = function (e) { + return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(e); + }; + }, { + "../base/buffer": 172, + "../base/reporter": 175, + "minimalistic-assert": 453 + }], + 175: [function (e, t, r) { + "use strict"; + + const n = e("inherits"); + function i(e) { + this._reporterState = { + obj: null, + path: [], + options: e || {}, + errors: [] + }; + } + function s(e, t) { + this.path = e, this.rethrow(t); + } + r.Reporter = i, i.prototype.isError = function (e) { + return e instanceof s; + }, i.prototype.save = function () { + const e = this._reporterState; + return { + obj: e.obj, + pathLen: e.path.length + }; + }, i.prototype.restore = function (e) { + const t = this._reporterState; + t.obj = e.obj, t.path = t.path.slice(0, e.pathLen); + }, i.prototype.enterKey = function (e) { + return this._reporterState.path.push(e); + }, i.prototype.exitKey = function (e) { + const t = this._reporterState; + t.path = t.path.slice(0, e - 1); + }, i.prototype.leaveKey = function (e, t, r) { + const n = this._reporterState; + this.exitKey(e), null !== n.obj && (n.obj[t] = r); + }, i.prototype.path = function () { + return this._reporterState.path.join("/"); + }, i.prototype.enterObject = function () { + const e = this._reporterState, + t = e.obj; + return e.obj = {}, t; + }, i.prototype.leaveObject = function (e) { + const t = this._reporterState, + r = t.obj; + return t.obj = e, r; + }, i.prototype.error = function (e) { + let t; + const r = this._reporterState, + n = e instanceof s; + if (t = n ? e : new s(r.path.map(function (e) { + return "[" + JSON.stringify(e) + "]"; + }).join(""), e.message || e, e.stack), !r.options.partial) throw t; + return n || r.errors.push(t), t; + }, i.prototype.wrapResult = function (e) { + const t = this._reporterState; + return t.options.partial ? { + result: this.isError(e) ? null : e, + errors: t.errors + } : e; + }, n(s, Error), s.prototype.rethrow = function (e) { + if (this.message = e + " at: " + (this.path || "(shallow)"), Error.captureStackTrace && Error.captureStackTrace(this, s), !this.stack) try { + throw new Error(this.message); + } catch (e) { + this.stack = e.stack; + } + return this; + }; + }, { + inherits: 440 + }], + 176: [function (e, t, r) { + "use strict"; + + function n(e) { + const t = {}; + return Object.keys(e).forEach(function (r) { + (0 | r) == r && (r |= 0); + const n = e[r]; + t[n] = r; + }), t; + } + r.tagClass = { + 0: "universal", + 1: "application", + 2: "context", + 3: "private" + }, r.tagClassByName = n(r.tagClass), r.tag = { + 0: "end", + 1: "bool", + 2: "int", + 3: "bitstr", + 4: "octstr", + 5: "null_", + 6: "objid", + 7: "objDesc", + 8: "external", + 9: "real", + 10: "enum", + 11: "embed", + 12: "utf8str", + 13: "relativeOid", + 16: "seq", + 17: "set", + 18: "numstr", + 19: "printstr", + 20: "t61str", + 21: "videostr", + 22: "ia5str", + 23: "utctime", + 24: "gentime", + 25: "graphstr", + 26: "iso646str", + 27: "genstr", + 28: "unistr", + 29: "charstr", + 30: "bmpstr" + }, r.tagByName = n(r.tag); + }, {}], + 177: [function (e, t, r) { + "use strict"; + + const n = r; + n._reverse = function (e) { + const t = {}; + return Object.keys(e).forEach(function (r) { + (0 | r) == r && (r |= 0); + const n = e[r]; + t[n] = r; + }), t; + }, n.der = e("./der"); + }, { + "./der": 176 + }], + 178: [function (e, t, r) { + "use strict"; + + const n = e("inherits"), + i = e("bn.js"), + s = e("../base/buffer").DecoderBuffer, + o = e("../base/node"), + a = e("../constants/der"); + function l(e) { + this.enc = "der", this.name = e.name, this.entity = e, this.tree = new c(), this.tree._init(e.body); + } + function c(e) { + o.call(this, "der", e); + } + function u(e, t) { + let r = e.readUInt8(t); + if (e.isError(r)) return r; + const n = a.tagClass[r >> 6], + i = 0 == (32 & r); + if (31 == (31 & r)) { + let n = r; + for (r = 0; 128 == (128 & n);) { + if (n = e.readUInt8(t), e.isError(n)) return n; + r <<= 7, r |= 127 & n; + } + } else r &= 31; + return { + cls: n, + primitive: i, + tag: r, + tagStr: a.tag[r] + }; + } + function h(e, t, r) { + let n = e.readUInt8(r); + if (e.isError(n)) return n; + if (!t && 128 === n) return null; + if (0 == (128 & n)) return n; + const i = 127 & n; + if (i > 4) return e.error("length octect is too long"); + n = 0; + for (let t = 0; t < i; t++) { + n <<= 8; + const t = e.readUInt8(r); + if (e.isError(t)) return t; + n |= t; + } + return n; + } + t.exports = l, l.prototype.decode = function (e, t) { + return s.isDecoderBuffer(e) || (e = new s(e, t)), this.tree._decode(e, t); + }, n(c, o), c.prototype._peekTag = function (e, t, r) { + if (e.isEmpty()) return !1; + const n = e.save(), + i = u(e, 'Failed to peek tag: "' + t + '"'); + return e.isError(i) ? i : (e.restore(n), i.tag === t || i.tagStr === t || i.tagStr + "of" === t || r); + }, c.prototype._decodeTag = function (e, t, r) { + const n = u(e, 'Failed to decode tag of "' + t + '"'); + if (e.isError(n)) return n; + let i = h(e, n.primitive, 'Failed to get length of "' + t + '"'); + if (e.isError(i)) return i; + if (!r && n.tag !== t && n.tagStr !== t && n.tagStr + "of" !== t) return e.error('Failed to match tag: "' + t + '"'); + if (n.primitive || null !== i) return e.skip(i, 'Failed to match body of: "' + t + '"'); + const s = e.save(), + o = this._skipUntilEnd(e, 'Failed to skip indefinite length body: "' + this.tag + '"'); + return e.isError(o) ? o : (i = e.offset - s.offset, e.restore(s), e.skip(i, 'Failed to match body of: "' + t + '"')); + }, c.prototype._skipUntilEnd = function (e, t) { + for (;;) { + const r = u(e, t); + if (e.isError(r)) return r; + const n = h(e, r.primitive, t); + if (e.isError(n)) return n; + let i; + if (i = r.primitive || null !== n ? e.skip(n) : this._skipUntilEnd(e, t), e.isError(i)) return i; + if ("end" === r.tagStr) break; + } + }, c.prototype._decodeList = function (e, t, r, n) { + const i = []; + for (; !e.isEmpty();) { + const t = this._peekTag(e, "end"); + if (e.isError(t)) return t; + const s = r.decode(e, "der", n); + if (e.isError(s) && t) break; + i.push(s); + } + return i; + }, c.prototype._decodeStr = function (e, t) { + if ("bitstr" === t) { + const t = e.readUInt8(); + return e.isError(t) ? t : { + unused: t, + data: e.raw() + }; + } + if ("bmpstr" === t) { + const t = e.raw(); + if (t.length % 2 == 1) return e.error("Decoding of string type: bmpstr length mismatch"); + let r = ""; + for (let e = 0; e < t.length / 2; e++) r += String.fromCharCode(t.readUInt16BE(2 * e)); + return r; + } + if ("numstr" === t) { + const t = e.raw().toString("ascii"); + return this._isNumstr(t) ? t : e.error("Decoding of string type: numstr unsupported characters"); + } + if ("octstr" === t) return e.raw(); + if ("objDesc" === t) return e.raw(); + if ("printstr" === t) { + const t = e.raw().toString("ascii"); + return this._isPrintstr(t) ? t : e.error("Decoding of string type: printstr unsupported characters"); + } + return /str$/.test(t) ? e.raw().toString() : e.error("Decoding of string type: " + t + " unsupported"); + }, c.prototype._decodeObjid = function (e, t, r) { + let n; + const i = []; + let s = 0, + o = 0; + for (; !e.isEmpty();) o = e.readUInt8(), s <<= 7, s |= 127 & o, 0 == (128 & o) && (i.push(s), s = 0); + 128 & o && i.push(s); + const a = i[0] / 40 | 0, + l = i[0] % 40; + if (n = r ? i : [a, l].concat(i.slice(1)), t) { + let e = t[n.join(" ")]; + void 0 === e && (e = t[n.join(".")]), void 0 !== e && (n = e); + } + return n; + }, c.prototype._decodeTime = function (e, t) { + const r = e.raw().toString(); + let n, i, s, o, a, l; + if ("gentime" === t) n = 0 | r.slice(0, 4), i = 0 | r.slice(4, 6), s = 0 | r.slice(6, 8), o = 0 | r.slice(8, 10), a = 0 | r.slice(10, 12), l = 0 | r.slice(12, 14);else { + if ("utctime" !== t) return e.error("Decoding " + t + " time is not supported yet"); + n = 0 | r.slice(0, 2), i = 0 | r.slice(2, 4), s = 0 | r.slice(4, 6), o = 0 | r.slice(6, 8), a = 0 | r.slice(8, 10), l = 0 | r.slice(10, 12), n = n < 70 ? 2e3 + n : 1900 + n; + } + return Date.UTC(n, i - 1, s, o, a, l, 0); + }, c.prototype._decodeNull = function () { + return null; + }, c.prototype._decodeBool = function (e) { + const t = e.readUInt8(); + return e.isError(t) ? t : 0 !== t; + }, c.prototype._decodeInt = function (e, t) { + const r = e.raw(); + let n = new i(r); + return t && (n = t[n.toString(10)] || n), n; + }, c.prototype._use = function (e, t) { + return "function" == typeof e && (e = e(t)), e._getDecoder("der").tree; + }; + }, { + "../base/buffer": 172, + "../base/node": 174, + "../constants/der": 176, + "bn.js": 184, + inherits: 440 + }], + 179: [function (e, t, r) { + "use strict"; + + const n = r; + n.der = e("./der"), n.pem = e("./pem"); + }, { + "./der": 178, + "./pem": 180 + }], + 180: [function (e, t, r) { + "use strict"; + + const n = e("inherits"), + i = e("safer-buffer").Buffer, + s = e("./der"); + function o(e) { + s.call(this, e), this.enc = "pem"; + } + n(o, s), t.exports = o, o.prototype.decode = function (e, t) { + const r = e.toString().split(/[\r\n]+/g), + n = t.label.toUpperCase(), + o = /^-----(BEGIN|END) ([^-]+)-----$/; + let a = -1, + l = -1; + for (let e = 0; e < r.length; e++) { + const t = r[e].match(o); + if (null !== t && t[2] === n) { + if (-1 !== a) { + if ("END" !== t[1]) break; + l = e; + break; + } + if ("BEGIN" !== t[1]) break; + a = e; + } + } + if (-1 === a || -1 === l) throw new Error("PEM section not found for: " + n); + const c = r.slice(a + 1, l).join(""); + c.replace(/[^a-z0-9+/=]+/gi, ""); + const u = i.from(c, "base64"); + return s.prototype.decode.call(this, u, t); + }; + }, { + "./der": 178, + inherits: 440, + "safer-buffer": 495 + }], + 181: [function (e, t, r) { + "use strict"; + + const n = e("inherits"), + i = e("safer-buffer").Buffer, + s = e("../base/node"), + o = e("../constants/der"); + function a(e) { + this.enc = "der", this.name = e.name, this.entity = e, this.tree = new l(), this.tree._init(e.body); + } + function l(e) { + s.call(this, "der", e); + } + function c(e) { + return e < 10 ? "0" + e : e; + } + t.exports = a, a.prototype.encode = function (e, t) { + return this.tree._encode(e, t).join(); + }, n(l, s), l.prototype._encodeComposite = function (e, t, r, n) { + const s = function (e, t, r, n) { + let i; + "seqof" === e ? e = "seq" : "setof" === e && (e = "set"); + if (o.tagByName.hasOwnProperty(e)) i = o.tagByName[e];else { + if ("number" != typeof e || (0 | e) !== e) return n.error("Unknown tag: " + e); + i = e; + } + if (i >= 31) return n.error("Multi-octet tag encoding unsupported"); + t || (i |= 32); + return i |= o.tagClassByName[r || "universal"] << 6, i; + }(e, t, r, this.reporter); + if (n.length < 128) { + const e = i.alloc(2); + return e[0] = s, e[1] = n.length, this._createEncoderBuffer([e, n]); + } + let a = 1; + for (let e = n.length; e >= 256; e >>= 8) a++; + const l = i.alloc(2 + a); + l[0] = s, l[1] = 128 | a; + for (let e = 1 + a, t = n.length; t > 0; e--, t >>= 8) l[e] = 255 & t; + return this._createEncoderBuffer([l, n]); + }, l.prototype._encodeStr = function (e, t) { + if ("bitstr" === t) return this._createEncoderBuffer([0 | e.unused, e.data]); + if ("bmpstr" === t) { + const t = i.alloc(2 * e.length); + for (let r = 0; r < e.length; r++) t.writeUInt16BE(e.charCodeAt(r), 2 * r); + return this._createEncoderBuffer(t); + } + return "numstr" === t ? this._isNumstr(e) ? this._createEncoderBuffer(e) : this.reporter.error("Encoding of string type: numstr supports only digits and space") : "printstr" === t ? this._isPrintstr(e) ? this._createEncoderBuffer(e) : this.reporter.error("Encoding of string type: printstr supports only latin upper and lower case letters, digits, space, apostrophe, left and rigth parenthesis, plus sign, comma, hyphen, dot, slash, colon, equal sign, question mark") : /str$/.test(t) || "objDesc" === t ? this._createEncoderBuffer(e) : this.reporter.error("Encoding of string type: " + t + " unsupported"); + }, l.prototype._encodeObjid = function (e, t, r) { + if ("string" == typeof e) { + if (!t) return this.reporter.error("string objid given, but no values map found"); + if (!t.hasOwnProperty(e)) return this.reporter.error("objid not found in values map"); + e = t[e].split(/[\s.]+/g); + for (let t = 0; t < e.length; t++) e[t] |= 0; + } else if (Array.isArray(e)) { + e = e.slice(); + for (let t = 0; t < e.length; t++) e[t] |= 0; + } + if (!Array.isArray(e)) return this.reporter.error("objid() should be either array or string, got: " + JSON.stringify(e)); + if (!r) { + if (e[1] >= 40) return this.reporter.error("Second objid identifier OOB"); + e.splice(0, 2, 40 * e[0] + e[1]); + } + let n = 0; + for (let t = 0; t < e.length; t++) { + let r = e[t]; + for (n++; r >= 128; r >>= 7) n++; + } + const s = i.alloc(n); + let o = s.length - 1; + for (let t = e.length - 1; t >= 0; t--) { + let r = e[t]; + for (s[o--] = 127 & r; (r >>= 7) > 0;) s[o--] = 128 | 127 & r; + } + return this._createEncoderBuffer(s); + }, l.prototype._encodeTime = function (e, t) { + let r; + const n = new Date(e); + return "gentime" === t ? r = [c(n.getUTCFullYear()), c(n.getUTCMonth() + 1), c(n.getUTCDate()), c(n.getUTCHours()), c(n.getUTCMinutes()), c(n.getUTCSeconds()), "Z"].join("") : "utctime" === t ? r = [c(n.getUTCFullYear() % 100), c(n.getUTCMonth() + 1), c(n.getUTCDate()), c(n.getUTCHours()), c(n.getUTCMinutes()), c(n.getUTCSeconds()), "Z"].join("") : this.reporter.error("Encoding " + t + " time is not supported yet"), this._encodeStr(r, "octstr"); + }, l.prototype._encodeNull = function () { + return this._createEncoderBuffer(""); + }, l.prototype._encodeInt = function (e, t) { + if ("string" == typeof e) { + if (!t) return this.reporter.error("String int or enum given, but no values map"); + if (!t.hasOwnProperty(e)) return this.reporter.error("Values map doesn't contain: " + JSON.stringify(e)); + e = t[e]; + } + if ("number" != typeof e && !i.isBuffer(e)) { + const t = e.toArray(); + !e.sign && 128 & t[0] && t.unshift(0), e = i.from(t); + } + if (i.isBuffer(e)) { + let t = e.length; + 0 === e.length && t++; + const r = i.alloc(t); + return e.copy(r), 0 === e.length && (r[0] = 0), this._createEncoderBuffer(r); + } + if (e < 128) return this._createEncoderBuffer(e); + if (e < 256) return this._createEncoderBuffer([0, e]); + let r = 1; + for (let t = e; t >= 256; t >>= 8) r++; + const n = new Array(r); + for (let t = n.length - 1; t >= 0; t--) n[t] = 255 & e, e >>= 8; + return 128 & n[0] && n.unshift(0), this._createEncoderBuffer(i.from(n)); + }, l.prototype._encodeBool = function (e) { + return this._createEncoderBuffer(e ? 255 : 0); + }, l.prototype._use = function (e, t) { + return "function" == typeof e && (e = e(t)), e._getEncoder("der").tree; + }, l.prototype._skipDefault = function (e, t, r) { + const n = this._baseState; + let i; + if (null === n.default) return !1; + const s = e.join(); + if (void 0 === n.defaultBuffer && (n.defaultBuffer = this._encodeValue(n.default, t, r).join()), s.length !== n.defaultBuffer.length) return !1; + for (i = 0; i < s.length; i++) if (s[i] !== n.defaultBuffer[i]) return !1; + return !0; + }; + }, { + "../base/node": 174, + "../constants/der": 176, + inherits: 440, + "safer-buffer": 495 + }], + 182: [function (e, t, r) { + "use strict"; + + const n = r; + n.der = e("./der"), n.pem = e("./pem"); + }, { + "./der": 181, + "./pem": 183 + }], + 183: [function (e, t, r) { + "use strict"; + + const n = e("inherits"), + i = e("./der"); + function s(e) { + i.call(this, e), this.enc = "pem"; + } + n(s, i), t.exports = s, s.prototype.encode = function (e, t) { + const r = i.prototype.encode.call(this, e).toString("base64"), + n = ["-----BEGIN " + t.label + "-----"]; + for (let e = 0; e < r.length; e += 64) n.push(r.slice(e, e + 64)); + return n.push("-----END " + t.label + "-----"), n.join("\n"); + }; + }, { + "./der": 181, + inherits: 440 + }], + 184: [function (e, t, r) { + "use strict"; + + !function (t, r) { + function n(e, t) { + if (!e) throw new Error(t || "Assertion failed"); + } + function i(e, t) { + e.super_ = t; + var r = function () {}; + r.prototype = t.prototype, e.prototype = new r(), e.prototype.constructor = e; + } + function s(e, t, r) { + if (s.isBN(e)) return e; + this.negative = 0, this.words = null, this.length = 0, this.red = null, null !== e && ("le" !== t && "be" !== t || (r = t, t = 10), this._init(e || 0, t || 10, r || "be")); + } + var o; + "object" == typeof t ? t.exports = s : (void 0).BN = s, s.BN = s, s.wordSize = 26; + try { + o = "undefined" != typeof window && void 0 !== window.Buffer ? window.Buffer : e("buffer").Buffer; + } catch (e) {} + function a(e, t) { + var r = e.charCodeAt(t); + return r >= 65 && r <= 70 ? r - 55 : r >= 97 && r <= 102 ? r - 87 : r - 48 & 15; + } + function l(e, t, r) { + var n = a(e, r); + return r - 1 >= t && (n |= a(e, r - 1) << 4), n; + } + function c(e, t, r, n) { + for (var i = 0, s = Math.min(e.length, r), o = t; o < s; o++) { + var a = e.charCodeAt(o) - 48; + i *= n, i += a >= 49 ? a - 49 + 10 : a >= 17 ? a - 17 + 10 : a; + } + return i; + } + s.isBN = function (e) { + return e instanceof s || null !== e && "object" == typeof e && e.constructor.wordSize === s.wordSize && Array.isArray(e.words); + }, s.max = function (e, t) { + return e.cmp(t) > 0 ? e : t; + }, s.min = function (e, t) { + return e.cmp(t) < 0 ? e : t; + }, s.prototype._init = function (e, t, r) { + if ("number" == typeof e) return this._initNumber(e, t, r); + if ("object" == typeof e) return this._initArray(e, t, r); + "hex" === t && (t = 16), n(t === (0 | t) && t >= 2 && t <= 36); + var i = 0; + "-" === (e = e.toString().replace(/\s+/g, ""))[0] && (i++, this.negative = 1), i < e.length && (16 === t ? this._parseHex(e, i, r) : (this._parseBase(e, t, i), "le" === r && this._initArray(this.toArray(), t, r))); + }, s.prototype._initNumber = function (e, t, r) { + e < 0 && (this.negative = 1, e = -e), e < 67108864 ? (this.words = [67108863 & e], this.length = 1) : e < 4503599627370496 ? (this.words = [67108863 & e, e / 67108864 & 67108863], this.length = 2) : (n(e < 9007199254740992), this.words = [67108863 & e, e / 67108864 & 67108863, 1], this.length = 3), "le" === r && this._initArray(this.toArray(), t, r); + }, s.prototype._initArray = function (e, t, r) { + if (n("number" == typeof e.length), e.length <= 0) return this.words = [0], this.length = 1, this; + this.length = Math.ceil(e.length / 3), this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) this.words[i] = 0; + var s, + o, + a = 0; + if ("be" === r) for (i = e.length - 1, s = 0; i >= 0; i -= 3) o = e[i] | e[i - 1] << 8 | e[i - 2] << 16, this.words[s] |= o << a & 67108863, this.words[s + 1] = o >>> 26 - a & 67108863, (a += 24) >= 26 && (a -= 26, s++);else if ("le" === r) for (i = 0, s = 0; i < e.length; i += 3) o = e[i] | e[i + 1] << 8 | e[i + 2] << 16, this.words[s] |= o << a & 67108863, this.words[s + 1] = o >>> 26 - a & 67108863, (a += 24) >= 26 && (a -= 26, s++); + return this.strip(); + }, s.prototype._parseHex = function (e, t, r) { + this.length = Math.ceil((e.length - t) / 6), this.words = new Array(this.length); + for (var n = 0; n < this.length; n++) this.words[n] = 0; + var i, + s = 0, + o = 0; + if ("be" === r) for (n = e.length - 1; n >= t; n -= 2) i = l(e, t, n) << s, this.words[o] |= 67108863 & i, s >= 18 ? (s -= 18, o += 1, this.words[o] |= i >>> 26) : s += 8;else for (n = (e.length - t) % 2 == 0 ? t + 1 : t; n < e.length; n += 2) i = l(e, t, n) << s, this.words[o] |= 67108863 & i, s >= 18 ? (s -= 18, o += 1, this.words[o] |= i >>> 26) : s += 8; + this.strip(); + }, s.prototype._parseBase = function (e, t, r) { + this.words = [0], this.length = 1; + for (var n = 0, i = 1; i <= 67108863; i *= t) n++; + n--, i = i / t | 0; + for (var s = e.length - r, o = s % n, a = Math.min(s, s - o) + r, l = 0, u = r; u < a; u += n) l = c(e, u, u + n, t), this.imuln(i), this.words[0] + l < 67108864 ? this.words[0] += l : this._iaddn(l); + if (0 !== o) { + var h = 1; + for (l = c(e, u, e.length, t), u = 0; u < o; u++) h *= t; + this.imuln(h), this.words[0] + l < 67108864 ? this.words[0] += l : this._iaddn(l); + } + this.strip(); + }, s.prototype.copy = function (e) { + e.words = new Array(this.length); + for (var t = 0; t < this.length; t++) e.words[t] = this.words[t]; + e.length = this.length, e.negative = this.negative, e.red = this.red; + }, s.prototype.clone = function () { + var e = new s(null); + return this.copy(e), e; + }, s.prototype._expand = function (e) { + for (; this.length < e;) this.words[this.length++] = 0; + return this; + }, s.prototype.strip = function () { + for (; this.length > 1 && 0 === this.words[this.length - 1];) this.length--; + return this._normSign(); + }, s.prototype._normSign = function () { + return 1 === this.length && 0 === this.words[0] && (this.negative = 0), this; + }, s.prototype.inspect = function () { + return (this.red ? ""; + }; + var u = ["", "0", "00", "000", "0000", "00000", "000000", "0000000", "00000000", "000000000", "0000000000", "00000000000", "000000000000", "0000000000000", "00000000000000", "000000000000000", "0000000000000000", "00000000000000000", "000000000000000000", "0000000000000000000", "00000000000000000000", "000000000000000000000", "0000000000000000000000", "00000000000000000000000", "000000000000000000000000", "0000000000000000000000000"], + h = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + f = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 1e7, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64e6, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 243e5, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + function d(e, t, r) { + r.negative = t.negative ^ e.negative; + var n = e.length + t.length | 0; + r.length = n, n = n - 1 | 0; + var i = 0 | e.words[0], + s = 0 | t.words[0], + o = i * s, + a = 67108863 & o, + l = o / 67108864 | 0; + r.words[0] = a; + for (var c = 1; c < n; c++) { + for (var u = l >>> 26, h = 67108863 & l, f = Math.min(c, t.length - 1), d = Math.max(0, c - e.length + 1); d <= f; d++) { + var p = c - d | 0; + u += (o = (i = 0 | e.words[p]) * (s = 0 | t.words[d]) + h) / 67108864 | 0, h = 67108863 & o; + } + r.words[c] = 0 | h, l = 0 | u; + } + return 0 !== l ? r.words[c] = 0 | l : r.length--, r.strip(); + } + s.prototype.toString = function (e, t) { + var r; + if (t = 0 | t || 1, 16 === (e = e || 10) || "hex" === e) { + r = ""; + for (var i = 0, s = 0, o = 0; o < this.length; o++) { + var a = this.words[o], + l = (16777215 & (a << i | s)).toString(16); + r = 0 !== (s = a >>> 24 - i & 16777215) || o !== this.length - 1 ? u[6 - l.length] + l + r : l + r, (i += 2) >= 26 && (i -= 26, o--); + } + for (0 !== s && (r = s.toString(16) + r); r.length % t != 0;) r = "0" + r; + return 0 !== this.negative && (r = "-" + r), r; + } + if (e === (0 | e) && e >= 2 && e <= 36) { + var c = h[e], + d = f[e]; + r = ""; + var p = this.clone(); + for (p.negative = 0; !p.isZero();) { + var m = p.modn(d).toString(e); + r = (p = p.idivn(d)).isZero() ? m + r : u[c - m.length] + m + r; + } + for (this.isZero() && (r = "0" + r); r.length % t != 0;) r = "0" + r; + return 0 !== this.negative && (r = "-" + r), r; + } + n(!1, "Base should be between 2 and 36"); + }, s.prototype.toNumber = function () { + var e = this.words[0]; + return 2 === this.length ? e += 67108864 * this.words[1] : 3 === this.length && 1 === this.words[2] ? e += 4503599627370496 + 67108864 * this.words[1] : this.length > 2 && n(!1, "Number can only safely store up to 53 bits"), 0 !== this.negative ? -e : e; + }, s.prototype.toJSON = function () { + return this.toString(16); + }, s.prototype.toBuffer = function (e, t) { + return n(void 0 !== o), this.toArrayLike(o, e, t); + }, s.prototype.toArray = function (e, t) { + return this.toArrayLike(Array, e, t); + }, s.prototype.toArrayLike = function (e, t, r) { + var i = this.byteLength(), + s = r || Math.max(1, i); + n(i <= s, "byte array longer than desired length"), n(s > 0, "Requested array length <= 0"), this.strip(); + var o, + a, + l = "le" === t, + c = new e(s), + u = this.clone(); + if (l) { + for (a = 0; !u.isZero(); a++) o = u.andln(255), u.iushrn(8), c[a] = o; + for (; a < s; a++) c[a] = 0; + } else { + for (a = 0; a < s - i; a++) c[a] = 0; + for (a = 0; !u.isZero(); a++) o = u.andln(255), u.iushrn(8), c[s - a - 1] = o; + } + return c; + }, Math.clz32 ? s.prototype._countBits = function (e) { + return 32 - Math.clz32(e); + } : s.prototype._countBits = function (e) { + var t = e, + r = 0; + return t >= 4096 && (r += 13, t >>>= 13), t >= 64 && (r += 7, t >>>= 7), t >= 8 && (r += 4, t >>>= 4), t >= 2 && (r += 2, t >>>= 2), r + t; + }, s.prototype._zeroBits = function (e) { + if (0 === e) return 26; + var t = e, + r = 0; + return 0 == (8191 & t) && (r += 13, t >>>= 13), 0 == (127 & t) && (r += 7, t >>>= 7), 0 == (15 & t) && (r += 4, t >>>= 4), 0 == (3 & t) && (r += 2, t >>>= 2), 0 == (1 & t) && r++, r; + }, s.prototype.bitLength = function () { + var e = this.words[this.length - 1], + t = this._countBits(e); + return 26 * (this.length - 1) + t; + }, s.prototype.zeroBits = function () { + if (this.isZero()) return 0; + for (var e = 0, t = 0; t < this.length; t++) { + var r = this._zeroBits(this.words[t]); + if (e += r, 26 !== r) break; + } + return e; + }, s.prototype.byteLength = function () { + return Math.ceil(this.bitLength() / 8); + }, s.prototype.toTwos = function (e) { + return 0 !== this.negative ? this.abs().inotn(e).iaddn(1) : this.clone(); + }, s.prototype.fromTwos = function (e) { + return this.testn(e - 1) ? this.notn(e).iaddn(1).ineg() : this.clone(); + }, s.prototype.isNeg = function () { + return 0 !== this.negative; + }, s.prototype.neg = function () { + return this.clone().ineg(); + }, s.prototype.ineg = function () { + return this.isZero() || (this.negative ^= 1), this; + }, s.prototype.iuor = function (e) { + for (; this.length < e.length;) this.words[this.length++] = 0; + for (var t = 0; t < e.length; t++) this.words[t] = this.words[t] | e.words[t]; + return this.strip(); + }, s.prototype.ior = function (e) { + return n(0 == (this.negative | e.negative)), this.iuor(e); + }, s.prototype.or = function (e) { + return this.length > e.length ? this.clone().ior(e) : e.clone().ior(this); + }, s.prototype.uor = function (e) { + return this.length > e.length ? this.clone().iuor(e) : e.clone().iuor(this); + }, s.prototype.iuand = function (e) { + var t; + t = this.length > e.length ? e : this; + for (var r = 0; r < t.length; r++) this.words[r] = this.words[r] & e.words[r]; + return this.length = t.length, this.strip(); + }, s.prototype.iand = function (e) { + return n(0 == (this.negative | e.negative)), this.iuand(e); + }, s.prototype.and = function (e) { + return this.length > e.length ? this.clone().iand(e) : e.clone().iand(this); + }, s.prototype.uand = function (e) { + return this.length > e.length ? this.clone().iuand(e) : e.clone().iuand(this); + }, s.prototype.iuxor = function (e) { + var t, r; + this.length > e.length ? (t = this, r = e) : (t = e, r = this); + for (var n = 0; n < r.length; n++) this.words[n] = t.words[n] ^ r.words[n]; + if (this !== t) for (; n < t.length; n++) this.words[n] = t.words[n]; + return this.length = t.length, this.strip(); + }, s.prototype.ixor = function (e) { + return n(0 == (this.negative | e.negative)), this.iuxor(e); + }, s.prototype.xor = function (e) { + return this.length > e.length ? this.clone().ixor(e) : e.clone().ixor(this); + }, s.prototype.uxor = function (e) { + return this.length > e.length ? this.clone().iuxor(e) : e.clone().iuxor(this); + }, s.prototype.inotn = function (e) { + n("number" == typeof e && e >= 0); + var t = 0 | Math.ceil(e / 26), + r = e % 26; + this._expand(t), r > 0 && t--; + for (var i = 0; i < t; i++) this.words[i] = 67108863 & ~this.words[i]; + return r > 0 && (this.words[i] = ~this.words[i] & 67108863 >> 26 - r), this.strip(); + }, s.prototype.notn = function (e) { + return this.clone().inotn(e); + }, s.prototype.setn = function (e, t) { + n("number" == typeof e && e >= 0); + var r = e / 26 | 0, + i = e % 26; + return this._expand(r + 1), this.words[r] = t ? this.words[r] | 1 << i : this.words[r] & ~(1 << i), this.strip(); + }, s.prototype.iadd = function (e) { + var t, r, n; + if (0 !== this.negative && 0 === e.negative) return this.negative = 0, t = this.isub(e), this.negative ^= 1, this._normSign(); + if (0 === this.negative && 0 !== e.negative) return e.negative = 0, t = this.isub(e), e.negative = 1, t._normSign(); + this.length > e.length ? (r = this, n = e) : (r = e, n = this); + for (var i = 0, s = 0; s < n.length; s++) t = (0 | r.words[s]) + (0 | n.words[s]) + i, this.words[s] = 67108863 & t, i = t >>> 26; + for (; 0 !== i && s < r.length; s++) t = (0 | r.words[s]) + i, this.words[s] = 67108863 & t, i = t >>> 26; + if (this.length = r.length, 0 !== i) this.words[this.length] = i, this.length++;else if (r !== this) for (; s < r.length; s++) this.words[s] = r.words[s]; + return this; + }, s.prototype.add = function (e) { + var t; + return 0 !== e.negative && 0 === this.negative ? (e.negative = 0, t = this.sub(e), e.negative ^= 1, t) : 0 === e.negative && 0 !== this.negative ? (this.negative = 0, t = e.sub(this), this.negative = 1, t) : this.length > e.length ? this.clone().iadd(e) : e.clone().iadd(this); + }, s.prototype.isub = function (e) { + if (0 !== e.negative) { + e.negative = 0; + var t = this.iadd(e); + return e.negative = 1, t._normSign(); + } + if (0 !== this.negative) return this.negative = 0, this.iadd(e), this.negative = 1, this._normSign(); + var r, + n, + i = this.cmp(e); + if (0 === i) return this.negative = 0, this.length = 1, this.words[0] = 0, this; + i > 0 ? (r = this, n = e) : (r = e, n = this); + for (var s = 0, o = 0; o < n.length; o++) s = (t = (0 | r.words[o]) - (0 | n.words[o]) + s) >> 26, this.words[o] = 67108863 & t; + for (; 0 !== s && o < r.length; o++) s = (t = (0 | r.words[o]) + s) >> 26, this.words[o] = 67108863 & t; + if (0 === s && o < r.length && r !== this) for (; o < r.length; o++) this.words[o] = r.words[o]; + return this.length = Math.max(this.length, o), r !== this && (this.negative = 1), this.strip(); + }, s.prototype.sub = function (e) { + return this.clone().isub(e); + }; + var p = function (e, t, r) { + var n, + i, + s, + o = e.words, + a = t.words, + l = r.words, + c = 0, + u = 0 | o[0], + h = 8191 & u, + f = u >>> 13, + d = 0 | o[1], + p = 8191 & d, + m = d >>> 13, + b = 0 | o[2], + g = 8191 & b, + y = b >>> 13, + v = 0 | o[3], + w = 8191 & v, + _ = v >>> 13, + x = 0 | o[4], + k = 8191 & x, + S = x >>> 13, + M = 0 | o[5], + C = 8191 & M, + T = M >>> 13, + E = 0 | o[6], + A = 8191 & E, + R = E >>> 13, + O = 0 | o[7], + j = 8191 & O, + I = O >>> 13, + N = 0 | o[8], + P = 8191 & N, + B = N >>> 13, + D = 0 | o[9], + F = 8191 & D, + L = D >>> 13, + z = 0 | a[0], + U = 8191 & z, + $ = z >>> 13, + H = 0 | a[1], + V = 8191 & H, + q = H >>> 13, + W = 0 | a[2], + X = 8191 & W, + K = W >>> 13, + Y = 0 | a[3], + Z = 8191 & Y, + G = Y >>> 13, + J = 0 | a[4], + Q = 8191 & J, + ee = J >>> 13, + te = 0 | a[5], + re = 8191 & te, + ne = te >>> 13, + ie = 0 | a[6], + se = 8191 & ie, + oe = ie >>> 13, + ae = 0 | a[7], + le = 8191 & ae, + ce = ae >>> 13, + ue = 0 | a[8], + he = 8191 & ue, + fe = ue >>> 13, + de = 0 | a[9], + pe = 8191 & de, + me = de >>> 13; + r.negative = e.negative ^ t.negative, r.length = 19; + var be = (c + (n = Math.imul(h, U)) | 0) + ((8191 & (i = (i = Math.imul(h, $)) + Math.imul(f, U) | 0)) << 13) | 0; + c = ((s = Math.imul(f, $)) + (i >>> 13) | 0) + (be >>> 26) | 0, be &= 67108863, n = Math.imul(p, U), i = (i = Math.imul(p, $)) + Math.imul(m, U) | 0, s = Math.imul(m, $); + var ge = (c + (n = n + Math.imul(h, V) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, q) | 0) + Math.imul(f, V) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, q) | 0) + (i >>> 13) | 0) + (ge >>> 26) | 0, ge &= 67108863, n = Math.imul(g, U), i = (i = Math.imul(g, $)) + Math.imul(y, U) | 0, s = Math.imul(y, $), n = n + Math.imul(p, V) | 0, i = (i = i + Math.imul(p, q) | 0) + Math.imul(m, V) | 0, s = s + Math.imul(m, q) | 0; + var ye = (c + (n = n + Math.imul(h, X) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, K) | 0) + Math.imul(f, X) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, K) | 0) + (i >>> 13) | 0) + (ye >>> 26) | 0, ye &= 67108863, n = Math.imul(w, U), i = (i = Math.imul(w, $)) + Math.imul(_, U) | 0, s = Math.imul(_, $), n = n + Math.imul(g, V) | 0, i = (i = i + Math.imul(g, q) | 0) + Math.imul(y, V) | 0, s = s + Math.imul(y, q) | 0, n = n + Math.imul(p, X) | 0, i = (i = i + Math.imul(p, K) | 0) + Math.imul(m, X) | 0, s = s + Math.imul(m, K) | 0; + var ve = (c + (n = n + Math.imul(h, Z) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, G) | 0) + Math.imul(f, Z) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, G) | 0) + (i >>> 13) | 0) + (ve >>> 26) | 0, ve &= 67108863, n = Math.imul(k, U), i = (i = Math.imul(k, $)) + Math.imul(S, U) | 0, s = Math.imul(S, $), n = n + Math.imul(w, V) | 0, i = (i = i + Math.imul(w, q) | 0) + Math.imul(_, V) | 0, s = s + Math.imul(_, q) | 0, n = n + Math.imul(g, X) | 0, i = (i = i + Math.imul(g, K) | 0) + Math.imul(y, X) | 0, s = s + Math.imul(y, K) | 0, n = n + Math.imul(p, Z) | 0, i = (i = i + Math.imul(p, G) | 0) + Math.imul(m, Z) | 0, s = s + Math.imul(m, G) | 0; + var we = (c + (n = n + Math.imul(h, Q) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, ee) | 0) + Math.imul(f, Q) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, ee) | 0) + (i >>> 13) | 0) + (we >>> 26) | 0, we &= 67108863, n = Math.imul(C, U), i = (i = Math.imul(C, $)) + Math.imul(T, U) | 0, s = Math.imul(T, $), n = n + Math.imul(k, V) | 0, i = (i = i + Math.imul(k, q) | 0) + Math.imul(S, V) | 0, s = s + Math.imul(S, q) | 0, n = n + Math.imul(w, X) | 0, i = (i = i + Math.imul(w, K) | 0) + Math.imul(_, X) | 0, s = s + Math.imul(_, K) | 0, n = n + Math.imul(g, Z) | 0, i = (i = i + Math.imul(g, G) | 0) + Math.imul(y, Z) | 0, s = s + Math.imul(y, G) | 0, n = n + Math.imul(p, Q) | 0, i = (i = i + Math.imul(p, ee) | 0) + Math.imul(m, Q) | 0, s = s + Math.imul(m, ee) | 0; + var _e = (c + (n = n + Math.imul(h, re) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, ne) | 0) + Math.imul(f, re) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, ne) | 0) + (i >>> 13) | 0) + (_e >>> 26) | 0, _e &= 67108863, n = Math.imul(A, U), i = (i = Math.imul(A, $)) + Math.imul(R, U) | 0, s = Math.imul(R, $), n = n + Math.imul(C, V) | 0, i = (i = i + Math.imul(C, q) | 0) + Math.imul(T, V) | 0, s = s + Math.imul(T, q) | 0, n = n + Math.imul(k, X) | 0, i = (i = i + Math.imul(k, K) | 0) + Math.imul(S, X) | 0, s = s + Math.imul(S, K) | 0, n = n + Math.imul(w, Z) | 0, i = (i = i + Math.imul(w, G) | 0) + Math.imul(_, Z) | 0, s = s + Math.imul(_, G) | 0, n = n + Math.imul(g, Q) | 0, i = (i = i + Math.imul(g, ee) | 0) + Math.imul(y, Q) | 0, s = s + Math.imul(y, ee) | 0, n = n + Math.imul(p, re) | 0, i = (i = i + Math.imul(p, ne) | 0) + Math.imul(m, re) | 0, s = s + Math.imul(m, ne) | 0; + var xe = (c + (n = n + Math.imul(h, se) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, oe) | 0) + Math.imul(f, se) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, oe) | 0) + (i >>> 13) | 0) + (xe >>> 26) | 0, xe &= 67108863, n = Math.imul(j, U), i = (i = Math.imul(j, $)) + Math.imul(I, U) | 0, s = Math.imul(I, $), n = n + Math.imul(A, V) | 0, i = (i = i + Math.imul(A, q) | 0) + Math.imul(R, V) | 0, s = s + Math.imul(R, q) | 0, n = n + Math.imul(C, X) | 0, i = (i = i + Math.imul(C, K) | 0) + Math.imul(T, X) | 0, s = s + Math.imul(T, K) | 0, n = n + Math.imul(k, Z) | 0, i = (i = i + Math.imul(k, G) | 0) + Math.imul(S, Z) | 0, s = s + Math.imul(S, G) | 0, n = n + Math.imul(w, Q) | 0, i = (i = i + Math.imul(w, ee) | 0) + Math.imul(_, Q) | 0, s = s + Math.imul(_, ee) | 0, n = n + Math.imul(g, re) | 0, i = (i = i + Math.imul(g, ne) | 0) + Math.imul(y, re) | 0, s = s + Math.imul(y, ne) | 0, n = n + Math.imul(p, se) | 0, i = (i = i + Math.imul(p, oe) | 0) + Math.imul(m, se) | 0, s = s + Math.imul(m, oe) | 0; + var ke = (c + (n = n + Math.imul(h, le) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, ce) | 0) + Math.imul(f, le) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, ce) | 0) + (i >>> 13) | 0) + (ke >>> 26) | 0, ke &= 67108863, n = Math.imul(P, U), i = (i = Math.imul(P, $)) + Math.imul(B, U) | 0, s = Math.imul(B, $), n = n + Math.imul(j, V) | 0, i = (i = i + Math.imul(j, q) | 0) + Math.imul(I, V) | 0, s = s + Math.imul(I, q) | 0, n = n + Math.imul(A, X) | 0, i = (i = i + Math.imul(A, K) | 0) + Math.imul(R, X) | 0, s = s + Math.imul(R, K) | 0, n = n + Math.imul(C, Z) | 0, i = (i = i + Math.imul(C, G) | 0) + Math.imul(T, Z) | 0, s = s + Math.imul(T, G) | 0, n = n + Math.imul(k, Q) | 0, i = (i = i + Math.imul(k, ee) | 0) + Math.imul(S, Q) | 0, s = s + Math.imul(S, ee) | 0, n = n + Math.imul(w, re) | 0, i = (i = i + Math.imul(w, ne) | 0) + Math.imul(_, re) | 0, s = s + Math.imul(_, ne) | 0, n = n + Math.imul(g, se) | 0, i = (i = i + Math.imul(g, oe) | 0) + Math.imul(y, se) | 0, s = s + Math.imul(y, oe) | 0, n = n + Math.imul(p, le) | 0, i = (i = i + Math.imul(p, ce) | 0) + Math.imul(m, le) | 0, s = s + Math.imul(m, ce) | 0; + var Se = (c + (n = n + Math.imul(h, he) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, fe) | 0) + Math.imul(f, he) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, fe) | 0) + (i >>> 13) | 0) + (Se >>> 26) | 0, Se &= 67108863, n = Math.imul(F, U), i = (i = Math.imul(F, $)) + Math.imul(L, U) | 0, s = Math.imul(L, $), n = n + Math.imul(P, V) | 0, i = (i = i + Math.imul(P, q) | 0) + Math.imul(B, V) | 0, s = s + Math.imul(B, q) | 0, n = n + Math.imul(j, X) | 0, i = (i = i + Math.imul(j, K) | 0) + Math.imul(I, X) | 0, s = s + Math.imul(I, K) | 0, n = n + Math.imul(A, Z) | 0, i = (i = i + Math.imul(A, G) | 0) + Math.imul(R, Z) | 0, s = s + Math.imul(R, G) | 0, n = n + Math.imul(C, Q) | 0, i = (i = i + Math.imul(C, ee) | 0) + Math.imul(T, Q) | 0, s = s + Math.imul(T, ee) | 0, n = n + Math.imul(k, re) | 0, i = (i = i + Math.imul(k, ne) | 0) + Math.imul(S, re) | 0, s = s + Math.imul(S, ne) | 0, n = n + Math.imul(w, se) | 0, i = (i = i + Math.imul(w, oe) | 0) + Math.imul(_, se) | 0, s = s + Math.imul(_, oe) | 0, n = n + Math.imul(g, le) | 0, i = (i = i + Math.imul(g, ce) | 0) + Math.imul(y, le) | 0, s = s + Math.imul(y, ce) | 0, n = n + Math.imul(p, he) | 0, i = (i = i + Math.imul(p, fe) | 0) + Math.imul(m, he) | 0, s = s + Math.imul(m, fe) | 0; + var Me = (c + (n = n + Math.imul(h, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, me) | 0) + Math.imul(f, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, me) | 0) + (i >>> 13) | 0) + (Me >>> 26) | 0, Me &= 67108863, n = Math.imul(F, V), i = (i = Math.imul(F, q)) + Math.imul(L, V) | 0, s = Math.imul(L, q), n = n + Math.imul(P, X) | 0, i = (i = i + Math.imul(P, K) | 0) + Math.imul(B, X) | 0, s = s + Math.imul(B, K) | 0, n = n + Math.imul(j, Z) | 0, i = (i = i + Math.imul(j, G) | 0) + Math.imul(I, Z) | 0, s = s + Math.imul(I, G) | 0, n = n + Math.imul(A, Q) | 0, i = (i = i + Math.imul(A, ee) | 0) + Math.imul(R, Q) | 0, s = s + Math.imul(R, ee) | 0, n = n + Math.imul(C, re) | 0, i = (i = i + Math.imul(C, ne) | 0) + Math.imul(T, re) | 0, s = s + Math.imul(T, ne) | 0, n = n + Math.imul(k, se) | 0, i = (i = i + Math.imul(k, oe) | 0) + Math.imul(S, se) | 0, s = s + Math.imul(S, oe) | 0, n = n + Math.imul(w, le) | 0, i = (i = i + Math.imul(w, ce) | 0) + Math.imul(_, le) | 0, s = s + Math.imul(_, ce) | 0, n = n + Math.imul(g, he) | 0, i = (i = i + Math.imul(g, fe) | 0) + Math.imul(y, he) | 0, s = s + Math.imul(y, fe) | 0; + var Ce = (c + (n = n + Math.imul(p, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(p, me) | 0) + Math.imul(m, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(m, me) | 0) + (i >>> 13) | 0) + (Ce >>> 26) | 0, Ce &= 67108863, n = Math.imul(F, X), i = (i = Math.imul(F, K)) + Math.imul(L, X) | 0, s = Math.imul(L, K), n = n + Math.imul(P, Z) | 0, i = (i = i + Math.imul(P, G) | 0) + Math.imul(B, Z) | 0, s = s + Math.imul(B, G) | 0, n = n + Math.imul(j, Q) | 0, i = (i = i + Math.imul(j, ee) | 0) + Math.imul(I, Q) | 0, s = s + Math.imul(I, ee) | 0, n = n + Math.imul(A, re) | 0, i = (i = i + Math.imul(A, ne) | 0) + Math.imul(R, re) | 0, s = s + Math.imul(R, ne) | 0, n = n + Math.imul(C, se) | 0, i = (i = i + Math.imul(C, oe) | 0) + Math.imul(T, se) | 0, s = s + Math.imul(T, oe) | 0, n = n + Math.imul(k, le) | 0, i = (i = i + Math.imul(k, ce) | 0) + Math.imul(S, le) | 0, s = s + Math.imul(S, ce) | 0, n = n + Math.imul(w, he) | 0, i = (i = i + Math.imul(w, fe) | 0) + Math.imul(_, he) | 0, s = s + Math.imul(_, fe) | 0; + var Te = (c + (n = n + Math.imul(g, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(g, me) | 0) + Math.imul(y, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(y, me) | 0) + (i >>> 13) | 0) + (Te >>> 26) | 0, Te &= 67108863, n = Math.imul(F, Z), i = (i = Math.imul(F, G)) + Math.imul(L, Z) | 0, s = Math.imul(L, G), n = n + Math.imul(P, Q) | 0, i = (i = i + Math.imul(P, ee) | 0) + Math.imul(B, Q) | 0, s = s + Math.imul(B, ee) | 0, n = n + Math.imul(j, re) | 0, i = (i = i + Math.imul(j, ne) | 0) + Math.imul(I, re) | 0, s = s + Math.imul(I, ne) | 0, n = n + Math.imul(A, se) | 0, i = (i = i + Math.imul(A, oe) | 0) + Math.imul(R, se) | 0, s = s + Math.imul(R, oe) | 0, n = n + Math.imul(C, le) | 0, i = (i = i + Math.imul(C, ce) | 0) + Math.imul(T, le) | 0, s = s + Math.imul(T, ce) | 0, n = n + Math.imul(k, he) | 0, i = (i = i + Math.imul(k, fe) | 0) + Math.imul(S, he) | 0, s = s + Math.imul(S, fe) | 0; + var Ee = (c + (n = n + Math.imul(w, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(w, me) | 0) + Math.imul(_, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(_, me) | 0) + (i >>> 13) | 0) + (Ee >>> 26) | 0, Ee &= 67108863, n = Math.imul(F, Q), i = (i = Math.imul(F, ee)) + Math.imul(L, Q) | 0, s = Math.imul(L, ee), n = n + Math.imul(P, re) | 0, i = (i = i + Math.imul(P, ne) | 0) + Math.imul(B, re) | 0, s = s + Math.imul(B, ne) | 0, n = n + Math.imul(j, se) | 0, i = (i = i + Math.imul(j, oe) | 0) + Math.imul(I, se) | 0, s = s + Math.imul(I, oe) | 0, n = n + Math.imul(A, le) | 0, i = (i = i + Math.imul(A, ce) | 0) + Math.imul(R, le) | 0, s = s + Math.imul(R, ce) | 0, n = n + Math.imul(C, he) | 0, i = (i = i + Math.imul(C, fe) | 0) + Math.imul(T, he) | 0, s = s + Math.imul(T, fe) | 0; + var Ae = (c + (n = n + Math.imul(k, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(k, me) | 0) + Math.imul(S, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(S, me) | 0) + (i >>> 13) | 0) + (Ae >>> 26) | 0, Ae &= 67108863, n = Math.imul(F, re), i = (i = Math.imul(F, ne)) + Math.imul(L, re) | 0, s = Math.imul(L, ne), n = n + Math.imul(P, se) | 0, i = (i = i + Math.imul(P, oe) | 0) + Math.imul(B, se) | 0, s = s + Math.imul(B, oe) | 0, n = n + Math.imul(j, le) | 0, i = (i = i + Math.imul(j, ce) | 0) + Math.imul(I, le) | 0, s = s + Math.imul(I, ce) | 0, n = n + Math.imul(A, he) | 0, i = (i = i + Math.imul(A, fe) | 0) + Math.imul(R, he) | 0, s = s + Math.imul(R, fe) | 0; + var Re = (c + (n = n + Math.imul(C, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(C, me) | 0) + Math.imul(T, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(T, me) | 0) + (i >>> 13) | 0) + (Re >>> 26) | 0, Re &= 67108863, n = Math.imul(F, se), i = (i = Math.imul(F, oe)) + Math.imul(L, se) | 0, s = Math.imul(L, oe), n = n + Math.imul(P, le) | 0, i = (i = i + Math.imul(P, ce) | 0) + Math.imul(B, le) | 0, s = s + Math.imul(B, ce) | 0, n = n + Math.imul(j, he) | 0, i = (i = i + Math.imul(j, fe) | 0) + Math.imul(I, he) | 0, s = s + Math.imul(I, fe) | 0; + var Oe = (c + (n = n + Math.imul(A, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(A, me) | 0) + Math.imul(R, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(R, me) | 0) + (i >>> 13) | 0) + (Oe >>> 26) | 0, Oe &= 67108863, n = Math.imul(F, le), i = (i = Math.imul(F, ce)) + Math.imul(L, le) | 0, s = Math.imul(L, ce), n = n + Math.imul(P, he) | 0, i = (i = i + Math.imul(P, fe) | 0) + Math.imul(B, he) | 0, s = s + Math.imul(B, fe) | 0; + var je = (c + (n = n + Math.imul(j, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(j, me) | 0) + Math.imul(I, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(I, me) | 0) + (i >>> 13) | 0) + (je >>> 26) | 0, je &= 67108863, n = Math.imul(F, he), i = (i = Math.imul(F, fe)) + Math.imul(L, he) | 0, s = Math.imul(L, fe); + var Ie = (c + (n = n + Math.imul(P, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(P, me) | 0) + Math.imul(B, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(B, me) | 0) + (i >>> 13) | 0) + (Ie >>> 26) | 0, Ie &= 67108863; + var Ne = (c + (n = Math.imul(F, pe)) | 0) + ((8191 & (i = (i = Math.imul(F, me)) + Math.imul(L, pe) | 0)) << 13) | 0; + return c = ((s = Math.imul(L, me)) + (i >>> 13) | 0) + (Ne >>> 26) | 0, Ne &= 67108863, l[0] = be, l[1] = ge, l[2] = ye, l[3] = ve, l[4] = we, l[5] = _e, l[6] = xe, l[7] = ke, l[8] = Se, l[9] = Me, l[10] = Ce, l[11] = Te, l[12] = Ee, l[13] = Ae, l[14] = Re, l[15] = Oe, l[16] = je, l[17] = Ie, l[18] = Ne, 0 !== c && (l[19] = c, r.length++), r; + }; + function m(e, t, r) { + return new b().mulp(e, t, r); + } + function b(e, t) { + this.x = e, this.y = t; + } + Math.imul || (p = d), s.prototype.mulTo = function (e, t) { + var r = this.length + e.length; + return 10 === this.length && 10 === e.length ? p(this, e, t) : r < 63 ? d(this, e, t) : r < 1024 ? function (e, t, r) { + r.negative = t.negative ^ e.negative, r.length = e.length + t.length; + for (var n = 0, i = 0, s = 0; s < r.length - 1; s++) { + var o = i; + i = 0; + for (var a = 67108863 & n, l = Math.min(s, t.length - 1), c = Math.max(0, s - e.length + 1); c <= l; c++) { + var u = s - c, + h = (0 | e.words[u]) * (0 | t.words[c]), + f = 67108863 & h; + a = 67108863 & (f = f + a | 0), i += (o = (o = o + (h / 67108864 | 0) | 0) + (f >>> 26) | 0) >>> 26, o &= 67108863; + } + r.words[s] = a, n = o, o = i; + } + return 0 !== n ? r.words[s] = n : r.length--, r.strip(); + }(this, e, t) : m(this, e, t); + }, b.prototype.makeRBT = function (e) { + for (var t = new Array(e), r = s.prototype._countBits(e) - 1, n = 0; n < e; n++) t[n] = this.revBin(n, r, e); + return t; + }, b.prototype.revBin = function (e, t, r) { + if (0 === e || e === r - 1) return e; + for (var n = 0, i = 0; i < t; i++) n |= (1 & e) << t - i - 1, e >>= 1; + return n; + }, b.prototype.permute = function (e, t, r, n, i, s) { + for (var o = 0; o < s; o++) n[o] = t[e[o]], i[o] = r[e[o]]; + }, b.prototype.transform = function (e, t, r, n, i, s) { + this.permute(s, e, t, r, n, i); + for (var o = 1; o < i; o <<= 1) for (var a = o << 1, l = Math.cos(2 * Math.PI / a), c = Math.sin(2 * Math.PI / a), u = 0; u < i; u += a) for (var h = l, f = c, d = 0; d < o; d++) { + var p = r[u + d], + m = n[u + d], + b = r[u + d + o], + g = n[u + d + o], + y = h * b - f * g; + g = h * g + f * b, b = y, r[u + d] = p + b, n[u + d] = m + g, r[u + d + o] = p - b, n[u + d + o] = m - g, d !== a && (y = l * h - c * f, f = l * f + c * h, h = y); + } + }, b.prototype.guessLen13b = function (e, t) { + var r = 1 | Math.max(t, e), + n = 1 & r, + i = 0; + for (r = r / 2 | 0; r; r >>>= 1) i++; + return 1 << i + 1 + n; + }, b.prototype.conjugate = function (e, t, r) { + if (!(r <= 1)) for (var n = 0; n < r / 2; n++) { + var i = e[n]; + e[n] = e[r - n - 1], e[r - n - 1] = i, i = t[n], t[n] = -t[r - n - 1], t[r - n - 1] = -i; + } + }, b.prototype.normalize13b = function (e, t) { + for (var r = 0, n = 0; n < t / 2; n++) { + var i = 8192 * Math.round(e[2 * n + 1] / t) + Math.round(e[2 * n] / t) + r; + e[n] = 67108863 & i, r = i < 67108864 ? 0 : i / 67108864 | 0; + } + return e; + }, b.prototype.convert13b = function (e, t, r, i) { + for (var s = 0, o = 0; o < t; o++) s += 0 | e[o], r[2 * o] = 8191 & s, s >>>= 13, r[2 * o + 1] = 8191 & s, s >>>= 13; + for (o = 2 * t; o < i; ++o) r[o] = 0; + n(0 === s), n(0 == (-8192 & s)); + }, b.prototype.stub = function (e) { + for (var t = new Array(e), r = 0; r < e; r++) t[r] = 0; + return t; + }, b.prototype.mulp = function (e, t, r) { + var n = 2 * this.guessLen13b(e.length, t.length), + i = this.makeRBT(n), + s = this.stub(n), + o = new Array(n), + a = new Array(n), + l = new Array(n), + c = new Array(n), + u = new Array(n), + h = new Array(n), + f = r.words; + f.length = n, this.convert13b(e.words, e.length, o, n), this.convert13b(t.words, t.length, c, n), this.transform(o, s, a, l, n, i), this.transform(c, s, u, h, n, i); + for (var d = 0; d < n; d++) { + var p = a[d] * u[d] - l[d] * h[d]; + l[d] = a[d] * h[d] + l[d] * u[d], a[d] = p; + } + return this.conjugate(a, l, n), this.transform(a, l, f, s, n, i), this.conjugate(f, s, n), this.normalize13b(f, n), r.negative = e.negative ^ t.negative, r.length = e.length + t.length, r.strip(); + }, s.prototype.mul = function (e) { + var t = new s(null); + return t.words = new Array(this.length + e.length), this.mulTo(e, t); + }, s.prototype.mulf = function (e) { + var t = new s(null); + return t.words = new Array(this.length + e.length), m(this, e, t); + }, s.prototype.imul = function (e) { + return this.clone().mulTo(e, this); + }, s.prototype.imuln = function (e) { + n("number" == typeof e), n(e < 67108864); + for (var t = 0, r = 0; r < this.length; r++) { + var i = (0 | this.words[r]) * e, + s = (67108863 & i) + (67108863 & t); + t >>= 26, t += i / 67108864 | 0, t += s >>> 26, this.words[r] = 67108863 & s; + } + return 0 !== t && (this.words[r] = t, this.length++), this; + }, s.prototype.muln = function (e) { + return this.clone().imuln(e); + }, s.prototype.sqr = function () { + return this.mul(this); + }, s.prototype.isqr = function () { + return this.imul(this.clone()); + }, s.prototype.pow = function (e) { + var t = function (e) { + for (var t = new Array(e.bitLength()), r = 0; r < t.length; r++) { + var n = r / 26 | 0, + i = r % 26; + t[r] = (e.words[n] & 1 << i) >>> i; + } + return t; + }(e); + if (0 === t.length) return new s(1); + for (var r = this, n = 0; n < t.length && 0 === t[n]; n++, r = r.sqr()); + if (++n < t.length) for (var i = r.sqr(); n < t.length; n++, i = i.sqr()) 0 !== t[n] && (r = r.mul(i)); + return r; + }, s.prototype.iushln = function (e) { + n("number" == typeof e && e >= 0); + var t, + r = e % 26, + i = (e - r) / 26, + s = 67108863 >>> 26 - r << 26 - r; + if (0 !== r) { + var o = 0; + for (t = 0; t < this.length; t++) { + var a = this.words[t] & s, + l = (0 | this.words[t]) - a << r; + this.words[t] = l | o, o = a >>> 26 - r; + } + o && (this.words[t] = o, this.length++); + } + if (0 !== i) { + for (t = this.length - 1; t >= 0; t--) this.words[t + i] = this.words[t]; + for (t = 0; t < i; t++) this.words[t] = 0; + this.length += i; + } + return this.strip(); + }, s.prototype.ishln = function (e) { + return n(0 === this.negative), this.iushln(e); + }, s.prototype.iushrn = function (e, t, r) { + var i; + n("number" == typeof e && e >= 0), i = t ? (t - t % 26) / 26 : 0; + var s = e % 26, + o = Math.min((e - s) / 26, this.length), + a = 67108863 ^ 67108863 >>> s << s, + l = r; + if (i -= o, i = Math.max(0, i), l) { + for (var c = 0; c < o; c++) l.words[c] = this.words[c]; + l.length = o; + } + if (0 === o) ;else if (this.length > o) for (this.length -= o, c = 0; c < this.length; c++) this.words[c] = this.words[c + o];else this.words[0] = 0, this.length = 1; + var u = 0; + for (c = this.length - 1; c >= 0 && (0 !== u || c >= i); c--) { + var h = 0 | this.words[c]; + this.words[c] = u << 26 - s | h >>> s, u = h & a; + } + return l && 0 !== u && (l.words[l.length++] = u), 0 === this.length && (this.words[0] = 0, this.length = 1), this.strip(); + }, s.prototype.ishrn = function (e, t, r) { + return n(0 === this.negative), this.iushrn(e, t, r); + }, s.prototype.shln = function (e) { + return this.clone().ishln(e); + }, s.prototype.ushln = function (e) { + return this.clone().iushln(e); + }, s.prototype.shrn = function (e) { + return this.clone().ishrn(e); + }, s.prototype.ushrn = function (e) { + return this.clone().iushrn(e); + }, s.prototype.testn = function (e) { + n("number" == typeof e && e >= 0); + var t = e % 26, + r = (e - t) / 26, + i = 1 << t; + return !(this.length <= r) && !!(this.words[r] & i); + }, s.prototype.imaskn = function (e) { + n("number" == typeof e && e >= 0); + var t = e % 26, + r = (e - t) / 26; + if (n(0 === this.negative, "imaskn works only with positive numbers"), this.length <= r) return this; + if (0 !== t && r++, this.length = Math.min(r, this.length), 0 !== t) { + var i = 67108863 ^ 67108863 >>> t << t; + this.words[this.length - 1] &= i; + } + return this.strip(); + }, s.prototype.maskn = function (e) { + return this.clone().imaskn(e); + }, s.prototype.iaddn = function (e) { + return n("number" == typeof e), n(e < 67108864), e < 0 ? this.isubn(-e) : 0 !== this.negative ? 1 === this.length && (0 | this.words[0]) < e ? (this.words[0] = e - (0 | this.words[0]), this.negative = 0, this) : (this.negative = 0, this.isubn(e), this.negative = 1, this) : this._iaddn(e); + }, s.prototype._iaddn = function (e) { + this.words[0] += e; + for (var t = 0; t < this.length && this.words[t] >= 67108864; t++) this.words[t] -= 67108864, t === this.length - 1 ? this.words[t + 1] = 1 : this.words[t + 1]++; + return this.length = Math.max(this.length, t + 1), this; + }, s.prototype.isubn = function (e) { + if (n("number" == typeof e), n(e < 67108864), e < 0) return this.iaddn(-e); + if (0 !== this.negative) return this.negative = 0, this.iaddn(e), this.negative = 1, this; + if (this.words[0] -= e, 1 === this.length && this.words[0] < 0) this.words[0] = -this.words[0], this.negative = 1;else for (var t = 0; t < this.length && this.words[t] < 0; t++) this.words[t] += 67108864, this.words[t + 1] -= 1; + return this.strip(); + }, s.prototype.addn = function (e) { + return this.clone().iaddn(e); + }, s.prototype.subn = function (e) { + return this.clone().isubn(e); + }, s.prototype.iabs = function () { + return this.negative = 0, this; + }, s.prototype.abs = function () { + return this.clone().iabs(); + }, s.prototype._ishlnsubmul = function (e, t, r) { + var i, + s, + o = e.length + r; + this._expand(o); + var a = 0; + for (i = 0; i < e.length; i++) { + s = (0 | this.words[i + r]) + a; + var l = (0 | e.words[i]) * t; + a = ((s -= 67108863 & l) >> 26) - (l / 67108864 | 0), this.words[i + r] = 67108863 & s; + } + for (; i < this.length - r; i++) a = (s = (0 | this.words[i + r]) + a) >> 26, this.words[i + r] = 67108863 & s; + if (0 === a) return this.strip(); + for (n(-1 === a), a = 0, i = 0; i < this.length; i++) a = (s = -(0 | this.words[i]) + a) >> 26, this.words[i] = 67108863 & s; + return this.negative = 1, this.strip(); + }, s.prototype._wordDiv = function (e, t) { + var r = (this.length, e.length), + n = this.clone(), + i = e, + o = 0 | i.words[i.length - 1]; + 0 !== (r = 26 - this._countBits(o)) && (i = i.ushln(r), n.iushln(r), o = 0 | i.words[i.length - 1]); + var a, + l = n.length - i.length; + if ("mod" !== t) { + (a = new s(null)).length = l + 1, a.words = new Array(a.length); + for (var c = 0; c < a.length; c++) a.words[c] = 0; + } + var u = n.clone()._ishlnsubmul(i, 1, l); + 0 === u.negative && (n = u, a && (a.words[l] = 1)); + for (var h = l - 1; h >= 0; h--) { + var f = 67108864 * (0 | n.words[i.length + h]) + (0 | n.words[i.length + h - 1]); + for (f = Math.min(f / o | 0, 67108863), n._ishlnsubmul(i, f, h); 0 !== n.negative;) f--, n.negative = 0, n._ishlnsubmul(i, 1, h), n.isZero() || (n.negative ^= 1); + a && (a.words[h] = f); + } + return a && a.strip(), n.strip(), "div" !== t && 0 !== r && n.iushrn(r), { + div: a || null, + mod: n + }; + }, s.prototype.divmod = function (e, t, r) { + return n(!e.isZero()), this.isZero() ? { + div: new s(0), + mod: new s(0) + } : 0 !== this.negative && 0 === e.negative ? (a = this.neg().divmod(e, t), "mod" !== t && (i = a.div.neg()), "div" !== t && (o = a.mod.neg(), r && 0 !== o.negative && o.iadd(e)), { + div: i, + mod: o + }) : 0 === this.negative && 0 !== e.negative ? (a = this.divmod(e.neg(), t), "mod" !== t && (i = a.div.neg()), { + div: i, + mod: a.mod + }) : 0 != (this.negative & e.negative) ? (a = this.neg().divmod(e.neg(), t), "div" !== t && (o = a.mod.neg(), r && 0 !== o.negative && o.isub(e)), { + div: a.div, + mod: o + }) : e.length > this.length || this.cmp(e) < 0 ? { + div: new s(0), + mod: this + } : 1 === e.length ? "div" === t ? { + div: this.divn(e.words[0]), + mod: null + } : "mod" === t ? { + div: null, + mod: new s(this.modn(e.words[0])) + } : { + div: this.divn(e.words[0]), + mod: new s(this.modn(e.words[0])) + } : this._wordDiv(e, t); + var i, o, a; + }, s.prototype.div = function (e) { + return this.divmod(e, "div", !1).div; + }, s.prototype.mod = function (e) { + return this.divmod(e, "mod", !1).mod; + }, s.prototype.umod = function (e) { + return this.divmod(e, "mod", !0).mod; + }, s.prototype.divRound = function (e) { + var t = this.divmod(e); + if (t.mod.isZero()) return t.div; + var r = 0 !== t.div.negative ? t.mod.isub(e) : t.mod, + n = e.ushrn(1), + i = e.andln(1), + s = r.cmp(n); + return s < 0 || 1 === i && 0 === s ? t.div : 0 !== t.div.negative ? t.div.isubn(1) : t.div.iaddn(1); + }, s.prototype.modn = function (e) { + n(e <= 67108863); + for (var t = (1 << 26) % e, r = 0, i = this.length - 1; i >= 0; i--) r = (t * r + (0 | this.words[i])) % e; + return r; + }, s.prototype.idivn = function (e) { + n(e <= 67108863); + for (var t = 0, r = this.length - 1; r >= 0; r--) { + var i = (0 | this.words[r]) + 67108864 * t; + this.words[r] = i / e | 0, t = i % e; + } + return this.strip(); + }, s.prototype.divn = function (e) { + return this.clone().idivn(e); + }, s.prototype.egcd = function (e) { + n(0 === e.negative), n(!e.isZero()); + var t = this, + r = e.clone(); + t = 0 !== t.negative ? t.umod(e) : t.clone(); + for (var i = new s(1), o = new s(0), a = new s(0), l = new s(1), c = 0; t.isEven() && r.isEven();) t.iushrn(1), r.iushrn(1), ++c; + for (var u = r.clone(), h = t.clone(); !t.isZero();) { + for (var f = 0, d = 1; 0 == (t.words[0] & d) && f < 26; ++f, d <<= 1); + if (f > 0) for (t.iushrn(f); f-- > 0;) (i.isOdd() || o.isOdd()) && (i.iadd(u), o.isub(h)), i.iushrn(1), o.iushrn(1); + for (var p = 0, m = 1; 0 == (r.words[0] & m) && p < 26; ++p, m <<= 1); + if (p > 0) for (r.iushrn(p); p-- > 0;) (a.isOdd() || l.isOdd()) && (a.iadd(u), l.isub(h)), a.iushrn(1), l.iushrn(1); + t.cmp(r) >= 0 ? (t.isub(r), i.isub(a), o.isub(l)) : (r.isub(t), a.isub(i), l.isub(o)); + } + return { + a: a, + b: l, + gcd: r.iushln(c) + }; + }, s.prototype._invmp = function (e) { + n(0 === e.negative), n(!e.isZero()); + var t = this, + r = e.clone(); + t = 0 !== t.negative ? t.umod(e) : t.clone(); + for (var i, o = new s(1), a = new s(0), l = r.clone(); t.cmpn(1) > 0 && r.cmpn(1) > 0;) { + for (var c = 0, u = 1; 0 == (t.words[0] & u) && c < 26; ++c, u <<= 1); + if (c > 0) for (t.iushrn(c); c-- > 0;) o.isOdd() && o.iadd(l), o.iushrn(1); + for (var h = 0, f = 1; 0 == (r.words[0] & f) && h < 26; ++h, f <<= 1); + if (h > 0) for (r.iushrn(h); h-- > 0;) a.isOdd() && a.iadd(l), a.iushrn(1); + t.cmp(r) >= 0 ? (t.isub(r), o.isub(a)) : (r.isub(t), a.isub(o)); + } + return (i = 0 === t.cmpn(1) ? o : a).cmpn(0) < 0 && i.iadd(e), i; + }, s.prototype.gcd = function (e) { + if (this.isZero()) return e.abs(); + if (e.isZero()) return this.abs(); + var t = this.clone(), + r = e.clone(); + t.negative = 0, r.negative = 0; + for (var n = 0; t.isEven() && r.isEven(); n++) t.iushrn(1), r.iushrn(1); + for (;;) { + for (; t.isEven();) t.iushrn(1); + for (; r.isEven();) r.iushrn(1); + var i = t.cmp(r); + if (i < 0) { + var s = t; + t = r, r = s; + } else if (0 === i || 0 === r.cmpn(1)) break; + t.isub(r); + } + return r.iushln(n); + }, s.prototype.invm = function (e) { + return this.egcd(e).a.umod(e); + }, s.prototype.isEven = function () { + return 0 == (1 & this.words[0]); + }, s.prototype.isOdd = function () { + return 1 == (1 & this.words[0]); + }, s.prototype.andln = function (e) { + return this.words[0] & e; + }, s.prototype.bincn = function (e) { + n("number" == typeof e); + var t = e % 26, + r = (e - t) / 26, + i = 1 << t; + if (this.length <= r) return this._expand(r + 1), this.words[r] |= i, this; + for (var s = i, o = r; 0 !== s && o < this.length; o++) { + var a = 0 | this.words[o]; + s = (a += s) >>> 26, a &= 67108863, this.words[o] = a; + } + return 0 !== s && (this.words[o] = s, this.length++), this; + }, s.prototype.isZero = function () { + return 1 === this.length && 0 === this.words[0]; + }, s.prototype.cmpn = function (e) { + var t, + r = e < 0; + if (0 !== this.negative && !r) return -1; + if (0 === this.negative && r) return 1; + if (this.strip(), this.length > 1) t = 1;else { + r && (e = -e), n(e <= 67108863, "Number is too big"); + var i = 0 | this.words[0]; + t = i === e ? 0 : i < e ? -1 : 1; + } + return 0 !== this.negative ? 0 | -t : t; + }, s.prototype.cmp = function (e) { + if (0 !== this.negative && 0 === e.negative) return -1; + if (0 === this.negative && 0 !== e.negative) return 1; + var t = this.ucmp(e); + return 0 !== this.negative ? 0 | -t : t; + }, s.prototype.ucmp = function (e) { + if (this.length > e.length) return 1; + if (this.length < e.length) return -1; + for (var t = 0, r = this.length - 1; r >= 0; r--) { + var n = 0 | this.words[r], + i = 0 | e.words[r]; + if (n !== i) { + n < i ? t = -1 : n > i && (t = 1); + break; + } + } + return t; + }, s.prototype.gtn = function (e) { + return 1 === this.cmpn(e); + }, s.prototype.gt = function (e) { + return 1 === this.cmp(e); + }, s.prototype.gten = function (e) { + return this.cmpn(e) >= 0; + }, s.prototype.gte = function (e) { + return this.cmp(e) >= 0; + }, s.prototype.ltn = function (e) { + return -1 === this.cmpn(e); + }, s.prototype.lt = function (e) { + return -1 === this.cmp(e); + }, s.prototype.lten = function (e) { + return this.cmpn(e) <= 0; + }, s.prototype.lte = function (e) { + return this.cmp(e) <= 0; + }, s.prototype.eqn = function (e) { + return 0 === this.cmpn(e); + }, s.prototype.eq = function (e) { + return 0 === this.cmp(e); + }, s.red = function (e) { + return new k(e); + }, s.prototype.toRed = function (e) { + return n(!this.red, "Already a number in reduction context"), n(0 === this.negative, "red works only with positives"), e.convertTo(this)._forceRed(e); + }, s.prototype.fromRed = function () { + return n(this.red, "fromRed works only with numbers in reduction context"), this.red.convertFrom(this); + }, s.prototype._forceRed = function (e) { + return this.red = e, this; + }, s.prototype.forceRed = function (e) { + return n(!this.red, "Already a number in reduction context"), this._forceRed(e); + }, s.prototype.redAdd = function (e) { + return n(this.red, "redAdd works only with red numbers"), this.red.add(this, e); + }, s.prototype.redIAdd = function (e) { + return n(this.red, "redIAdd works only with red numbers"), this.red.iadd(this, e); + }, s.prototype.redSub = function (e) { + return n(this.red, "redSub works only with red numbers"), this.red.sub(this, e); + }, s.prototype.redISub = function (e) { + return n(this.red, "redISub works only with red numbers"), this.red.isub(this, e); + }, s.prototype.redShl = function (e) { + return n(this.red, "redShl works only with red numbers"), this.red.shl(this, e); + }, s.prototype.redMul = function (e) { + return n(this.red, "redMul works only with red numbers"), this.red._verify2(this, e), this.red.mul(this, e); + }, s.prototype.redIMul = function (e) { + return n(this.red, "redMul works only with red numbers"), this.red._verify2(this, e), this.red.imul(this, e); + }, s.prototype.redSqr = function () { + return n(this.red, "redSqr works only with red numbers"), this.red._verify1(this), this.red.sqr(this); + }, s.prototype.redISqr = function () { + return n(this.red, "redISqr works only with red numbers"), this.red._verify1(this), this.red.isqr(this); + }, s.prototype.redSqrt = function () { + return n(this.red, "redSqrt works only with red numbers"), this.red._verify1(this), this.red.sqrt(this); + }, s.prototype.redInvm = function () { + return n(this.red, "redInvm works only with red numbers"), this.red._verify1(this), this.red.invm(this); + }, s.prototype.redNeg = function () { + return n(this.red, "redNeg works only with red numbers"), this.red._verify1(this), this.red.neg(this); + }, s.prototype.redPow = function (e) { + return n(this.red && !e.red, "redPow(normalNum)"), this.red._verify1(this), this.red.pow(this, e); + }; + var g = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + function y(e, t) { + this.name = e, this.p = new s(t, 16), this.n = this.p.bitLength(), this.k = new s(1).iushln(this.n).isub(this.p), this.tmp = this._tmp(); + } + function v() { + y.call(this, "k256", "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"); + } + function w() { + y.call(this, "p224", "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"); + } + function _() { + y.call(this, "p192", "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"); + } + function x() { + y.call(this, "25519", "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"); + } + function k(e) { + if ("string" == typeof e) { + var t = s._prime(e); + this.m = t.p, this.prime = t; + } else n(e.gtn(1), "modulus must be greater than 1"), this.m = e, this.prime = null; + } + function S(e) { + k.call(this, e), this.shift = this.m.bitLength(), this.shift % 26 != 0 && (this.shift += 26 - this.shift % 26), this.r = new s(1).iushln(this.shift), this.r2 = this.imod(this.r.sqr()), this.rinv = this.r._invmp(this.m), this.minv = this.rinv.mul(this.r).isubn(1).div(this.m), this.minv = this.minv.umod(this.r), this.minv = this.r.sub(this.minv); + } + y.prototype._tmp = function () { + var e = new s(null); + return e.words = new Array(Math.ceil(this.n / 13)), e; + }, y.prototype.ireduce = function (e) { + var t, + r = e; + do { + this.split(r, this.tmp), t = (r = (r = this.imulK(r)).iadd(this.tmp)).bitLength(); + } while (t > this.n); + var n = t < this.n ? -1 : r.ucmp(this.p); + return 0 === n ? (r.words[0] = 0, r.length = 1) : n > 0 ? r.isub(this.p) : void 0 !== r.strip ? r.strip() : r._strip(), r; + }, y.prototype.split = function (e, t) { + e.iushrn(this.n, 0, t); + }, y.prototype.imulK = function (e) { + return e.imul(this.k); + }, i(v, y), v.prototype.split = function (e, t) { + for (var r = Math.min(e.length, 9), n = 0; n < r; n++) t.words[n] = e.words[n]; + if (t.length = r, e.length <= 9) return e.words[0] = 0, void (e.length = 1); + var i = e.words[9]; + for (t.words[t.length++] = 4194303 & i, n = 10; n < e.length; n++) { + var s = 0 | e.words[n]; + e.words[n - 10] = (4194303 & s) << 4 | i >>> 22, i = s; + } + i >>>= 22, e.words[n - 10] = i, 0 === i && e.length > 10 ? e.length -= 10 : e.length -= 9; + }, v.prototype.imulK = function (e) { + e.words[e.length] = 0, e.words[e.length + 1] = 0, e.length += 2; + for (var t = 0, r = 0; r < e.length; r++) { + var n = 0 | e.words[r]; + t += 977 * n, e.words[r] = 67108863 & t, t = 64 * n + (t / 67108864 | 0); + } + return 0 === e.words[e.length - 1] && (e.length--, 0 === e.words[e.length - 1] && e.length--), e; + }, i(w, y), i(_, y), i(x, y), x.prototype.imulK = function (e) { + for (var t = 0, r = 0; r < e.length; r++) { + var n = 19 * (0 | e.words[r]) + t, + i = 67108863 & n; + n >>>= 26, e.words[r] = i, t = n; + } + return 0 !== t && (e.words[e.length++] = t), e; + }, s._prime = function (e) { + if (g[e]) return g[e]; + var t; + if ("k256" === e) t = new v();else if ("p224" === e) t = new w();else if ("p192" === e) t = new _();else { + if ("p25519" !== e) throw new Error("Unknown prime " + e); + t = new x(); + } + return g[e] = t, t; + }, k.prototype._verify1 = function (e) { + n(0 === e.negative, "red works only with positives"), n(e.red, "red works only with red numbers"); + }, k.prototype._verify2 = function (e, t) { + n(0 == (e.negative | t.negative), "red works only with positives"), n(e.red && e.red === t.red, "red works only with red numbers"); + }, k.prototype.imod = function (e) { + return this.prime ? this.prime.ireduce(e)._forceRed(this) : e.umod(this.m)._forceRed(this); + }, k.prototype.neg = function (e) { + return e.isZero() ? e.clone() : this.m.sub(e)._forceRed(this); + }, k.prototype.add = function (e, t) { + this._verify2(e, t); + var r = e.add(t); + return r.cmp(this.m) >= 0 && r.isub(this.m), r._forceRed(this); + }, k.prototype.iadd = function (e, t) { + this._verify2(e, t); + var r = e.iadd(t); + return r.cmp(this.m) >= 0 && r.isub(this.m), r; + }, k.prototype.sub = function (e, t) { + this._verify2(e, t); + var r = e.sub(t); + return r.cmpn(0) < 0 && r.iadd(this.m), r._forceRed(this); + }, k.prototype.isub = function (e, t) { + this._verify2(e, t); + var r = e.isub(t); + return r.cmpn(0) < 0 && r.iadd(this.m), r; + }, k.prototype.shl = function (e, t) { + return this._verify1(e), this.imod(e.ushln(t)); + }, k.prototype.imul = function (e, t) { + return this._verify2(e, t), this.imod(e.imul(t)); + }, k.prototype.mul = function (e, t) { + return this._verify2(e, t), this.imod(e.mul(t)); + }, k.prototype.isqr = function (e) { + return this.imul(e, e.clone()); + }, k.prototype.sqr = function (e) { + return this.mul(e, e); + }, k.prototype.sqrt = function (e) { + if (e.isZero()) return e.clone(); + var t = this.m.andln(3); + if (n(t % 2 == 1), 3 === t) { + var r = this.m.add(new s(1)).iushrn(2); + return this.pow(e, r); + } + for (var i = this.m.subn(1), o = 0; !i.isZero() && 0 === i.andln(1);) o++, i.iushrn(1); + n(!i.isZero()); + var a = new s(1).toRed(this), + l = a.redNeg(), + c = this.m.subn(1).iushrn(1), + u = this.m.bitLength(); + for (u = new s(2 * u * u).toRed(this); 0 !== this.pow(u, c).cmp(l);) u.redIAdd(l); + for (var h = this.pow(u, i), f = this.pow(e, i.addn(1).iushrn(1)), d = this.pow(e, i), p = o; 0 !== d.cmp(a);) { + for (var m = d, b = 0; 0 !== m.cmp(a); b++) m = m.redSqr(); + n(b < p); + var g = this.pow(h, new s(1).iushln(p - b - 1)); + f = f.redMul(g), h = g.redSqr(), d = d.redMul(h), p = b; + } + return f; + }, k.prototype.invm = function (e) { + var t = e._invmp(this.m); + return 0 !== t.negative ? (t.negative = 0, this.imod(t).redNeg()) : this.imod(t); + }, k.prototype.pow = function (e, t) { + if (t.isZero()) return new s(1).toRed(this); + if (0 === t.cmpn(1)) return e.clone(); + var r = new Array(16); + r[0] = new s(1).toRed(this), r[1] = e; + for (var n = 2; n < r.length; n++) r[n] = this.mul(r[n - 1], e); + var i = r[0], + o = 0, + a = 0, + l = t.bitLength() % 26; + for (0 === l && (l = 26), n = t.length - 1; n >= 0; n--) { + for (var c = t.words[n], u = l - 1; u >= 0; u--) { + var h = c >> u & 1; + i !== r[0] && (i = this.sqr(i)), 0 !== h || 0 !== o ? (o <<= 1, o |= h, (4 === ++a || 0 === n && 0 === u) && (i = this.mul(i, r[o]), a = 0, o = 0)) : a = 0; + } + l = 26; + } + return i; + }, k.prototype.convertTo = function (e) { + var t = e.umod(this.m); + return t === e ? t.clone() : t; + }, k.prototype.convertFrom = function (e) { + var t = e.clone(); + return t.red = null, t; + }, s.mont = function (e) { + return new S(e); + }, i(S, k), S.prototype.convertTo = function (e) { + return this.imod(e.ushln(this.shift)); + }, S.prototype.convertFrom = function (e) { + var t = this.imod(e.mul(this.rinv)); + return t.red = null, t; + }, S.prototype.imul = function (e, t) { + if (e.isZero() || t.isZero()) return e.words[0] = 0, e.length = 1, e; + var r = e.imul(t), + n = r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m), + i = r.isub(n).iushrn(this.shift), + s = i; + return i.cmp(this.m) >= 0 ? s = i.isub(this.m) : i.cmpn(0) < 0 && (s = i.iadd(this.m)), s._forceRed(this); + }, S.prototype.mul = function (e, t) { + if (e.isZero() || t.isZero()) return new s(0)._forceRed(this); + var r = e.mul(t), + n = r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m), + i = r.isub(n).iushrn(this.shift), + o = i; + return i.cmp(this.m) >= 0 ? o = i.isub(this.m) : i.cmpn(0) < 0 && (o = i.iadd(this.m)), o._forceRed(this); + }, S.prototype.invm = function (e) { + return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this); + }; + }(void 0 === t || t); + }, { + buffer: 188 + }], + 185: [function (e, t, r) { + "use strict"; + + r.byteLength = function (e) { + var t = c(e), + r = t[0], + n = t[1]; + return 3 * (r + n) / 4 - n; + }, r.toByteArray = function (e) { + var t, + r, + n = c(e), + o = n[0], + a = n[1], + l = new s(function (e, t, r) { + return 3 * (t + r) / 4 - r; + }(0, o, a)), + u = 0, + h = a > 0 ? o - 4 : o; + for (r = 0; r < h; r += 4) t = i[e.charCodeAt(r)] << 18 | i[e.charCodeAt(r + 1)] << 12 | i[e.charCodeAt(r + 2)] << 6 | i[e.charCodeAt(r + 3)], l[u++] = t >> 16 & 255, l[u++] = t >> 8 & 255, l[u++] = 255 & t; + 2 === a && (t = i[e.charCodeAt(r)] << 2 | i[e.charCodeAt(r + 1)] >> 4, l[u++] = 255 & t); + 1 === a && (t = i[e.charCodeAt(r)] << 10 | i[e.charCodeAt(r + 1)] << 4 | i[e.charCodeAt(r + 2)] >> 2, l[u++] = t >> 8 & 255, l[u++] = 255 & t); + return l; + }, r.fromByteArray = function (e) { + for (var t, r = e.length, i = r % 3, s = [], o = 0, a = r - i; o < a; o += 16383) s.push(u(e, o, o + 16383 > a ? a : o + 16383)); + 1 === i ? (t = e[r - 1], s.push(n[t >> 2] + n[t << 4 & 63] + "==")) : 2 === i && (t = (e[r - 2] << 8) + e[r - 1], s.push(n[t >> 10] + n[t >> 4 & 63] + n[t << 2 & 63] + "=")); + return s.join(""); + }; + for (var n = [], i = [], s = "undefined" != typeof Uint8Array ? Uint8Array : Array, o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", a = 0, l = o.length; a < l; ++a) n[a] = o[a], i[o.charCodeAt(a)] = a; + function c(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, r) { + for (var i, s, o = [], a = t; a < r; a += 3) i = (e[a] << 16 & 16711680) + (e[a + 1] << 8 & 65280) + (255 & e[a + 2]), o.push(n[(s = i) >> 18 & 63] + n[s >> 12 & 63] + n[s >> 6 & 63] + n[63 & s]); + return o.join(""); + } + i["-".charCodeAt(0)] = 62, i["_".charCodeAt(0)] = 63; + }, {}], + 186: [function (e, t, r) { + "use strict"; + + !function (t, r) { + function n(e, t) { + if (!e) throw new Error(t || "Assertion failed"); + } + function i(e, t) { + e.super_ = t; + var r = function () {}; + r.prototype = t.prototype, e.prototype = new r(), e.prototype.constructor = e; + } + function s(e, t, r) { + if (s.isBN(e)) return e; + this.negative = 0, this.words = null, this.length = 0, this.red = null, null !== e && ("le" !== t && "be" !== t || (r = t, t = 10), this._init(e || 0, t || 10, r || "be")); + } + var o; + "object" == typeof t ? t.exports = s : (void 0).BN = s, s.BN = s, s.wordSize = 26; + try { + o = "undefined" != typeof window && void 0 !== window.Buffer ? window.Buffer : e("buffer").Buffer; + } catch (e) {} + function a(e, t) { + var r = e.charCodeAt(t); + return r >= 48 && r <= 57 ? r - 48 : r >= 65 && r <= 70 ? r - 55 : r >= 97 && r <= 102 ? r - 87 : void n(!1, "Invalid character in " + e); + } + function l(e, t, r) { + var n = a(e, r); + return r - 1 >= t && (n |= a(e, r - 1) << 4), n; + } + function c(e, t, r, i) { + for (var s = 0, o = 0, a = Math.min(e.length, r), l = t; l < a; l++) { + var c = e.charCodeAt(l) - 48; + s *= i, o = c >= 49 ? c - 49 + 10 : c >= 17 ? c - 17 + 10 : c, n(c >= 0 && o < i, "Invalid character"), s += o; + } + return s; + } + function u(e, t) { + e.words = t.words, e.length = t.length, e.negative = t.negative, e.red = t.red; + } + if (s.isBN = function (e) { + return e instanceof s || null !== e && "object" == typeof e && e.constructor.wordSize === s.wordSize && Array.isArray(e.words); + }, s.max = function (e, t) { + return e.cmp(t) > 0 ? e : t; + }, s.min = function (e, t) { + return e.cmp(t) < 0 ? e : t; + }, s.prototype._init = function (e, t, r) { + if ("number" == typeof e) return this._initNumber(e, t, r); + if ("object" == typeof e) return this._initArray(e, t, r); + "hex" === t && (t = 16), n(t === (0 | t) && t >= 2 && t <= 36); + var i = 0; + "-" === (e = e.toString().replace(/\s+/g, ""))[0] && (i++, this.negative = 1), i < e.length && (16 === t ? this._parseHex(e, i, r) : (this._parseBase(e, t, i), "le" === r && this._initArray(this.toArray(), t, r))); + }, s.prototype._initNumber = function (e, t, r) { + e < 0 && (this.negative = 1, e = -e), e < 67108864 ? (this.words = [67108863 & e], this.length = 1) : e < 4503599627370496 ? (this.words = [67108863 & e, e / 67108864 & 67108863], this.length = 2) : (n(e < 9007199254740992), this.words = [67108863 & e, e / 67108864 & 67108863, 1], this.length = 3), "le" === r && this._initArray(this.toArray(), t, r); + }, s.prototype._initArray = function (e, t, r) { + if (n("number" == typeof e.length), e.length <= 0) return this.words = [0], this.length = 1, this; + this.length = Math.ceil(e.length / 3), this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) this.words[i] = 0; + var s, + o, + a = 0; + if ("be" === r) for (i = e.length - 1, s = 0; i >= 0; i -= 3) o = e[i] | e[i - 1] << 8 | e[i - 2] << 16, this.words[s] |= o << a & 67108863, this.words[s + 1] = o >>> 26 - a & 67108863, (a += 24) >= 26 && (a -= 26, s++);else if ("le" === r) for (i = 0, s = 0; i < e.length; i += 3) o = e[i] | e[i + 1] << 8 | e[i + 2] << 16, this.words[s] |= o << a & 67108863, this.words[s + 1] = o >>> 26 - a & 67108863, (a += 24) >= 26 && (a -= 26, s++); + return this._strip(); + }, s.prototype._parseHex = function (e, t, r) { + this.length = Math.ceil((e.length - t) / 6), this.words = new Array(this.length); + for (var n = 0; n < this.length; n++) this.words[n] = 0; + var i, + s = 0, + o = 0; + if ("be" === r) for (n = e.length - 1; n >= t; n -= 2) i = l(e, t, n) << s, this.words[o] |= 67108863 & i, s >= 18 ? (s -= 18, o += 1, this.words[o] |= i >>> 26) : s += 8;else for (n = (e.length - t) % 2 == 0 ? t + 1 : t; n < e.length; n += 2) i = l(e, t, n) << s, this.words[o] |= 67108863 & i, s >= 18 ? (s -= 18, o += 1, this.words[o] |= i >>> 26) : s += 8; + this._strip(); + }, s.prototype._parseBase = function (e, t, r) { + this.words = [0], this.length = 1; + for (var n = 0, i = 1; i <= 67108863; i *= t) n++; + n--, i = i / t | 0; + for (var s = e.length - r, o = s % n, a = Math.min(s, s - o) + r, l = 0, u = r; u < a; u += n) l = c(e, u, u + n, t), this.imuln(i), this.words[0] + l < 67108864 ? this.words[0] += l : this._iaddn(l); + if (0 !== o) { + var h = 1; + for (l = c(e, u, e.length, t), u = 0; u < o; u++) h *= t; + this.imuln(h), this.words[0] + l < 67108864 ? this.words[0] += l : this._iaddn(l); + } + this._strip(); + }, s.prototype.copy = function (e) { + e.words = new Array(this.length); + for (var t = 0; t < this.length; t++) e.words[t] = this.words[t]; + e.length = this.length, e.negative = this.negative, e.red = this.red; + }, s.prototype._move = function (e) { + u(e, this); + }, s.prototype.clone = function () { + var e = new s(null); + return this.copy(e), e; + }, s.prototype._expand = function (e) { + for (; this.length < e;) this.words[this.length++] = 0; + return this; + }, s.prototype._strip = function () { + for (; this.length > 1 && 0 === this.words[this.length - 1];) this.length--; + return this._normSign(); + }, s.prototype._normSign = function () { + return 1 === this.length && 0 === this.words[0] && (this.negative = 0), this; + }, "undefined" != typeof Symbol && "function" == typeof Symbol.for) try { + s.prototype[Symbol.for("nodejs.util.inspect.custom")] = h; + } catch (e) { + s.prototype.inspect = h; + } else s.prototype.inspect = h; + function h() { + return (this.red ? ""; + } + var f = ["", "0", "00", "000", "0000", "00000", "000000", "0000000", "00000000", "000000000", "0000000000", "00000000000", "000000000000", "0000000000000", "00000000000000", "000000000000000", "0000000000000000", "00000000000000000", "000000000000000000", "0000000000000000000", "00000000000000000000", "000000000000000000000", "0000000000000000000000", "00000000000000000000000", "000000000000000000000000", "0000000000000000000000000"], + d = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], + p = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 1e7, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64e6, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 243e5, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176]; + s.prototype.toString = function (e, t) { + var r; + if (t = 0 | t || 1, 16 === (e = e || 10) || "hex" === e) { + r = ""; + for (var i = 0, s = 0, o = 0; o < this.length; o++) { + var a = this.words[o], + l = (16777215 & (a << i | s)).toString(16); + s = a >>> 24 - i & 16777215, (i += 2) >= 26 && (i -= 26, o--), r = 0 !== s || o !== this.length - 1 ? f[6 - l.length] + l + r : l + r; + } + for (0 !== s && (r = s.toString(16) + r); r.length % t != 0;) r = "0" + r; + return 0 !== this.negative && (r = "-" + r), r; + } + if (e === (0 | e) && e >= 2 && e <= 36) { + var c = d[e], + u = p[e]; + r = ""; + var h = this.clone(); + for (h.negative = 0; !h.isZero();) { + var m = h.modrn(u).toString(e); + r = (h = h.idivn(u)).isZero() ? m + r : f[c - m.length] + m + r; + } + for (this.isZero() && (r = "0" + r); r.length % t != 0;) r = "0" + r; + return 0 !== this.negative && (r = "-" + r), r; + } + n(!1, "Base should be between 2 and 36"); + }, s.prototype.toNumber = function () { + var e = this.words[0]; + return 2 === this.length ? e += 67108864 * this.words[1] : 3 === this.length && 1 === this.words[2] ? e += 4503599627370496 + 67108864 * this.words[1] : this.length > 2 && n(!1, "Number can only safely store up to 53 bits"), 0 !== this.negative ? -e : e; + }, s.prototype.toJSON = function () { + return this.toString(16, 2); + }, o && (s.prototype.toBuffer = function (e, t) { + return this.toArrayLike(o, e, t); + }), s.prototype.toArray = function (e, t) { + return this.toArrayLike(Array, e, t); + }; + function m(e, t, r) { + r.negative = t.negative ^ e.negative; + var n = e.length + t.length | 0; + r.length = n, n = n - 1 | 0; + var i = 0 | e.words[0], + s = 0 | t.words[0], + o = i * s, + a = 67108863 & o, + l = o / 67108864 | 0; + r.words[0] = a; + for (var c = 1; c < n; c++) { + for (var u = l >>> 26, h = 67108863 & l, f = Math.min(c, t.length - 1), d = Math.max(0, c - e.length + 1); d <= f; d++) { + var p = c - d | 0; + u += (o = (i = 0 | e.words[p]) * (s = 0 | t.words[d]) + h) / 67108864 | 0, h = 67108863 & o; + } + r.words[c] = 0 | h, l = 0 | u; + } + return 0 !== l ? r.words[c] = 0 | l : r.length--, r._strip(); + } + s.prototype.toArrayLike = function (e, t, r) { + this._strip(); + var i = this.byteLength(), + s = r || Math.max(1, i); + n(i <= s, "byte array longer than desired length"), n(s > 0, "Requested array length <= 0"); + var o = function (e, t) { + return e.allocUnsafe ? e.allocUnsafe(t) : new e(t); + }(e, s); + return this["_toArrayLike" + ("le" === t ? "LE" : "BE")](o, i), o; + }, s.prototype._toArrayLikeLE = function (e, t) { + for (var r = 0, n = 0, i = 0, s = 0; i < this.length; i++) { + var o = this.words[i] << s | n; + e[r++] = 255 & o, r < e.length && (e[r++] = o >> 8 & 255), r < e.length && (e[r++] = o >> 16 & 255), 6 === s ? (r < e.length && (e[r++] = o >> 24 & 255), n = 0, s = 0) : (n = o >>> 24, s += 2); + } + if (r < e.length) for (e[r++] = n; r < e.length;) e[r++] = 0; + }, s.prototype._toArrayLikeBE = function (e, t) { + for (var r = e.length - 1, n = 0, i = 0, s = 0; i < this.length; i++) { + var o = this.words[i] << s | n; + e[r--] = 255 & o, r >= 0 && (e[r--] = o >> 8 & 255), r >= 0 && (e[r--] = o >> 16 & 255), 6 === s ? (r >= 0 && (e[r--] = o >> 24 & 255), n = 0, s = 0) : (n = o >>> 24, s += 2); + } + if (r >= 0) for (e[r--] = n; r >= 0;) e[r--] = 0; + }, Math.clz32 ? s.prototype._countBits = function (e) { + return 32 - Math.clz32(e); + } : s.prototype._countBits = function (e) { + var t = e, + r = 0; + return t >= 4096 && (r += 13, t >>>= 13), t >= 64 && (r += 7, t >>>= 7), t >= 8 && (r += 4, t >>>= 4), t >= 2 && (r += 2, t >>>= 2), r + t; + }, s.prototype._zeroBits = function (e) { + if (0 === e) return 26; + var t = e, + r = 0; + return 0 == (8191 & t) && (r += 13, t >>>= 13), 0 == (127 & t) && (r += 7, t >>>= 7), 0 == (15 & t) && (r += 4, t >>>= 4), 0 == (3 & t) && (r += 2, t >>>= 2), 0 == (1 & t) && r++, r; + }, s.prototype.bitLength = function () { + var e = this.words[this.length - 1], + t = this._countBits(e); + return 26 * (this.length - 1) + t; + }, s.prototype.zeroBits = function () { + if (this.isZero()) return 0; + for (var e = 0, t = 0; t < this.length; t++) { + var r = this._zeroBits(this.words[t]); + if (e += r, 26 !== r) break; + } + return e; + }, s.prototype.byteLength = function () { + return Math.ceil(this.bitLength() / 8); + }, s.prototype.toTwos = function (e) { + return 0 !== this.negative ? this.abs().inotn(e).iaddn(1) : this.clone(); + }, s.prototype.fromTwos = function (e) { + return this.testn(e - 1) ? this.notn(e).iaddn(1).ineg() : this.clone(); + }, s.prototype.isNeg = function () { + return 0 !== this.negative; + }, s.prototype.neg = function () { + return this.clone().ineg(); + }, s.prototype.ineg = function () { + return this.isZero() || (this.negative ^= 1), this; + }, s.prototype.iuor = function (e) { + for (; this.length < e.length;) this.words[this.length++] = 0; + for (var t = 0; t < e.length; t++) this.words[t] = this.words[t] | e.words[t]; + return this._strip(); + }, s.prototype.ior = function (e) { + return n(0 == (this.negative | e.negative)), this.iuor(e); + }, s.prototype.or = function (e) { + return this.length > e.length ? this.clone().ior(e) : e.clone().ior(this); + }, s.prototype.uor = function (e) { + return this.length > e.length ? this.clone().iuor(e) : e.clone().iuor(this); + }, s.prototype.iuand = function (e) { + var t; + t = this.length > e.length ? e : this; + for (var r = 0; r < t.length; r++) this.words[r] = this.words[r] & e.words[r]; + return this.length = t.length, this._strip(); + }, s.prototype.iand = function (e) { + return n(0 == (this.negative | e.negative)), this.iuand(e); + }, s.prototype.and = function (e) { + return this.length > e.length ? this.clone().iand(e) : e.clone().iand(this); + }, s.prototype.uand = function (e) { + return this.length > e.length ? this.clone().iuand(e) : e.clone().iuand(this); + }, s.prototype.iuxor = function (e) { + var t, r; + this.length > e.length ? (t = this, r = e) : (t = e, r = this); + for (var n = 0; n < r.length; n++) this.words[n] = t.words[n] ^ r.words[n]; + if (this !== t) for (; n < t.length; n++) this.words[n] = t.words[n]; + return this.length = t.length, this._strip(); + }, s.prototype.ixor = function (e) { + return n(0 == (this.negative | e.negative)), this.iuxor(e); + }, s.prototype.xor = function (e) { + return this.length > e.length ? this.clone().ixor(e) : e.clone().ixor(this); + }, s.prototype.uxor = function (e) { + return this.length > e.length ? this.clone().iuxor(e) : e.clone().iuxor(this); + }, s.prototype.inotn = function (e) { + n("number" == typeof e && e >= 0); + var t = 0 | Math.ceil(e / 26), + r = e % 26; + this._expand(t), r > 0 && t--; + for (var i = 0; i < t; i++) this.words[i] = 67108863 & ~this.words[i]; + return r > 0 && (this.words[i] = ~this.words[i] & 67108863 >> 26 - r), this._strip(); + }, s.prototype.notn = function (e) { + return this.clone().inotn(e); + }, s.prototype.setn = function (e, t) { + n("number" == typeof e && e >= 0); + var r = e / 26 | 0, + i = e % 26; + return this._expand(r + 1), this.words[r] = t ? this.words[r] | 1 << i : this.words[r] & ~(1 << i), this._strip(); + }, s.prototype.iadd = function (e) { + var t, r, n; + if (0 !== this.negative && 0 === e.negative) return this.negative = 0, t = this.isub(e), this.negative ^= 1, this._normSign(); + if (0 === this.negative && 0 !== e.negative) return e.negative = 0, t = this.isub(e), e.negative = 1, t._normSign(); + this.length > e.length ? (r = this, n = e) : (r = e, n = this); + for (var i = 0, s = 0; s < n.length; s++) t = (0 | r.words[s]) + (0 | n.words[s]) + i, this.words[s] = 67108863 & t, i = t >>> 26; + for (; 0 !== i && s < r.length; s++) t = (0 | r.words[s]) + i, this.words[s] = 67108863 & t, i = t >>> 26; + if (this.length = r.length, 0 !== i) this.words[this.length] = i, this.length++;else if (r !== this) for (; s < r.length; s++) this.words[s] = r.words[s]; + return this; + }, s.prototype.add = function (e) { + var t; + return 0 !== e.negative && 0 === this.negative ? (e.negative = 0, t = this.sub(e), e.negative ^= 1, t) : 0 === e.negative && 0 !== this.negative ? (this.negative = 0, t = e.sub(this), this.negative = 1, t) : this.length > e.length ? this.clone().iadd(e) : e.clone().iadd(this); + }, s.prototype.isub = function (e) { + if (0 !== e.negative) { + e.negative = 0; + var t = this.iadd(e); + return e.negative = 1, t._normSign(); + } + if (0 !== this.negative) return this.negative = 0, this.iadd(e), this.negative = 1, this._normSign(); + var r, + n, + i = this.cmp(e); + if (0 === i) return this.negative = 0, this.length = 1, this.words[0] = 0, this; + i > 0 ? (r = this, n = e) : (r = e, n = this); + for (var s = 0, o = 0; o < n.length; o++) s = (t = (0 | r.words[o]) - (0 | n.words[o]) + s) >> 26, this.words[o] = 67108863 & t; + for (; 0 !== s && o < r.length; o++) s = (t = (0 | r.words[o]) + s) >> 26, this.words[o] = 67108863 & t; + if (0 === s && o < r.length && r !== this) for (; o < r.length; o++) this.words[o] = r.words[o]; + return this.length = Math.max(this.length, o), r !== this && (this.negative = 1), this._strip(); + }, s.prototype.sub = function (e) { + return this.clone().isub(e); + }; + var b = function (e, t, r) { + var n, + i, + s, + o = e.words, + a = t.words, + l = r.words, + c = 0, + u = 0 | o[0], + h = 8191 & u, + f = u >>> 13, + d = 0 | o[1], + p = 8191 & d, + m = d >>> 13, + b = 0 | o[2], + g = 8191 & b, + y = b >>> 13, + v = 0 | o[3], + w = 8191 & v, + _ = v >>> 13, + x = 0 | o[4], + k = 8191 & x, + S = x >>> 13, + M = 0 | o[5], + C = 8191 & M, + T = M >>> 13, + E = 0 | o[6], + A = 8191 & E, + R = E >>> 13, + O = 0 | o[7], + j = 8191 & O, + I = O >>> 13, + N = 0 | o[8], + P = 8191 & N, + B = N >>> 13, + D = 0 | o[9], + F = 8191 & D, + L = D >>> 13, + z = 0 | a[0], + U = 8191 & z, + $ = z >>> 13, + H = 0 | a[1], + V = 8191 & H, + q = H >>> 13, + W = 0 | a[2], + X = 8191 & W, + K = W >>> 13, + Y = 0 | a[3], + Z = 8191 & Y, + G = Y >>> 13, + J = 0 | a[4], + Q = 8191 & J, + ee = J >>> 13, + te = 0 | a[5], + re = 8191 & te, + ne = te >>> 13, + ie = 0 | a[6], + se = 8191 & ie, + oe = ie >>> 13, + ae = 0 | a[7], + le = 8191 & ae, + ce = ae >>> 13, + ue = 0 | a[8], + he = 8191 & ue, + fe = ue >>> 13, + de = 0 | a[9], + pe = 8191 & de, + me = de >>> 13; + r.negative = e.negative ^ t.negative, r.length = 19; + var be = (c + (n = Math.imul(h, U)) | 0) + ((8191 & (i = (i = Math.imul(h, $)) + Math.imul(f, U) | 0)) << 13) | 0; + c = ((s = Math.imul(f, $)) + (i >>> 13) | 0) + (be >>> 26) | 0, be &= 67108863, n = Math.imul(p, U), i = (i = Math.imul(p, $)) + Math.imul(m, U) | 0, s = Math.imul(m, $); + var ge = (c + (n = n + Math.imul(h, V) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, q) | 0) + Math.imul(f, V) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, q) | 0) + (i >>> 13) | 0) + (ge >>> 26) | 0, ge &= 67108863, n = Math.imul(g, U), i = (i = Math.imul(g, $)) + Math.imul(y, U) | 0, s = Math.imul(y, $), n = n + Math.imul(p, V) | 0, i = (i = i + Math.imul(p, q) | 0) + Math.imul(m, V) | 0, s = s + Math.imul(m, q) | 0; + var ye = (c + (n = n + Math.imul(h, X) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, K) | 0) + Math.imul(f, X) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, K) | 0) + (i >>> 13) | 0) + (ye >>> 26) | 0, ye &= 67108863, n = Math.imul(w, U), i = (i = Math.imul(w, $)) + Math.imul(_, U) | 0, s = Math.imul(_, $), n = n + Math.imul(g, V) | 0, i = (i = i + Math.imul(g, q) | 0) + Math.imul(y, V) | 0, s = s + Math.imul(y, q) | 0, n = n + Math.imul(p, X) | 0, i = (i = i + Math.imul(p, K) | 0) + Math.imul(m, X) | 0, s = s + Math.imul(m, K) | 0; + var ve = (c + (n = n + Math.imul(h, Z) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, G) | 0) + Math.imul(f, Z) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, G) | 0) + (i >>> 13) | 0) + (ve >>> 26) | 0, ve &= 67108863, n = Math.imul(k, U), i = (i = Math.imul(k, $)) + Math.imul(S, U) | 0, s = Math.imul(S, $), n = n + Math.imul(w, V) | 0, i = (i = i + Math.imul(w, q) | 0) + Math.imul(_, V) | 0, s = s + Math.imul(_, q) | 0, n = n + Math.imul(g, X) | 0, i = (i = i + Math.imul(g, K) | 0) + Math.imul(y, X) | 0, s = s + Math.imul(y, K) | 0, n = n + Math.imul(p, Z) | 0, i = (i = i + Math.imul(p, G) | 0) + Math.imul(m, Z) | 0, s = s + Math.imul(m, G) | 0; + var we = (c + (n = n + Math.imul(h, Q) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, ee) | 0) + Math.imul(f, Q) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, ee) | 0) + (i >>> 13) | 0) + (we >>> 26) | 0, we &= 67108863, n = Math.imul(C, U), i = (i = Math.imul(C, $)) + Math.imul(T, U) | 0, s = Math.imul(T, $), n = n + Math.imul(k, V) | 0, i = (i = i + Math.imul(k, q) | 0) + Math.imul(S, V) | 0, s = s + Math.imul(S, q) | 0, n = n + Math.imul(w, X) | 0, i = (i = i + Math.imul(w, K) | 0) + Math.imul(_, X) | 0, s = s + Math.imul(_, K) | 0, n = n + Math.imul(g, Z) | 0, i = (i = i + Math.imul(g, G) | 0) + Math.imul(y, Z) | 0, s = s + Math.imul(y, G) | 0, n = n + Math.imul(p, Q) | 0, i = (i = i + Math.imul(p, ee) | 0) + Math.imul(m, Q) | 0, s = s + Math.imul(m, ee) | 0; + var _e = (c + (n = n + Math.imul(h, re) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, ne) | 0) + Math.imul(f, re) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, ne) | 0) + (i >>> 13) | 0) + (_e >>> 26) | 0, _e &= 67108863, n = Math.imul(A, U), i = (i = Math.imul(A, $)) + Math.imul(R, U) | 0, s = Math.imul(R, $), n = n + Math.imul(C, V) | 0, i = (i = i + Math.imul(C, q) | 0) + Math.imul(T, V) | 0, s = s + Math.imul(T, q) | 0, n = n + Math.imul(k, X) | 0, i = (i = i + Math.imul(k, K) | 0) + Math.imul(S, X) | 0, s = s + Math.imul(S, K) | 0, n = n + Math.imul(w, Z) | 0, i = (i = i + Math.imul(w, G) | 0) + Math.imul(_, Z) | 0, s = s + Math.imul(_, G) | 0, n = n + Math.imul(g, Q) | 0, i = (i = i + Math.imul(g, ee) | 0) + Math.imul(y, Q) | 0, s = s + Math.imul(y, ee) | 0, n = n + Math.imul(p, re) | 0, i = (i = i + Math.imul(p, ne) | 0) + Math.imul(m, re) | 0, s = s + Math.imul(m, ne) | 0; + var xe = (c + (n = n + Math.imul(h, se) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, oe) | 0) + Math.imul(f, se) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, oe) | 0) + (i >>> 13) | 0) + (xe >>> 26) | 0, xe &= 67108863, n = Math.imul(j, U), i = (i = Math.imul(j, $)) + Math.imul(I, U) | 0, s = Math.imul(I, $), n = n + Math.imul(A, V) | 0, i = (i = i + Math.imul(A, q) | 0) + Math.imul(R, V) | 0, s = s + Math.imul(R, q) | 0, n = n + Math.imul(C, X) | 0, i = (i = i + Math.imul(C, K) | 0) + Math.imul(T, X) | 0, s = s + Math.imul(T, K) | 0, n = n + Math.imul(k, Z) | 0, i = (i = i + Math.imul(k, G) | 0) + Math.imul(S, Z) | 0, s = s + Math.imul(S, G) | 0, n = n + Math.imul(w, Q) | 0, i = (i = i + Math.imul(w, ee) | 0) + Math.imul(_, Q) | 0, s = s + Math.imul(_, ee) | 0, n = n + Math.imul(g, re) | 0, i = (i = i + Math.imul(g, ne) | 0) + Math.imul(y, re) | 0, s = s + Math.imul(y, ne) | 0, n = n + Math.imul(p, se) | 0, i = (i = i + Math.imul(p, oe) | 0) + Math.imul(m, se) | 0, s = s + Math.imul(m, oe) | 0; + var ke = (c + (n = n + Math.imul(h, le) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, ce) | 0) + Math.imul(f, le) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, ce) | 0) + (i >>> 13) | 0) + (ke >>> 26) | 0, ke &= 67108863, n = Math.imul(P, U), i = (i = Math.imul(P, $)) + Math.imul(B, U) | 0, s = Math.imul(B, $), n = n + Math.imul(j, V) | 0, i = (i = i + Math.imul(j, q) | 0) + Math.imul(I, V) | 0, s = s + Math.imul(I, q) | 0, n = n + Math.imul(A, X) | 0, i = (i = i + Math.imul(A, K) | 0) + Math.imul(R, X) | 0, s = s + Math.imul(R, K) | 0, n = n + Math.imul(C, Z) | 0, i = (i = i + Math.imul(C, G) | 0) + Math.imul(T, Z) | 0, s = s + Math.imul(T, G) | 0, n = n + Math.imul(k, Q) | 0, i = (i = i + Math.imul(k, ee) | 0) + Math.imul(S, Q) | 0, s = s + Math.imul(S, ee) | 0, n = n + Math.imul(w, re) | 0, i = (i = i + Math.imul(w, ne) | 0) + Math.imul(_, re) | 0, s = s + Math.imul(_, ne) | 0, n = n + Math.imul(g, se) | 0, i = (i = i + Math.imul(g, oe) | 0) + Math.imul(y, se) | 0, s = s + Math.imul(y, oe) | 0, n = n + Math.imul(p, le) | 0, i = (i = i + Math.imul(p, ce) | 0) + Math.imul(m, le) | 0, s = s + Math.imul(m, ce) | 0; + var Se = (c + (n = n + Math.imul(h, he) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, fe) | 0) + Math.imul(f, he) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, fe) | 0) + (i >>> 13) | 0) + (Se >>> 26) | 0, Se &= 67108863, n = Math.imul(F, U), i = (i = Math.imul(F, $)) + Math.imul(L, U) | 0, s = Math.imul(L, $), n = n + Math.imul(P, V) | 0, i = (i = i + Math.imul(P, q) | 0) + Math.imul(B, V) | 0, s = s + Math.imul(B, q) | 0, n = n + Math.imul(j, X) | 0, i = (i = i + Math.imul(j, K) | 0) + Math.imul(I, X) | 0, s = s + Math.imul(I, K) | 0, n = n + Math.imul(A, Z) | 0, i = (i = i + Math.imul(A, G) | 0) + Math.imul(R, Z) | 0, s = s + Math.imul(R, G) | 0, n = n + Math.imul(C, Q) | 0, i = (i = i + Math.imul(C, ee) | 0) + Math.imul(T, Q) | 0, s = s + Math.imul(T, ee) | 0, n = n + Math.imul(k, re) | 0, i = (i = i + Math.imul(k, ne) | 0) + Math.imul(S, re) | 0, s = s + Math.imul(S, ne) | 0, n = n + Math.imul(w, se) | 0, i = (i = i + Math.imul(w, oe) | 0) + Math.imul(_, se) | 0, s = s + Math.imul(_, oe) | 0, n = n + Math.imul(g, le) | 0, i = (i = i + Math.imul(g, ce) | 0) + Math.imul(y, le) | 0, s = s + Math.imul(y, ce) | 0, n = n + Math.imul(p, he) | 0, i = (i = i + Math.imul(p, fe) | 0) + Math.imul(m, he) | 0, s = s + Math.imul(m, fe) | 0; + var Me = (c + (n = n + Math.imul(h, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(h, me) | 0) + Math.imul(f, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(f, me) | 0) + (i >>> 13) | 0) + (Me >>> 26) | 0, Me &= 67108863, n = Math.imul(F, V), i = (i = Math.imul(F, q)) + Math.imul(L, V) | 0, s = Math.imul(L, q), n = n + Math.imul(P, X) | 0, i = (i = i + Math.imul(P, K) | 0) + Math.imul(B, X) | 0, s = s + Math.imul(B, K) | 0, n = n + Math.imul(j, Z) | 0, i = (i = i + Math.imul(j, G) | 0) + Math.imul(I, Z) | 0, s = s + Math.imul(I, G) | 0, n = n + Math.imul(A, Q) | 0, i = (i = i + Math.imul(A, ee) | 0) + Math.imul(R, Q) | 0, s = s + Math.imul(R, ee) | 0, n = n + Math.imul(C, re) | 0, i = (i = i + Math.imul(C, ne) | 0) + Math.imul(T, re) | 0, s = s + Math.imul(T, ne) | 0, n = n + Math.imul(k, se) | 0, i = (i = i + Math.imul(k, oe) | 0) + Math.imul(S, se) | 0, s = s + Math.imul(S, oe) | 0, n = n + Math.imul(w, le) | 0, i = (i = i + Math.imul(w, ce) | 0) + Math.imul(_, le) | 0, s = s + Math.imul(_, ce) | 0, n = n + Math.imul(g, he) | 0, i = (i = i + Math.imul(g, fe) | 0) + Math.imul(y, he) | 0, s = s + Math.imul(y, fe) | 0; + var Ce = (c + (n = n + Math.imul(p, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(p, me) | 0) + Math.imul(m, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(m, me) | 0) + (i >>> 13) | 0) + (Ce >>> 26) | 0, Ce &= 67108863, n = Math.imul(F, X), i = (i = Math.imul(F, K)) + Math.imul(L, X) | 0, s = Math.imul(L, K), n = n + Math.imul(P, Z) | 0, i = (i = i + Math.imul(P, G) | 0) + Math.imul(B, Z) | 0, s = s + Math.imul(B, G) | 0, n = n + Math.imul(j, Q) | 0, i = (i = i + Math.imul(j, ee) | 0) + Math.imul(I, Q) | 0, s = s + Math.imul(I, ee) | 0, n = n + Math.imul(A, re) | 0, i = (i = i + Math.imul(A, ne) | 0) + Math.imul(R, re) | 0, s = s + Math.imul(R, ne) | 0, n = n + Math.imul(C, se) | 0, i = (i = i + Math.imul(C, oe) | 0) + Math.imul(T, se) | 0, s = s + Math.imul(T, oe) | 0, n = n + Math.imul(k, le) | 0, i = (i = i + Math.imul(k, ce) | 0) + Math.imul(S, le) | 0, s = s + Math.imul(S, ce) | 0, n = n + Math.imul(w, he) | 0, i = (i = i + Math.imul(w, fe) | 0) + Math.imul(_, he) | 0, s = s + Math.imul(_, fe) | 0; + var Te = (c + (n = n + Math.imul(g, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(g, me) | 0) + Math.imul(y, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(y, me) | 0) + (i >>> 13) | 0) + (Te >>> 26) | 0, Te &= 67108863, n = Math.imul(F, Z), i = (i = Math.imul(F, G)) + Math.imul(L, Z) | 0, s = Math.imul(L, G), n = n + Math.imul(P, Q) | 0, i = (i = i + Math.imul(P, ee) | 0) + Math.imul(B, Q) | 0, s = s + Math.imul(B, ee) | 0, n = n + Math.imul(j, re) | 0, i = (i = i + Math.imul(j, ne) | 0) + Math.imul(I, re) | 0, s = s + Math.imul(I, ne) | 0, n = n + Math.imul(A, se) | 0, i = (i = i + Math.imul(A, oe) | 0) + Math.imul(R, se) | 0, s = s + Math.imul(R, oe) | 0, n = n + Math.imul(C, le) | 0, i = (i = i + Math.imul(C, ce) | 0) + Math.imul(T, le) | 0, s = s + Math.imul(T, ce) | 0, n = n + Math.imul(k, he) | 0, i = (i = i + Math.imul(k, fe) | 0) + Math.imul(S, he) | 0, s = s + Math.imul(S, fe) | 0; + var Ee = (c + (n = n + Math.imul(w, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(w, me) | 0) + Math.imul(_, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(_, me) | 0) + (i >>> 13) | 0) + (Ee >>> 26) | 0, Ee &= 67108863, n = Math.imul(F, Q), i = (i = Math.imul(F, ee)) + Math.imul(L, Q) | 0, s = Math.imul(L, ee), n = n + Math.imul(P, re) | 0, i = (i = i + Math.imul(P, ne) | 0) + Math.imul(B, re) | 0, s = s + Math.imul(B, ne) | 0, n = n + Math.imul(j, se) | 0, i = (i = i + Math.imul(j, oe) | 0) + Math.imul(I, se) | 0, s = s + Math.imul(I, oe) | 0, n = n + Math.imul(A, le) | 0, i = (i = i + Math.imul(A, ce) | 0) + Math.imul(R, le) | 0, s = s + Math.imul(R, ce) | 0, n = n + Math.imul(C, he) | 0, i = (i = i + Math.imul(C, fe) | 0) + Math.imul(T, he) | 0, s = s + Math.imul(T, fe) | 0; + var Ae = (c + (n = n + Math.imul(k, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(k, me) | 0) + Math.imul(S, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(S, me) | 0) + (i >>> 13) | 0) + (Ae >>> 26) | 0, Ae &= 67108863, n = Math.imul(F, re), i = (i = Math.imul(F, ne)) + Math.imul(L, re) | 0, s = Math.imul(L, ne), n = n + Math.imul(P, se) | 0, i = (i = i + Math.imul(P, oe) | 0) + Math.imul(B, se) | 0, s = s + Math.imul(B, oe) | 0, n = n + Math.imul(j, le) | 0, i = (i = i + Math.imul(j, ce) | 0) + Math.imul(I, le) | 0, s = s + Math.imul(I, ce) | 0, n = n + Math.imul(A, he) | 0, i = (i = i + Math.imul(A, fe) | 0) + Math.imul(R, he) | 0, s = s + Math.imul(R, fe) | 0; + var Re = (c + (n = n + Math.imul(C, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(C, me) | 0) + Math.imul(T, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(T, me) | 0) + (i >>> 13) | 0) + (Re >>> 26) | 0, Re &= 67108863, n = Math.imul(F, se), i = (i = Math.imul(F, oe)) + Math.imul(L, se) | 0, s = Math.imul(L, oe), n = n + Math.imul(P, le) | 0, i = (i = i + Math.imul(P, ce) | 0) + Math.imul(B, le) | 0, s = s + Math.imul(B, ce) | 0, n = n + Math.imul(j, he) | 0, i = (i = i + Math.imul(j, fe) | 0) + Math.imul(I, he) | 0, s = s + Math.imul(I, fe) | 0; + var Oe = (c + (n = n + Math.imul(A, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(A, me) | 0) + Math.imul(R, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(R, me) | 0) + (i >>> 13) | 0) + (Oe >>> 26) | 0, Oe &= 67108863, n = Math.imul(F, le), i = (i = Math.imul(F, ce)) + Math.imul(L, le) | 0, s = Math.imul(L, ce), n = n + Math.imul(P, he) | 0, i = (i = i + Math.imul(P, fe) | 0) + Math.imul(B, he) | 0, s = s + Math.imul(B, fe) | 0; + var je = (c + (n = n + Math.imul(j, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(j, me) | 0) + Math.imul(I, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(I, me) | 0) + (i >>> 13) | 0) + (je >>> 26) | 0, je &= 67108863, n = Math.imul(F, he), i = (i = Math.imul(F, fe)) + Math.imul(L, he) | 0, s = Math.imul(L, fe); + var Ie = (c + (n = n + Math.imul(P, pe) | 0) | 0) + ((8191 & (i = (i = i + Math.imul(P, me) | 0) + Math.imul(B, pe) | 0)) << 13) | 0; + c = ((s = s + Math.imul(B, me) | 0) + (i >>> 13) | 0) + (Ie >>> 26) | 0, Ie &= 67108863; + var Ne = (c + (n = Math.imul(F, pe)) | 0) + ((8191 & (i = (i = Math.imul(F, me)) + Math.imul(L, pe) | 0)) << 13) | 0; + return c = ((s = Math.imul(L, me)) + (i >>> 13) | 0) + (Ne >>> 26) | 0, Ne &= 67108863, l[0] = be, l[1] = ge, l[2] = ye, l[3] = ve, l[4] = we, l[5] = _e, l[6] = xe, l[7] = ke, l[8] = Se, l[9] = Me, l[10] = Ce, l[11] = Te, l[12] = Ee, l[13] = Ae, l[14] = Re, l[15] = Oe, l[16] = je, l[17] = Ie, l[18] = Ne, 0 !== c && (l[19] = c, r.length++), r; + }; + function g(e, t, r) { + r.negative = t.negative ^ e.negative, r.length = e.length + t.length; + for (var n = 0, i = 0, s = 0; s < r.length - 1; s++) { + var o = i; + i = 0; + for (var a = 67108863 & n, l = Math.min(s, t.length - 1), c = Math.max(0, s - e.length + 1); c <= l; c++) { + var u = s - c, + h = (0 | e.words[u]) * (0 | t.words[c]), + f = 67108863 & h; + a = 67108863 & (f = f + a | 0), i += (o = (o = o + (h / 67108864 | 0) | 0) + (f >>> 26) | 0) >>> 26, o &= 67108863; + } + r.words[s] = a, n = o, o = i; + } + return 0 !== n ? r.words[s] = n : r.length--, r._strip(); + } + function y(e, t, r) { + return g(e, t, r); + } + function v(e, t) { + this.x = e, this.y = t; + } + Math.imul || (b = m), s.prototype.mulTo = function (e, t) { + var r = this.length + e.length; + return 10 === this.length && 10 === e.length ? b(this, e, t) : r < 63 ? m(this, e, t) : r < 1024 ? g(this, e, t) : y(this, e, t); + }, v.prototype.makeRBT = function (e) { + for (var t = new Array(e), r = s.prototype._countBits(e) - 1, n = 0; n < e; n++) t[n] = this.revBin(n, r, e); + return t; + }, v.prototype.revBin = function (e, t, r) { + if (0 === e || e === r - 1) return e; + for (var n = 0, i = 0; i < t; i++) n |= (1 & e) << t - i - 1, e >>= 1; + return n; + }, v.prototype.permute = function (e, t, r, n, i, s) { + for (var o = 0; o < s; o++) n[o] = t[e[o]], i[o] = r[e[o]]; + }, v.prototype.transform = function (e, t, r, n, i, s) { + this.permute(s, e, t, r, n, i); + for (var o = 1; o < i; o <<= 1) for (var a = o << 1, l = Math.cos(2 * Math.PI / a), c = Math.sin(2 * Math.PI / a), u = 0; u < i; u += a) for (var h = l, f = c, d = 0; d < o; d++) { + var p = r[u + d], + m = n[u + d], + b = r[u + d + o], + g = n[u + d + o], + y = h * b - f * g; + g = h * g + f * b, b = y, r[u + d] = p + b, n[u + d] = m + g, r[u + d + o] = p - b, n[u + d + o] = m - g, d !== a && (y = l * h - c * f, f = l * f + c * h, h = y); + } + }, v.prototype.guessLen13b = function (e, t) { + var r = 1 | Math.max(t, e), + n = 1 & r, + i = 0; + for (r = r / 2 | 0; r; r >>>= 1) i++; + return 1 << i + 1 + n; + }, v.prototype.conjugate = function (e, t, r) { + if (!(r <= 1)) for (var n = 0; n < r / 2; n++) { + var i = e[n]; + e[n] = e[r - n - 1], e[r - n - 1] = i, i = t[n], t[n] = -t[r - n - 1], t[r - n - 1] = -i; + } + }, v.prototype.normalize13b = function (e, t) { + for (var r = 0, n = 0; n < t / 2; n++) { + var i = 8192 * Math.round(e[2 * n + 1] / t) + Math.round(e[2 * n] / t) + r; + e[n] = 67108863 & i, r = i < 67108864 ? 0 : i / 67108864 | 0; + } + return e; + }, v.prototype.convert13b = function (e, t, r, i) { + for (var s = 0, o = 0; o < t; o++) s += 0 | e[o], r[2 * o] = 8191 & s, s >>>= 13, r[2 * o + 1] = 8191 & s, s >>>= 13; + for (o = 2 * t; o < i; ++o) r[o] = 0; + n(0 === s), n(0 == (-8192 & s)); + }, v.prototype.stub = function (e) { + for (var t = new Array(e), r = 0; r < e; r++) t[r] = 0; + return t; + }, v.prototype.mulp = function (e, t, r) { + var n = 2 * this.guessLen13b(e.length, t.length), + i = this.makeRBT(n), + s = this.stub(n), + o = new Array(n), + a = new Array(n), + l = new Array(n), + c = new Array(n), + u = new Array(n), + h = new Array(n), + f = r.words; + f.length = n, this.convert13b(e.words, e.length, o, n), this.convert13b(t.words, t.length, c, n), this.transform(o, s, a, l, n, i), this.transform(c, s, u, h, n, i); + for (var d = 0; d < n; d++) { + var p = a[d] * u[d] - l[d] * h[d]; + l[d] = a[d] * h[d] + l[d] * u[d], a[d] = p; + } + return this.conjugate(a, l, n), this.transform(a, l, f, s, n, i), this.conjugate(f, s, n), this.normalize13b(f, n), r.negative = e.negative ^ t.negative, r.length = e.length + t.length, r._strip(); + }, s.prototype.mul = function (e) { + var t = new s(null); + return t.words = new Array(this.length + e.length), this.mulTo(e, t); + }, s.prototype.mulf = function (e) { + var t = new s(null); + return t.words = new Array(this.length + e.length), y(this, e, t); + }, s.prototype.imul = function (e) { + return this.clone().mulTo(e, this); + }, s.prototype.imuln = function (e) { + var t = e < 0; + t && (e = -e), n("number" == typeof e), n(e < 67108864); + for (var r = 0, i = 0; i < this.length; i++) { + var s = (0 | this.words[i]) * e, + o = (67108863 & s) + (67108863 & r); + r >>= 26, r += s / 67108864 | 0, r += o >>> 26, this.words[i] = 67108863 & o; + } + return 0 !== r && (this.words[i] = r, this.length++), t ? this.ineg() : this; + }, s.prototype.muln = function (e) { + return this.clone().imuln(e); + }, s.prototype.sqr = function () { + return this.mul(this); + }, s.prototype.isqr = function () { + return this.imul(this.clone()); + }, s.prototype.pow = function (e) { + var t = function (e) { + for (var t = new Array(e.bitLength()), r = 0; r < t.length; r++) { + var n = r / 26 | 0, + i = r % 26; + t[r] = e.words[n] >>> i & 1; + } + return t; + }(e); + if (0 === t.length) return new s(1); + for (var r = this, n = 0; n < t.length && 0 === t[n]; n++, r = r.sqr()); + if (++n < t.length) for (var i = r.sqr(); n < t.length; n++, i = i.sqr()) 0 !== t[n] && (r = r.mul(i)); + return r; + }, s.prototype.iushln = function (e) { + n("number" == typeof e && e >= 0); + var t, + r = e % 26, + i = (e - r) / 26, + s = 67108863 >>> 26 - r << 26 - r; + if (0 !== r) { + var o = 0; + for (t = 0; t < this.length; t++) { + var a = this.words[t] & s, + l = (0 | this.words[t]) - a << r; + this.words[t] = l | o, o = a >>> 26 - r; + } + o && (this.words[t] = o, this.length++); + } + if (0 !== i) { + for (t = this.length - 1; t >= 0; t--) this.words[t + i] = this.words[t]; + for (t = 0; t < i; t++) this.words[t] = 0; + this.length += i; + } + return this._strip(); + }, s.prototype.ishln = function (e) { + return n(0 === this.negative), this.iushln(e); + }, s.prototype.iushrn = function (e, t, r) { + var i; + n("number" == typeof e && e >= 0), i = t ? (t - t % 26) / 26 : 0; + var s = e % 26, + o = Math.min((e - s) / 26, this.length), + a = 67108863 ^ 67108863 >>> s << s, + l = r; + if (i -= o, i = Math.max(0, i), l) { + for (var c = 0; c < o; c++) l.words[c] = this.words[c]; + l.length = o; + } + if (0 === o) ;else if (this.length > o) for (this.length -= o, c = 0; c < this.length; c++) this.words[c] = this.words[c + o];else this.words[0] = 0, this.length = 1; + var u = 0; + for (c = this.length - 1; c >= 0 && (0 !== u || c >= i); c--) { + var h = 0 | this.words[c]; + this.words[c] = u << 26 - s | h >>> s, u = h & a; + } + return l && 0 !== u && (l.words[l.length++] = u), 0 === this.length && (this.words[0] = 0, this.length = 1), this._strip(); + }, s.prototype.ishrn = function (e, t, r) { + return n(0 === this.negative), this.iushrn(e, t, r); + }, s.prototype.shln = function (e) { + return this.clone().ishln(e); + }, s.prototype.ushln = function (e) { + return this.clone().iushln(e); + }, s.prototype.shrn = function (e) { + return this.clone().ishrn(e); + }, s.prototype.ushrn = function (e) { + return this.clone().iushrn(e); + }, s.prototype.testn = function (e) { + n("number" == typeof e && e >= 0); + var t = e % 26, + r = (e - t) / 26, + i = 1 << t; + return !(this.length <= r) && !!(this.words[r] & i); + }, s.prototype.imaskn = function (e) { + n("number" == typeof e && e >= 0); + var t = e % 26, + r = (e - t) / 26; + if (n(0 === this.negative, "imaskn works only with positive numbers"), this.length <= r) return this; + if (0 !== t && r++, this.length = Math.min(r, this.length), 0 !== t) { + var i = 67108863 ^ 67108863 >>> t << t; + this.words[this.length - 1] &= i; + } + return this._strip(); + }, s.prototype.maskn = function (e) { + return this.clone().imaskn(e); + }, s.prototype.iaddn = function (e) { + return n("number" == typeof e), n(e < 67108864), e < 0 ? this.isubn(-e) : 0 !== this.negative ? 1 === this.length && (0 | this.words[0]) <= e ? (this.words[0] = e - (0 | this.words[0]), this.negative = 0, this) : (this.negative = 0, this.isubn(e), this.negative = 1, this) : this._iaddn(e); + }, s.prototype._iaddn = function (e) { + this.words[0] += e; + for (var t = 0; t < this.length && this.words[t] >= 67108864; t++) this.words[t] -= 67108864, t === this.length - 1 ? this.words[t + 1] = 1 : this.words[t + 1]++; + return this.length = Math.max(this.length, t + 1), this; + }, s.prototype.isubn = function (e) { + if (n("number" == typeof e), n(e < 67108864), e < 0) return this.iaddn(-e); + if (0 !== this.negative) return this.negative = 0, this.iaddn(e), this.negative = 1, this; + if (this.words[0] -= e, 1 === this.length && this.words[0] < 0) this.words[0] = -this.words[0], this.negative = 1;else for (var t = 0; t < this.length && this.words[t] < 0; t++) this.words[t] += 67108864, this.words[t + 1] -= 1; + return this._strip(); + }, s.prototype.addn = function (e) { + return this.clone().iaddn(e); + }, s.prototype.subn = function (e) { + return this.clone().isubn(e); + }, s.prototype.iabs = function () { + return this.negative = 0, this; + }, s.prototype.abs = function () { + return this.clone().iabs(); + }, s.prototype._ishlnsubmul = function (e, t, r) { + var i, + s, + o = e.length + r; + this._expand(o); + var a = 0; + for (i = 0; i < e.length; i++) { + s = (0 | this.words[i + r]) + a; + var l = (0 | e.words[i]) * t; + a = ((s -= 67108863 & l) >> 26) - (l / 67108864 | 0), this.words[i + r] = 67108863 & s; + } + for (; i < this.length - r; i++) a = (s = (0 | this.words[i + r]) + a) >> 26, this.words[i + r] = 67108863 & s; + if (0 === a) return this._strip(); + for (n(-1 === a), a = 0, i = 0; i < this.length; i++) a = (s = -(0 | this.words[i]) + a) >> 26, this.words[i] = 67108863 & s; + return this.negative = 1, this._strip(); + }, s.prototype._wordDiv = function (e, t) { + var r = (this.length, e.length), + n = this.clone(), + i = e, + o = 0 | i.words[i.length - 1]; + 0 !== (r = 26 - this._countBits(o)) && (i = i.ushln(r), n.iushln(r), o = 0 | i.words[i.length - 1]); + var a, + l = n.length - i.length; + if ("mod" !== t) { + (a = new s(null)).length = l + 1, a.words = new Array(a.length); + for (var c = 0; c < a.length; c++) a.words[c] = 0; + } + var u = n.clone()._ishlnsubmul(i, 1, l); + 0 === u.negative && (n = u, a && (a.words[l] = 1)); + for (var h = l - 1; h >= 0; h--) { + var f = 67108864 * (0 | n.words[i.length + h]) + (0 | n.words[i.length + h - 1]); + for (f = Math.min(f / o | 0, 67108863), n._ishlnsubmul(i, f, h); 0 !== n.negative;) f--, n.negative = 0, n._ishlnsubmul(i, 1, h), n.isZero() || (n.negative ^= 1); + a && (a.words[h] = f); + } + return a && a._strip(), n._strip(), "div" !== t && 0 !== r && n.iushrn(r), { + div: a || null, + mod: n + }; + }, s.prototype.divmod = function (e, t, r) { + return n(!e.isZero()), this.isZero() ? { + div: new s(0), + mod: new s(0) + } : 0 !== this.negative && 0 === e.negative ? (a = this.neg().divmod(e, t), "mod" !== t && (i = a.div.neg()), "div" !== t && (o = a.mod.neg(), r && 0 !== o.negative && o.iadd(e)), { + div: i, + mod: o + }) : 0 === this.negative && 0 !== e.negative ? (a = this.divmod(e.neg(), t), "mod" !== t && (i = a.div.neg()), { + div: i, + mod: a.mod + }) : 0 != (this.negative & e.negative) ? (a = this.neg().divmod(e.neg(), t), "div" !== t && (o = a.mod.neg(), r && 0 !== o.negative && o.isub(e)), { + div: a.div, + mod: o + }) : e.length > this.length || this.cmp(e) < 0 ? { + div: new s(0), + mod: this + } : 1 === e.length ? "div" === t ? { + div: this.divn(e.words[0]), + mod: null + } : "mod" === t ? { + div: null, + mod: new s(this.modrn(e.words[0])) + } : { + div: this.divn(e.words[0]), + mod: new s(this.modrn(e.words[0])) + } : this._wordDiv(e, t); + var i, o, a; + }, s.prototype.div = function (e) { + return this.divmod(e, "div", !1).div; + }, s.prototype.mod = function (e) { + return this.divmod(e, "mod", !1).mod; + }, s.prototype.umod = function (e) { + return this.divmod(e, "mod", !0).mod; + }, s.prototype.divRound = function (e) { + var t = this.divmod(e); + if (t.mod.isZero()) return t.div; + var r = 0 !== t.div.negative ? t.mod.isub(e) : t.mod, + n = e.ushrn(1), + i = e.andln(1), + s = r.cmp(n); + return s < 0 || 1 === i && 0 === s ? t.div : 0 !== t.div.negative ? t.div.isubn(1) : t.div.iaddn(1); + }, s.prototype.modrn = function (e) { + var t = e < 0; + t && (e = -e), n(e <= 67108863); + for (var r = (1 << 26) % e, i = 0, s = this.length - 1; s >= 0; s--) i = (r * i + (0 | this.words[s])) % e; + return t ? -i : i; + }, s.prototype.modn = function (e) { + return this.modrn(e); + }, s.prototype.idivn = function (e) { + var t = e < 0; + t && (e = -e), n(e <= 67108863); + for (var r = 0, i = this.length - 1; i >= 0; i--) { + var s = (0 | this.words[i]) + 67108864 * r; + this.words[i] = s / e | 0, r = s % e; + } + return this._strip(), t ? this.ineg() : this; + }, s.prototype.divn = function (e) { + return this.clone().idivn(e); + }, s.prototype.egcd = function (e) { + n(0 === e.negative), n(!e.isZero()); + var t = this, + r = e.clone(); + t = 0 !== t.negative ? t.umod(e) : t.clone(); + for (var i = new s(1), o = new s(0), a = new s(0), l = new s(1), c = 0; t.isEven() && r.isEven();) t.iushrn(1), r.iushrn(1), ++c; + for (var u = r.clone(), h = t.clone(); !t.isZero();) { + for (var f = 0, d = 1; 0 == (t.words[0] & d) && f < 26; ++f, d <<= 1); + if (f > 0) for (t.iushrn(f); f-- > 0;) (i.isOdd() || o.isOdd()) && (i.iadd(u), o.isub(h)), i.iushrn(1), o.iushrn(1); + for (var p = 0, m = 1; 0 == (r.words[0] & m) && p < 26; ++p, m <<= 1); + if (p > 0) for (r.iushrn(p); p-- > 0;) (a.isOdd() || l.isOdd()) && (a.iadd(u), l.isub(h)), a.iushrn(1), l.iushrn(1); + t.cmp(r) >= 0 ? (t.isub(r), i.isub(a), o.isub(l)) : (r.isub(t), a.isub(i), l.isub(o)); + } + return { + a: a, + b: l, + gcd: r.iushln(c) + }; + }, s.prototype._invmp = function (e) { + n(0 === e.negative), n(!e.isZero()); + var t = this, + r = e.clone(); + t = 0 !== t.negative ? t.umod(e) : t.clone(); + for (var i, o = new s(1), a = new s(0), l = r.clone(); t.cmpn(1) > 0 && r.cmpn(1) > 0;) { + for (var c = 0, u = 1; 0 == (t.words[0] & u) && c < 26; ++c, u <<= 1); + if (c > 0) for (t.iushrn(c); c-- > 0;) o.isOdd() && o.iadd(l), o.iushrn(1); + for (var h = 0, f = 1; 0 == (r.words[0] & f) && h < 26; ++h, f <<= 1); + if (h > 0) for (r.iushrn(h); h-- > 0;) a.isOdd() && a.iadd(l), a.iushrn(1); + t.cmp(r) >= 0 ? (t.isub(r), o.isub(a)) : (r.isub(t), a.isub(o)); + } + return (i = 0 === t.cmpn(1) ? o : a).cmpn(0) < 0 && i.iadd(e), i; + }, s.prototype.gcd = function (e) { + if (this.isZero()) return e.abs(); + if (e.isZero()) return this.abs(); + var t = this.clone(), + r = e.clone(); + t.negative = 0, r.negative = 0; + for (var n = 0; t.isEven() && r.isEven(); n++) t.iushrn(1), r.iushrn(1); + for (;;) { + for (; t.isEven();) t.iushrn(1); + for (; r.isEven();) r.iushrn(1); + var i = t.cmp(r); + if (i < 0) { + var s = t; + t = r, r = s; + } else if (0 === i || 0 === r.cmpn(1)) break; + t.isub(r); + } + return r.iushln(n); + }, s.prototype.invm = function (e) { + return this.egcd(e).a.umod(e); + }, s.prototype.isEven = function () { + return 0 == (1 & this.words[0]); + }, s.prototype.isOdd = function () { + return 1 == (1 & this.words[0]); + }, s.prototype.andln = function (e) { + return this.words[0] & e; + }, s.prototype.bincn = function (e) { + n("number" == typeof e); + var t = e % 26, + r = (e - t) / 26, + i = 1 << t; + if (this.length <= r) return this._expand(r + 1), this.words[r] |= i, this; + for (var s = i, o = r; 0 !== s && o < this.length; o++) { + var a = 0 | this.words[o]; + s = (a += s) >>> 26, a &= 67108863, this.words[o] = a; + } + return 0 !== s && (this.words[o] = s, this.length++), this; + }, s.prototype.isZero = function () { + return 1 === this.length && 0 === this.words[0]; + }, s.prototype.cmpn = function (e) { + var t, + r = e < 0; + if (0 !== this.negative && !r) return -1; + if (0 === this.negative && r) return 1; + if (this._strip(), this.length > 1) t = 1;else { + r && (e = -e), n(e <= 67108863, "Number is too big"); + var i = 0 | this.words[0]; + t = i === e ? 0 : i < e ? -1 : 1; + } + return 0 !== this.negative ? 0 | -t : t; + }, s.prototype.cmp = function (e) { + if (0 !== this.negative && 0 === e.negative) return -1; + if (0 === this.negative && 0 !== e.negative) return 1; + var t = this.ucmp(e); + return 0 !== this.negative ? 0 | -t : t; + }, s.prototype.ucmp = function (e) { + if (this.length > e.length) return 1; + if (this.length < e.length) return -1; + for (var t = 0, r = this.length - 1; r >= 0; r--) { + var n = 0 | this.words[r], + i = 0 | e.words[r]; + if (n !== i) { + n < i ? t = -1 : n > i && (t = 1); + break; + } + } + return t; + }, s.prototype.gtn = function (e) { + return 1 === this.cmpn(e); + }, s.prototype.gt = function (e) { + return 1 === this.cmp(e); + }, s.prototype.gten = function (e) { + return this.cmpn(e) >= 0; + }, s.prototype.gte = function (e) { + return this.cmp(e) >= 0; + }, s.prototype.ltn = function (e) { + return -1 === this.cmpn(e); + }, s.prototype.lt = function (e) { + return -1 === this.cmp(e); + }, s.prototype.lten = function (e) { + return this.cmpn(e) <= 0; + }, s.prototype.lte = function (e) { + return this.cmp(e) <= 0; + }, s.prototype.eqn = function (e) { + return 0 === this.cmpn(e); + }, s.prototype.eq = function (e) { + return 0 === this.cmp(e); + }, s.red = function (e) { + return new C(e); + }, s.prototype.toRed = function (e) { + return n(!this.red, "Already a number in reduction context"), n(0 === this.negative, "red works only with positives"), e.convertTo(this)._forceRed(e); + }, s.prototype.fromRed = function () { + return n(this.red, "fromRed works only with numbers in reduction context"), this.red.convertFrom(this); + }, s.prototype._forceRed = function (e) { + return this.red = e, this; + }, s.prototype.forceRed = function (e) { + return n(!this.red, "Already a number in reduction context"), this._forceRed(e); + }, s.prototype.redAdd = function (e) { + return n(this.red, "redAdd works only with red numbers"), this.red.add(this, e); + }, s.prototype.redIAdd = function (e) { + return n(this.red, "redIAdd works only with red numbers"), this.red.iadd(this, e); + }, s.prototype.redSub = function (e) { + return n(this.red, "redSub works only with red numbers"), this.red.sub(this, e); + }, s.prototype.redISub = function (e) { + return n(this.red, "redISub works only with red numbers"), this.red.isub(this, e); + }, s.prototype.redShl = function (e) { + return n(this.red, "redShl works only with red numbers"), this.red.shl(this, e); + }, s.prototype.redMul = function (e) { + return n(this.red, "redMul works only with red numbers"), this.red._verify2(this, e), this.red.mul(this, e); + }, s.prototype.redIMul = function (e) { + return n(this.red, "redMul works only with red numbers"), this.red._verify2(this, e), this.red.imul(this, e); + }, s.prototype.redSqr = function () { + return n(this.red, "redSqr works only with red numbers"), this.red._verify1(this), this.red.sqr(this); + }, s.prototype.redISqr = function () { + return n(this.red, "redISqr works only with red numbers"), this.red._verify1(this), this.red.isqr(this); + }, s.prototype.redSqrt = function () { + return n(this.red, "redSqrt works only with red numbers"), this.red._verify1(this), this.red.sqrt(this); + }, s.prototype.redInvm = function () { + return n(this.red, "redInvm works only with red numbers"), this.red._verify1(this), this.red.invm(this); + }, s.prototype.redNeg = function () { + return n(this.red, "redNeg works only with red numbers"), this.red._verify1(this), this.red.neg(this); + }, s.prototype.redPow = function (e) { + return n(this.red && !e.red, "redPow(normalNum)"), this.red._verify1(this), this.red.pow(this, e); + }; + var w = { + k256: null, + p224: null, + p192: null, + p25519: null + }; + function _(e, t) { + this.name = e, this.p = new s(t, 16), this.n = this.p.bitLength(), this.k = new s(1).iushln(this.n).isub(this.p), this.tmp = this._tmp(); + } + function x() { + _.call(this, "k256", "ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f"); + } + function k() { + _.call(this, "p224", "ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001"); + } + function S() { + _.call(this, "p192", "ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff"); + } + function M() { + _.call(this, "25519", "7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed"); + } + function C(e) { + if ("string" == typeof e) { + var t = s._prime(e); + this.m = t.p, this.prime = t; + } else n(e.gtn(1), "modulus must be greater than 1"), this.m = e, this.prime = null; + } + function T(e) { + C.call(this, e), this.shift = this.m.bitLength(), this.shift % 26 != 0 && (this.shift += 26 - this.shift % 26), this.r = new s(1).iushln(this.shift), this.r2 = this.imod(this.r.sqr()), this.rinv = this.r._invmp(this.m), this.minv = this.rinv.mul(this.r).isubn(1).div(this.m), this.minv = this.minv.umod(this.r), this.minv = this.r.sub(this.minv); + } + _.prototype._tmp = function () { + var e = new s(null); + return e.words = new Array(Math.ceil(this.n / 13)), e; + }, _.prototype.ireduce = function (e) { + var t, + r = e; + do { + this.split(r, this.tmp), t = (r = (r = this.imulK(r)).iadd(this.tmp)).bitLength(); + } while (t > this.n); + var n = t < this.n ? -1 : r.ucmp(this.p); + return 0 === n ? (r.words[0] = 0, r.length = 1) : n > 0 ? r.isub(this.p) : void 0 !== r.strip ? r.strip() : r._strip(), r; + }, _.prototype.split = function (e, t) { + e.iushrn(this.n, 0, t); + }, _.prototype.imulK = function (e) { + return e.imul(this.k); + }, i(x, _), x.prototype.split = function (e, t) { + for (var r = Math.min(e.length, 9), n = 0; n < r; n++) t.words[n] = e.words[n]; + if (t.length = r, e.length <= 9) return e.words[0] = 0, void (e.length = 1); + var i = e.words[9]; + for (t.words[t.length++] = 4194303 & i, n = 10; n < e.length; n++) { + var s = 0 | e.words[n]; + e.words[n - 10] = (4194303 & s) << 4 | i >>> 22, i = s; + } + i >>>= 22, e.words[n - 10] = i, 0 === i && e.length > 10 ? e.length -= 10 : e.length -= 9; + }, x.prototype.imulK = function (e) { + e.words[e.length] = 0, e.words[e.length + 1] = 0, e.length += 2; + for (var t = 0, r = 0; r < e.length; r++) { + var n = 0 | e.words[r]; + t += 977 * n, e.words[r] = 67108863 & t, t = 64 * n + (t / 67108864 | 0); + } + return 0 === e.words[e.length - 1] && (e.length--, 0 === e.words[e.length - 1] && e.length--), e; + }, i(k, _), i(S, _), i(M, _), M.prototype.imulK = function (e) { + for (var t = 0, r = 0; r < e.length; r++) { + var n = 19 * (0 | e.words[r]) + t, + i = 67108863 & n; + n >>>= 26, e.words[r] = i, t = n; + } + return 0 !== t && (e.words[e.length++] = t), e; + }, s._prime = function (e) { + if (w[e]) return w[e]; + var t; + if ("k256" === e) t = new x();else if ("p224" === e) t = new k();else if ("p192" === e) t = new S();else { + if ("p25519" !== e) throw new Error("Unknown prime " + e); + t = new M(); + } + return w[e] = t, t; + }, C.prototype._verify1 = function (e) { + n(0 === e.negative, "red works only with positives"), n(e.red, "red works only with red numbers"); + }, C.prototype._verify2 = function (e, t) { + n(0 == (e.negative | t.negative), "red works only with positives"), n(e.red && e.red === t.red, "red works only with red numbers"); + }, C.prototype.imod = function (e) { + return this.prime ? this.prime.ireduce(e)._forceRed(this) : (u(e, e.umod(this.m)._forceRed(this)), e); + }, C.prototype.neg = function (e) { + return e.isZero() ? e.clone() : this.m.sub(e)._forceRed(this); + }, C.prototype.add = function (e, t) { + this._verify2(e, t); + var r = e.add(t); + return r.cmp(this.m) >= 0 && r.isub(this.m), r._forceRed(this); + }, C.prototype.iadd = function (e, t) { + this._verify2(e, t); + var r = e.iadd(t); + return r.cmp(this.m) >= 0 && r.isub(this.m), r; + }, C.prototype.sub = function (e, t) { + this._verify2(e, t); + var r = e.sub(t); + return r.cmpn(0) < 0 && r.iadd(this.m), r._forceRed(this); + }, C.prototype.isub = function (e, t) { + this._verify2(e, t); + var r = e.isub(t); + return r.cmpn(0) < 0 && r.iadd(this.m), r; + }, C.prototype.shl = function (e, t) { + return this._verify1(e), this.imod(e.ushln(t)); + }, C.prototype.imul = function (e, t) { + return this._verify2(e, t), this.imod(e.imul(t)); + }, C.prototype.mul = function (e, t) { + return this._verify2(e, t), this.imod(e.mul(t)); + }, C.prototype.isqr = function (e) { + return this.imul(e, e.clone()); + }, C.prototype.sqr = function (e) { + return this.mul(e, e); + }, C.prototype.sqrt = function (e) { + if (e.isZero()) return e.clone(); + var t = this.m.andln(3); + if (n(t % 2 == 1), 3 === t) { + var r = this.m.add(new s(1)).iushrn(2); + return this.pow(e, r); + } + for (var i = this.m.subn(1), o = 0; !i.isZero() && 0 === i.andln(1);) o++, i.iushrn(1); + n(!i.isZero()); + var a = new s(1).toRed(this), + l = a.redNeg(), + c = this.m.subn(1).iushrn(1), + u = this.m.bitLength(); + for (u = new s(2 * u * u).toRed(this); 0 !== this.pow(u, c).cmp(l);) u.redIAdd(l); + for (var h = this.pow(u, i), f = this.pow(e, i.addn(1).iushrn(1)), d = this.pow(e, i), p = o; 0 !== d.cmp(a);) { + for (var m = d, b = 0; 0 !== m.cmp(a); b++) m = m.redSqr(); + n(b < p); + var g = this.pow(h, new s(1).iushln(p - b - 1)); + f = f.redMul(g), h = g.redSqr(), d = d.redMul(h), p = b; + } + return f; + }, C.prototype.invm = function (e) { + var t = e._invmp(this.m); + return 0 !== t.negative ? (t.negative = 0, this.imod(t).redNeg()) : this.imod(t); + }, C.prototype.pow = function (e, t) { + if (t.isZero()) return new s(1).toRed(this); + if (0 === t.cmpn(1)) return e.clone(); + var r = new Array(16); + r[0] = new s(1).toRed(this), r[1] = e; + for (var n = 2; n < r.length; n++) r[n] = this.mul(r[n - 1], e); + var i = r[0], + o = 0, + a = 0, + l = t.bitLength() % 26; + for (0 === l && (l = 26), n = t.length - 1; n >= 0; n--) { + for (var c = t.words[n], u = l - 1; u >= 0; u--) { + var h = c >> u & 1; + i !== r[0] && (i = this.sqr(i)), 0 !== h || 0 !== o ? (o <<= 1, o |= h, (4 === ++a || 0 === n && 0 === u) && (i = this.mul(i, r[o]), a = 0, o = 0)) : a = 0; + } + l = 26; + } + return i; + }, C.prototype.convertTo = function (e) { + var t = e.umod(this.m); + return t === e ? t.clone() : t; + }, C.prototype.convertFrom = function (e) { + var t = e.clone(); + return t.red = null, t; + }, s.mont = function (e) { + return new T(e); + }, i(T, C), T.prototype.convertTo = function (e) { + return this.imod(e.ushln(this.shift)); + }, T.prototype.convertFrom = function (e) { + var t = this.imod(e.mul(this.rinv)); + return t.red = null, t; + }, T.prototype.imul = function (e, t) { + if (e.isZero() || t.isZero()) return e.words[0] = 0, e.length = 1, e; + var r = e.imul(t), + n = r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m), + i = r.isub(n).iushrn(this.shift), + s = i; + return i.cmp(this.m) >= 0 ? s = i.isub(this.m) : i.cmpn(0) < 0 && (s = i.iadd(this.m)), s._forceRed(this); + }, T.prototype.mul = function (e, t) { + if (e.isZero() || t.isZero()) return new s(0)._forceRed(this); + var r = e.mul(t), + n = r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m), + i = r.isub(n).iushrn(this.shift), + o = i; + return i.cmp(this.m) >= 0 ? o = i.isub(this.m) : i.cmpn(0) < 0 && (o = i.iadd(this.m)), o._forceRed(this); + }, T.prototype.invm = function (e) { + return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this); + }; + }(void 0 === t || t); + }, { + buffer: 188 + }], + 187: [function (e, t, r) { + "use strict"; + + var n; + function i(e) { + this.rand = e; + } + if (t.exports = function (e) { + return n || (n = new i(null)), n.generate(e); + }, t.exports.Rand = i, i.prototype.generate = function (e) { + return this._rand(e); + }, i.prototype._rand = function (e) { + if (this.rand.getBytes) return this.rand.getBytes(e); + for (var t = new Uint8Array(e), r = 0; r < t.length; r++) t[r] = this.rand.getByte(); + return t; + }, "object" == typeof self) self.crypto && self.crypto.getRandomValues ? i.prototype._rand = function (e) { + var t = new Uint8Array(e); + return self.crypto.getRandomValues(t), t; + } : self.msCrypto && self.msCrypto.getRandomValues ? i.prototype._rand = function (e) { + var t = new Uint8Array(e); + return self.msCrypto.getRandomValues(t), t; + } : "object" == typeof window && (i.prototype._rand = function () { + throw new Error("Not implemented yet"); + });else try { + var s = e("crypto"); + if ("function" != typeof s.randomBytes) throw new Error("Not supported"); + i.prototype._rand = function (e) { + return s.randomBytes(e); + }; + } catch (e) {} + }, { + crypto: 188 + }], + 188: [function (e, t, r) {}, {}], + 189: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer; + function i(e) { + n.isBuffer(e) || (e = n.from(e)); + for (var t = e.length / 4 | 0, r = new Array(t), i = 0; i < t; i++) r[i] = e.readUInt32BE(4 * i); + return r; + } + function s(e) { + for (; 0 < e.length; e++) e[0] = 0; + } + function o(e, t, r, n, i) { + for (var s, o, a, l, c = r[0], u = r[1], h = r[2], f = r[3], d = e[0] ^ t[0], p = e[1] ^ t[1], m = e[2] ^ t[2], b = e[3] ^ t[3], g = 4, y = 1; y < i; y++) s = c[d >>> 24] ^ u[p >>> 16 & 255] ^ h[m >>> 8 & 255] ^ f[255 & b] ^ t[g++], o = c[p >>> 24] ^ u[m >>> 16 & 255] ^ h[b >>> 8 & 255] ^ f[255 & d] ^ t[g++], a = c[m >>> 24] ^ u[b >>> 16 & 255] ^ h[d >>> 8 & 255] ^ f[255 & p] ^ t[g++], l = c[b >>> 24] ^ u[d >>> 16 & 255] ^ h[p >>> 8 & 255] ^ f[255 & m] ^ t[g++], d = s, p = o, m = a, b = l; + return s = (n[d >>> 24] << 24 | n[p >>> 16 & 255] << 16 | n[m >>> 8 & 255] << 8 | n[255 & b]) ^ t[g++], o = (n[p >>> 24] << 24 | n[m >>> 16 & 255] << 16 | n[b >>> 8 & 255] << 8 | n[255 & d]) ^ t[g++], a = (n[m >>> 24] << 24 | n[b >>> 16 & 255] << 16 | n[d >>> 8 & 255] << 8 | n[255 & p]) ^ t[g++], l = (n[b >>> 24] << 24 | n[d >>> 16 & 255] << 16 | n[p >>> 8 & 255] << 8 | n[255 & m]) ^ t[g++], [s >>>= 0, o >>>= 0, a >>>= 0, l >>>= 0]; + } + var a = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], + l = function () { + for (var e = new Array(256), t = 0; t < 256; t++) e[t] = t < 128 ? t << 1 : t << 1 ^ 283; + for (var r = [], n = [], i = [[], [], [], []], s = [[], [], [], []], o = 0, a = 0, l = 0; l < 256; ++l) { + var c = a ^ a << 1 ^ a << 2 ^ a << 3 ^ a << 4; + c = c >>> 8 ^ 255 & c ^ 99, r[o] = c, n[c] = o; + var u = e[o], + h = e[u], + f = e[h], + d = 257 * e[c] ^ 16843008 * c; + i[0][o] = d << 24 | d >>> 8, i[1][o] = d << 16 | d >>> 16, i[2][o] = d << 8 | d >>> 24, i[3][o] = d, d = 16843009 * f ^ 65537 * h ^ 257 * u ^ 16843008 * o, s[0][c] = d << 24 | d >>> 8, s[1][c] = d << 16 | d >>> 16, s[2][c] = d << 8 | d >>> 24, s[3][c] = d, 0 === o ? o = a = 1 : (o = u ^ e[e[e[f ^ u]]], a ^= e[e[a]]); + } + return { + SBOX: r, + INV_SBOX: n, + SUB_MIX: i, + INV_SUB_MIX: s + }; + }(); + function c(e) { + this._key = i(e), this._reset(); + } + c.blockSize = 16, c.keySize = 32, c.prototype.blockSize = c.blockSize, c.prototype.keySize = c.keySize, c.prototype._reset = function () { + for (var e = this._key, t = e.length, r = t + 6, n = 4 * (r + 1), i = [], s = 0; s < t; s++) i[s] = e[s]; + for (s = t; s < n; s++) { + var o = i[s - 1]; + s % t == 0 ? (o = o << 8 | o >>> 24, o = l.SBOX[o >>> 24] << 24 | l.SBOX[o >>> 16 & 255] << 16 | l.SBOX[o >>> 8 & 255] << 8 | l.SBOX[255 & o], o ^= a[s / t | 0] << 24) : t > 6 && s % t == 4 && (o = l.SBOX[o >>> 24] << 24 | l.SBOX[o >>> 16 & 255] << 16 | l.SBOX[o >>> 8 & 255] << 8 | l.SBOX[255 & o]), i[s] = i[s - t] ^ o; + } + for (var c = [], u = 0; u < n; u++) { + var h = n - u, + f = i[h - (u % 4 ? 0 : 4)]; + c[u] = u < 4 || h <= 4 ? f : l.INV_SUB_MIX[0][l.SBOX[f >>> 24]] ^ l.INV_SUB_MIX[1][l.SBOX[f >>> 16 & 255]] ^ l.INV_SUB_MIX[2][l.SBOX[f >>> 8 & 255]] ^ l.INV_SUB_MIX[3][l.SBOX[255 & f]]; + } + this._nRounds = r, this._keySchedule = i, this._invKeySchedule = c; + }, c.prototype.encryptBlockRaw = function (e) { + return o(e = i(e), this._keySchedule, l.SUB_MIX, l.SBOX, this._nRounds); + }, c.prototype.encryptBlock = function (e) { + var t = this.encryptBlockRaw(e), + r = n.allocUnsafe(16); + return r.writeUInt32BE(t[0], 0), r.writeUInt32BE(t[1], 4), r.writeUInt32BE(t[2], 8), r.writeUInt32BE(t[3], 12), r; + }, c.prototype.decryptBlock = function (e) { + var t = (e = i(e))[1]; + e[1] = e[3], e[3] = t; + var r = o(e, this._invKeySchedule, l.INV_SUB_MIX, l.INV_SBOX, this._nRounds), + s = n.allocUnsafe(16); + return s.writeUInt32BE(r[0], 0), s.writeUInt32BE(r[3], 4), s.writeUInt32BE(r[2], 8), s.writeUInt32BE(r[1], 12), s; + }, c.prototype.scrub = function () { + s(this._keySchedule), s(this._invKeySchedule), s(this._key); + }, t.exports.AES = c; + }, { + "safe-buffer": 494 + }], + 190: [function (e, t, r) { + "use strict"; + + var n = e("./aes"), + i = e("safe-buffer").Buffer, + s = e("cipher-base"), + o = e("inherits"), + a = e("./ghash"), + l = e("buffer-xor"), + c = e("./incr32"); + function u(e, t, r, o) { + s.call(this); + var l = i.alloc(4, 0); + this._cipher = new n.AES(t); + var u = this._cipher.encryptBlock(l); + this._ghash = new a(u), r = function (e, t, r) { + if (12 === t.length) return e._finID = i.concat([t, i.from([0, 0, 0, 1])]), i.concat([t, i.from([0, 0, 0, 2])]); + var n = new a(r), + s = t.length, + o = s % 16; + n.update(t), o && (o = 16 - o, n.update(i.alloc(o, 0))), n.update(i.alloc(8, 0)); + var l = 8 * s, + u = i.alloc(8); + u.writeUIntBE(l, 0, 8), n.update(u), e._finID = n.state; + var h = i.from(e._finID); + return c(h), h; + }(this, r, u), this._prev = i.from(r), this._cache = i.allocUnsafe(0), this._secCache = i.allocUnsafe(0), this._decrypt = o, this._alen = 0, this._len = 0, this._mode = e, this._authTag = null, this._called = !1; + } + o(u, s), u.prototype._update = function (e) { + if (!this._called && this._alen) { + var t = 16 - this._alen % 16; + t < 16 && (t = i.alloc(t, 0), this._ghash.update(t)); + } + this._called = !0; + var r = this._mode.encrypt(this, e); + return this._decrypt ? this._ghash.update(e) : this._ghash.update(r), this._len += e.length, r; + }, u.prototype._final = function () { + if (this._decrypt && !this._authTag) throw new Error("Unsupported state or unable to authenticate data"); + var e = l(this._ghash.final(8 * this._alen, 8 * this._len), this._cipher.encryptBlock(this._finID)); + if (this._decrypt && function (e, t) { + var r = 0; + e.length !== t.length && r++; + for (var n = Math.min(e.length, t.length), i = 0; i < n; ++i) r += e[i] ^ t[i]; + return r; + }(e, this._authTag)) throw new Error("Unsupported state or unable to authenticate data"); + this._authTag = e, this._cipher.scrub(); + }, u.prototype.getAuthTag = function () { + if (this._decrypt || !i.isBuffer(this._authTag)) throw new Error("Attempting to get auth tag in unsupported state"); + return this._authTag; + }, u.prototype.setAuthTag = function (e) { + if (!this._decrypt) throw new Error("Attempting to set auth tag in unsupported state"); + this._authTag = e; + }, u.prototype.setAAD = function (e) { + if (this._called) throw new Error("Attempting to set AAD in unsupported state"); + this._ghash.update(e), this._alen += e.length; + }, t.exports = u; + }, { + "./aes": 189, + "./ghash": 194, + "./incr32": 195, + "buffer-xor": 219, + "cipher-base": 221, + inherits: 440, + "safe-buffer": 494 + }], + 191: [function (e, t, r) { + "use strict"; + + var n = e("./encrypter"), + i = e("./decrypter"), + s = e("./modes/list.json"); + r.createCipher = r.Cipher = n.createCipher, r.createCipheriv = r.Cipheriv = n.createCipheriv, r.createDecipher = r.Decipher = i.createDecipher, r.createDecipheriv = r.Decipheriv = i.createDecipheriv, r.listCiphers = r.getCiphers = function () { + return Object.keys(s); + }; + }, { + "./decrypter": 192, + "./encrypter": 193, + "./modes/list.json": 203 + }], + 192: [function (e, t, r) { + "use strict"; + + var n = e("./authCipher"), + i = e("safe-buffer").Buffer, + s = e("./modes"), + o = e("./streamCipher"), + a = e("cipher-base"), + l = e("./aes"), + c = e("evp_bytestokey"); + function u(e, t, r) { + a.call(this), this._cache = new h(), this._last = void 0, this._cipher = new l.AES(t), this._prev = i.from(r), this._mode = e, this._autopadding = !0; + } + function h() { + this.cache = i.allocUnsafe(0); + } + function f(e, t, r) { + var a = s[e.toLowerCase()]; + if (!a) throw new TypeError("invalid suite type"); + if ("string" == typeof r && (r = i.from(r)), "GCM" !== a.mode && r.length !== a.iv) throw new TypeError("invalid iv length " + r.length); + if ("string" == typeof t && (t = i.from(t)), t.length !== a.key / 8) throw new TypeError("invalid key length " + t.length); + return "stream" === a.type ? new o(a.module, t, r, !0) : "auth" === a.type ? new n(a.module, t, r, !0) : new u(a.module, t, r); + } + e("inherits")(u, a), u.prototype._update = function (e) { + var t, r; + this._cache.add(e); + for (var n = []; t = this._cache.get(this._autopadding);) r = this._mode.decrypt(this, t), n.push(r); + return i.concat(n); + }, u.prototype._final = function () { + var e = this._cache.flush(); + if (this._autopadding) return function (e) { + var t = e[15]; + if (t < 1 || t > 16) throw new Error("unable to decrypt data"); + var r = -1; + for (; ++r < t;) if (e[r + (16 - t)] !== t) throw new Error("unable to decrypt data"); + if (16 === t) return; + return e.slice(0, 16 - t); + }(this._mode.decrypt(this, e)); + if (e) throw new Error("data not multiple of block length"); + }, u.prototype.setAutoPadding = function (e) { + return this._autopadding = !!e, this; + }, h.prototype.add = function (e) { + this.cache = i.concat([this.cache, e]); + }, h.prototype.get = function (e) { + var t; + if (e) { + if (this.cache.length > 16) return t = this.cache.slice(0, 16), this.cache = this.cache.slice(16), t; + } else if (this.cache.length >= 16) return t = this.cache.slice(0, 16), this.cache = this.cache.slice(16), t; + return null; + }, h.prototype.flush = function () { + if (this.cache.length) return this.cache; + }, r.createDecipher = function (e, t) { + var r = s[e.toLowerCase()]; + if (!r) throw new TypeError("invalid suite type"); + var n = c(t, !1, r.key, r.iv); + return f(e, n.key, n.iv); + }, r.createDecipheriv = f; + }, { + "./aes": 189, + "./authCipher": 190, + "./modes": 202, + "./streamCipher": 205, + "cipher-base": 221, + evp_bytestokey: 423, + inherits: 440, + "safe-buffer": 494 + }], + 193: [function (e, t, r) { + "use strict"; + + var n = e("./modes"), + i = e("./authCipher"), + s = e("safe-buffer").Buffer, + o = e("./streamCipher"), + a = e("cipher-base"), + l = e("./aes"), + c = e("evp_bytestokey"); + function u(e, t, r) { + a.call(this), this._cache = new f(), this._cipher = new l.AES(t), this._prev = s.from(r), this._mode = e, this._autopadding = !0; + } + e("inherits")(u, a), u.prototype._update = function (e) { + var t, r; + this._cache.add(e); + for (var n = []; t = this._cache.get();) r = this._mode.encrypt(this, t), n.push(r); + return s.concat(n); + }; + var h = s.alloc(16, 16); + function f() { + this.cache = s.allocUnsafe(0); + } + function d(e, t, r) { + var a = n[e.toLowerCase()]; + if (!a) throw new TypeError("invalid suite type"); + if ("string" == typeof t && (t = s.from(t)), t.length !== a.key / 8) throw new TypeError("invalid key length " + t.length); + if ("string" == typeof r && (r = s.from(r)), "GCM" !== a.mode && r.length !== a.iv) throw new TypeError("invalid iv length " + r.length); + return "stream" === a.type ? new o(a.module, t, r) : "auth" === a.type ? new i(a.module, t, r) : new u(a.module, t, r); + } + u.prototype._final = function () { + var e = this._cache.flush(); + if (this._autopadding) return e = this._mode.encrypt(this, e), this._cipher.scrub(), e; + if (!e.equals(h)) throw this._cipher.scrub(), new Error("data not multiple of block length"); + }, u.prototype.setAutoPadding = function (e) { + return this._autopadding = !!e, this; + }, f.prototype.add = function (e) { + this.cache = s.concat([this.cache, e]); + }, f.prototype.get = function () { + if (this.cache.length > 15) { + var e = this.cache.slice(0, 16); + return this.cache = this.cache.slice(16), e; + } + return null; + }, f.prototype.flush = function () { + for (var e = 16 - this.cache.length, t = s.allocUnsafe(e), r = -1; ++r < e;) t.writeUInt8(e, r); + return s.concat([this.cache, t]); + }, r.createCipheriv = d, r.createCipher = function (e, t) { + var r = n[e.toLowerCase()]; + if (!r) throw new TypeError("invalid suite type"); + var i = c(t, !1, r.key, r.iv); + return d(e, i.key, i.iv); + }; + }, { + "./aes": 189, + "./authCipher": 190, + "./modes": 202, + "./streamCipher": 205, + "cipher-base": 221, + evp_bytestokey: 423, + inherits: 440, + "safe-buffer": 494 + }], + 194: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = n.alloc(16, 0); + function s(e) { + var t = n.allocUnsafe(16); + return t.writeUInt32BE(e[0] >>> 0, 0), t.writeUInt32BE(e[1] >>> 0, 4), t.writeUInt32BE(e[2] >>> 0, 8), t.writeUInt32BE(e[3] >>> 0, 12), t; + } + function o(e) { + this.h = e, this.state = n.alloc(16, 0), this.cache = n.allocUnsafe(0); + } + o.prototype.ghash = function (e) { + for (var t = -1; ++t < e.length;) this.state[t] ^= e[t]; + this._multiply(); + }, o.prototype._multiply = function () { + for (var e, t, r, n = [(e = this.h).readUInt32BE(0), e.readUInt32BE(4), e.readUInt32BE(8), e.readUInt32BE(12)], i = [0, 0, 0, 0], o = -1; ++o < 128;) { + for (0 != (this.state[~~(o / 8)] & 1 << 7 - o % 8) && (i[0] ^= n[0], i[1] ^= n[1], i[2] ^= n[2], i[3] ^= n[3]), r = 0 != (1 & n[3]), t = 3; t > 0; t--) n[t] = n[t] >>> 1 | (1 & n[t - 1]) << 31; + n[0] = n[0] >>> 1, r && (n[0] = n[0] ^ 225 << 24); + } + this.state = s(i); + }, o.prototype.update = function (e) { + var t; + for (this.cache = n.concat([this.cache, e]); this.cache.length >= 16;) t = this.cache.slice(0, 16), this.cache = this.cache.slice(16), this.ghash(t); + }, o.prototype.final = function (e, t) { + return this.cache.length && this.ghash(n.concat([this.cache, i], 16)), this.ghash(s([0, e, 0, t])), this.state; + }, t.exports = o; + }, { + "safe-buffer": 494 + }], + 195: [function (e, t, r) { + "use strict"; + + t.exports = function (e) { + for (var t, r = e.length; r--;) { + if (255 !== (t = e.readUInt8(r))) { + t++, e.writeUInt8(t, r); + break; + } + e.writeUInt8(0, r); + } + }; + }, {}], + 196: [function (e, t, r) { + "use strict"; + + var n = e("buffer-xor"); + r.encrypt = function (e, t) { + var r = n(t, e._prev); + return e._prev = e._cipher.encryptBlock(r), e._prev; + }, r.decrypt = function (e, t) { + var r = e._prev; + e._prev = t; + var i = e._cipher.decryptBlock(t); + return n(i, r); + }; + }, { + "buffer-xor": 219 + }], + 197: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = e("buffer-xor"); + function s(e, t, r) { + var s = t.length, + o = i(t, e._cache); + return e._cache = e._cache.slice(s), e._prev = n.concat([e._prev, r ? t : o]), o; + } + r.encrypt = function (e, t, r) { + for (var i, o = n.allocUnsafe(0); t.length;) { + if (0 === e._cache.length && (e._cache = e._cipher.encryptBlock(e._prev), e._prev = n.allocUnsafe(0)), !(e._cache.length <= t.length)) { + o = n.concat([o, s(e, t, r)]); + break; + } + i = e._cache.length, o = n.concat([o, s(e, t.slice(0, i), r)]), t = t.slice(i); + } + return o; + }; + }, { + "buffer-xor": 219, + "safe-buffer": 494 + }], + 198: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer; + function i(e, t, r) { + for (var n, i, o = -1, a = 0; ++o < 8;) n = t & 1 << 7 - o ? 128 : 0, a += (128 & (i = e._cipher.encryptBlock(e._prev)[0] ^ n)) >> o % 8, e._prev = s(e._prev, r ? n : i); + return a; + } + function s(e, t) { + var r = e.length, + i = -1, + s = n.allocUnsafe(e.length); + for (e = n.concat([e, n.from([t])]); ++i < r;) s[i] = e[i] << 1 | e[i + 1] >> 7; + return s; + } + r.encrypt = function (e, t, r) { + for (var s = t.length, o = n.allocUnsafe(s), a = -1; ++a < s;) o[a] = i(e, t[a], r); + return o; + }; + }, { + "safe-buffer": 494 + }], + 199: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer; + function i(e, t, r) { + var i = e._cipher.encryptBlock(e._prev)[0] ^ t; + return e._prev = n.concat([e._prev.slice(1), n.from([r ? t : i])]), i; + } + r.encrypt = function (e, t, r) { + for (var s = t.length, o = n.allocUnsafe(s), a = -1; ++a < s;) o[a] = i(e, t[a], r); + return o; + }; + }, { + "safe-buffer": 494 + }], + 200: [function (e, t, r) { + "use strict"; + + var n = e("buffer-xor"), + i = e("safe-buffer").Buffer, + s = e("../incr32"); + function o(e) { + var t = e._cipher.encryptBlockRaw(e._prev); + return s(e._prev), t; + } + r.encrypt = function (e, t) { + var r = Math.ceil(t.length / 16), + s = e._cache.length; + e._cache = i.concat([e._cache, i.allocUnsafe(16 * r)]); + for (var a = 0; a < r; a++) { + var l = o(e), + c = s + 16 * a; + e._cache.writeUInt32BE(l[0], c + 0), e._cache.writeUInt32BE(l[1], c + 4), e._cache.writeUInt32BE(l[2], c + 8), e._cache.writeUInt32BE(l[3], c + 12); + } + var u = e._cache.slice(0, t.length); + return e._cache = e._cache.slice(t.length), n(t, u); + }; + }, { + "../incr32": 195, + "buffer-xor": 219, + "safe-buffer": 494 + }], + 201: [function (e, t, r) { + "use strict"; + + r.encrypt = function (e, t) { + return e._cipher.encryptBlock(t); + }, r.decrypt = function (e, t) { + return e._cipher.decryptBlock(t); + }; + }, {}], + 202: [function (e, t, r) { + "use strict"; + + var n = { + ECB: e("./ecb"), + CBC: e("./cbc"), + CFB: e("./cfb"), + CFB8: e("./cfb8"), + CFB1: e("./cfb1"), + OFB: e("./ofb"), + CTR: e("./ctr"), + GCM: e("./ctr") + }, + i = e("./list.json"); + for (var s in i) i[s].module = n[i[s].mode]; + t.exports = i; + }, { + "./cbc": 196, + "./cfb": 197, + "./cfb1": 198, + "./cfb8": 199, + "./ctr": 200, + "./ecb": 201, + "./list.json": 203, + "./ofb": 204 + }], + 203: [function (e, t, r) { + t.exports = { + "aes-128-ecb": { + cipher: "AES", + key: 128, + iv: 0, + mode: "ECB", + type: "block" + }, + "aes-192-ecb": { + cipher: "AES", + key: 192, + iv: 0, + mode: "ECB", + type: "block" + }, + "aes-256-ecb": { + cipher: "AES", + key: 256, + iv: 0, + mode: "ECB", + type: "block" + }, + "aes-128-cbc": { + cipher: "AES", + key: 128, + iv: 16, + mode: "CBC", + type: "block" + }, + "aes-192-cbc": { + cipher: "AES", + key: 192, + iv: 16, + mode: "CBC", + type: "block" + }, + "aes-256-cbc": { + cipher: "AES", + key: 256, + iv: 16, + mode: "CBC", + type: "block" + }, + aes128: { + cipher: "AES", + key: 128, + iv: 16, + mode: "CBC", + type: "block" + }, + aes192: { + cipher: "AES", + key: 192, + iv: 16, + mode: "CBC", + type: "block" + }, + aes256: { + cipher: "AES", + key: 256, + iv: 16, + mode: "CBC", + type: "block" + }, + "aes-128-cfb": { + cipher: "AES", + key: 128, + iv: 16, + mode: "CFB", + type: "stream" + }, + "aes-192-cfb": { + cipher: "AES", + key: 192, + iv: 16, + mode: "CFB", + type: "stream" + }, + "aes-256-cfb": { + cipher: "AES", + key: 256, + iv: 16, + mode: "CFB", + type: "stream" + }, + "aes-128-cfb8": { + cipher: "AES", + key: 128, + iv: 16, + mode: "CFB8", + type: "stream" + }, + "aes-192-cfb8": { + cipher: "AES", + key: 192, + iv: 16, + mode: "CFB8", + type: "stream" + }, + "aes-256-cfb8": { + cipher: "AES", + key: 256, + iv: 16, + mode: "CFB8", + type: "stream" + }, + "aes-128-cfb1": { + cipher: "AES", + key: 128, + iv: 16, + mode: "CFB1", + type: "stream" + }, + "aes-192-cfb1": { + cipher: "AES", + key: 192, + iv: 16, + mode: "CFB1", + type: "stream" + }, + "aes-256-cfb1": { + cipher: "AES", + key: 256, + iv: 16, + mode: "CFB1", + type: "stream" + }, + "aes-128-ofb": { + cipher: "AES", + key: 128, + iv: 16, + mode: "OFB", + type: "stream" + }, + "aes-192-ofb": { + cipher: "AES", + key: 192, + iv: 16, + mode: "OFB", + type: "stream" + }, + "aes-256-ofb": { + cipher: "AES", + key: 256, + iv: 16, + mode: "OFB", + type: "stream" + }, + "aes-128-ctr": { + cipher: "AES", + key: 128, + iv: 16, + mode: "CTR", + type: "stream" + }, + "aes-192-ctr": { + cipher: "AES", + key: 192, + iv: 16, + mode: "CTR", + type: "stream" + }, + "aes-256-ctr": { + cipher: "AES", + key: 256, + iv: 16, + mode: "CTR", + type: "stream" + }, + "aes-128-gcm": { + cipher: "AES", + key: 128, + iv: 12, + mode: "GCM", + type: "auth" + }, + "aes-192-gcm": { + cipher: "AES", + key: 192, + iv: 12, + mode: "GCM", + type: "auth" + }, + "aes-256-gcm": { + cipher: "AES", + key: 256, + iv: 12, + mode: "GCM", + type: "auth" + } + }; + }, {}], + 204: [function (e, t, r) { + (function (t) { + (function () { + "use strict"; + + var n = e("buffer-xor"); + function i(e) { + return e._prev = e._cipher.encryptBlock(e._prev), e._prev; + } + r.encrypt = function (e, r) { + for (; e._cache.length < r.length;) e._cache = t.concat([e._cache, i(e)]); + var s = e._cache.slice(0, r.length); + return e._cache = e._cache.slice(r.length), n(r, s); + }; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + buffer: 220, + "buffer-xor": 219 + }], + 205: [function (e, t, r) { + "use strict"; + + var n = e("./aes"), + i = e("safe-buffer").Buffer, + s = e("cipher-base"); + function o(e, t, r, o) { + s.call(this), this._cipher = new n.AES(t), this._prev = i.from(r), this._cache = i.allocUnsafe(0), this._secCache = i.allocUnsafe(0), this._decrypt = o, this._mode = e; + } + e("inherits")(o, s), o.prototype._update = function (e) { + return this._mode.encrypt(this, e, this._decrypt); + }, o.prototype._final = function () { + this._cipher.scrub(); + }, t.exports = o; + }, { + "./aes": 189, + "cipher-base": 221, + inherits: 440, + "safe-buffer": 494 + }], + 206: [function (e, t, r) { + "use strict"; + + var n = e("browserify-des"), + i = e("browserify-aes/browser"), + s = e("browserify-aes/modes"), + o = e("browserify-des/modes"), + a = e("evp_bytestokey"); + function l(e, t, r) { + if (e = e.toLowerCase(), s[e]) return i.createCipheriv(e, t, r); + if (o[e]) return new n({ + key: t, + iv: r, + mode: e + }); + throw new TypeError("invalid suite type"); + } + function c(e, t, r) { + if (e = e.toLowerCase(), s[e]) return i.createDecipheriv(e, t, r); + if (o[e]) return new n({ + key: t, + iv: r, + mode: e, + decrypt: !0 + }); + throw new TypeError("invalid suite type"); + } + r.createCipher = r.Cipher = function (e, t) { + var r, n; + if (e = e.toLowerCase(), s[e]) r = s[e].key, n = s[e].iv;else { + if (!o[e]) throw new TypeError("invalid suite type"); + r = 8 * o[e].key, n = o[e].iv; + } + var i = a(t, !1, r, n); + return l(e, i.key, i.iv); + }, r.createCipheriv = r.Cipheriv = l, r.createDecipher = r.Decipher = function (e, t) { + var r, n; + if (e = e.toLowerCase(), s[e]) r = s[e].key, n = s[e].iv;else { + if (!o[e]) throw new TypeError("invalid suite type"); + r = 8 * o[e].key, n = o[e].iv; + } + var i = a(t, !1, r, n); + return c(e, i.key, i.iv); + }, r.createDecipheriv = r.Decipheriv = c, r.listCiphers = r.getCiphers = function () { + return Object.keys(o).concat(i.getCiphers()); + }; + }, { + "browserify-aes/browser": 191, + "browserify-aes/modes": 202, + "browserify-des": 207, + "browserify-des/modes": 208, + evp_bytestokey: 423 + }], + 207: [function (e, t, r) { + "use strict"; + + var n = e("cipher-base"), + i = e("des.js"), + s = e("inherits"), + o = e("safe-buffer").Buffer, + a = { + "des-ede3-cbc": i.CBC.instantiate(i.EDE), + "des-ede3": i.EDE, + "des-ede-cbc": i.CBC.instantiate(i.EDE), + "des-ede": i.EDE, + "des-cbc": i.CBC.instantiate(i.DES), + "des-ecb": i.DES + }; + function l(e) { + n.call(this); + var t, + r = e.mode.toLowerCase(), + i = a[r]; + t = e.decrypt ? "decrypt" : "encrypt"; + var s = e.key; + o.isBuffer(s) || (s = o.from(s)), "des-ede" !== r && "des-ede-cbc" !== r || (s = o.concat([s, s.slice(0, 8)])); + var l = e.iv; + o.isBuffer(l) || (l = o.from(l)), this._des = i.create({ + key: s, + iv: l, + type: t + }); + } + a.des = a["des-cbc"], a.des3 = a["des-ede3-cbc"], t.exports = l, s(l, n), l.prototype._update = function (e) { + return o.from(this._des.update(e)); + }, l.prototype._final = function () { + return o.from(this._des.final()); + }; + }, { + "cipher-base": 221, + "des.js": 394, + inherits: 440, + "safe-buffer": 494 + }], + 208: [function (e, t, r) { + "use strict"; + + r["des-ecb"] = { + key: 8, + iv: 0 + }, r["des-cbc"] = r.des = { + key: 8, + iv: 8 + }, r["des-ede3-cbc"] = r.des3 = { + key: 24, + iv: 8 + }, r["des-ede3"] = { + key: 24, + iv: 0 + }, r["des-ede-cbc"] = { + key: 16, + iv: 8 + }, r["des-ede"] = { + key: 16, + iv: 0 + }; + }, {}], + 209: [function (e, t, r) { + (function (r) { + (function () { + "use strict"; + + var n = e("bn.js"), + i = e("randombytes"); + function s(e) { + var t, + r = e.modulus.byteLength(); + do { + t = new n(i(r)); + } while (t.cmp(e.modulus) >= 0 || !t.umod(e.prime1) || !t.umod(e.prime2)); + return t; + } + function o(e, t) { + var i = function (e) { + var t = s(e); + return { + blinder: t.toRed(n.mont(e.modulus)).redPow(new n(e.publicExponent)).fromRed(), + unblinder: t.invm(e.modulus) + }; + }(t), + o = t.modulus.byteLength(), + a = new n(e).mul(i.blinder).umod(t.modulus), + l = a.toRed(n.mont(t.prime1)), + c = a.toRed(n.mont(t.prime2)), + u = t.coefficient, + h = t.prime1, + f = t.prime2, + d = l.redPow(t.exponent1).fromRed(), + p = c.redPow(t.exponent2).fromRed(), + m = d.isub(p).imul(u).umod(h).imul(f); + return p.iadd(m).imul(i.unblinder).umod(t.modulus).toArrayLike(r, "be", o); + } + o.getr = s, t.exports = o; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + "bn.js": 186, + buffer: 220, + randombytes: 475 + }], + 210: [function (e, t, r) { + "use strict"; + + t.exports = e("./browser/algorithms.json"); + }, { + "./browser/algorithms.json": 211 + }], + 211: [function (e, t, r) { + t.exports = { + sha224WithRSAEncryption: { + sign: "rsa", + hash: "sha224", + id: "302d300d06096086480165030402040500041c" + }, + "RSA-SHA224": { + sign: "ecdsa/rsa", + hash: "sha224", + id: "302d300d06096086480165030402040500041c" + }, + sha256WithRSAEncryption: { + sign: "rsa", + hash: "sha256", + id: "3031300d060960864801650304020105000420" + }, + "RSA-SHA256": { + sign: "ecdsa/rsa", + hash: "sha256", + id: "3031300d060960864801650304020105000420" + }, + sha384WithRSAEncryption: { + sign: "rsa", + hash: "sha384", + id: "3041300d060960864801650304020205000430" + }, + "RSA-SHA384": { + sign: "ecdsa/rsa", + hash: "sha384", + id: "3041300d060960864801650304020205000430" + }, + sha512WithRSAEncryption: { + sign: "rsa", + hash: "sha512", + id: "3051300d060960864801650304020305000440" + }, + "RSA-SHA512": { + sign: "ecdsa/rsa", + hash: "sha512", + id: "3051300d060960864801650304020305000440" + }, + "RSA-SHA1": { + sign: "rsa", + hash: "sha1", + id: "3021300906052b0e03021a05000414" + }, + "ecdsa-with-SHA1": { + sign: "ecdsa", + hash: "sha1", + id: "" + }, + sha256: { + sign: "ecdsa", + hash: "sha256", + id: "" + }, + sha224: { + sign: "ecdsa", + hash: "sha224", + id: "" + }, + sha384: { + sign: "ecdsa", + hash: "sha384", + id: "" + }, + sha512: { + sign: "ecdsa", + hash: "sha512", + id: "" + }, + "DSA-SHA": { + sign: "dsa", + hash: "sha1", + id: "" + }, + "DSA-SHA1": { + sign: "dsa", + hash: "sha1", + id: "" + }, + DSA: { + sign: "dsa", + hash: "sha1", + id: "" + }, + "DSA-WITH-SHA224": { + sign: "dsa", + hash: "sha224", + id: "" + }, + "DSA-SHA224": { + sign: "dsa", + hash: "sha224", + id: "" + }, + "DSA-WITH-SHA256": { + sign: "dsa", + hash: "sha256", + id: "" + }, + "DSA-SHA256": { + sign: "dsa", + hash: "sha256", + id: "" + }, + "DSA-WITH-SHA384": { + sign: "dsa", + hash: "sha384", + id: "" + }, + "DSA-SHA384": { + sign: "dsa", + hash: "sha384", + id: "" + }, + "DSA-WITH-SHA512": { + sign: "dsa", + hash: "sha512", + id: "" + }, + "DSA-SHA512": { + sign: "dsa", + hash: "sha512", + id: "" + }, + "DSA-RIPEMD160": { + sign: "dsa", + hash: "rmd160", + id: "" + }, + ripemd160WithRSA: { + sign: "rsa", + hash: "rmd160", + id: "3021300906052b2403020105000414" + }, + "RSA-RIPEMD160": { + sign: "rsa", + hash: "rmd160", + id: "3021300906052b2403020105000414" + }, + md5WithRSAEncryption: { + sign: "rsa", + hash: "md5", + id: "3020300c06082a864886f70d020505000410" + }, + "RSA-MD5": { + sign: "rsa", + hash: "md5", + id: "3020300c06082a864886f70d020505000410" + } + }; + }, {}], + 212: [function (e, t, r) { + t.exports = { + "1.3.132.0.10": "secp256k1", + "1.3.132.0.33": "p224", + "1.2.840.10045.3.1.1": "p192", + "1.2.840.10045.3.1.7": "p256", + "1.3.132.0.34": "p384", + "1.3.132.0.35": "p521" + }; + }, {}], + 213: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = e("create-hash"), + s = e("readable-stream"), + o = e("inherits"), + a = e("./sign"), + l = e("./verify"), + c = e("./algorithms.json"); + function u(e) { + s.Writable.call(this); + var t = c[e]; + if (!t) throw new Error("Unknown message digest"); + this._hashType = t.hash, this._hash = i(t.hash), this._tag = t.id, this._signType = t.sign; + } + function h(e) { + s.Writable.call(this); + var t = c[e]; + if (!t) throw new Error("Unknown message digest"); + this._hash = i(t.hash), this._tag = t.id, this._signType = t.sign; + } + function f(e) { + return new u(e); + } + function d(e) { + return new h(e); + } + Object.keys(c).forEach(function (e) { + c[e].id = n.from(c[e].id, "hex"), c[e.toLowerCase()] = c[e]; + }), o(u, s.Writable), u.prototype._write = function (e, t, r) { + this._hash.update(e), r(); + }, u.prototype.update = function (e, t) { + return "string" == typeof e && (e = n.from(e, t)), this._hash.update(e), this; + }, u.prototype.sign = function (e, t) { + this.end(); + var r = this._hash.digest(), + n = a(r, e, this._hashType, this._signType, this._tag); + return t ? n.toString(t) : n; + }, o(h, s.Writable), h.prototype._write = function (e, t, r) { + this._hash.update(e), r(); + }, h.prototype.update = function (e, t) { + return "string" == typeof e && (e = n.from(e, t)), this._hash.update(e), this; + }, h.prototype.verify = function (e, t, r) { + "string" == typeof t && (t = n.from(t, r)), this.end(); + var i = this._hash.digest(); + return l(t, i, e, this._signType, this._tag); + }, t.exports = { + Sign: f, + Verify: d, + createSign: f, + createVerify: d + }; + }, { + "./algorithms.json": 211, + "./sign": 214, + "./verify": 215, + "create-hash": 386, + inherits: 440, + "readable-stream": 491, + "safe-buffer": 494 + }], + 214: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = e("create-hmac"), + s = e("browserify-rsa"), + o = e("elliptic").ec, + a = e("bn.js"), + l = e("parse-asn1"), + c = e("./curves.json"); + function u(e, t, r, s) { + if ((e = n.from(e.toArray())).length < t.byteLength()) { + var o = n.alloc(t.byteLength() - e.length); + e = n.concat([o, e]); + } + var a = r.length, + l = function (e, t) { + e = (e = h(e, t)).mod(t); + var r = n.from(e.toArray()); + if (r.length < t.byteLength()) { + var i = n.alloc(t.byteLength() - r.length); + r = n.concat([i, r]); + } + return r; + }(r, t), + c = n.alloc(a); + c.fill(1); + var u = n.alloc(a); + return u = i(s, u).update(c).update(n.from([0])).update(e).update(l).digest(), c = i(s, u).update(c).digest(), { + k: u = i(s, u).update(c).update(n.from([1])).update(e).update(l).digest(), + v: c = i(s, u).update(c).digest() + }; + } + function h(e, t) { + var r = new a(e), + n = (e.length << 3) - t.bitLength(); + return n > 0 && r.ishrn(n), r; + } + function f(e, t, r) { + var s, o; + do { + for (s = n.alloc(0); 8 * s.length < e.bitLength();) t.v = i(r, t.k).update(t.v).digest(), s = n.concat([s, t.v]); + o = h(s, e), t.k = i(r, t.k).update(t.v).update(n.from([0])).digest(), t.v = i(r, t.k).update(t.v).digest(); + } while (-1 !== o.cmp(e)); + return o; + } + function d(e, t, r, n) { + return e.toRed(a.mont(r)).redPow(t).fromRed().mod(n); + } + t.exports = function (e, t, r, i, p) { + var m = l(t); + if (m.curve) { + if ("ecdsa" !== i && "ecdsa/rsa" !== i) throw new Error("wrong private key type"); + return function (e, t) { + var r = c[t.curve.join(".")]; + if (!r) throw new Error("unknown curve " + t.curve.join(".")); + var i = new o(r).keyFromPrivate(t.privateKey).sign(e); + return n.from(i.toDER()); + }(e, m); + } + if ("dsa" === m.type) { + if ("dsa" !== i) throw new Error("wrong private key type"); + return function (e, t, r) { + var i, + s = t.params.priv_key, + o = t.params.p, + l = t.params.q, + c = t.params.g, + p = new a(0), + m = h(e, l).mod(l), + b = !1, + g = u(s, l, e, r); + for (; !1 === b;) i = f(l, g, r), p = d(c, i, o, l), 0 === (b = i.invm(l).imul(m.add(s.mul(p))).mod(l)).cmpn(0) && (b = !1, p = new a(0)); + return function (e, t) { + e = e.toArray(), t = t.toArray(), 128 & e[0] && (e = [0].concat(e)); + 128 & t[0] && (t = [0].concat(t)); + var r = [48, e.length + t.length + 4, 2, e.length]; + return r = r.concat(e, [2, t.length], t), n.from(r); + }(p, b); + }(e, m, r); + } + if ("rsa" !== i && "ecdsa/rsa" !== i) throw new Error("wrong private key type"); + e = n.concat([p, e]); + for (var b = m.modulus.byteLength(), g = [0, 1]; e.length + g.length + 1 < b;) g.push(255); + g.push(0); + for (var y = -1; ++y < e.length;) g.push(e[y]); + return s(g, m); + }, t.exports.getKey = u, t.exports.makeKey = f; + }, { + "./curves.json": 212, + "bn.js": 186, + "browserify-rsa": 209, + "create-hmac": 388, + elliptic: 405, + "parse-asn1": 459, + "safe-buffer": 494 + }], + 215: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = e("bn.js"), + s = e("elliptic").ec, + o = e("parse-asn1"), + a = e("./curves.json"); + function l(e, t) { + if (e.cmpn(0) <= 0) throw new Error("invalid sig"); + if (e.cmp(t) >= t) throw new Error("invalid sig"); + } + t.exports = function (e, t, r, c, u) { + var h = o(r); + if ("ec" === h.type) { + if ("ecdsa" !== c && "ecdsa/rsa" !== c) throw new Error("wrong public key type"); + return function (e, t, r) { + var n = a[r.data.algorithm.curve.join(".")]; + if (!n) throw new Error("unknown curve " + r.data.algorithm.curve.join(".")); + var i = new s(n), + o = r.data.subjectPrivateKey.data; + return i.verify(t, e, o); + }(e, t, h); + } + if ("dsa" === h.type) { + if ("dsa" !== c) throw new Error("wrong public key type"); + return function (e, t, r) { + var n = r.data.p, + s = r.data.q, + a = r.data.g, + c = r.data.pub_key, + u = o.signature.decode(e, "der"), + h = u.s, + f = u.r; + l(h, s), l(f, s); + var d = i.mont(n), + p = h.invm(s); + return 0 === a.toRed(d).redPow(new i(t).mul(p).mod(s)).fromRed().mul(c.toRed(d).redPow(f.mul(p).mod(s)).fromRed()).mod(n).mod(s).cmp(f); + }(e, t, h); + } + if ("rsa" !== c && "ecdsa/rsa" !== c) throw new Error("wrong public key type"); + t = n.concat([u, t]); + for (var f = h.modulus.byteLength(), d = [1], p = 0; t.length + d.length + 2 < f;) d.push(255), p++; + d.push(0); + for (var m = -1; ++m < t.length;) d.push(t[m]); + d = n.from(d); + var b = i.mont(h.modulus); + e = (e = new i(e).toRed(b)).redPow(new i(h.publicExponent)), e = n.from(e.fromRed().toArray()); + var g = p < 8 ? 1 : 0; + for (f = Math.min(e.length, d.length), e.length !== d.length && (g = 1), m = -1; ++m < f;) g |= e[m] ^ d[m]; + return 0 === g; + }; + }, { + "./curves.json": 212, + "bn.js": 186, + elliptic: 405, + "parse-asn1": 459, + "safe-buffer": 494 + }], + 216: [function (e, t, r) {}, {}], + 217: [function (e, t, r) { + "use strict"; + + var n = e("buffer"), + i = n.Buffer; + function s(e, t) { + for (var r in e) t[r] = e[r]; + } + function o(e, t, r) { + return i(e, t, r); + } + i.from && i.alloc && i.allocUnsafe && i.allocUnsafeSlow ? t.exports = n : (s(n, r), r.Buffer = o), s(i, o), o.from = function (e, t, r) { + if ("number" == typeof e) throw new TypeError("Argument must not be a number"); + return i(e, t, r); + }, o.alloc = function (e, t, r) { + if ("number" != typeof e) throw new TypeError("Argument must be a number"); + var n = i(e); + return void 0 !== t ? "string" == typeof r ? n.fill(t, r) : n.fill(t) : n.fill(0), n; + }, o.allocUnsafe = function (e) { + if ("number" != typeof e) throw new TypeError("Argument must be a number"); + return i(e); + }, o.allocUnsafeSlow = function (e) { + if ("number" != typeof e) throw new TypeError("Argument must be a number"); + return n.SlowBuffer(e); + }; + }, { + buffer: 220 + }], + 218: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = n.isEncoding || function (e) { + switch ((e = "" + e) && e.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 !0; + default: + return !1; + } + }; + function s(e) { + var t; + switch (this.encoding = function (e) { + var t = function (e) { + if (!e) return "utf8"; + for (var t;;) switch (e) { + 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 e; + default: + if (t) return; + e = ("" + e).toLowerCase(), t = !0; + } + }(e); + if ("string" != typeof t && (n.isEncoding === i || !i(e))) throw new Error("Unknown encoding: " + e); + return t || e; + }(e), this.encoding) { + case "utf16le": + this.text = l, this.end = c, t = 4; + break; + case "utf8": + this.fillLast = a, t = 4; + break; + case "base64": + this.text = u, this.end = h, t = 3; + break; + default: + return this.write = f, void (this.end = d); + } + this.lastNeed = 0, this.lastTotal = 0, this.lastChar = n.allocUnsafe(t); + } + function o(e) { + return e <= 127 ? 0 : e >> 5 == 6 ? 2 : e >> 4 == 14 ? 3 : e >> 3 == 30 ? 4 : e >> 6 == 2 ? -1 : -2; + } + function a(e) { + var t = this.lastTotal - this.lastNeed, + r = function (e, t, r) { + if (128 != (192 & t[0])) return e.lastNeed = 0, "\ufffd"; + if (e.lastNeed > 1 && t.length > 1) { + if (128 != (192 & t[1])) return e.lastNeed = 1, "\ufffd"; + if (e.lastNeed > 2 && t.length > 2 && 128 != (192 & t[2])) return e.lastNeed = 2, "\ufffd"; + } + }(this, e); + return void 0 !== r ? r : this.lastNeed <= e.length ? (e.copy(this.lastChar, t, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal)) : (e.copy(this.lastChar, t, 0, e.length), void (this.lastNeed -= e.length)); + } + function l(e, t) { + if ((e.length - t) % 2 == 0) { + var r = e.toString("utf16le", t); + if (r) { + var n = r.charCodeAt(r.length - 1); + if (n >= 55296 && n <= 56319) return this.lastNeed = 2, this.lastTotal = 4, this.lastChar[0] = e[e.length - 2], this.lastChar[1] = e[e.length - 1], r.slice(0, -1); + } + return r; + } + return this.lastNeed = 1, this.lastTotal = 2, this.lastChar[0] = e[e.length - 1], e.toString("utf16le", t, e.length - 1); + } + function c(e) { + var t = e && e.length ? this.write(e) : ""; + if (this.lastNeed) { + var r = this.lastTotal - this.lastNeed; + return t + this.lastChar.toString("utf16le", 0, r); + } + return t; + } + function u(e, t) { + var r = (e.length - t) % 3; + return 0 === r ? e.toString("base64", t) : (this.lastNeed = 3 - r, this.lastTotal = 3, 1 === r ? this.lastChar[0] = e[e.length - 1] : (this.lastChar[0] = e[e.length - 2], this.lastChar[1] = e[e.length - 1]), e.toString("base64", t, e.length - r)); + } + function h(e) { + var t = e && e.length ? this.write(e) : ""; + return this.lastNeed ? t + this.lastChar.toString("base64", 0, 3 - this.lastNeed) : t; + } + function f(e) { + return e.toString(this.encoding); + } + function d(e) { + return e && e.length ? this.write(e) : ""; + } + r.StringDecoder = s, s.prototype.write = function (e) { + if (0 === e.length) return ""; + var t, r; + if (this.lastNeed) { + if (void 0 === (t = this.fillLast(e))) return ""; + r = this.lastNeed, this.lastNeed = 0; + } else r = 0; + return r < e.length ? t ? t + this.text(e, r) : this.text(e, r) : t || ""; + }, s.prototype.end = function (e) { + var t = e && e.length ? this.write(e) : ""; + return this.lastNeed ? t + "\ufffd" : t; + }, s.prototype.text = function (e, t) { + var r = function (e, t, r) { + var n = t.length - 1; + if (n < r) return 0; + var i = o(t[n]); + if (i >= 0) return i > 0 && (e.lastNeed = i - 1), i; + if (--n < r || -2 === i) return 0; + if ((i = o(t[n])) >= 0) return i > 0 && (e.lastNeed = i - 2), i; + if (--n < r || -2 === i) return 0; + if ((i = o(t[n])) >= 0) return i > 0 && (2 === i ? i = 0 : e.lastNeed = i - 3), i; + return 0; + }(this, e, t); + if (!this.lastNeed) return e.toString("utf8", t); + this.lastTotal = r; + var n = e.length - (r - this.lastNeed); + return e.copy(this.lastChar, 0, n), e.toString("utf8", t, n); + }, s.prototype.fillLast = function (e) { + if (this.lastNeed <= e.length) return e.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed), this.lastChar.toString(this.encoding, 0, this.lastTotal); + e.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, e.length), this.lastNeed -= e.length; + }; + }, { + "safe-buffer": 217 + }], + 219: [function (e, t, r) { + (function (e) { + (function () { + "use strict"; + + t.exports = function (t, r) { + for (var n = Math.min(t.length, r.length), i = new e(n), s = 0; s < n; ++s) i[s] = t[s] ^ r[s]; + return i; + }; + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + buffer: 220 + }], + 220: [function (e, t, r) { + (function (t) { + (function () { + /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + "use strict"; + + var t = e("base64-js"), + n = e("ieee754"); + r.Buffer = s, r.SlowBuffer = function (e) { + +e != e && (e = 0); + return s.alloc(+e); + }, r.INSPECT_MAX_BYTES = 50; + function i(e) { + if (e > 2147483647) throw new RangeError('The value "' + e + '" is invalid for option "size"'); + var t = new Uint8Array(e); + return t.__proto__ = s.prototype, t; + } + function s(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 l(e); + } + return o(e, t, r); + } + function o(e, t, r) { + if ("string" == typeof e) return function (e, t) { + "string" == typeof t && "" !== t || (t = "utf8"); + if (!s.isEncoding(t)) throw new TypeError("Unknown encoding: " + t); + var r = 0 | h(e, t), + n = i(r), + o = n.write(e, t); + o !== r && (n = n.slice(0, o)); + return n; + }(e, t); + if (ArrayBuffer.isView(e)) return c(e); + if (null == e) throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e); + if (F(e, ArrayBuffer) || e && F(e.buffer, ArrayBuffer)) return function (e, t, r) { + if (t < 0 || e.byteLength < t) throw new RangeError('"offset" is outside of buffer bounds'); + if (e.byteLength < t + (r || 0)) throw new RangeError('"length" is outside of buffer bounds'); + var n; + n = void 0 === t && void 0 === r ? new Uint8Array(e) : void 0 === r ? new Uint8Array(e, t) : new Uint8Array(e, t, r); + return n.__proto__ = s.prototype, n; + }(e, t, r); + if ("number" == typeof e) throw new TypeError('The "value" argument must not be of type number. Received type number'); + var n = e.valueOf && e.valueOf(); + if (null != n && n !== e) return s.from(n, t, r); + var o = function (e) { + if (s.isBuffer(e)) { + var t = 0 | u(e.length), + r = i(t); + return 0 === r.length || e.copy(r, 0, 0, t), r; + } + if (void 0 !== e.length) return "number" != typeof e.length || L(e.length) ? i(0) : c(e); + if ("Buffer" === e.type && Array.isArray(e.data)) return c(e.data); + }(e); + if (o) return o; + if ("undefined" != typeof Symbol && null != Symbol.toPrimitive && "function" == typeof e[Symbol.toPrimitive]) return s.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 a(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 l(e) { + return a(e), i(e < 0 ? 0 : 0 | u(e)); + } + function c(e) { + for (var t = e.length < 0 ? 0 : 0 | u(e.length), r = i(t), n = 0; n < t; n += 1) r[n] = 255 & e[n]; + return r; + } + function u(e) { + if (e >= 2147483647) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + 2147483647..toString(16) + " bytes"); + return 0 | e; + } + function h(e, t) { + if (s.isBuffer(e)) return e.length; + if (ArrayBuffer.isView(e) || F(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); + var r = e.length, + n = arguments.length > 2 && !0 === arguments[2]; + if (!n && 0 === r) return 0; + for (var i = !1;;) switch (t) { + case "ascii": + case "latin1": + case "binary": + return r; + case "utf8": + case "utf-8": + return P(e).length; + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return 2 * r; + case "hex": + return r >>> 1; + case "base64": + return B(e).length; + default: + if (i) return n ? -1 : P(e).length; + t = ("" + t).toLowerCase(), i = !0; + } + } + function f(e, t, r) { + var 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 C(this, t, r); + case "utf8": + case "utf-8": + return k(this, t, r); + case "ascii": + return S(this, t, r); + case "latin1": + case "binary": + return M(this, t, r); + case "base64": + return x(this, t, r); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return T(this, t, r); + default: + if (n) throw new TypeError("Unknown encoding: " + e); + e = (e + "").toLowerCase(), n = !0; + } + } + function d(e, t, r) { + var n = e[t]; + e[t] = e[r], e[r] = n; + } + function p(e, t, r, n, i) { + if (0 === e.length) return -1; + if ("string" == typeof r ? (n = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), L(r = +r) && (r = i ? 0 : e.length - 1), r < 0 && (r = e.length + r), r >= e.length) { + if (i) return -1; + r = e.length - 1; + } else if (r < 0) { + if (!i) return -1; + r = 0; + } + if ("string" == typeof t && (t = s.from(t, n)), s.isBuffer(t)) return 0 === t.length ? -1 : m(e, t, r, n, i); + if ("number" == typeof t) return t &= 255, "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(e, t, r) : Uint8Array.prototype.lastIndexOf.call(e, t, r) : m(e, [t], r, n, i); + throw new TypeError("val must be string, number or Buffer"); + } + function m(e, t, r, n, i) { + var s, + o = 1, + a = e.length, + l = 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; + o = 2, a /= 2, l /= 2, r /= 2; + } + function c(e, t) { + return 1 === o ? e[t] : e.readUInt16BE(t * o); + } + if (i) { + var u = -1; + for (s = r; s < a; s++) if (c(e, s) === c(t, -1 === u ? 0 : s - u)) { + if (-1 === u && (u = s), s - u + 1 === l) return u * o; + } else -1 !== u && (s -= s - u), u = -1; + } else for (r + l > a && (r = a - l), s = r; s >= 0; s--) { + for (var h = !0, f = 0; f < l; f++) if (c(e, s + f) !== c(t, f)) { + h = !1; + break; + } + if (h) return s; + } + return -1; + } + function b(e, t, r, n) { + r = Number(r) || 0; + var i = e.length - r; + n ? (n = Number(n)) > i && (n = i) : n = i; + var s = t.length; + n > s / 2 && (n = s / 2); + for (var o = 0; o < n; ++o) { + var a = parseInt(t.substr(2 * o, 2), 16); + if (L(a)) return o; + e[r + o] = a; + } + return o; + } + function g(e, t, r, n) { + return D(P(t, e.length - r), e, r, n); + } + function y(e, t, r, n) { + return D(function (e) { + for (var t = [], r = 0; r < e.length; ++r) t.push(255 & e.charCodeAt(r)); + return t; + }(t), e, r, n); + } + function v(e, t, r, n) { + return y(e, t, r, n); + } + function w(e, t, r, n) { + return D(B(t), e, r, n); + } + function _(e, t, r, n) { + return D(function (e, t) { + for (var r, n, i, s = [], o = 0; o < e.length && !((t -= 2) < 0); ++o) r = e.charCodeAt(o), n = r >> 8, i = r % 256, s.push(i), s.push(n); + return s; + }(t, e.length - r), e, r, n); + } + function x(e, r, n) { + return 0 === r && n === e.length ? t.fromByteArray(e) : t.fromByteArray(e.slice(r, n)); + } + function k(e, t, r) { + r = Math.min(e.length, r); + for (var n = [], i = t; i < r;) { + var s, + o, + a, + l, + c = e[i], + u = null, + h = c > 239 ? 4 : c > 223 ? 3 : c > 191 ? 2 : 1; + if (i + h <= r) switch (h) { + case 1: + c < 128 && (u = c); + break; + case 2: + 128 == (192 & (s = e[i + 1])) && (l = (31 & c) << 6 | 63 & s) > 127 && (u = l); + break; + case 3: + s = e[i + 1], o = e[i + 2], 128 == (192 & s) && 128 == (192 & o) && (l = (15 & c) << 12 | (63 & s) << 6 | 63 & o) > 2047 && (l < 55296 || l > 57343) && (u = l); + break; + case 4: + s = e[i + 1], o = e[i + 2], a = e[i + 3], 128 == (192 & s) && 128 == (192 & o) && 128 == (192 & a) && (l = (15 & c) << 18 | (63 & s) << 12 | (63 & o) << 6 | 63 & a) > 65535 && l < 1114112 && (u = l); + } + null === u ? (u = 65533, h = 1) : u > 65535 && (u -= 65536, n.push(u >>> 10 & 1023 | 55296), u = 56320 | 1023 & u), n.push(u), i += h; + } + return function (e) { + var t = e.length; + if (t <= 4096) return String.fromCharCode.apply(String, e); + var r = "", + n = 0; + for (; n < t;) r += String.fromCharCode.apply(String, e.slice(n, n += 4096)); + return r; + }(n); + } + r.kMaxLength = 2147483647, s.TYPED_ARRAY_SUPPORT = function () { + try { + var e = new Uint8Array(1); + return e.__proto__ = { + __proto__: Uint8Array.prototype, + foo: function () { + return 42; + } + }, 42 === e.foo(); + } catch (e) { + return !1; + } + }(), s.TYPED_ARRAY_SUPPORT || "undefined" == typeof console || "function" != typeof console.error || 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."), Object.defineProperty(s.prototype, "parent", { + enumerable: !0, + get: function () { + if (s.isBuffer(this)) return this.buffer; + } + }), Object.defineProperty(s.prototype, "offset", { + enumerable: !0, + get: function () { + if (s.isBuffer(this)) return this.byteOffset; + } + }), "undefined" != typeof Symbol && null != Symbol.species && s[Symbol.species] === s && Object.defineProperty(s, Symbol.species, { + value: null, + configurable: !0, + enumerable: !1, + writable: !1 + }), s.poolSize = 8192, s.from = function (e, t, r) { + return o(e, t, r); + }, s.prototype.__proto__ = Uint8Array.prototype, s.__proto__ = Uint8Array, s.alloc = function (e, t, r) { + return function (e, t, r) { + return a(e), e <= 0 ? i(e) : void 0 !== t ? "string" == typeof r ? i(e).fill(t, r) : i(e).fill(t) : i(e); + }(e, t, r); + }, s.allocUnsafe = function (e) { + return l(e); + }, s.allocUnsafeSlow = function (e) { + return l(e); + }, s.isBuffer = function (e) { + return null != e && !0 === e._isBuffer && e !== s.prototype; + }, s.compare = function (e, t) { + if (F(e, Uint8Array) && (e = s.from(e, e.offset, e.byteLength)), F(t, Uint8Array) && (t = s.from(t, t.offset, t.byteLength)), !s.isBuffer(e) || !s.isBuffer(t)) throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'); + if (e === t) return 0; + for (var r = e.length, n = t.length, i = 0, o = Math.min(r, n); i < o; ++i) if (e[i] !== t[i]) { + r = e[i], n = t[i]; + break; + } + return r < n ? -1 : n < r ? 1 : 0; + }, s.isEncoding = function (e) { + switch (String(e).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 !0; + default: + return !1; + } + }, s.concat = function (e, t) { + if (!Array.isArray(e)) throw new TypeError('"list" argument must be an Array of Buffers'); + if (0 === e.length) return s.alloc(0); + var r; + if (void 0 === t) for (t = 0, r = 0; r < e.length; ++r) t += e[r].length; + var n = s.allocUnsafe(t), + i = 0; + for (r = 0; r < e.length; ++r) { + var o = e[r]; + if (F(o, Uint8Array) && (o = s.from(o)), !s.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers'); + o.copy(n, i), i += o.length; + } + return n; + }, s.byteLength = h, s.prototype._isBuffer = !0, s.prototype.swap16 = function () { + var e = this.length; + if (e % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); + for (var t = 0; t < e; t += 2) d(this, t, t + 1); + return this; + }, s.prototype.swap32 = function () { + var e = this.length; + if (e % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); + for (var t = 0; t < e; t += 4) d(this, t, t + 3), d(this, t + 1, t + 2); + return this; + }, s.prototype.swap64 = function () { + var e = this.length; + if (e % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); + for (var t = 0; t < e; t += 8) d(this, t, t + 7), d(this, t + 1, t + 6), d(this, t + 2, t + 5), d(this, t + 3, t + 4); + return this; + }, s.prototype.toString = function () { + var e = this.length; + return 0 === e ? "" : 0 === arguments.length ? k(this, 0, e) : f.apply(this, arguments); + }, s.prototype.toLocaleString = s.prototype.toString, s.prototype.equals = function (e) { + if (!s.isBuffer(e)) throw new TypeError("Argument must be a Buffer"); + return this === e || 0 === s.compare(this, e); + }, s.prototype.inspect = function () { + var e = "", + t = r.INSPECT_MAX_BYTES; + return e = this.toString("hex", 0, t).replace(/(.{2})/g, "$1 ").trim(), this.length > t && (e += " ... "), ""; + }, s.prototype.compare = function (e, t, r, n, i) { + if (F(e, Uint8Array) && (e = s.from(e, e.offset, e.byteLength)), !s.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 === i && (i = this.length), t < 0 || r > e.length || n < 0 || i > this.length) throw new RangeError("out of range index"); + if (n >= i && t >= r) return 0; + if (n >= i) return -1; + if (t >= r) return 1; + if (this === e) return 0; + for (var o = (i >>>= 0) - (n >>>= 0), a = (r >>>= 0) - (t >>>= 0), l = Math.min(o, a), c = this.slice(n, i), u = e.slice(t, r), h = 0; h < l; ++h) if (c[h] !== u[h]) { + o = c[h], a = u[h]; + break; + } + return o < a ? -1 : a < o ? 1 : 0; + }, s.prototype.includes = function (e, t, r) { + return -1 !== this.indexOf(e, t, r); + }, s.prototype.indexOf = function (e, t, r) { + return p(this, e, t, r, !0); + }, s.prototype.lastIndexOf = function (e, t, r) { + return p(this, e, t, r, !1); + }, s.prototype.write = function (e, t, r, n) { + if (void 0 === t) n = "utf8", r = this.length, t = 0;else if (void 0 === r && "string" == typeof t) n = t, r = this.length, t = 0;else { + if (!isFinite(t)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); + t >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === n && (n = "utf8")) : (n = r, r = void 0); + } + var i = this.length - t; + if ((void 0 === r || r > i) && (r = i), e.length > 0 && (r < 0 || t < 0) || t > this.length) throw new RangeError("Attempt to write outside buffer bounds"); + n || (n = "utf8"); + for (var s = !1;;) switch (n) { + case "hex": + return b(this, e, t, r); + case "utf8": + case "utf-8": + return g(this, e, t, r); + case "ascii": + return y(this, e, t, r); + case "latin1": + case "binary": + return v(this, e, t, r); + case "base64": + return w(this, e, t, r); + case "ucs2": + case "ucs-2": + case "utf16le": + case "utf-16le": + return _(this, e, t, r); + default: + if (s) throw new TypeError("Unknown encoding: " + n); + n = ("" + n).toLowerCase(), s = !0; + } + }, s.prototype.toJSON = function () { + return { + type: "Buffer", + data: Array.prototype.slice.call(this._arr || this, 0) + }; + }; + function S(e, t, r) { + var n = ""; + r = Math.min(e.length, r); + for (var i = t; i < r; ++i) n += String.fromCharCode(127 & e[i]); + return n; + } + function M(e, t, r) { + var n = ""; + r = Math.min(e.length, r); + for (var i = t; i < r; ++i) n += String.fromCharCode(e[i]); + return n; + } + function C(e, t, r) { + var n = e.length; + (!t || t < 0) && (t = 0), (!r || r < 0 || r > n) && (r = n); + for (var i = "", s = t; s < r; ++s) i += N(e[s]); + return i; + } + function T(e, t, r) { + for (var n = e.slice(t, r), i = "", s = 0; s < n.length; s += 2) i += String.fromCharCode(n[s] + 256 * n[s + 1]); + return i; + } + function E(e, t, r) { + if (e % 1 != 0 || e < 0) throw new RangeError("offset is not uint"); + if (e + t > r) throw new RangeError("Trying to access beyond buffer length"); + } + function A(e, t, r, n, i, o) { + if (!s.isBuffer(e)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (t > i || t < o) throw new RangeError('"value" argument is out of bounds'); + if (r + n > e.length) throw new RangeError("Index out of range"); + } + function R(e, t, r, n, i, s) { + if (r + n > e.length) throw new RangeError("Index out of range"); + if (r < 0) throw new RangeError("Index out of range"); + } + function O(e, t, r, i, s) { + return t = +t, r >>>= 0, s || R(e, 0, r, 4), n.write(e, t, r, i, 23, 4), r + 4; + } + function j(e, t, r, i, s) { + return t = +t, r >>>= 0, s || R(e, 0, r, 8), n.write(e, t, r, i, 52, 8), r + 8; + } + s.prototype.slice = function (e, t) { + var 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 < e && (t = e); + var n = this.subarray(e, t); + return n.__proto__ = s.prototype, n; + }, s.prototype.readUIntLE = function (e, t, r) { + e >>>= 0, t >>>= 0, r || E(e, t, this.length); + for (var n = this[e], i = 1, s = 0; ++s < t && (i *= 256);) n += this[e + s] * i; + return n; + }, s.prototype.readUIntBE = function (e, t, r) { + e >>>= 0, t >>>= 0, r || E(e, t, this.length); + for (var n = this[e + --t], i = 1; t > 0 && (i *= 256);) n += this[e + --t] * i; + return n; + }, s.prototype.readUInt8 = function (e, t) { + return e >>>= 0, t || E(e, 1, this.length), this[e]; + }, s.prototype.readUInt16LE = function (e, t) { + return e >>>= 0, t || E(e, 2, this.length), this[e] | this[e + 1] << 8; + }, s.prototype.readUInt16BE = function (e, t) { + return e >>>= 0, t || E(e, 2, this.length), this[e] << 8 | this[e + 1]; + }, s.prototype.readUInt32LE = function (e, t) { + return e >>>= 0, t || E(e, 4, this.length), (this[e] | this[e + 1] << 8 | this[e + 2] << 16) + 16777216 * this[e + 3]; + }, s.prototype.readUInt32BE = function (e, t) { + return e >>>= 0, t || E(e, 4, this.length), 16777216 * this[e] + (this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3]); + }, s.prototype.readIntLE = function (e, t, r) { + e >>>= 0, t >>>= 0, r || E(e, t, this.length); + for (var n = this[e], i = 1, s = 0; ++s < t && (i *= 256);) n += this[e + s] * i; + return n >= (i *= 128) && (n -= Math.pow(2, 8 * t)), n; + }, s.prototype.readIntBE = function (e, t, r) { + e >>>= 0, t >>>= 0, r || E(e, t, this.length); + for (var n = t, i = 1, s = this[e + --n]; n > 0 && (i *= 256);) s += this[e + --n] * i; + return s >= (i *= 128) && (s -= Math.pow(2, 8 * t)), s; + }, s.prototype.readInt8 = function (e, t) { + return e >>>= 0, t || E(e, 1, this.length), 128 & this[e] ? -1 * (255 - this[e] + 1) : this[e]; + }, s.prototype.readInt16LE = function (e, t) { + e >>>= 0, t || E(e, 2, this.length); + var r = this[e] | this[e + 1] << 8; + return 32768 & r ? 4294901760 | r : r; + }, s.prototype.readInt16BE = function (e, t) { + e >>>= 0, t || E(e, 2, this.length); + var r = this[e + 1] | this[e] << 8; + return 32768 & r ? 4294901760 | r : r; + }, s.prototype.readInt32LE = function (e, t) { + return e >>>= 0, t || E(e, 4, this.length), this[e] | this[e + 1] << 8 | this[e + 2] << 16 | this[e + 3] << 24; + }, s.prototype.readInt32BE = function (e, t) { + return e >>>= 0, t || E(e, 4, this.length), this[e] << 24 | this[e + 1] << 16 | this[e + 2] << 8 | this[e + 3]; + }, s.prototype.readFloatLE = function (e, t) { + return e >>>= 0, t || E(e, 4, this.length), n.read(this, e, !0, 23, 4); + }, s.prototype.readFloatBE = function (e, t) { + return e >>>= 0, t || E(e, 4, this.length), n.read(this, e, !1, 23, 4); + }, s.prototype.readDoubleLE = function (e, t) { + return e >>>= 0, t || E(e, 8, this.length), n.read(this, e, !0, 52, 8); + }, s.prototype.readDoubleBE = function (e, t) { + return e >>>= 0, t || E(e, 8, this.length), n.read(this, e, !1, 52, 8); + }, s.prototype.writeUIntLE = function (e, t, r, n) { + (e = +e, t >>>= 0, r >>>= 0, n) || A(this, e, t, r, Math.pow(2, 8 * r) - 1, 0); + var i = 1, + s = 0; + for (this[t] = 255 & e; ++s < r && (i *= 256);) this[t + s] = e / i & 255; + return t + r; + }, s.prototype.writeUIntBE = function (e, t, r, n) { + (e = +e, t >>>= 0, r >>>= 0, n) || A(this, e, t, r, Math.pow(2, 8 * r) - 1, 0); + var i = r - 1, + s = 1; + for (this[t + i] = 255 & e; --i >= 0 && (s *= 256);) this[t + i] = e / s & 255; + return t + r; + }, s.prototype.writeUInt8 = function (e, t, r) { + return e = +e, t >>>= 0, r || A(this, e, t, 1, 255, 0), this[t] = 255 & e, t + 1; + }, s.prototype.writeUInt16LE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(this, e, t, 2, 65535, 0), this[t] = 255 & e, this[t + 1] = e >>> 8, t + 2; + }, s.prototype.writeUInt16BE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(this, e, t, 2, 65535, 0), this[t] = e >>> 8, this[t + 1] = 255 & e, t + 2; + }, s.prototype.writeUInt32LE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(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; + }, s.prototype.writeUInt32BE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(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; + }, s.prototype.writeIntLE = function (e, t, r, n) { + if (e = +e, t >>>= 0, !n) { + var i = Math.pow(2, 8 * r - 1); + A(this, e, t, r, i - 1, -i); + } + var s = 0, + o = 1, + a = 0; + for (this[t] = 255 & e; ++s < r && (o *= 256);) e < 0 && 0 === a && 0 !== this[t + s - 1] && (a = 1), this[t + s] = (e / o >> 0) - a & 255; + return t + r; + }, s.prototype.writeIntBE = function (e, t, r, n) { + if (e = +e, t >>>= 0, !n) { + var i = Math.pow(2, 8 * r - 1); + A(this, e, t, r, i - 1, -i); + } + var s = r - 1, + o = 1, + a = 0; + for (this[t + s] = 255 & e; --s >= 0 && (o *= 256);) e < 0 && 0 === a && 0 !== this[t + s + 1] && (a = 1), this[t + s] = (e / o >> 0) - a & 255; + return t + r; + }, s.prototype.writeInt8 = function (e, t, r) { + return e = +e, t >>>= 0, r || A(this, e, t, 1, 127, -128), e < 0 && (e = 255 + e + 1), this[t] = 255 & e, t + 1; + }, s.prototype.writeInt16LE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(this, e, t, 2, 32767, -32768), this[t] = 255 & e, this[t + 1] = e >>> 8, t + 2; + }, s.prototype.writeInt16BE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(this, e, t, 2, 32767, -32768), this[t] = e >>> 8, this[t + 1] = 255 & e, t + 2; + }, s.prototype.writeInt32LE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(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; + }, s.prototype.writeInt32BE = function (e, t, r) { + return e = +e, t >>>= 0, r || A(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; + }, s.prototype.writeFloatLE = function (e, t, r) { + return O(this, e, t, !0, r); + }, s.prototype.writeFloatBE = function (e, t, r) { + return O(this, e, t, !1, r); + }, s.prototype.writeDoubleLE = function (e, t, r) { + return j(this, e, t, !0, r); + }, s.prototype.writeDoubleBE = function (e, t, r) { + return j(this, e, t, !1, r); + }, s.prototype.copy = function (e, t, r, n) { + if (!s.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 < r && (n = r), n === r) return 0; + if (0 === e.length || 0 === this.length) return 0; + if (t < 0) throw new RangeError("targetStart out of bounds"); + if (r < 0 || r >= 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 < n - r && (n = e.length - t + r); + var i = n - r; + if (this === e && "function" == typeof Uint8Array.prototype.copyWithin) this.copyWithin(t, r, n);else if (this === e && r < t && t < n) for (var o = i - 1; o >= 0; --o) e[o + t] = this[o + r];else Uint8Array.prototype.set.call(e, this.subarray(r, n), t); + return i; + }, s.prototype.fill = function (e, t, r, n) { + if ("string" == typeof e) { + if ("string" == typeof t ? (n = t, t = 0, r = this.length) : "string" == typeof r && (n = r, r = this.length), void 0 !== n && "string" != typeof n) throw new TypeError("encoding must be a string"); + if ("string" == typeof n && !s.isEncoding(n)) throw new TypeError("Unknown encoding: " + n); + if (1 === e.length) { + var i = e.charCodeAt(0); + ("utf8" === n && i < 128 || "latin1" === n) && (e = i); + } + } else "number" == typeof e && (e &= 255); + if (t < 0 || this.length < t || this.length < r) throw new RangeError("Out of range index"); + if (r <= t) return this; + var o; + if (t >>>= 0, r = void 0 === r ? this.length : r >>> 0, e || (e = 0), "number" == typeof e) for (o = t; o < r; ++o) this[o] = e;else { + var a = s.isBuffer(e) ? e : s.from(e, n), + l = a.length; + if (0 === l) throw new TypeError('The value "' + e + '" is invalid for argument "value"'); + for (o = 0; o < r - t; ++o) this[o + t] = a[o % l]; + } + return this; + }; + var I = /[^+/0-9A-Za-z-_]/g; + function N(e) { + return e < 16 ? "0" + e.toString(16) : e.toString(16); + } + function P(e, t) { + var r; + t = t || 1 / 0; + for (var n = e.length, i = null, s = [], o = 0; o < n; ++o) { + if ((r = e.charCodeAt(o)) > 55295 && r < 57344) { + if (!i) { + if (r > 56319) { + (t -= 3) > -1 && s.push(239, 191, 189); + continue; + } + if (o + 1 === n) { + (t -= 3) > -1 && s.push(239, 191, 189); + continue; + } + i = r; + continue; + } + if (r < 56320) { + (t -= 3) > -1 && s.push(239, 191, 189), i = r; + continue; + } + r = 65536 + (i - 55296 << 10 | r - 56320); + } else i && (t -= 3) > -1 && s.push(239, 191, 189); + if (i = null, r < 128) { + if ((t -= 1) < 0) break; + s.push(r); + } else if (r < 2048) { + if ((t -= 2) < 0) break; + s.push(r >> 6 | 192, 63 & r | 128); + } else if (r < 65536) { + if ((t -= 3) < 0) break; + s.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; + s.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128); + } + } + return s; + } + function B(e) { + return t.toByteArray(function (e) { + if ((e = (e = e.split("=")[0]).trim().replace(I, "")).length < 2) return ""; + for (; e.length % 4 != 0;) e += "="; + return e; + }(e)); + } + function D(e, t, r, n) { + for (var i = 0; i < n && !(i + r >= t.length || i >= e.length); ++i) t[i + r] = e[i]; + return i; + } + function F(e, t) { + return e instanceof t || null != e && null != e.constructor && null != e.constructor.name && e.constructor.name === t.name; + } + function L(e) { + return e != e; + } + }).call(this); + }).call(this, e("buffer").Buffer); + }, { + "base64-js": 185, + buffer: 220, + ieee754: 439 + }], + 221: [function (e, t, r) { + "use strict"; + + var n = e("safe-buffer").Buffer, + i = e("stream").Transform, + s = e("string_decoder").StringDecoder; + function o(e) { + i.call(this), this.hashMode = "string" == typeof e, this.hashMode ? this[e] = this._finalOrDigest : this.final = this._finalOrDigest, this._final && (this.__final = this._final, this._final = null), this._decoder = null, this._encoding = null; + } + e("inherits")(o, i), o.prototype.update = function (e, t, r) { + "string" == typeof e && (e = n.from(e, t)); + var i = this._update(e); + return this.hashMode ? this : (r && (i = this._toString(i, r)), i); + }, o.prototype.setAutoPadding = function () {}, o.prototype.getAuthTag = function () { + throw new Error("trying to get auth tag in unsupported state"); + }, o.prototype.setAuthTag = function () { + throw new Error("trying to set auth tag in unsupported state"); + }, o.prototype.setAAD = function () { + throw new Error("trying to set aad in unsupported state"); + }, o.prototype._transform = function (e, t, r) { + var n; + try { + this.hashMode ? this._update(e) : this.push(this._update(e)); + } catch (e) { + n = e; + } finally { + r(n); + } + }, o.prototype._flush = function (e) { + var t; + try { + this.push(this.__final()); + } catch (e) { + t = e; + } + e(t); + }, o.prototype._finalOrDigest = function (e) { + var t = this.__final() || n.alloc(0); + return e && (t = this._toString(t, e, !0)), t; + }, o.prototype._toString = function (e, t, r) { + if (this._decoder || (this._decoder = new s(t), this._encoding = t), this._encoding !== t) throw new Error("can't switch encodings"); + var n = this._decoder.write(e); + return r && (n += this._decoder.end()), n; + }, t.exports = o; + }, { + inherits: 440, + "safe-buffer": 494, + stream: 505, + string_decoder: 218 + }], + 222: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-callable"), + i = e("../internals/try-to-string"), + s = TypeError; + t.exports = function (e) { + if (n(e)) return e; + throw new s(i(e) + " is not a function"); + }; + }, { + "../internals/is-callable": 285, + "../internals/try-to-string": 349 + }], + 223: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-constructor"), + i = e("../internals/try-to-string"), + s = TypeError; + t.exports = function (e) { + if (n(e)) return e; + throw new s(i(e) + " is not a constructor"); + }; + }, { + "../internals/is-constructor": 286, + "../internals/try-to-string": 349 + }], + 224: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-callable"), + i = String, + s = TypeError; + t.exports = function (e) { + if ("object" == typeof e || n(e)) return e; + throw new s("Can't set " + i(e) + " as a prototype"); + }; + }, { + "../internals/is-callable": 285 + }], + 225: [function (e, t, r) { + "use strict"; + + var n = e("../internals/well-known-symbol"), + i = e("../internals/object-create"), + s = e("../internals/object-define-property").f, + o = n("unscopables"), + a = Array.prototype; + void 0 === a[o] && s(a, o, { + configurable: !0, + value: i(null) + }), t.exports = function (e) { + a[o][e] = !0; + }; + }, { + "../internals/object-create": 306, + "../internals/object-define-property": 308, + "../internals/well-known-symbol": 357 + }], + 226: [function (e, t, r) { + "use strict"; + + var n = e("../internals/object-is-prototype-of"), + i = TypeError; + t.exports = function (e, t) { + if (n(t, e)) return e; + throw new i("Incorrect invocation"); + }; + }, { + "../internals/object-is-prototype-of": 314 + }], + 227: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-object"), + i = String, + s = TypeError; + t.exports = function (e) { + if (n(e)) return e; + throw new s(i(e) + " is not an object"); + }; + }, { + "../internals/is-object": 289 + }], + 228: [function (e, t, r) { + "use strict"; + + var n = e("../internals/to-indexed-object"), + i = e("../internals/to-absolute-index"), + s = e("../internals/length-of-array-like"), + o = function (e) { + return function (t, r, o) { + var a, + l = n(t), + c = s(l), + u = i(o, c); + if (e && r != r) { + for (; c > u;) if ((a = l[u++]) != a) return !0; + } else for (; c > u; u++) if ((e || u in l) && l[u] === r) return e || u || 0; + return !e && -1; + }; + }; + t.exports = { + includes: o(!0), + indexOf: o(!1) + }; + }, { + "../internals/length-of-array-like": 299, + "../internals/to-absolute-index": 340, + "../internals/to-indexed-object": 341 + }], + 229: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-bind-context"), + i = e("../internals/function-uncurry-this"), + s = e("../internals/indexed-object"), + o = e("../internals/to-object"), + a = e("../internals/length-of-array-like"), + l = e("../internals/array-species-create"), + c = i([].push), + u = function (e) { + var t = 1 === e, + r = 2 === e, + i = 3 === e, + u = 4 === e, + h = 6 === e, + f = 7 === e, + d = 5 === e || h; + return function (p, m, b, g) { + for (var y, v, w = o(p), _ = s(w), x = n(m, b), k = a(_), S = 0, M = g || l, C = t ? M(p, k) : r || f ? M(p, 0) : void 0; k > S; S++) if ((d || S in _) && (v = x(y = _[S], S, w), e)) if (t) C[S] = v;else if (v) switch (e) { + case 3: + return !0; + case 5: + return y; + case 6: + return S; + case 2: + c(C, y); + } else switch (e) { + case 4: + return !1; + case 7: + c(C, y); + } + return h ? -1 : i || u ? u : C; + }; + }; + t.exports = { + forEach: u(0), + map: u(1), + filter: u(2), + some: u(3), + every: u(4), + find: u(5), + findIndex: u(6), + filterReject: u(7) + }; + }, { + "../internals/array-species-create": 233, + "../internals/function-bind-context": 262, + "../internals/function-uncurry-this": 268, + "../internals/indexed-object": 280, + "../internals/length-of-array-like": 299, + "../internals/to-object": 344 + }], + 230: [function (e, t, r) { + "use strict"; + + var n = e("../internals/to-absolute-index"), + i = e("../internals/length-of-array-like"), + s = e("../internals/create-property"), + o = Array, + a = Math.max; + t.exports = function (e, t, r) { + for (var l = i(e), c = n(t, l), u = n(void 0 === r ? l : r, l), h = o(a(u - c, 0)), f = 0; c < u; c++, f++) s(h, f, e[c]); + return h.length = f, h; + }; + }, { + "../internals/create-property": 243, + "../internals/length-of-array-like": 299, + "../internals/to-absolute-index": 340 + }], + 231: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"); + t.exports = n([].slice); + }, { + "../internals/function-uncurry-this": 268 + }], + 232: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-array"), + i = e("../internals/is-constructor"), + s = e("../internals/is-object"), + o = e("../internals/well-known-symbol")("species"), + a = Array; + t.exports = function (e) { + var t; + return n(e) && (t = e.constructor, (i(t) && (t === a || n(t.prototype)) || s(t) && null === (t = t[o])) && (t = void 0)), void 0 === t ? a : t; + }; + }, { + "../internals/is-array": 284, + "../internals/is-constructor": 286, + "../internals/is-object": 289, + "../internals/well-known-symbol": 357 + }], + 233: [function (e, t, r) { + "use strict"; + + var n = e("../internals/array-species-constructor"); + t.exports = function (e, t) { + return new (n(e))(0 === t ? 0 : t); + }; + }, { + "../internals/array-species-constructor": 232 + }], + 234: [function (e, t, r) { + "use strict"; + + var n = e("../internals/well-known-symbol")("iterator"), + i = !1; + try { + var s = 0, + o = { + next: function () { + return { + done: !!s++ + }; + }, + return: function () { + i = !0; + } + }; + o[n] = function () { + return this; + }, Array.from(o, function () { + throw 2; + }); + } catch (e) {} + t.exports = function (e, t) { + try { + if (!t && !i) return !1; + } catch (e) { + return !1; + } + var r = !1; + try { + var s = {}; + s[n] = function () { + return { + next: function () { + return { + done: r = !0 + }; + } + }; + }, e(s); + } catch (e) {} + return r; + }; + }, { + "../internals/well-known-symbol": 357 + }], + 235: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = n({}.toString), + s = n("".slice); + t.exports = function (e) { + return s(i(e), 8, -1); + }; + }, { + "../internals/function-uncurry-this": 268 + }], + 236: [function (e, t, r) { + "use strict"; + + var n = e("../internals/to-string-tag-support"), + i = e("../internals/is-callable"), + s = e("../internals/classof-raw"), + o = e("../internals/well-known-symbol")("toStringTag"), + a = Object, + l = "Arguments" === s(function () { + return arguments; + }()); + t.exports = n ? s : function (e) { + var t, r, n; + return void 0 === e ? "Undefined" : null === e ? "Null" : "string" == typeof (r = function (e, t) { + try { + return e[t]; + } catch (e) {} + }(t = a(e), o)) ? r : l ? s(t) : "Object" === (n = s(t)) && i(t.callee) ? "Arguments" : n; + }; + }, { + "../internals/classof-raw": 235, + "../internals/is-callable": 285, + "../internals/to-string-tag-support": 347, + "../internals/well-known-symbol": 357 + }], + 237: [function (e, t, r) { + "use strict"; + + var n = e("../internals/has-own-property"), + i = e("../internals/own-keys"), + s = e("../internals/object-get-own-property-descriptor"), + o = e("../internals/object-define-property"); + t.exports = function (e, t, r) { + for (var a = i(t), l = o.f, c = s.f, u = 0; u < a.length; u++) { + var h = a[u]; + n(e, h) || r && n(r, h) || l(e, h, c(t, h)); + } + }; + }, { + "../internals/has-own-property": 275, + "../internals/object-define-property": 308, + "../internals/object-get-own-property-descriptor": 309, + "../internals/own-keys": 321 + }], + 238: [function (e, t, r) { + "use strict"; + + var n = e("../internals/well-known-symbol")("match"); + t.exports = function (e) { + var t = /./; + try { + "/./"[e](t); + } catch (r) { + try { + return t[n] = !1, "/./"[e](t); + } catch (e) {} + } + return !1; + }; + }, { + "../internals/well-known-symbol": 357 + }], + 239: [function (e, t, r) { + "use strict"; + + var n = e("../internals/fails"); + t.exports = !n(function () { + function e() {} + return e.prototype.constructor = null, Object.getPrototypeOf(new e()) !== e.prototype; + }); + }, { + "../internals/fails": 260 + }], + 240: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t) { + return { + value: e, + done: t + }; + }; + }, {}], + 241: [function (e, t, r) { + "use strict"; + + var n = e("../internals/descriptors"), + i = e("../internals/object-define-property"), + s = e("../internals/create-property-descriptor"); + t.exports = n ? function (e, t, r) { + return i.f(e, t, s(1, r)); + } : function (e, t, r) { + return e[t] = r, e; + }; + }, { + "../internals/create-property-descriptor": 242, + "../internals/descriptors": 247, + "../internals/object-define-property": 308 + }], + 242: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t) { + return { + enumerable: !(1 & e), + configurable: !(2 & e), + writable: !(4 & e), + value: t + }; + }; + }, {}], + 243: [function (e, t, r) { + "use strict"; + + var n = e("../internals/to-property-key"), + i = e("../internals/object-define-property"), + s = e("../internals/create-property-descriptor"); + t.exports = function (e, t, r) { + var o = n(t); + o in e ? i.f(e, o, s(0, r)) : e[o] = r; + }; + }, { + "../internals/create-property-descriptor": 242, + "../internals/object-define-property": 308, + "../internals/to-property-key": 346 + }], + 244: [function (e, t, r) { + "use strict"; + + var n = e("../internals/make-built-in"), + i = e("../internals/object-define-property"); + t.exports = function (e, t, r) { + return r.get && n(r.get, t, { + getter: !0 + }), r.set && n(r.set, t, { + setter: !0 + }), i.f(e, t, r); + }; + }, { + "../internals/make-built-in": 300, + "../internals/object-define-property": 308 + }], + 245: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-callable"), + i = e("../internals/object-define-property"), + s = e("../internals/make-built-in"), + o = e("../internals/define-global-property"); + t.exports = function (e, t, r, a) { + a || (a = {}); + var l = a.enumerable, + c = void 0 !== a.name ? a.name : t; + if (n(r) && s(r, c, a), a.global) l ? e[t] = r : o(t, r);else { + try { + a.unsafe ? e[t] && (l = !0) : delete e[t]; + } catch (e) {} + l ? e[t] = r : i.f(e, t, { + value: r, + enumerable: !1, + configurable: !a.nonConfigurable, + writable: !a.nonWritable + }); + } + return e; + }; + }, { + "../internals/define-global-property": 246, + "../internals/is-callable": 285, + "../internals/make-built-in": 300, + "../internals/object-define-property": 308 + }], + 246: [function (e, t, r) { + "use strict"; + + var n = e("../internals/global"), + i = Object.defineProperty; + t.exports = function (e, t) { + try { + i(n, e, { + value: t, + configurable: !0, + writable: !0 + }); + } catch (r) { + n[e] = t; + } + return t; + }; + }, { + "../internals/global": 274 + }], + 247: [function (e, t, r) { + "use strict"; + + var n = e("../internals/fails"); + t.exports = !n(function () { + return 7 !== Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1]; + }); + }, { + "../internals/fails": 260 + }], + 248: [function (e, t, r) { + "use strict"; + + var n = "object" == typeof document && document.all, + i = void 0 === n && void 0 !== n; + t.exports = { + all: n, + IS_HTMLDDA: i + }; + }, {}], + 249: [function (e, t, r) { + "use strict"; + + var n = e("../internals/global"), + i = e("../internals/is-object"), + s = n.document, + o = i(s) && i(s.createElement); + t.exports = function (e) { + return o ? s.createElement(e) : {}; + }; + }, { + "../internals/global": 274, + "../internals/is-object": 289 + }], + 250: [function (e, t, r) { + "use strict"; + + var n = e("../internals/engine-is-deno"), + i = e("../internals/engine-is-node"); + t.exports = !n && !i && "object" == typeof window && "object" == typeof document; + }, { + "../internals/engine-is-deno": 251, + "../internals/engine-is-node": 254 + }], + 251: [function (e, t, r) { + "use strict"; + + t.exports = "object" == typeof Deno && Deno && "object" == typeof Deno.version; + }, {}], + 252: [function (e, t, r) { + "use strict"; + + var n = e("../internals/engine-user-agent"); + t.exports = /ipad|iphone|ipod/i.test(n) && "undefined" != typeof Pebble; + }, { + "../internals/engine-user-agent": 256 + }], + 253: [function (e, t, r) { + "use strict"; + + var n = e("../internals/engine-user-agent"); + t.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(n); + }, { + "../internals/engine-user-agent": 256 + }], + 254: [function (e, t, r) { + "use strict"; + + var n = e("../internals/global"), + i = e("../internals/classof-raw"); + t.exports = "process" === i(n.process); + }, { + "../internals/classof-raw": 235, + "../internals/global": 274 + }], + 255: [function (e, t, r) { + "use strict"; + + var n = e("../internals/engine-user-agent"); + t.exports = /web0s(?!.*chrome)/i.test(n); + }, { + "../internals/engine-user-agent": 256 + }], + 256: [function (e, t, r) { + "use strict"; + + t.exports = "undefined" != typeof navigator && String(navigator.userAgent) || ""; + }, {}], + 257: [function (e, t, r) { + "use strict"; + + var n, + i, + s = e("../internals/global"), + o = e("../internals/engine-user-agent"), + a = s.process, + l = s.Deno, + c = a && a.versions || l && l.version, + u = c && c.v8; + u && (i = (n = u.split("."))[0] > 0 && n[0] < 4 ? 1 : +(n[0] + n[1])), !i && o && (!(n = o.match(/Edge\/(\d+)/)) || n[1] >= 74) && (n = o.match(/Chrome\/(\d+)/)) && (i = +n[1]), t.exports = i; + }, { + "../internals/engine-user-agent": 256, + "../internals/global": 274 + }], + 258: [function (e, t, r) { + "use strict"; + + t.exports = ["constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf"]; + }, {}], + 259: [function (e, t, r) { + "use strict"; + + var n = e("../internals/global"), + i = e("../internals/object-get-own-property-descriptor").f, + s = e("../internals/create-non-enumerable-property"), + o = e("../internals/define-built-in"), + a = e("../internals/define-global-property"), + l = e("../internals/copy-constructor-properties"), + c = e("../internals/is-forced"); + t.exports = function (e, t) { + var r, + u, + h, + f, + d, + p = e.target, + m = e.global, + b = e.stat; + if (r = m ? n : b ? n[p] || a(p, {}) : (n[p] || {}).prototype) for (u in t) { + if (f = t[u], h = e.dontCallGetSet ? (d = i(r, u)) && d.value : r[u], !c(m ? u : p + (b ? "." : "#") + u, e.forced) && void 0 !== h) { + if (typeof f == typeof h) continue; + l(f, h); + } + (e.sham || h && h.sham) && s(f, "sham", !0), o(r, u, f, e); + } + }; + }, { + "../internals/copy-constructor-properties": 237, + "../internals/create-non-enumerable-property": 241, + "../internals/define-built-in": 245, + "../internals/define-global-property": 246, + "../internals/global": 274, + "../internals/is-forced": 287, + "../internals/object-get-own-property-descriptor": 309 + }], + 260: [function (e, t, r) { + "use strict"; + + t.exports = function (e) { + try { + return !!e(); + } catch (e) { + return !0; + } + }; + }, {}], + 261: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-bind-native"), + i = Function.prototype, + s = i.apply, + o = i.call; + t.exports = "object" == typeof Reflect && Reflect.apply || (n ? o.bind(s) : function () { + return o.apply(s, arguments); + }); + }, { + "../internals/function-bind-native": 263 + }], + 262: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this-clause"), + i = e("../internals/a-callable"), + s = e("../internals/function-bind-native"), + o = n(n.bind); + t.exports = function (e, t) { + return i(e), void 0 === t ? e : s ? o(e, t) : function () { + return e.apply(t, arguments); + }; + }; + }, { + "../internals/a-callable": 222, + "../internals/function-bind-native": 263, + "../internals/function-uncurry-this-clause": 267 + }], + 263: [function (e, t, r) { + "use strict"; + + var n = e("../internals/fails"); + t.exports = !n(function () { + var e = function () {}.bind(); + return "function" != typeof e || e.hasOwnProperty("prototype"); + }); + }, { + "../internals/fails": 260 + }], + 264: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-bind-native"), + i = Function.prototype.call; + t.exports = n ? i.bind(i) : function () { + return i.apply(i, arguments); + }; + }, { + "../internals/function-bind-native": 263 + }], + 265: [function (e, t, r) { + "use strict"; + + var n = e("../internals/descriptors"), + i = e("../internals/has-own-property"), + s = Function.prototype, + o = n && Object.getOwnPropertyDescriptor, + a = i(s, "name"), + l = a && "something" === function () {}.name, + c = a && (!n || n && o(s, "name").configurable); + t.exports = { + EXISTS: a, + PROPER: l, + CONFIGURABLE: c + }; + }, { + "../internals/descriptors": 247, + "../internals/has-own-property": 275 + }], + 266: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/a-callable"); + t.exports = function (e, t, r) { + try { + return n(i(Object.getOwnPropertyDescriptor(e, t)[r])); + } catch (e) {} + }; + }, { + "../internals/a-callable": 222, + "../internals/function-uncurry-this": 268 + }], + 267: [function (e, t, r) { + "use strict"; + + var n = e("../internals/classof-raw"), + i = e("../internals/function-uncurry-this"); + t.exports = function (e) { + if ("Function" === n(e)) return i(e); + }; + }, { + "../internals/classof-raw": 235, + "../internals/function-uncurry-this": 268 + }], + 268: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-bind-native"), + i = Function.prototype, + s = i.call, + o = n && i.bind.bind(s, s); + t.exports = n ? o : function (e) { + return function () { + return s.apply(e, arguments); + }; + }; + }, { + "../internals/function-bind-native": 263 + }], + 269: [function (e, t, r) { + "use strict"; + + var n = e("../internals/global"), + i = e("../internals/is-callable"), + s = function (e) { + return i(e) ? e : void 0; + }; + t.exports = function (e, t) { + return arguments.length < 2 ? s(n[e]) : n[e] && n[e][t]; + }; + }, { + "../internals/global": 274, + "../internals/is-callable": 285 + }], + 270: [function (e, t, r) { + "use strict"; + + var n = e("../internals/classof"), + i = e("../internals/get-method"), + s = e("../internals/is-null-or-undefined"), + o = e("../internals/iterators"), + a = e("../internals/well-known-symbol")("iterator"); + t.exports = function (e) { + if (!s(e)) return i(e, a) || i(e, "@@iterator") || o[n(e)]; + }; + }, { + "../internals/classof": 236, + "../internals/get-method": 273, + "../internals/is-null-or-undefined": 288, + "../internals/iterators": 298, + "../internals/well-known-symbol": 357 + }], + 271: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-call"), + i = e("../internals/a-callable"), + s = e("../internals/an-object"), + o = e("../internals/try-to-string"), + a = e("../internals/get-iterator-method"), + l = TypeError; + t.exports = function (e, t) { + var r = arguments.length < 2 ? a(e) : t; + if (i(r)) return s(n(r, e)); + throw new l(o(e) + " is not iterable"); + }; + }, { + "../internals/a-callable": 222, + "../internals/an-object": 227, + "../internals/function-call": 264, + "../internals/get-iterator-method": 270, + "../internals/try-to-string": 349 + }], + 272: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/is-array"), + s = e("../internals/is-callable"), + o = e("../internals/classof-raw"), + a = e("../internals/to-string"), + l = n([].push); + t.exports = function (e) { + if (s(e)) return e; + if (i(e)) { + for (var t = e.length, r = [], n = 0; n < t; n++) { + var c = e[n]; + "string" == typeof c ? l(r, c) : "number" != typeof c && "Number" !== o(c) && "String" !== o(c) || l(r, a(c)); + } + var u = r.length, + h = !0; + return function (e, t) { + if (h) return h = !1, t; + if (i(this)) return t; + for (var n = 0; n < u; n++) if (r[n] === e) return t; + }; + } + }; + }, { + "../internals/classof-raw": 235, + "../internals/function-uncurry-this": 268, + "../internals/is-array": 284, + "../internals/is-callable": 285, + "../internals/to-string": 348 + }], + 273: [function (e, t, r) { + "use strict"; + + var n = e("../internals/a-callable"), + i = e("../internals/is-null-or-undefined"); + t.exports = function (e, t) { + var r = e[t]; + return i(r) ? void 0 : n(r); + }; + }, { + "../internals/a-callable": 222, + "../internals/is-null-or-undefined": 288 + }], + 274: [function (e, t, r) { + (function (e) { + (function () { + "use strict"; + + var r = function (e) { + return e && e.Math === Math && e; + }; + t.exports = r("object" == typeof globalThis && globalThis) || r("object" == typeof window && window) || r("object" == typeof self && self) || r("object" == typeof e && e) || function () { + return this; + }() || this || Function("return this")(); + }).call(this); + }).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}); + }, {}], + 275: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/to-object"), + s = n({}.hasOwnProperty); + t.exports = Object.hasOwn || function (e, t) { + return s(i(e), t); + }; + }, { + "../internals/function-uncurry-this": 268, + "../internals/to-object": 344 + }], + 276: [function (e, t, r) { + "use strict"; + + t.exports = {}; + }, {}], + 277: [function (e, t, r) { + "use strict"; + + t.exports = function (e, t) { + try { + 1 === arguments.length ? console.error(e) : console.error(e, t); + } catch (e) {} + }; + }, {}], + 278: [function (e, t, r) { + "use strict"; + + var n = e("../internals/get-built-in"); + t.exports = n("document", "documentElement"); + }, { + "../internals/get-built-in": 269 + }], + 279: [function (e, t, r) { + "use strict"; + + var n = e("../internals/descriptors"), + i = e("../internals/fails"), + s = e("../internals/document-create-element"); + t.exports = !n && !i(function () { + return 7 !== Object.defineProperty(s("div"), "a", { + get: function () { + return 7; + } + }).a; + }); + }, { + "../internals/descriptors": 247, + "../internals/document-create-element": 249, + "../internals/fails": 260 + }], + 280: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/fails"), + s = e("../internals/classof-raw"), + o = Object, + a = n("".split); + t.exports = i(function () { + return !o("z").propertyIsEnumerable(0); + }) ? function (e) { + return "String" === s(e) ? a(e, "") : o(e); + } : o; + }, { + "../internals/classof-raw": 235, + "../internals/fails": 260, + "../internals/function-uncurry-this": 268 + }], + 281: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/is-callable"), + s = e("../internals/shared-store"), + o = n(Function.toString); + i(s.inspectSource) || (s.inspectSource = function (e) { + return o(e); + }), t.exports = s.inspectSource; + }, { + "../internals/function-uncurry-this": 268, + "../internals/is-callable": 285, + "../internals/shared-store": 333 + }], + 282: [function (e, t, r) { + "use strict"; + + var n, + i, + s, + o = e("../internals/weak-map-basic-detection"), + a = e("../internals/global"), + l = e("../internals/is-object"), + c = e("../internals/create-non-enumerable-property"), + u = e("../internals/has-own-property"), + h = e("../internals/shared-store"), + f = e("../internals/shared-key"), + d = e("../internals/hidden-keys"), + p = a.TypeError, + m = a.WeakMap; + if (o || h.state) { + var b = h.state || (h.state = new m()); + b.get = b.get, b.has = b.has, b.set = b.set, n = function (e, t) { + if (b.has(e)) throw new p("Object already initialized"); + return t.facade = e, b.set(e, t), t; + }, i = function (e) { + return b.get(e) || {}; + }, s = function (e) { + return b.has(e); + }; + } else { + var g = f("state"); + d[g] = !0, n = function (e, t) { + if (u(e, g)) throw new p("Object already initialized"); + return t.facade = e, c(e, g, t), t; + }, i = function (e) { + return u(e, g) ? e[g] : {}; + }, s = function (e) { + return u(e, g); + }; + } + t.exports = { + set: n, + get: i, + has: s, + enforce: function (e) { + return s(e) ? i(e) : n(e, {}); + }, + getterFor: function (e) { + return function (t) { + var r; + if (!l(t) || (r = i(t)).type !== e) throw new p("Incompatible receiver, " + e + " required"); + return r; + }; + } + }; + }, { + "../internals/create-non-enumerable-property": 241, + "../internals/global": 274, + "../internals/has-own-property": 275, + "../internals/hidden-keys": 276, + "../internals/is-object": 289, + "../internals/shared-key": 332, + "../internals/shared-store": 333, + "../internals/weak-map-basic-detection": 354 + }], + 283: [function (e, t, r) { + "use strict"; + + var n = e("../internals/well-known-symbol"), + i = e("../internals/iterators"), + s = n("iterator"), + o = Array.prototype; + t.exports = function (e) { + return void 0 !== e && (i.Array === e || o[s] === e); + }; + }, { + "../internals/iterators": 298, + "../internals/well-known-symbol": 357 + }], + 284: [function (e, t, r) { + "use strict"; + + var n = e("../internals/classof-raw"); + t.exports = Array.isArray || function (e) { + return "Array" === n(e); + }; + }, { + "../internals/classof-raw": 235 + }], + 285: [function (e, t, r) { + "use strict"; + + var n = e("../internals/document-all"), + i = n.all; + t.exports = n.IS_HTMLDDA ? function (e) { + return "function" == typeof e || e === i; + } : function (e) { + return "function" == typeof e; + }; + }, { + "../internals/document-all": 248 + }], + 286: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/fails"), + s = e("../internals/is-callable"), + o = e("../internals/classof"), + a = e("../internals/get-built-in"), + l = e("../internals/inspect-source"), + c = function () {}, + u = [], + h = a("Reflect", "construct"), + f = /^\s*(?:class|function)\b/, + d = n(f.exec), + p = !f.test(c), + m = function (e) { + if (!s(e)) return !1; + try { + return h(c, u, e), !0; + } catch (e) { + return !1; + } + }, + b = function (e) { + if (!s(e)) return !1; + switch (o(e)) { + case "AsyncFunction": + case "GeneratorFunction": + case "AsyncGeneratorFunction": + return !1; + } + try { + return p || !!d(f, l(e)); + } catch (e) { + return !0; + } + }; + b.sham = !0, t.exports = !h || i(function () { + var e; + return m(m.call) || !m(Object) || !m(function () { + e = !0; + }) || e; + }) ? b : m; + }, { + "../internals/classof": 236, + "../internals/fails": 260, + "../internals/function-uncurry-this": 268, + "../internals/get-built-in": 269, + "../internals/inspect-source": 281, + "../internals/is-callable": 285 + }], + 287: [function (e, t, r) { + "use strict"; + + var n = e("../internals/fails"), + i = e("../internals/is-callable"), + s = /#|\.prototype\./, + o = function (e, t) { + var r = l[a(e)]; + return r === u || r !== c && (i(t) ? n(t) : !!t); + }, + a = o.normalize = function (e) { + return String(e).replace(s, ".").toLowerCase(); + }, + l = o.data = {}, + c = o.NATIVE = "N", + u = o.POLYFILL = "P"; + t.exports = o; + }, { + "../internals/fails": 260, + "../internals/is-callable": 285 + }], + 288: [function (e, t, r) { + "use strict"; + + t.exports = function (e) { + return null == e; + }; + }, {}], + 289: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-callable"), + i = e("../internals/document-all"), + s = i.all; + t.exports = i.IS_HTMLDDA ? function (e) { + return "object" == typeof e ? null !== e : n(e) || e === s; + } : function (e) { + return "object" == typeof e ? null !== e : n(e); + }; + }, { + "../internals/document-all": 248, + "../internals/is-callable": 285 + }], + 290: [function (e, t, r) { + "use strict"; + + t.exports = !1; + }, {}], + 291: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-object"), + i = e("../internals/classof-raw"), + s = e("../internals/well-known-symbol")("match"); + t.exports = function (e) { + var t; + return n(e) && (void 0 !== (t = e[s]) ? !!t : "RegExp" === i(e)); + }; + }, { + "../internals/classof-raw": 235, + "../internals/is-object": 289, + "../internals/well-known-symbol": 357 + }], + 292: [function (e, t, r) { + "use strict"; + + var n = e("../internals/get-built-in"), + i = e("../internals/is-callable"), + s = e("../internals/object-is-prototype-of"), + o = e("../internals/use-symbol-as-uid"), + a = Object; + t.exports = o ? function (e) { + return "symbol" == typeof e; + } : function (e) { + var t = n("Symbol"); + return i(t) && s(t.prototype, a(e)); + }; + }, { + "../internals/get-built-in": 269, + "../internals/is-callable": 285, + "../internals/object-is-prototype-of": 314, + "../internals/use-symbol-as-uid": 351 + }], + 293: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-bind-context"), + i = e("../internals/function-call"), + s = e("../internals/an-object"), + o = e("../internals/try-to-string"), + a = e("../internals/is-array-iterator-method"), + l = e("../internals/length-of-array-like"), + c = e("../internals/object-is-prototype-of"), + u = e("../internals/get-iterator"), + h = e("../internals/get-iterator-method"), + f = e("../internals/iterator-close"), + d = TypeError, + p = function (e, t) { + this.stopped = e, this.result = t; + }, + m = p.prototype; + t.exports = function (e, t, r) { + var b, + g, + y, + v, + w, + _, + x, + k = r && r.that, + S = !(!r || !r.AS_ENTRIES), + M = !(!r || !r.IS_RECORD), + C = !(!r || !r.IS_ITERATOR), + T = !(!r || !r.INTERRUPTED), + E = n(t, k), + A = function (e) { + return b && f(b, "normal", e), new p(!0, e); + }, + R = function (e) { + return S ? (s(e), T ? E(e[0], e[1], A) : E(e[0], e[1])) : T ? E(e, A) : E(e); + }; + if (M) b = e.iterator;else if (C) b = e;else { + if (!(g = h(e))) throw new d(o(e) + " is not iterable"); + if (a(g)) { + for (y = 0, v = l(e); v > y; y++) if ((w = R(e[y])) && c(m, w)) return w; + return new p(!1); + } + b = u(e, g); + } + for (_ = M ? e.next : b.next; !(x = i(_, b)).done;) { + try { + w = R(x.value); + } catch (e) { + f(b, "throw", e); + } + if ("object" == typeof w && w && c(m, w)) return w; + } + return new p(!1); + }; + }, { + "../internals/an-object": 227, + "../internals/function-bind-context": 262, + "../internals/function-call": 264, + "../internals/get-iterator": 271, + "../internals/get-iterator-method": 270, + "../internals/is-array-iterator-method": 283, + "../internals/iterator-close": 294, + "../internals/length-of-array-like": 299, + "../internals/object-is-prototype-of": 314, + "../internals/try-to-string": 349 + }], + 294: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-call"), + i = e("../internals/an-object"), + s = e("../internals/get-method"); + t.exports = function (e, t, r) { + var o, a; + i(e); + try { + if (!(o = s(e, "return"))) { + if ("throw" === t) throw r; + return r; + } + o = n(o, e); + } catch (e) { + a = !0, o = e; + } + if ("throw" === t) throw r; + if (a) throw o; + return i(o), r; + }; + }, { + "../internals/an-object": 227, + "../internals/function-call": 264, + "../internals/get-method": 273 + }], + 295: [function (e, t, r) { + "use strict"; + + var n = e("../internals/iterators-core").IteratorPrototype, + i = e("../internals/object-create"), + s = e("../internals/create-property-descriptor"), + o = e("../internals/set-to-string-tag"), + a = e("../internals/iterators"), + l = function () { + return this; + }; + t.exports = function (e, t, r, c) { + var u = t + " Iterator"; + return e.prototype = i(n, { + next: s(+!c, r) + }), o(e, u, !1, !0), a[u] = l, e; + }; + }, { + "../internals/create-property-descriptor": 242, + "../internals/iterators": 298, + "../internals/iterators-core": 297, + "../internals/object-create": 306, + "../internals/set-to-string-tag": 331 + }], + 296: [function (e, t, r) { + "use strict"; + + var n = e("../internals/export"), + i = e("../internals/function-call"), + s = e("../internals/is-pure"), + o = e("../internals/function-name"), + a = e("../internals/is-callable"), + l = e("../internals/iterator-create-constructor"), + c = e("../internals/object-get-prototype-of"), + u = e("../internals/object-set-prototype-of"), + h = e("../internals/set-to-string-tag"), + f = e("../internals/create-non-enumerable-property"), + d = e("../internals/define-built-in"), + p = e("../internals/well-known-symbol"), + m = e("../internals/iterators"), + b = e("../internals/iterators-core"), + g = o.PROPER, + y = o.CONFIGURABLE, + v = b.IteratorPrototype, + w = b.BUGGY_SAFARI_ITERATORS, + _ = p("iterator"), + x = function () { + return this; + }; + t.exports = function (e, t, r, o, p, b, k) { + l(r, t, o); + var S, + M, + C, + T = function (e) { + if (e === p && j) return j; + if (!w && e && e in R) return R[e]; + switch (e) { + case "keys": + case "values": + case "entries": + return function () { + return new r(this, e); + }; + } + return function () { + return new r(this); + }; + }, + E = t + " Iterator", + A = !1, + R = e.prototype, + O = R[_] || R["@@iterator"] || p && R[p], + j = !w && O || T(p), + I = "Array" === t && R.entries || O; + if (I && (S = c(I.call(new e()))) !== Object.prototype && S.next && (s || c(S) === v || (u ? u(S, v) : a(S[_]) || d(S, _, x)), h(S, E, !0, !0), s && (m[E] = x)), g && "values" === p && O && "values" !== O.name && (!s && y ? f(R, "name", "values") : (A = !0, j = function () { + return i(O, this); + })), p) if (M = { + values: T("values"), + keys: b ? j : T("keys"), + entries: T("entries") + }, k) for (C in M) (w || A || !(C in R)) && d(R, C, M[C]);else n({ + target: t, + proto: !0, + forced: w || A + }, M); + return s && !k || R[_] === j || d(R, _, j, { + name: p + }), m[t] = j, M; + }; + }, { + "../internals/create-non-enumerable-property": 241, + "../internals/define-built-in": 245, + "../internals/export": 259, + "../internals/function-call": 264, + "../internals/function-name": 265, + "../internals/is-callable": 285, + "../internals/is-pure": 290, + "../internals/iterator-create-constructor": 295, + "../internals/iterators": 298, + "../internals/iterators-core": 297, + "../internals/object-get-prototype-of": 313, + "../internals/object-set-prototype-of": 318, + "../internals/set-to-string-tag": 331, + "../internals/well-known-symbol": 357 + }], + 297: [function (e, t, r) { + "use strict"; + + var n, + i, + s, + o = e("../internals/fails"), + a = e("../internals/is-callable"), + l = e("../internals/is-object"), + c = e("../internals/object-create"), + u = e("../internals/object-get-prototype-of"), + h = e("../internals/define-built-in"), + f = e("../internals/well-known-symbol"), + d = e("../internals/is-pure"), + p = f("iterator"), + m = !1; + [].keys && ("next" in (s = [].keys()) ? (i = u(u(s))) !== Object.prototype && (n = i) : m = !0), !l(n) || o(function () { + var e = {}; + return n[p].call(e) !== e; + }) ? n = {} : d && (n = c(n)), a(n[p]) || h(n, p, function () { + return this; + }), t.exports = { + IteratorPrototype: n, + BUGGY_SAFARI_ITERATORS: m + }; + }, { + "../internals/define-built-in": 245, + "../internals/fails": 260, + "../internals/is-callable": 285, + "../internals/is-object": 289, + "../internals/is-pure": 290, + "../internals/object-create": 306, + "../internals/object-get-prototype-of": 313, + "../internals/well-known-symbol": 357 + }], + 298: [function (e, t, r) { + arguments[4][276][0].apply(r, arguments); + }, { + dup: 276 + }], + 299: [function (e, t, r) { + "use strict"; + + var n = e("../internals/to-length"); + t.exports = function (e) { + return n(e.length); + }; + }, { + "../internals/to-length": 343 + }], + 300: [function (e, t, r) { + "use strict"; + + var n = e("../internals/function-uncurry-this"), + i = e("../internals/fails"), + s = e("../internals/is-callable"), + o = e("../internals/has-own-property"), + a = e("../internals/descriptors"), + l = e("../internals/function-name").CONFIGURABLE, + c = e("../internals/inspect-source"), + u = e("../internals/internal-state"), + h = u.enforce, + f = u.get, + d = String, + p = Object.defineProperty, + m = n("".slice), + b = n("".replace), + g = n([].join), + y = a && !i(function () { + return 8 !== p(function () {}, "length", { + value: 8 + }).length; + }), + v = String(String).split("String"), + w = t.exports = function (e, t, r) { + "Symbol(" === m(d(t), 0, 7) && (t = "[" + b(d(t), /^Symbol\(([^)]*)\)/, "$1") + "]"), r && r.getter && (t = "get " + t), r && r.setter && (t = "set " + t), (!o(e, "name") || l && e.name !== t) && (a ? p(e, "name", { + value: t, + configurable: !0 + }) : e.name = t), y && r && o(r, "arity") && e.length !== r.arity && p(e, "length", { + value: r.arity + }); + try { + r && o(r, "constructor") && r.constructor ? a && p(e, "prototype", { + writable: !1 + }) : e.prototype && (e.prototype = void 0); + } catch (e) {} + var n = h(e); + return o(n, "source") || (n.source = g(v, "string" == typeof t ? t : "")), e; + }; + Function.prototype.toString = w(function () { + return s(this) && f(this).source || c(this); + }, "toString"); + }, { + "../internals/descriptors": 247, + "../internals/fails": 260, + "../internals/function-name": 265, + "../internals/function-uncurry-this": 268, + "../internals/has-own-property": 275, + "../internals/inspect-source": 281, + "../internals/internal-state": 282, + "../internals/is-callable": 285 + }], + 301: [function (e, t, r) { + "use strict"; + + var n = Math.ceil, + i = Math.floor; + t.exports = Math.trunc || function (e) { + var t = +e; + return (t > 0 ? i : n)(t); + }; + }, {}], + 302: [function (e, t, r) { + "use strict"; + + var n, + i, + s, + o, + a, + l = e("../internals/global"), + c = e("../internals/function-bind-context"), + u = e("../internals/object-get-own-property-descriptor").f, + h = e("../internals/task").set, + f = e("../internals/queue"), + d = e("../internals/engine-is-ios"), + p = e("../internals/engine-is-ios-pebble"), + m = e("../internals/engine-is-webos-webkit"), + b = e("../internals/engine-is-node"), + g = l.MutationObserver || l.WebKitMutationObserver, + y = l.document, + v = l.process, + w = l.Promise, + _ = u(l, "queueMicrotask"), + x = _ && _.value; + if (!x) { + var k = new f(), + S = function () { + var e, t; + for (b && (e = v.domain) && e.exit(); t = k.get();) try { + t(); + } catch (e) { + throw k.head && n(), e; + } + e && e.enter(); + }; + d || b || m || !g || !y ? !p && w && w.resolve ? ((o = w.resolve(void 0)).constructor = w, a = c(o.then, o), n = function () { + a(S); + }) : b ? n = function () { + v.nextTick(S); + } : (h = c(h, l), n = function () { + h(S); + }) : (i = !0, s = y.createTextNode(""), new g(S).observe(s, { + characterData: !0 + }), n = function () { + s.data = i = !i; + }), x = function (e) { + k.head || n(), k.add(e); + }; + } + t.exports = x; + }, { + "../internals/engine-is-ios": 253, + "../internals/engine-is-ios-pebble": 252, + "../internals/engine-is-node": 254, + "../internals/engine-is-webos-webkit": 255, + "../internals/function-bind-context": 262, + "../internals/global": 274, + "../internals/object-get-own-property-descriptor": 309, + "../internals/queue": 328, + "../internals/task": 339 + }], + 303: [function (e, t, r) { + "use strict"; + + var n = e("../internals/a-callable"), + i = TypeError, + s = function (e) { + var t, r; + this.promise = new e(function (e, n) { + if (void 0 !== t || void 0 !== r) throw new i("Bad Promise constructor"); + t = e, r = n; + }), this.resolve = n(t), this.reject = n(r); + }; + t.exports.f = function (e) { + return new s(e); + }; + }, { + "../internals/a-callable": 222 + }], + 304: [function (e, t, r) { + "use strict"; + + var n = e("../internals/is-regexp"), + i = TypeError; + t.exports = function (e) { + if (n(e)) throw new i("The method doesn't accept regular expressions"); + return e; + }; + }, { + "../internals/is-regexp": 291 + }], + 305: [function (e, t, r) { + "use strict"; + + var n = e("../internals/descriptors"), + i = e("../internals/function-uncurry-this"), + s = e("../internals/function-call"), + o = e("../internals/fails"), + a = e("../internals/object-keys"), + l = e("../internals/object-get-own-property-symbols"), + c = e("../internals/object-property-is-enumerable"), + u = e("../internals/to-object"), + h = e("../internals/indexed-object"), + f = Object.assign, + d = Object.defineProperty, + p = i([].concat); + t.exports = !f || o(function () { + if (n && 1 !== f({ + b: 1 + }, f(d({}, "a", { + enumerable: !0, + get: function () { + d(this, "b", { + value: 3, + enumerable: !1 + }); + } + }), { + b: 2 + })).b) return !0; + var e = {}, + t = {}, + r = Symbol("assign detection"); + return e[r] = 7, "abcdefghijklmnopqrst".split("").forEach(function (e) { + t[e] = e; + }), 7 !== f({}, e)[r] || "abcdefghijklmnopqrst" !== a(f({}, t)).join(""); + }) ? function (e, t) { + for (var r = u(e), i = arguments.length, o = 1, f = l.f, d = c.f; i > o;) for (var m, b = h(arguments[o++]), g = f ? p(a(b), f(b)) : a(b), y = g.length, v = 0; y > v;) m = g[v++], n && !s(d, b, m) || (r[m] = b[m]); + return r; + } : f; + }, { + "../internals/descriptors": 247, + "../internals/fails": 260, + "../internals/function-call": 264, + "../internals/function-uncurry-this": 268, + "../internals/indexed-object": 280, + "../internals/object-get-own-property-symbols": 312, + "../internals/object-keys": 316, + "../internals/object-property-is-enumerable": 317, + "../internals/to-object": 344 + }], + 306: [function (e, t, r) { + "use strict"; + + var n, + i = e("../internals/an-object"), + s = e("../internals/object-define-properties"), + o = e("../internals/enum-bug-keys"), + a = e("../internals/hidden-keys"), + l = e("../internals/html"), + c = e("../internals/document-create-element"), + u = e("../internals/shared-key"), + h = u("IE_PROTO"), + f = function () {}, + d = function (e) { + return "